Freedom Light e il modulino uPanel

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
7 Anni 3 Settimane fa #6 da Lello Guidi
Risposta da Lello Guidi al topic Freedom Light e il modulino uPanel
Questo è l'ultimo listato e ultimo tentativo non funzionante:
Code:
/******************************* ******************* * File: uPanel_Led_New6 * Author: Lello * TX = RC6 pin25, RX = RC7 pin26 * LTlib v4.0.5, MPLABX v4.15, XC8 v1.45 * PIC18F4550 * clock: 20MHz * Freedom Light * Created on April 11, 2018, 3:06 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_UART.h" #include "module_UART.c" #include <stdio.h> #include <stdlib.h> #define HEADER_1 0x23 // carattere # #define HEADER_2 0x24 // carattere $    #define LEDverde LATDbits.LATD0 #define LEDrosso LATDbits.LATD1 unsigned char stringa[30]; unsigned int contatore = 0; void main(void){ IO_set_all_ports_as_inputs(); IO_set_port_direction(IO_PORTD, IO_ALL_PORT_OUTPUT); LCD_initialize(20); LCD_cursor(LCD_TURN_OFF_CURSOR, LCD_BLINKING_OFF); LCD_home(); LCD_write_message(" uPanel e Led"); LCD_goto_xy(6,2); // (colonna, riga) LCD_write_message("New 6"); delay_s(1); LCD_clear(); //***************************************************** // Configura l'USART a 57600 bit/s //****************************************************** UART1_open(UART_BAUDRATE_57600); delay_ms(10); UART1_write_message("\n"); UART1_write_message("$PING 200;\n"); UART1_write_message("$P:D!338;=T*15:Led new 6;{%100,3!88F,228}*20/L1G:0:LED;*10/W1:0;\n"); RCIE = 1; // Attivo interrupt in RX RCIP = 1; // Alta Priorità USART GIE = 1; // Abilito alta priorità globale PEIE = 1; // Abilito interrupt periferiche while(1){ //LCD_clear(); LCD_goto_line(1); LCD_write_string(stringa); LCD_goto_line(2); LCD_write_integer(contatore,2,0); if(stringa[0] == 0x23) { // # LEDrosso=1; contatore = 0; } LEDverde=1; delay_s(1); LEDverde = 0; delay_s(1); }// end while }// end main /************** Interrupt ***************************/ void interrupt high_isr(void){ if(!RCIF){ stringa[contatore] = RCREG; contatore++; } }

Da quello che mi sembra di vedere sul Lcd e capire, è come se la USART non riesca a stare al passo dei caratteri in arrivo dal uPanel.
E' come se dialogassero con due velocità differenti, ma sono sicuro che le impostazioni di entrambi sono corrette.
Se non ricevo un aiuto esterno per poter continuare a sperimentare, ritorno a malincuore a utilizzare l'Arduino.
Saluti

Lello

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

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
6 Anni 11 Mesi fa #7 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Freedom Light e il modulino uPanel
Salve Lello,

come procede?
Gettato la spugna o funziona?

dal codice, vedendo solo l'ISR credo tu abbia problemi:
Code:
void interrupt high_isr(void){ if(!RCIF){ stringa[contatore] = RCREG; contatore++; } }

Il Flag RCIF non lo resetti, il che impedisce nuove interruzioni.
Entri probabilmente in stallo dentro ISR, visto che il flag all'uscita vale sempre 1.

Le istruzioni dentro l'IF le vuoi probabilmente eseguire se RCIF è 1 e non 0.


Saluti,

Mauro
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 11 Mesi fa #8 da Lello Guidi
Risposta da Lello Guidi al topic Freedom Light e il modulino uPanel
Avevo gettato la spugna, ma adesso che mi hai dato un appiglio riprendo in mano il problema e vedo di risolverlo.
Grazie e saluti

Lello

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

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
6 Anni 11 Mesi fa - 6 Anni 11 Mesi fa #9 da Lello Guidi
Risposta da Lello Guidi al topic Freedom Light e il modulino uPanel
Ma il flag RCIF non si resetta da solo dopo la lettura del byte?
Saluti

Lello
Ultima Modifica 6 Anni 11 Mesi fa da Lello Guidi. Motivo: errore ortografico

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

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
6 Anni 11 Mesi fa #10 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Freedom Light e il modulino uPanel
Si hai ragione, nel caso specifico del modulo UART il flag è resettato alla lettura del registro RCREG.

Rimane però il problema che il registro RCREG lo leggi quando RCIF = 0.
Per cui quando RCIF=1, quindi quando hai dei dati nel buffer, non lo leggi RCREG.
Ignori dunque tutti i dati in arrivo e non resetti mai il flag RCIF, per cui il sooftware entra in un loop infinito nell'ISR visto che all'uscita trova nuovamente il flag RCIF ad 1.

Saluti,

Mauro

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.

Forum - Ultimi messaggi