- Messaggi: 4
- Ringraziamenti ricevuti 0
svuotare buffer usart picc
11 Anni 1 Mese fa #1
da marcop20
svuotare buffer usart picc è stato creato da marcop20
Appena iscritto e già qui a chiedere aiuto.....
In pratica ho la necessità di ricevere intere stringhe dalla porta RS232 del pc, tale stringa ha dimensioni variabili ma sempre terminanti con lo stesso codice ascii.
Il problema si verifica quando devo ricevere stringhe contenenti più di tre bit in quanto non riesco a svuotare RCREG.
Ve ne sarei immensamente grato se qualcuno potesse fare un esempio di codice.....
Ormai sono settimane che non dormo più in cerca di una soluzione.
Ah... uso hi-tech picc con mplab e freedom2 con le relative librerie usart
In pratica ho la necessità di ricevere intere stringhe dalla porta RS232 del pc, tale stringa ha dimensioni variabili ma sempre terminanti con lo stesso codice ascii.
Il problema si verifica quando devo ricevere stringhe contenenti più di tre bit in quanto non riesco a svuotare RCREG.
Ve ne sarei immensamente grato se qualcuno potesse fare un esempio di codice.....
Ormai sono settimane che non dormo più in cerca di una soluzione.
Ah... uso hi-tech picc con mplab e freedom2 con le relative librerie usart
Si prega Accedi o Crea un account a partecipare alla conversazione.
- marcop20
- Autore della discussione
- New Member
Riduci
Di più
11 Anni 1 Mese fa - 11 Anni 1 Mese fa #2
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic svuotare buffer usart picc
la seriale trasmette un byte (8bit) [ad esempio un char] alla volta e mi pare abbia un buffer da 2 byte, se arrivano più di 2 byte e non hai svuotato dovrebbe perdersi il resto, almeno mi sembra funzionasse così.
Se metti un interrupt sulla seriale, quando ricevi un dato scatta e lo legge subito, se ancora perdi dati abbassa la velocità. Con le librerie di Mauro per C18 e XC8 funziona senza problemi e con baudrate alto.
Ste
ops..mi sono appena accorto che sei tra i micro a 16bit, io parlavo del "classico" 18F4550, non so se per altri pic è diverso, cosa stai usando sulla freedom II?
Se metti un interrupt sulla seriale, quando ricevi un dato scatta e lo legge subito, se ancora perdi dati abbassa la velocità. Con le librerie di Mauro per C18 e XC8 funziona senza problemi e con baudrate alto.
Ste
ops..mi sono appena accorto che sei tra i micro a 16bit, io parlavo del "classico" 18F4550, non so se per altri pic è diverso, cosa stai usando sulla freedom II?
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Ultima Modifica 11 Anni 1 Mese fa da StefA.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
11 Anni 1 Mese fa #3
da marcop20
Risposta da marcop20 al topic svuotare buffer usart picc
Si, stef, uso freedom2 e 16f877.
Il funzionamento che descrivi è corretto, il problema e che ho provato a scrivere il codice in tutti i modi possibili (almeno credo) ma avendo sempre lo stesso pessimo risultato.
Comunque vada riesco solo a ricevere max 3 bit per volta.
Il micro invece ha solo 2bit di buffer, per cui dovrei realizzarne uno circolare, ma anche provando con sorgenti trovati in rete e riadattati al caso il problema persiste
La comunicazione avviene a 9600 baud 8N1
Il funzionamento che descrivi è corretto, il problema e che ho provato a scrivere il codice in tutti i modi possibili (almeno credo) ma avendo sempre lo stesso pessimo risultato.
Comunque vada riesco solo a ricevere max 3 bit per volta.
Il micro invece ha solo 2bit di buffer, per cui dovrei realizzarne uno circolare, ma anche provando con sorgenti trovati in rete e riadattati al caso il problema persiste
La comunicazione avviene a 9600 baud 8N1
Si prega Accedi o Crea un account a partecipare alla conversazione.
- marcop20
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 4
- Ringraziamenti ricevuti 0
11 Anni 1 Mese fa #4
da StefA
Se guardi sul C18 step by step di Mauro a pag 233 inizia a spiegare l'USART, a pag 246 c'è l'esempio dell'USART con interrupt, basta che quando ricevi un dato lo metti dentro un array precedentemente definito, ogni volta in una posizione successiva.. ad esempio..
unsigned char datiRicevuti[10] e ti salva tutti i dati..
Non so se riesco a spiegarmi.
Con il 18F4550 funziona..
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic svuotare buffer usart picc
ricevi proprio solo 3 bit o intendi 3 byte?Comunque vada riesco solo a ricevere max 3 bit per volta.
Se guardi sul C18 step by step di Mauro a pag 233 inizia a spiegare l'USART, a pag 246 c'è l'esempio dell'USART con interrupt, basta che quando ricevi un dato lo metti dentro un array precedentemente definito, ogni volta in una posizione successiva.. ad esempio..
unsigned char datiRicevuti[10] e ti salva tutti i dati..
Non so se riesco a spiegarmi.
Con il 18F4550 funziona..
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
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
11 Anni 1 Mese fa #5
da Mauro Laurenti
Risposta da Mauro Laurenti al topic svuotare buffer usart picc
Ciao Marco,
In ricezione e´ meglio usare le interruzioni.
Se il buffer in ricezione va in overflow hai un errore e la UART non funziona piu´ fino a quando non resetti l´errore.
COn le interruzioni puoi andare anche a 115200 bits/s .
...ma per ora rimani sui 9600bits/s.
COme esempio di ricezioni di byte multipli puoi vedere il progetto Domotino.
I PIC18 hanno due livelli di interruzioni ma per il resto non cambia molto se confrontati con i PIC18 (almeno per questa applicazione).
Saluti,
Mauro
Saluti,
Mauro
In ricezione e´ meglio usare le interruzioni.
Se il buffer in ricezione va in overflow hai un errore e la UART non funziona piu´ fino a quando non resetti l´errore.
COn le interruzioni puoi andare anche a 115200 bits/s .
...ma per ora rimani sui 9600bits/s.
COme esempio di ricezioni di byte multipli puoi vedere il progetto Domotino.
I PIC18 hanno due livelli di interruzioni ma per il resto non cambia molto se confrontati con i PIC18 (almeno per questa applicazione).
Saluti,
Mauro
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.