Impostazioni seriale (ad esempio parità)

Salve a tutti, ho notato che la funzione Serial.begin ha come unico parametro il baud-rate. E' possibile impostare anche gli altri parametri, tipo il numero di bit e la parità, senza andare a modificare i registri di controllo del processore? Non esiste una funzione che lo faccia?

probabillmente è possibile impostare alcuni parametri modificando i file Serial.h e Serial.cpp, però la seriale è hardwre quindi non tutto credo possa essere modificato. Invece le librerie come NewSoftSerial che creano una seriale virtuale, dovrebbero essere più maneggevoli. se non c'è da modificare registri, comunque c'è da capire a cosa servono

8N1 cheusa Arduino é un valore standard ( 8bit, no-paritá, 1 bit stop) Ciao Uwe

Janos: E' possibile impostare anche gli altri parametri, tipo il numero di bit e la parità, senza andare a modificare i registri di controllo del processore? Non esiste una funzione che lo faccia?

L'UART degli ATmega utilizzati da Arduino prevede i seguenti modi di funzionamento:

• Full Duplex Operation (Independent Serial Receive and Transmit Registers) • Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop bits • Odd or Even Parity Generation and Parity Check Supported by Hadware

Però non è possibile settarla diversamente da 8,n,1 tramite wiring, è necessario agire direttamente sui registri dell'UART. Ulteriori dettagli sul data sheet del ATmega 328 capitolo 19.

astrobeed:

Janos: E' possibile impostare anche gli altri parametri, tipo il numero di bit e la parità, senza andare a modificare i registri di controllo del processore? Non esiste una funzione che lo faccia?

L'UART degli ATmega utilizzati da Arduino prevede i seguenti modi di funzionamento:

• Full Duplex Operation (Independent Serial Receive and Transmit Registers) • Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop bits • Odd or Even Parity Generation and Parity Check Supported by Hadware

Però non è possibile settarla diversamente da 8,n,1 tramite wiring, è necessario agire direttamente sui registri dell'UART. Ulteriori dettagli sul data sheet del ATmega 328 capitolo 19.

Proprio quello che mi ero immaginato. Vabbè, cercherò nella documentazione quali registri devo modificare per impostare il bit di parità. Magari prima faccio Serial.begin(57600) e poi modifico sono il minimo indispensabile per impostare la parità.

Grazie mille.

P.S. Perché non è stata prevista nella funzione serial.begin la parità? C'è un motivo particolare?

P.S. Perché non è stata prevista nella funzione serial.begin la parità? C'è un motivo particolare?

probabilmente per ora nessuno ne ha mai avuto bisogno... magari nel vecchio forum o google trovi qualcosa. Dato che arduino nasce come piattaforma didattica, secondo me non è stata inclusa per semplificare il codice, e in seguito la cosa non è mai stata implementata per gli utenti "smaliziati".

lesto: Dato che arduino nasce come piattaforma didattica, secondo me non è stata inclusa per semplificare il codice, e in seguito la cosa non è mai stata implementata per gli utenti "smaliziati".

Più semplicemente le modalità a 5-6-7 bit e la parità sono un retaggio del passato ormai in disuso e si utilizzano molto raramente e capita solo su sistemi datati o se recenti perché basati su vecchi protocolli.

astrobeed: Più semplicemente le modalità a 5-6-7 bit e la parità sono un retaggio del passato ormai in disuso e si utilizzano molto raramente e capita solo su sistemi datati o se recenti perché basati su vecchi protocolli.

Per le modalità 5-6-7 bit sono d'accordo, come anche la 9 bit, ma la parità non irrobustisce la trasmissione?

Janos: ma la parità non irrobustisce la trasmissione?

La parità è un overhead enorme su una trasmissione a 8 bit, sopratutto nel caso di trasmissione a pacchetti visto che viene comunque aggiunto almeno un checksum o, meglio, un CRCxx. L'uso della parità è sparito anche perché nel tempo l'elettronica dei driver di linea, e la qualità dei cavi stessi, si è evoluta a tal punto da rendere praticamente inutile il controllo parità sul singolo byte.

Oggi sbirciavo nel file preferences.txt ed ho visto che ci sono i parametri della seriale:

serial.stopbits=1
serial.databits=8
serial.parity=N

Non so se cambiandoli succede qualcosa.