LCD_write_message non mi funziona

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
6 Anni 10 Mesi fa #1 da Lello Guidi
LCD_write_message non mi funziona è stato creato da Lello Guidi
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

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Cosimix
  • Elit Utente
  • Elit Utente
Di più
6 Anni 10 Mesi fa - 6 Anni 10 Mesi fa #2 da Cosimix
Risposta da Cosimix al topic LCD_write_message non mi funziona
Salve!

Riposiziona il cursore. Controlla le posizioni dei caratteri che vuoi scrivere, righe e colonne. Stai eccedendo le locazioni consentite per la visualizzazione.

Saluti,
Cosimo
Ultima Modifica 6 Anni 10 Mesi fa da Cosimix.
I seguenti utenti hanno detto grazie : Lello Guidi

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
6 Anni 10 Mesi fa #3 da Lello Guidi
Risposta da Lello Guidi al topic LCD_write_message non mi funziona
Ho risolto con un LCD_clear() al posto del LCD_message vuoto e poi per visualizzare la temperatura ho dovuto togliere la riga LEDrosso =1.
Forse il LEDrosso=1 dava fastidio alla linea di comando del LCD.
Saluti

Lello

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.