Cos'è il baud rate e perché Arduino ha un baud rate di 9.600?
Il baud rate è la velocità con cui gli alti e i bassi devono essere campionati per decodificare il segnale. Il segnale include:
- protocollo overhead (es. bit di inizio, bit di stop e bit di parità) e
- dati effettivi specifici dell'applicazione
In Arduino si possono usare 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, o 115200. Tuttavia 9600 è il baud rate standard usato di solito. Guardando l'ultimo numero potreste pensare che 115200 debba essere il baud rate più alto, NO NON LO È!
Si può ottenere di più! Guarda il datashet di ATmega328P qui sotto
Ci sono diversi fattori qui:
- Quanto alto di baud-rate può raggiungere l'MCU ATmega328P?
- Quanto alto di baud-rate può raggiungere l'interfaccia USB-Serial?
- Qual è la frequenza dell'oscillatore sull'ATmega328P?
- Qual è la frequenza dell'oscillatore sull'interfaccia USB-seriale (se ne ha una)?
- Quanto è tollerante l'interfaccia USB-seriale al baud-rate mismatch?
Tutti questi fattori sono rilevanti per determinare il massimo baud rate raggiungibile. L'ATmega328P usa un divisore hardware dal suo clock-rate per generare il base-clock per l'interfaccia seriale. Se non c'è un rapporto intero dal clock principale al bit-time del baud rate desiderato, l'MCU non sarà in grado di produrre esattamente il tasso desiderato. Questo può portare a potenziali problemi, dato che alcuni dispositivi sono molto più sensibili al baud-rate mismatch rispetto ad altri.
Le interfacce basate suFTDI sono abbastanza tolleranti al baud-rate mismatch, fino a diversi percentuali di errore.Le interfacce seriali generali sono tolleranti di ~5% di errore di baud-rate. Tuttavia, poiché ogni estremità può essere spenta, una specifica più comune è +-2,5%. In questo modo, se un'estremità è il 2,5% veloce, e l'altra è il 2,5% lento, il vostro errore complessivo è ancora solo il 5%.
L'Uno usa un ATmega328P come MCU primario, e un ATmega16U2 come interfaccia seriale USB. Siamo anche fortunati in quanto entrambi questi MCU usano USART simili, così come clock a 16 Mhz. Poiché entrambi gli MCU hanno lo stesso hardware e clock-rate, avranno entrambi lo stesso errore di baud-rate nella stessa direzione, così possiamo ignorare funzionalmente il problema dell'errore di baud. Potete verificarlo scrivendo un codice.
GRAZIE :)