Freedom Light e il modulino uPanel
- Lello Guidi
-
Autore della discussione
- Platino Utente
-
Less
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:
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
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.
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:
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
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
-
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
Grazie e saluti
Lello
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Lello Guidi
-
Autore della discussione
- Platino Utente
-
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
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.
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
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 Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti