Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

UART-IL MISTERO

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] UART-IL MISTERO

Messaggioda Foto Utente93enricobb » 13 mar 2012, 23:24

Salve a tutti,
Volevo trasmettere da un PIC18f452 dei dati al computer tramite la porta seriale ma ho riscontrato problemi che trovo davvero misteriosi. Uso il PIC a una velocità di 40 MHz, per la comunicazione seriale dato che devo alimentare il PIC a 3V ho collegato TX ad un comparatore che porta il segnale a 5 volt e poi viene collegato ad un MAX232, la velocità che ho impostato per l'UART è di 19200 baud rate, one stop bit e nessuna parità. Con l'oscilloscopio ho verificato che i livelli all'uscita del MAX fossero giusti e lo sono, variano da -9 a +9, ho anche verificato la durata di tutta la trasmissione (in uscita il segnale dal bit di star all'ultimo bit dura 0.5ms). Come prima programma ho fatto inviare al PIC il numero 50 (00110010), usando hyperterminal funzionava bene riceveva giusto, 5 minuti dopo ho riprovato e riceveva 114 (01110010).
Il programma era esattamente lo stesso e le impostazioni di hyperterminal pure! ! Il programma l'ho fatto settando manualmente i registri e successivamente anche usando la libreria di Mikropascal...il risultato è lo stesso...ho poi inviato al posto di 50 114 (01110010) e riceveva 242 (11110010)!! è da notare che duplica sempre l'ultimo bit a 1 che riceve..però all'oscilloscopio ho visto il bit lo invia giusto! ! poi perché ogni tanto va e ogni tanto no? AIUTATEMIIII VI PREGOOOO
P.S. ho anche provato a settare il baud rate a 9600...tutto inutile
P.P.S ho anche provato a cambiare computer...inutile pure questo
Avatar utente
Foto Utente93enricobb
0 2
 
Messaggi: 14
Iscritto il: 3 lug 2011, 19:37

0
voti

[2] Re: UART-IL MISTERO

Messaggioda Foto UtenteTardoFreak » 13 mar 2012, 23:43

L' idea di usare un comparatore è alquanto bislacca. Il segnale di uscita da un micro alimentato a 3,3V rientra ampiamente nei limiti TTL quindi puoi benissimo collegare l' uscita dati (TX) dal micro al MAX232.
Per quanto riguarda l' ingresso dei dati (RX), se il micro ha gli input "+5V tolerant" non hai problemi, manda pure il segnale di uscita del MAX232 al micro. Se l' ingresso non accetta un livello a 5V puoi semplicemente metterci uno zener con una resistenza e tutto funzionerà a perfezione.


Ammesso che il problema sia un problema circuitale. -:-
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: UART-IL MISTERO

Messaggioda Foto UtenteCandy » 14 mar 2012, 13:40

Anni fa mi ero interessato molto alla cosa. Il prodotto finale che ne era venuto fuori mi era anche servito per il miocontalitri e poi per il mio bus multimaster che avevo sviluppato.
Ti posso di dire che il fenomeno lo avevo notato anche io.
Ora, in primo luogo toglierei tutto quanto non è indispensabile tra il PIC ed il PC, lasciando unicamente il PIC, il convertitore 232 e la porta seriale, questo perché, è inevitabile, ogni componente che aggiungi, per quanto bassi, introduce dei ritardi...
Ed inoltre ti riassumo quelle che erano state le mie considerazioni.
Il problema mi si era presentato ecco, ad ogni treno di otto bit, il PC riceveva l'ottavo prendendo ancora parte del settimo e senza segnalare errori di ricezione. Ai tempi, (sto cercando di ricordare intanto che scrivo), avevo quindi realizzato una comunicazione tra due PIC, dove uno dei due, con un display, visualizzava pari pari quanto riceveva: con PIC uguali, quarzi uguali, stesse impostazioni, era tutto perfetto, anche ad altissimi baud-rate: 250000. Mentre l'interfaccia PIC/PC andava a rotoli. Fintanto che usavo PC con WIN95 la gestione della porta seriale, mi pare di avere capito, era diversa. da Win98 in avanti i problemi che ho riscontrato aumentavano.
L'unica soluzione che ho trovato è stata quella di: adottare un baud rate lato PIC con un errore percentuale bassissimo, possibilmente nullo, mentre lato PC prima di accettare il byte, controllare gli errori, (usando quindi le API di windows). Non so come si comporti Hyperterminal, ma ti sconsiglio vivamente di usare quello. Piuttosto usa uno dei tantissimi tool gratuiti che ci sono in rete per il test delle porte seriali.
Inoltre, sempre cercando di ricordare, avevo concluso che è meglio evitare di trasmettere lunghi pacchetti dati senza pause di trasmissione. Ho interpretato questo, (senza documentarmi per il vero), pensando che lato PC il driver della porta usi solo il primo bit di start trasmissione per sincronizzarsi, senza poi risincronizzare i byte successivi, e, quindi, un lungo treno di byte andrebbe inevitabilmente a sfasarsi.

La trasmissione 232 è di fatto asincrona: i due partner devono avere un clock uguale identico per non cadere in errori di sincronizzazione e, questo, è praticamente impossibile. Inutile, spero, dare tutti i restanti suggerimenti: il segnale deve arrivare al PC con forma rettangolare quasi perfetta, ecc, ecc.

Non ti arrendere, se vuoi raggiungere un risultato. Non provare unicamente col PC, ma tenta diverse combinazioni, anche con dispositivi diversi, se puoi.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

2
voti

[4] Re: UART-IL MISTERO

Messaggioda Foto UtenteTardoFreak » 14 mar 2012, 13:51

Io la seriale la uso parecchio e, se devo dire il vero, hyperterminal trovo che sia un ottimo emulatore di terminale.
Migliore ancora è RealTerm, molto più veloce.
In questi giorni lo sto usando collegato ad un adattatore USB-Seriale che ho realizzato io con un PIC18F14K50, a 300kBaud che comunica con un Cortex-M3. Scarica dentro il Cortex una valanga di dati in formato s, con protocollo Xon/Xoff e non a mai perso un byte.
Anche con l' adattatore USB-RS232 seriale commerciale ed un ST202 dal lato Cortex tutto funziona in maniera eccellente fino alla massima velocità (115200 Baud).

Mah!
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[5] Re: UART-IL MISTERO

Messaggioda Foto UtenteRobert8 » 14 mar 2012, 13:57

Ho riscontrato anch'io lo stesso problema ed avevo notato che gli errori si presentavano solo con valori non ASCII e quindi avevo risolto inviando solo valori ASCII coi quali funziona perfettamente. Mi sa che il problema risieda nel lato PC con HiperTerminal ma non ero riuscito a configurarlo per ricevere non ASCII.
Avatar utente
Foto UtenteRobert8
3.449 2 8 13
Master EY
Master EY
 
Messaggi: 373
Iscritto il: 15 giu 2011, 16:30

0
voti

[6] Re: UART-IL MISTERO

Messaggioda Foto UtenteRobert8 » 14 mar 2012, 14:36

OOPSS: pardon, ho letto meglio:
93enricobb ha scritto:..però all'oscilloscopio ho visto il bit lo invia giusto!

Come non detto :oops:
Avatar utente
Foto UtenteRobert8
3.449 2 8 13
Master EY
Master EY
 
Messaggi: 373
Iscritto il: 15 giu 2011, 16:30

0
voti

[7] Re: UART-IL MISTERO

Messaggioda Foto Utente93enricobb » 14 mar 2012, 18:16

Ho disattivato il PLL e funziona...con il PIC che lavora a 10 MHz va! ! però cavolo a me serve a 40 MHz... cercherò una soluzione :/
Ultima modifica di Foto UtenteTardoFreak il 14 mar 2012, 18:18, modificato 1 volta in totale.
Motivazione: Eliminato quoting inutile.
Avatar utente
Foto Utente93enricobb
0 2
 
Messaggi: 14
Iscritto il: 3 lug 2011, 19:37


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 20 ospiti