Autor Tema: duda pwm pic18f4550  (Leído 11896 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado mizzard

  • PIC10
  • *
  • Mensajes: 32
duda pwm pic18f4550
« en: 03 de Julio de 2008, 13:43:22 »
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 :P.

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!!!

Desconectado dardo

  • PIC10
  • *
  • Mensajes: 5
Re: duda pwm pic18f4550
« Respuesta #1 en: 24 de Julio de 2008, 16:41:45 »
Hola todos. Estoy programando el pic18f4550, para poder controlar un motor de DC con un half bridge. Para esto necesito utilizar dos señales PWM las cuales se pueden generar mediante el modulo ECCP1 del pic. Dicho modulo te permite elegir entre distintas formas de controlar un punte, dentro de las cuales esta la que estoy necesitando. El tema es que cuando lo configuro para que funcione half bridge solo obtengo una salida PWM en P1A que es el PIN RC2 pero en RD5 que es la salida P1B donde supuestamente deberia salir la otra señal PWM complementaria solo obtengo un 0 logico.
Si alguien sabe como solucionar este problema le estaria muy agradecido.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: duda pwm pic18f4550
« Respuesta #2 en: 25 de Julio de 2008, 13:33:08 »
Saludos!
A mí me pasó también, trabajando con el 18F2550 y CCS, que con las instrucciones "setup" para los timers y algunas otras cosillas, el CCS no las configuraba correctamente. Así que me tocó leer el datasheet y colocar el valor apropiado en el SFR directamente. No tuve tiempo para ponerme a detallar el porqué de ese comportamiento en el CCS, así que lo resolví de esa forma. Ojalá algún experto pudiera explicarlo.
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado peterjar

  • PIC10
  • *
  • Mensajes: 6
Re: duda pwm pic18f4550
« Respuesta #3 en: 26 de Julio de 2008, 01:00:56 »
epale panas el pwm para controlar el motor se usa la instruccion  SETUP_CCP1(CCP_PWM_FULL_BRIDGE|CCP_PWM_H_H);
y para el amigo de bocina solo con SETUP_CCP1(pwm)  basta para que funcione, con respecto al full Bridge no se simula por proteus tienes que montarlo para probarlo
 

Desconectado dardo

  • PIC10
  • *
  • Mensajes: 5
Re: duda pwm pic18f4550
« Respuesta #4 en: 26 de Julio de 2008, 15:32:37 »
Gracias por responder. Igualmente en MPLAB no me reconoce la funcion SETUP_CCP1(CCP_PWM_FULL_BRIDGE|CCP_PWM_H_H);
ni los argumentos.
Que librerias tengo que importar.
De todas formas he programado en asembler, pero cuando lo simulo en el PIC18 Simulator IDE, solo obtengo una onda PWM en P1A (RC2) como si hubiera programado el modulo CCP1 para PWM standard.
Si me puedes responder te estaria muy agradecido.

Desconectado peterjar

  • PIC10
  • *
  • Mensajes: 6
Re: duda pwm pic18f4550
« Respuesta #5 en: 30 de Julio de 2008, 20:34:47 »
bueno no he probado en programar en mplab ya que es assembler y realmente se me hace mas facil en ccs

Desconectado johnjgm

  • PIC10
  • *
  • Mensajes: 1
Re: duda pwm pic18f4550
« Respuesta #6 en: 05 de Noviembre de 2008, 19:09:02 »
bueno no he probado en programar en mplab ya que es assembler y realmente se me hace mas facil en ccs

para combinar el PWC de CCS con MPLAB es muy fácil

Primero se tiene que tener un archivo *.c en el proyecto
En la barra de herramientas del MPLAB se hace clic en Project y luego se selecciona Select Language Toolsuit
Aparece una ventana y en el Active Toolsuite seleccinamos CCS C Compiler........
en Locatión buscamos el directorio en donde se encuentra el ejecutable Ccxc.exe
y ok

listo y se hacen los mismos pasos para el Build y solo se llama al compilador CCS para que ejecute lo que tenga que hacer, el reto de archivos que se generan son del MPLAB


 

anything