Les presento un controlador de carga basado en microcontrolador pic16f877a y su programa hecho en lenguaje c
// * NOMBRE DEL PROYECTO// CONTROLADOR SOLAR
// *
// (R) DAVALY SUCHILQUITONGO
// * DESCRIPCION
// CONTROLA EL NIVEL DE CARGA CUANDO LLEGA A
// A LA CARGA MAXIMA UN RELAY SE DESACTIVA
// * CONFIGURACION DE PRUEBA
// MCU: PIC16F877A
// Dev.Board: DRAGON
// Oscillator: HS, 04.0000 MHz
// Otros Modulos: GLCD EN PUERTOS B Y D
// SW: mikroC v7.0
// * NOTAS:
// EL RELAY SE CONECTA EN EL PUERTO RC0
unsigned char ch;
unsigned int adc_rd;
long tlong;
void porcentaje() { // crear funcion de porcentaje
adc_rd = ADC_read(2); // toma valor del puerto ra2
Glcd_Set_Font(cha8x8, 8, 8, 32); // asignar tipo de letra
tlong = (long)adc_rd * 5000; // covertir la lectura de adc a voltios
tlong = tlong / 1023; // 0..1023 -> 0-5000mV
ch = tlong / 1000;
Glcd_Write_Char(48+ch,7,4,1);
ch = (tlong / 100) % 10;
Glcd_Write_Char(48+ch,14,4,1);
Glcd_Write_Char(46,21,4,1);
ch = (tlong / 10) % 10;
Glcd_Write_Char(48+ch,28,4,1);
Glcd_Write_Char('V', 35, 4, 1);
tlong = (long)(adc_rd-88) * 5000; // porcentaje
tlong = tlong / 1023;
ch = tlong / 1000;
Glcd_Write_Char(48+ch,98,7,1);
ch = (tlong / 100) % 10;
Glcd_Write_Char(48+ch,106,7,1);
ch = (tlong / 10) % 10;
Glcd_Write_Char(48+ch,112,7,1);
Glcd_Write_Char(37,120,7,1);
Glcd_Set_Font(FontSystem5x8, 5, 8, 32); //cambio de tipo de letra
Glcd_Write_Text("Carga de Bateria",1,7,1);
if (adc_rd >= 290)
{
PORTC.F0=1; //5 v en rc0
}
else
{
PORTC.F0=0; //0 v en rc0
}
if (adc_rd <= 250)
{
Glcd_Write_Text("50",1,6,1);
}
else
{
Glcd_Write_Text("60",1,6,1);
}
if (adc_rd >= 260)
{
Glcd_Write_Text("60",1,6,1);
}
else
{
Glcd_Write_Text("70",1,6,1);
}
if (adc_rd >= 270)
{
Glcd_Write_Text("70",1,6,1);
}
else
{
Glcd_Write_Text("80",1,6,1);
}
if (adc_rd >= 280)
{
Glcd_Write_Text("80",1,6,1);
}
else
{
Glcd_Write_Text("90",1,6,1);
}
}
void main() {
INTCON = 0; // apagar interrupciones
// ANSEL = 0x04;
TRISA = 0x04;
// ANSELH = 0;
ADCON1 = 0x82;
TRISA = 0xFF;
TRISC = 0;
TRISC = 0;
Glcd_Init(&PORTB, 0, 1, 2, 3, 5, 4, &PORTD); //configurar GLCD
Glcd_Image( solar ); //imprimir el fondo
Delay_ms(800);
ADCON1 = 0x82; // configurar voltaje como referencia
TRISA = 0xFF;
TRISA = 0xFC; // asignando puerto a como entrada
while (1) {
adc_rd = ADC_read(3);
Glcd_Set_Font(cha8x8, 8, 8, 32); //cabio de tipo de letra
tlong = (long)adc_rd * 5000; // covertir la lectura de adc a voltios
tlong = tlong / 1023;
ch = tlong / 1000;
Glcd_Write_Char(48+ch,81,5,1);
ch = (tlong / 100) % 10;
Glcd_Write_Char(48+ch,88,5,1);
Glcd_Write_Char(46,95,5,1);
ch = (tlong / 10) % 10;
Glcd_Write_Char(48+ch,102,5,1);
Glcd_Write_Char('V', 110, 5, 1);
porcentaje(); //ejecutar funcion
Delay_ms(500); // esperar 1 milisegundo
}
}//~! // ir a while 1

No hay comentarios:
Publicar un comentario