Ho un problema con questo listato:
Code:
/******************************************************
* uPanel_v4.0
* File: main.c
* Authore: Lello
* leggo la temperatura del LM35 su AN2(RA2) pin4
* TX = RC6 pin 25, RX = RC7 pin 26
* LTlib v4.0.4, MPLABX v4.15, XC8 v1.45
* PIC18F4550
* clock: 20MHz
* Freedom Light
* Created on February 28, 2018, 2:31 PM
******************************************************/
#include <xc.h>
#include <LTlib.h>
#include <LTlib_delay.h>
#include <LTlib_delay.c>
#include <LCD_44780.h>
#include <LCD_44780.c>
#include <module_IO.h>
#include <module_IO.c>
#include <module_ADC.h>
#include <module_ADC.c>
#include "module_UART.h"
#include "module_UART.c"
#include <stdio.h>
#include <stdlib.h>
#define LEDverde LATDbits.LATD0
#define LEDrosso LATDbits.LATD1
#define Cicalino LATCbits.LATC0
#define TEMPERATURA_CH ADC_CH2 // RA2/AN2 pin
void board_initialization();
void main(void) {
unsigned char data; // per Usart
unsigned int precedente = 0;
unsigned int temperatura;
int indice = 0;
int zero = 153; // = 0°C punto di partenza dell'indice
char str[4];
IO_set_all_ports_as_inputs();
IO_set_port_direction(IO_PORTD, IO_ALL_PORT_OUTPUT);
IO_set_port_direction(IO_PORTC, IO_BIT0_OUT);
LCD_initialize(20);
LCD_backlight (LCD_TURN_ON_LED);
LCD_cursor(LCD_TURN_OFF_CURSOR, LCD_BLINKING_OFF);
LCD_home();
LCD_write_message(" uPanel e LM35");
LCD_goto_xy(6,2); // (colonna, riga)
LCD_write_message("v4.0");
delay_s(3);
LCD_clear();
LCD_goto_line(2);
LCD_write_message("...start write");
delay_s(2);
LCD_clear();
//*****************************************************
// Configura l'USART, 8 bit, 57600 bit/s
// 1 bit stop, 0 bit parità , interruzione RX abilitata ?
UART1_open(UART_BAUDRATE_57600);
delay_ms(10);
UART1_write_message("\n");
UART1_write_message("$PING 200;\n");
UART1_write_message("\n");
// Send Panel
UART1_write_message("$P:D!338;=T*15:LM35 v3.0;%85{@7,y15A0G:5.14:5.15:153;\n");
LCD_goto_line(2);
LCD_write_message("Panel inviato...");
delay_s(2);
LCD_write_message(" ");
ADC_open(TEMPERATURA_CH);
while(1){
LEDrosso = 1;
ADC_select_channel (TEMPERATURA_CH);
ADC_start_conversion();
while(ADC_is_converting());
temperatura = ADC_read_value()/2;
LCD_goto_line(1);
LCD_write_message("Temp : ");
LCD_write_integer (temperatura, 3, LCD_ZERO_CLEANING_ON);
LCD_write_char (223);
LCD_write_char ('C');
if (temperatura != precedente){
indice = temperatura * 3;
indice = indice + zero;
sprintf(str,"#A0:%3d",indice);
UART1_write_string(str);
UART1_write_message("\n");
LEDverde= 1;
}
LCD_goto_line(2);
LCD_write_string (str);
precedente = temperatura;
delay_s(1);
LEDverde = 0;
LEDrosso = 0;
delay_s(1);
}// end while */
}// end main
Non si cancella la scritta "Panel inviato...", cosa che dovrebbe fare visto che è seguita dalla scritta di 16 spazi dopo una pausa di 2 secondi.
Ho usato i led rosso e verde per vedere se il programma entra nel
while e nel
if.
I led lampeggiano quindi il programma gira regolarmente ma sul LCD rimane la scritta che non si cancella e non mi visualizza la temperatura.
Accetto suggerimenti.
Saluti
Lello