martes, 20 de septiembre de 2011

Control PWM + LCD con PIC18F4550 en MikroC

[Update: El 4550 ya es un poco viejo. ¿No quieres echarle un ojo al 45K50?]


// Rodolfo E. Escobar U.
// Facultad de Ciencias de la Electrónica, BUAP

// LCD module connections
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

int velocity = 0;
int duty = 0;
char txt[6] = "0";

void main() {
ADCON1 |= 0x0F;
CMCON  |= 7;


PORTC = 0; // sets port c to all 0
TRISC = 0; //configures port c as output port
PWM1_Init (5000); // sets pwm frequency to 5000Hz
PWM1_Start(); // starts pwm1 peripheral

  Lcd_Init();                // Inicializa LCD
  Lcd_Cmd(_Lcd_CLEAR);       // Limpiar display
  Lcd_Cmd(_Lcd_CURSOR_OFF);  // Desactivar cursor



while
(1)
  {
 
    wordToStr(velocity, txt);
    Lcd_Out(1,4,"Velocidad");
    Lcd_Out(2,7,Ltrim(txt));
    Lcd_Out(2,10,"%");
   
    if (PORTA.F0 == 1){   // Incremento de PWM
    Lcd_Out(2,7,"   ");
    velocity = velocity + 20;
    duty = duty + 51;
         if (duty >= 255) duty = 255;
         if (velocity >= 100) velocity = 100;
    }
   
    if (PORTA.F1 == 1){ // Decremento de PWM
    Lcd_Out(2,7,"   ");
    velocity = velocity - 20;
    duty = duty - 51;
      if (duty <= 0) duty = 0;
      if (velocity <= 0) velocity = 0;
    }
   
    if (PORTA.F2 == 1){  // Detener
    duty = 0;
    velocity = 0;
    Lcd_Out(2,7,"   ");
    }

    PWM1_Set_Duty(duty); // Establece ciclo de trabajo

    Delay_ms(10); //  10 msec delay

  }
}

8 comentarios:

Anónimo dijo...

por que ala hora de copilarlo me sale que EXTRAVIADO

Rodolfo Escobar dijo...

¿Podrías ser más especifico con tu error? ¿Qué te dice el compilador exactamente?

Saludos

ceros was dijo...

saludos en que que programa realizaste el codigo, yo uso pic c compiler y no compila me da muchos errores.

Rodolfo Escobar dijo...

mikroC, lo menciono en el título.

Saludos.

Unknown dijo...

hola amigo me podrias decir como configuraste tus fuses en mikroc para que funcione con oscilador interno porfa

Rodolfo Escobar dijo...

Aquí lo detallan bastante bien: http://juliozebadua.blogspot.mx/2012/10/configuracion-de-fuses-pic18f4550-en.html

Anónimo dijo...

un excelente trabajo...tengo algunas dudas ojalá puedas ayudarme...
porque no se declara el puerto A?
a que frecuencia estas trabajando en este programa?
muchas gracias

Unknown dijo...

Me gustaria que hicieras uno en proteus :)