Newsgroup: it.hobby.elettronica.digitale
Titolo: Re: Concatenare dispositivi seriali TTL/Atmel/Arduino

Ciao.
Nel weekend ho fatto delle prove con due ATtiny4313: un master ed uno 
slave. Impostati a 9600 baud e con il clock interno RC da 8 MHz. Poi 
anche scalato ad 1 MHz. Risultato breve: NON VA.
 
Innanzitutto ho tolto la parte di indirizzamento che avevamo ipotizzato, 
per capire se il dato arrivava dall'altra parte. Ma il dato letto sullo 
slave è sempre uguale e sbagliato. Sia che lo invii il master sia che 
colleghi direttamente lo slave al PC (con un adattatore USB/TTL).
 
La mia ipotesi è che avendo alimentato i tiny a tensioni inferiori ai 
5V, la calibrazione del clock interno RC decade. Ergo i timing della 
seriale sballano e lo slave legge un po' quello che vuole (sono portato 
a pensare che legga sempre 0xFF).
Stessi errori li ho se ricevo con il PC i dati inviati dal master, che 
con il clock interno RC sono quasi sempre errati. Se faccio girare il 
master con un clock esterno a 11.0592 MHz (errore baud 0%), al PC arriva 
tutto pulito. Rimane il fatto che gli slave non posso farli andare con 
un quarzo esterno e che la tensione di alimentazione potrà variare 
almeno tra due valori, quindi anche una ricalibrazione non sarebbe la 
soluzione definitiva.
 
Mi sa che devo implementare una comunicazione sincrona I2C. I pin liberi 
per ora li ho.
 
Qualcuno di voi ha esperienza di AVR con clock interno RC che dialoga 
sulla UART senza errori?
 
PaoloC

 sulla UART senza errori?
 
 
Fai uscire il clock RC del master dal pin CKOUT (PD2) tramite la programmazione corretta dei fuse-bit.
Usa questo clock per gli slave iniettandolo su PA0 (XTAL1) programmando i fuse bit CKSEL a 0b0000.
Di sicuro stanno al passo anche se perdi un pin di I/O.
 
Piccio.

 Di sicuro stanno al passo anche se perdi un pin di I/O.
 
Non posso liberare PA0. Anche se potessi, che differenza c'è tra usare 
la UART con "master" clock (soluzione Piccio) e il TWI con clock RC 
interno?
 
Fisicamente devo sempre portare 2 pin in giro, con l'SCK che è a 
frequenza più bassa e quindi più semplice da trasportare. L'unica 
complicazione che vedo è la gestione TWI nel firmware, che richiede più 
codice della seriale base. Dimentico qualcosa?
 
PaoloC
 

 codice della seriale base. Dimentico qualcosa?
 
Fai un codice di test: genera un segnale ad onda quadra a frequenza un po' elevata e guarda per ogni micro che diversità c'è.
Esistono firmware in grado di settare il clock in funzione del segnale in arrivo all'UART ma non li ho mai provati.
Comunque, l'STK500 credo sia in grado di determinare il giusto valore di calibrazione per il clock e ricavato quello basterà scriverlo nell'opportuno registro con un paio di istruzioni prima di settare l'UART. 
Usare l'UART ha i suoi vantaggi, soprattutto per il buffer in ricezione, la rilevazione degli errori più comuni e poter eseguire il debug con un normale terminale.
 
Piccio.

> Qualcuno di voi ha esperienza di AVR con clock interno RC che dialoga sulla UART senza errori?
 
Stai brancolando nel buio, non dico di comprarti un oscilloscopio da 300-400 euro che sarebbe il minimo sindacale se vuoi lavorare e non giocare
su queste cose, ma anche con un oggettino come 
http://www.aliexpress.com/item/1Pcs-New-Arrival-USB-Logic-Analyze-24M-8CH/32500592208.html
 
e pulseview (che ha l-analizzatore di protocollo) ci fai quasi tutto quello che ti serve in modo un minimo piu' professionale e veloce.
 
Giulia
 
 

 quello che ti serve in modo un minimo piu' professionale e veloce.
 
Effettivamente ci stavo pensando ma non avevo idea del costo perché non 
li ho mai presi in considerazione e non ero ancora giunto al punto di 
gettare la spugna sulla buona vecchia seriale. Grazie per la dritta. Mi 
sa che finisce nel prossimo ordine. Molto prossimo.
 
Auguri di Buone Feste
PaoloC