che limiti ha il modulo USART interno del pic18F4550?

11 Anni 8 Mesi fa #6 da Mauro Laurenti
Risposta da Mauro Laurenti al topic che limiti ha il modulo USART interno del pic18F4550?
Ciao,

se scrivi nel display facendo uso della Liberia LaurTec defi fare attenzione al fatto che le funzioni sono bloccanti.
Quindi se ricevi molti dati via RS232 e scrivi in contemporanea rischi di perdere i dati in ricezione.

Dovresti ottimizzare la libreria o fare un buffer in ricezione per la porta seriale.
La routine di scrittura preleva i dati dal buffer.
La ricezione la gestisci via interrupt in maniera da interrompere la routine LCD se necessario.
I dati vanno poi nel buffer...

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
11 Anni 8 Mesi fa #7 da StefA
non avendo l'impellente bisogno di visualizzare sul display quello che ricevo da seriale, ho modificato il programma in modo da ricevere i dati e metterli in un array, poi all'occorrenza visualizzo l'array sull'LCD.
In un progetto precedente comunque mi ero ritrovato ad avere dei problemi quando durante la scrittura su display l'interrupt faceva altro e poi tornavo a scrivere..quindi quando non è necessario evito di intralciare la scrittura su LCD..mi dovesse servire in futuro, andrò a vedere quale parte non si deve interrompere.
Grazie a tutti per i consigli e l'aiuto.

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

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

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 8 Mesi fa #8 da andreamelis
Visto che anche io sto affrontando il problema, potresti mica mettere uno snippet di codice dove gestisci il buffer (mi basta solo la parte in scrittura) ?

grazie

Andrea

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

  • andreamelis
  • New Member
  • New Member
Di più
11 Anni 8 Mesi fa - 11 Anni 8 Mesi fa #9 da StefA
ho preso l'esempio di Mauro e l'ho modificato, l'esempio della gestione della seriale con l'interrupt.
In pratica salvo il dato della lettura dentro un array del tipo dato[g], inizializzando il contatore g, lo pongo a zero, poi prima di uscire dall'interrupt e riazzerare il flag della seriale, incremento g ed effettuo un controllo, se g è pari al limite (ad esempio se l'array è di 6, char.. if (g == 6) ) lo riazzero.
In questo modo ogni volta che c'è un dato sulla seriale, l'interrupt lo copia sequenziale nell'array; poi nel main ho messo un controllo su un pulsante, quando lo premo mi visualizza sul display l'array dato.
Un frammento di codice non saprei quale postarti, farei prima ad allegarti tutto, però siccome ho fatto mille prove e senza nessun commento, potrei rischiare il linciaggio.
Se non mi sono spiegato bene e non riesci, vediamo di fare in altro modo. Fammi sapere.

Ste

EDIT:ti allego una mezza cosa, sperando che sia comprensibile, le variabili non so se devono essere necessariam globali, ripeto questo è solo dopo prove e funziona, poi ottimizzerò per quello a cui è destinato.

File allegato:

Nome del file: seriale.txt
Dimensione del file:1 KB

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Allegati:
Ultima Modifica 11 Anni 8 Mesi fa da StefA.

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

  • StefA
  • Avatar di StefA
  • 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