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
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
- Moderator
Riduci
Di più
11 Anni 8 Mesi fa #7
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic che limiti ha il modulo USART interno del pic18F4550?
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
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
- Autore della discussione
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
11 Anni 8 Mesi fa #8
da andreamelis
Risposta da andreamelis al topic che limiti ha il modulo USART interno del pic18F4550?
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
grazie
Andrea
Si prega Accedi o Crea un account a partecipare alla conversazione.
- andreamelis
- New Member
Riduci
Di più
- Messaggi: 4
- Ringraziamenti ricevuti 0
11 Anni 8 Mesi fa - 11 Anni 8 Mesi fa #9
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic che limiti ha il modulo USART interno del pic18F4550?
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.
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.
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Ultima Modifica 11 Anni 8 Mesi fa da StefA.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Autore della discussione
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
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.