Hola gente!, resulta que estoy intentando implementar un código lo más simple posible para visualizar por el pin 17 del pic18f4550 (ccp1) una señal alterna con un ciclo de reloj del 50%, pero solo consigo ver que ese pin está todo el rato a 5V.
Mi idea es implementar en un sistema más complejo un zumbador que se activará cuando lo determine unas condiciones de alarma, pero de momento quiero practicar con un código lo más simple para conseguir, por ejemplo, por el pin 17 una señal que vaya desde 0 a 5 V con una frecuencia de 4KHz y un ciclo de trabajo del 50%.
Para ello he implementado el siguiente código:
#include <18F4550.h>
//#include "C:\Documents and Settings\Administrador\Escritorio\Pruebas PIC\Pruebas CAD\pCAD.h"
#fuses HS,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN
#device adc=10 //Nº de bits que devolverá una conversion A/D
#use delay(clock=20000000)
#define Enciende Output_High
#define Apaga Output_Low
#define Alterna Output_Toggle
#define ledAlarmaNoR Pin_D2
#define ledInspira Pin_D3
#define ledEspira Pin_D4
#define buzzer Pin_D5
//====== Definicion de funciones empleadas en el programa ========
void testAlarma(void);
void zumbador(int tipo);
void sonidoContinuo(boolean continuo);
void sonidoAlterno(boolean alterno);
//================================================================
void main()
{
// setup_vref(PIN_A2|VREF_LOW); // Vref-
// delay_us(10);
// setup_vref(PIN_A3|VREF_HIGH); // Vref+
// delay_us(10);
// setup_adc_ports(AN0|VREF_VREF); // Entrada analógica de Vref- a Vref+
// setup_adc(ADC_CLOCK_INTERNAL);
// set_adc_channel(0);
// delay_us(10);
// setup_psp(PSP_DISABLED);
// setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
/* setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
delay_us(10);
set_timer0(0);
enable_interrupts(INT_TIMER0);*/
SETUP_CCP1(CCP_PWM_FULL_BRIDGE|CCP_PWM_H_H);
delay_us(1000);
setup_timer_2(T2_DIV_BY_16,77,1);
delay_us(1000);
set_timer2(0);
delay_us(1000);
enable_interrupts(INT_TIMER2);
delay_us(1000);
set_pwm1_duty(512);
delay_us(1000);
enable_interrupts(global);
// TODO: USER CODE!!
while(1){
set_pwm1_duty(512);
delay_us(5000);
}
}
Como tengo la cabeza saturada y no sé por donde hacer más pruebas, he puesto unos delays, por si acaso hiciesen falta, pero la verdad es que no lo he comprobado
.
Otro problema que tengo (en el código creo q aparece comentado), es que utilizo también las interrupciones del timer0 para la activación de una alarma, y cuando intento añadir el código para hacer sonar un zumbador, es como si no se inicializara bien el pic, comento las lineas que hacen referencia al timer2 y al CCP1 y funciona correctamente.
Alguien me puede echar un cable????
Muchisimas gracias!!!