Hola,
despues de mirar muuuuchos ejemplos del foro y otras paginas mas o menos voy encaminado, pero como es mi primer proyecto debe tener miles de errores (y no me debo dar cuenta de casi ninguno)
les adjunto la simulacion en proteus para ver si alguien me puede ayudar.
este es el prog:
#include <18F4520.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC //Internal RC Osc
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BORV25 //Brownout reset at 2.5V
#FUSES PUT //Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(clock=8000000)
#byte PORTB=0xF81
#bit LedRojo = PORTB.0
#bit LedVerde = PORTB.1
#bit LedAzul = PORTB.2
#include "lcd.c"
int8 Rojo,Azul, Ticks;
#int_Timer0
void ActivaLed() {
Ticks++;
if (Ticks==0) {
LedAzul=1;
LedRojo=1;
};
if (Ticks==Rojo)
LedRojo=0;
if (Ticks==Azul)
LedAzul=0;
set_timer0(31);
}
void main() {
int analogico;
int dato_anterior;
lcd_init();
setup_port_a(AN0|VSS_VREF); //Seteamos el puerto analógico
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_adc_ports(AN0_ANALOG);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0( RTCC_8_BIT|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
//setup_timer_2(T2_DIV_BY_16, 127, 1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(VREF_LOW|-2);
setup_low_volt_detect(FALSE);
setup_oscillator(OSC_8MHZ);
set_tris_b(0);
Rojo=0;
Azul=0;
Ticks=0;
enable_interrupts(INT_TIMER0);
enable_interrupts (GLOBAL);
lcd_gotoxy(1, 2);
lcd_putc("Temp:");
dato_anterior = 0;
analogico = read_adc();
Azul = 255 - analogico*2.5;
Rojo = analogico*2.5;
while (1) {
analogico = read_adc();
lcd_gotoxy(1, 1);
printf (lcd_putc,"R = %u, A = %u \n\r\n\r",Rojo,Azul);
lcd_gotoxy(6, 2);
lcd_putc(" ");
lcd_gotoxy(6, 2);
printf(lcd_putc," %d ºC", analogico); //Mostramos el valor de la temperatura en el LCD
if(analogico != dato_anterior){
Azul = 255 - analogico*2.5;
Rojo = analogico*2.5;
dato_anterior = analogico;
}
};
}
use el PIC18F4520 xq lo hice sobre un programa q baje de la pagina micropic, mi idea seria luego mudarlo a otro pic de menos tamaño.
La idea es q el pic toma la temperatura entregada por el LM35 (en una escala de 0 a 100 Cº) y la multiplica por 2.5 para obtener los valores para el color azul y el color rojo asi ir variando de azul a rojo a medida q sube la temperatura.
el primer problema q tengo en la simulacion es el dato q me muestra el LM35 y el dato q se lee el LM35 simulado en otra aplicacion anda bien en esta no se porque tiene un defasaje.
y otro problema es el flikeo q hacen los leds y el lcd, supongo q tendre algun problema con el clock del pic o con el timer en el prog, la verdad q no entiendo mucho, si alguien me podria dar una mano se lo agradeceria.
muchas gracias de ante mano!
German.