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!

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

  • Alex73
  • Avatar di Alex73
  • Senior Member
  • Senior Member
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
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
  • Avatar di fer_ver
  • Premium Member
  • Premium Member
Di più
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

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

  • Alex73
  • Avatar di Alex73
  • Senior Member
  • Senior Member
Di più
10 Anni 8 Mesi fa - 10 Anni 8 Mesi fa #4 da fer_ver
Risposta da fer_ver al topic Gestione porta seriale

una volta che li leggo con "ReadUSART" si azzera automaticamente

Si, penso proprio di si, il dataRdyUSART si azzera automaticamente.

io pensavo però di gestire sia i contatori vari, i pulsanti e lo stato della porta seriale con lo stesso interrupt

Questa cosa è fattibile,però tieni conto che un interrupt dovrebbe contenere la minor parte di codice possibile.

se si una lettura dello stato della porta seriale ogni 10mS può andare bene?

Dipende da cosa devi leggere, se i dati in ingresso alla porta USART sono riferiti solamente alla
pressione di un pulsante puo' andare bene.

Comunque sentiamo il parere di qualche esperto ! :P

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
  • Avatar di fer_ver
  • Premium Member
  • Premium Member
Di più
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

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

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

Registrati al sito LaurTec.

Login