Newsgroup: it.hobby.elettronica.digitale
Titolo: Atmel AVR e seriale

Salve a tutti,
                    ho provato a far comunicare un ATMEGA8
con quarzo di 16MHz con la seriale del PC, ma non
riesco a trovare un baudrate per avere una comunicazione
corretta, nemmeno aggiustandolo con valori diversi nei
registri della seriale. Dipende dal quarzo? Se mettessi un
14,7456MHz funzionerebbe meglio?
Avete esperienza di comunicazione tramite seriale con
AVR e PC?

SBS ha scritto:

Mai avuto problemi.
Anche se di solito uso At Mega 32, anche con At Mega 8 il flusso dati e' 
regolare con il normale quarzo a 8 (AtMega serie L) o 16 MHz.
Anche usando una scheda particolare, che monta un quarzo a 18.432, al 
momento del debug del programma, dove sulla scheda Stk 500 monto il 
quarzo standard a 16, basta cambiare define e il flusso dati sulla Rs 
232 non da' nessun problema con Baud rate almeno fino a 57600 bps.
Ti conviene controllare se le funzioni che usi sono valide.
Usi il C o oltri linguaggi?
Hai problemi con la ricezione, la trasmissione o con tutto?
Ricevi con interrupt o in polling?
Insomma, serve qualche altra informazione.
ciao
Angelo

SBS ha scritto:

Mi sembra strano, in genere, almeno che tu non voglia raggiungere 
baudrate elevati, si riesce sempre a trovare un valore per i registri 
che garantisce una precisione sufficiente per una comunicazione seriale.
Tutto questo è vero per baudrate fino diciamo a 38400/57600, se vuoi 
andare sopra è necessario un quarzo multiplo del baudrate.
Probabilmente, come dice Marco, c'è qualche altro problema, dovresti 
fornire qualche informazione in più.
Ciao

Francesco Sacchi (
frasa...@libero.it
) ha scritto:
:: Probabilmente, come dice Marco, c'è qualche altro problema,
:: dovresti fornire qualche informazione in più.
Uso il Bascom come linguaggio, è un basic compilato della
MCS, è abbastanza conosciuto. L'unica trasmissione senza errori
l'ho avuta a 3600 baud :-(

SBS ha scritto:

Forse devi settare la frequenza del quarzo da qualche parte?
Purtroppo non lo conosco, ma puoi lo stesso provare a postare il pezzo 
di codice incriminato, forse qualcosa viene fuori.
Ciao

Francesco Sacchi (
frasa...@libero.it
) ha scritto:
:: Forse devi settare la frequenza del quarzo da qualche parte?
:: Purtroppo non lo conosco, ma puoi lo stesso provare a postare
:: il pezzo di codice incriminato, forse qualcosa viene fuori.
Il baudrate va impostato all'inizio del programma, credo non
si possa far nulla nemmeno con il codice. Chiedevo solo se è
un problema di quarzo.

 un problema di quarzo.
scrivi a quelli della MCS e senti che dicono.
coals 

 
Secondo me sě... premetto che ho avuto una sola esperienza "seria" con 
gli AVR perň ricordo che, un po' come in tanti altri micro, ci sono dei 
registri nei quali puoi impostare il divisore della frequenza di clock 
per ottenere il baudrate desiderato.
Se usi un quarzo a 14.7456 MHz con dei divisori interi (e fra l'altro 
multipli di 2) ottieni esattamente i baudrate standard: ad esempio, se 
dividi per 128 ottieni 115200 bps, se dividi per 256 ottieni 57600 e 
cosě via.
Spero di esserti stato utile... ciao!
steb8


Direi di no, il Mega8 come gli altri AVR č abbastanza flessibile nella
generazione del baud-rate.
Se guardi qui:
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf
a pag.159
ti dice i valori di baud-rate che si possono raggiungere con diversi tipi di
quarzo, e anche la percentuale di scostamento che č bene non superi il 2-3% ma
potrebbe anche essere maggiore.
Io proprio con gli AVR ho realizzato un sistema di auto-baud (in assembler) che
funziona e evita di dover selezionare i parametri
--
ciao
  Stefano

 così via.
Questo è vero, ma non è necessario ottenere *esattamente* il baudrate, 
almeno finchè non sali parecchio. Uno scartodel  2-3% è ampiamente 
tollerato dalla seriale, e su baudrate bassi, lo scarto è ancora più 
basso.
Se, come dice Stefano, controlli il datasheet dell'ATMega8 a pag. 159, 
vedrai che anche con un quarzo da 16MHz l'errore sta sotto il 3% fino 
a 115200bps.
Non dovrebbero quindi esserci problemi di quarzo per tutti i baudrate 
più comuni.
Il problema è altrove...
Ciao