- Messaggi: 41
- Ringraziamenti ricevuti 0
intoppo su slave usart
9 Anni 10 Mesi fa #1
da cavaking
intoppo su slave usart è stato creato da cavaking
avevo già chiesto aiuto in passato sempre per lo stesso progetto. ho finalmente montato tutto: un master e tre slave che fanno domotica MOOOLTO basilare ma funzionale. Il motivo della richiesta di aiuto è che ho scoperto che staccando txrx di un slave tutto si blocca. Ho provato a modificare i codici ma con esito incerto. Ho visto che il master trasmette e riceve sempre ma gli slave si bloccano tutti e non solo quello staccato. La mia richiesta è semplicemente di illustrarmi la tecnica che usate per evitare questo problema. Per questo progetto uso ancora l'ASM essendo alquanto complicato convertire tutto in C. I Pic sono master 16F886 e i tre slave 16F88.
grazie a chi vuole perdere qualche minuto
grazie a chi vuole perdere qualche minuto
Si prega Accedi o Crea un account a partecipare alla conversazione.
- cavaking
- Autore della discussione
- Senior Member
Riduci
Di più
9 Anni 9 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic intoppo su slave usart
Ciao,
i sintomi che indichi sembrano quelli legati ad errori di comunicazione o buffer pieno.
Quando si verificano questi errori la comunicazione si blocca.
Per farla riprendere devi far in modo di controllare i flag di errore e resettarli come richiesto nel datasheet.
Crea dunque una routine di controllo nello slave e master che periodicamente controlla i flag di errore.
Per esempio staccando uno slave potresti avere uno start bit che fa partire la ricezione del modulo UART, il quale non ricevera' mai uno stop bit per cui potresti avere un frame error, o mancanza di stop bit (no ricordo il nome specifico dell'errore).
Saluti,
Mauro
i sintomi che indichi sembrano quelli legati ad errori di comunicazione o buffer pieno.
Quando si verificano questi errori la comunicazione si blocca.
Per farla riprendere devi far in modo di controllare i flag di errore e resettarli come richiesto nel datasheet.
Crea dunque una routine di controllo nello slave e master che periodicamente controlla i flag di errore.
Per esempio staccando uno slave potresti avere uno start bit che fa partire la ricezione del modulo UART, il quale non ricevera' mai uno stop bit per cui potresti avere un frame error, o mancanza di stop bit (no ricordo il nome specifico dell'errore).
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
9 Anni 9 Mesi fa #3
da cavaking
grazie
Risposta da cavaking al topic intoppo su slave usart
probabilmente succede questo. Mi sono accorto che sono gli slave che si bloccano e non il master, siccome gli slave rispondono in interrupt al master il mio problema è che se si bloccano non riesco a farli uscire dall'interrupt. Pensavo di mettere un wdog ma non so se è possibile perchè sono sempre in interrupt.Mauro Laurenti ha scritto: Ciao,
Per esempio staccando uno slave potresti avere uno start bit che fa partire la ricezione del modulo UART, il quale non ricevera' mai uno stop bit per cui potresti avere un frame error, o mancanza di stop bit (no ricordo il nome specifico dell'errore).
Saluti,
Mauro
grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- cavaking
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 41
- Ringraziamenti ricevuti 0
9 Anni 9 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic intoppo su slave usart
quando entri nella ISR per la ricezione dati, controlla che non ci sia alcun errore.
Poi leggi il dato.
Se ci sono errori resetta il modulo.
Saluti,
Mauro
Poi leggi il dato.
Se ci sono errori resetta il modulo.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
9 Anni 9 Mesi fa #5
da cavaking
Risposta da cavaking al topic intoppo su slave usart
il controllo sugli errori già lo faccio. La dinamica del mio "protocollo" di trasmissione è questo: master invia agli slave 8 byte comuni e l'ultimo identifica uno slave che deve rispondere (prima risponde A, dopo B etcc in sequenza); gli slave entrano in ISR e ricevono i byte. Gli altri slave che non sono interessati alla risposta leggono passivamente anche il byte dello slave. A fine gli slave escono dal ISR e ogniuno fa il proprio lavoro. Come ti dicevo tutto funziona egregiamente ma quando stacco uno slave la trasmissione si blocca. Esiste un metodo per far uscire forzatamente gli slave dall'ISR dopo un tempo?
grazie
grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- cavaking
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 41
- Ringraziamenti ricevuti 0
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.