- Messaggi: 40
- Ringraziamenti ricevuti 0
Gestione porta seriale
10 Anni 8 Mesi fa #1
da Alex73
Gestione porta seriale è stato creato da Alex73
Salve a tutti! Mi trovo a dover gestire per la prima volta una comunicazione seriale tra due circuitini con pic18 a bordo, il progetto per quanto mi ruguarda è ancora a livello di pensiero, ma mi sto preoccupando di come gestire la lettura della porta seriale: il programma lo gestisco con interruzioni "scatenate" dall'overflow di TIMER0 ogni 10mS, dovendo il programma gestire pulsanti,funzioni di antirimbalzo e impulsi che durino un tempo ben determinato, ho pensato di leggere lo stato della porta seriale nella funzione di interrupt con la quale gestisco anche tutto il resto. Vorrei evitare di gestire la seriale con una funzione di interrupt generata dalla seriale stessa per non falsare tutte le tempistiche generate da TIMER0. Le due domande che rivolgo al forum sono: 1) questo tipo di gestione della seriale è fattibile? 2) se si una lettura dello stato della porta seriale ogni 10mS può andare bene?
Confido nel vostro "sapere"!
Grazie e ciao a tutti!
Confido nel vostro "sapere"!
Grazie e ciao a tutti!
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Alex73
- Autore della discussione
- Senior Member
Riduci
Di più
10 Anni 8 Mesi fa - 10 Anni 8 Mesi fa #2
da fer_ver
Risposta da fer_ver al topic Gestione porta seriale
Non so cosa devi fare ma gestirei la seriale con un interrupt attivando un flag se presente un ingresso.Allo stesso modo gestirei il timer con il secondo interrupt attivando un secondo flag.
Poi gestirei il tutto dal main.
Ciao Renato
Poi gestirei il tutto dal main.
Ciao Renato
Ultima Modifica 10 Anni 8 Mesi fa da fer_ver.
Ringraziano per il messaggio: Alex73
Si prega Accedi o Crea un account a partecipare alla conversazione.
- fer_ver
- Premium Member
Riduci
Di più
- Messaggi: 105
- Ringraziamenti ricevuti 12
10 Anni 8 Mesi fa #3
da Alex73
Risposta da Alex73 al topic Gestione porta seriale
Grazie per il suggerimento, io pensavo però di gestire sia i contatori vari, i pulsanti e lo stato della porta seriale con lo stesso interrupt generato da TIMER0 ogni 10ms settando un flag nel momento in cui scopro che sulla porta seriale ci sono dati...... credo sia una cosa possibile da fare. Parlando di C18, il "dataRdyUSART" che restituisce 1 quando sono stati ricevuti dati dalla porta seriale, una volta che li leggo con "ReadUSART" si azzera automaticamente per poi settarsi nuovamente alla prossima ricezione?
Ciao Alessandro
Ciao Alessandro
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Alex73
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 40
- Ringraziamenti ricevuti 0
10 Anni 8 Mesi fa - 10 Anni 8 Mesi fa #4
da fer_ver
pressione di un pulsante puo' andare bene.
Comunque sentiamo il parere di qualche esperto !
Ciao, Renato
Risposta da fer_ver al topic Gestione porta seriale
Si, penso proprio di si, il dataRdyUSART si azzera automaticamente.una volta che li leggo con "ReadUSART" si azzera automaticamente
Questa cosa è fattibile,però tieni conto che un interrupt dovrebbe contenere la minor parte di codice possibile.io pensavo però di gestire sia i contatori vari, i pulsanti e lo stato della porta seriale con lo stesso interrupt
Dipende da cosa devi leggere, se i dati in ingresso alla porta USART sono riferiti solamente allase si una lettura dello stato della porta seriale ogni 10mS può andare bene?
pressione di un pulsante puo' andare bene.
Comunque sentiamo il parere di qualche esperto !
Ciao, Renato
Ultima Modifica 10 Anni 8 Mesi fa da fer_ver.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- fer_ver
- Premium Member
Riduci
Di più
- Messaggi: 105
- Ringraziamenti ricevuti 12
10 Anni 8 Mesi fa #5
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Gestione porta seriale
Ciao,
qualche commento.
I PIC18 hanno due livelli di priorita´ per le interruzioni per cui puoi tranquillamente mettere il timer a livello piu´ alto e gestire la UART a livello basso.
Se dovessi mettere entrambe le gestioni delle interruzioni allo stesso livello ma gestisci bene rendendo il tutto molto breve all´interno dell´Interrupt Service Routine, puoi avere errori sul timer di pochi micro-secondi, che non sono un problema per molte applicazioni.
Se fai un controllo della UART ogni 10ms fai due conti per vedere il massimo baud rate della UART (1-2Kb/s). Se vai troppo veloce vai in overflow e la UART si blocca fino al reset del flag di errore.
Personalmente seguirei la prima soluzione.
Saluti,
Mauro
qualche commento.
I PIC18 hanno due livelli di priorita´ per le interruzioni per cui puoi tranquillamente mettere il timer a livello piu´ alto e gestire la UART a livello basso.
Se dovessi mettere entrambe le gestioni delle interruzioni allo stesso livello ma gestisci bene rendendo il tutto molto breve all´interno dell´Interrupt Service Routine, puoi avere errori sul timer di pochi micro-secondi, che non sono un problema per molte applicazioni.
Se fai un controllo della UART ogni 10ms fai due conti per vedere il massimo baud rate della UART (1-2Kb/s). Se vai troppo veloce vai in overflow e la UART si blocca fino al reset del flag di errore.
Personalmente seguirei la prima soluzione.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.