Go Down

Topic: rs485 tra attiny85 e 328p (Read 491 times) previous topic - next topic

dab77

Ciao a tutti!
..allora ieri finalmente ho iniziato (ma ho pochissimo tempo..) a programmare l'attiny85 che sta su una schedina per un mio progetto. Per info, sulla schedina ci sono due ampli INA128 per il segnale di 2 celle di carico, le uscite vanno dentro A2 e A3 dell'ATtiny85 che spedisce la lettura tramite RS485 (sto usando un 75176) ad un 328P, anch'esso in standalone..
L'attiny85 è senza il quarzo, quindi lo faccio andare a 8MHz. per prima cosa quindi gli ho messo su un lampeggio con delay(1000), e ho subito notato che non è perfettamente un secondo, ma poco meno. diciamo che dopo 5 secondi si comincia a vedere l'anticipo del lampeggio.. secondo voi è normale? è l'oscillatore interno che non è preciso?
quando poi spedisco dei dati in RS485, secondo voi avrò problemi di timing con la ricezione dal 328P? dovrò usare anche quello ad 8MHz interni? inoltre questo 328P dovrà comunicare in seriale via USB (con un convertitore USB-Seriale..) ci saranno poi altri problemi con la velocità della sua seriale e quella del pc?

Grazie, qualsiasi suggerimento è straaccettato..

dab.

leo72


L'attiny85 è senza il quarzo, quindi lo faccio andare a 8MHz. per prima cosa quindi gli ho messo su un lampeggio con delay(1000), e ho subito notato che non è perfettamente un secondo, ma poco meno. diciamo che dopo 5 secondi si comincia a vedere l'anticipo del lampeggio.. secondo voi è normale? è l'oscillatore interno che non è preciso?

E' normale, gli oscillatori interni arrivano ad uno scarto dalla frequenza nominale anche molto alto (+-20/30%).

Quote

quando poi spedisco dei dati in RS485, secondo voi avrò problemi di timing con la ricezione dal 328P? dovrò usare anche quello ad 8MHz interni? inoltre questo 328P dovrà comunicare in seriale via USB (con un convertitore USB-Seriale..) ci saranno poi altri problemi con la velocità della sua seriale e quella del pc?

La connessione seriale ha una sua velocità. Basta che imposti gli stessi baud sul sistema che trasmette e su quello che riceve, l'importante è che sia una velocità ammessa per entrambi i chip. Mi spiego: non potrai mai usare 57600 baud su un micro a 1 MHz, gli errori sarebbero troppi.
Questo può aiutarti a trovare una velocità supportata senza problemi da entrambi i dispositivi.
http://www.wormfood.net/avrbaudcalc.php

dab77

però scusa, magari dico qualche fesseria, ma i baud sono comunque calcolati sul timer interno, e se questo 'pulsa' diverso dal ricevente, i due anche se settati entrambi a 9600 baud, in realtà potrebbero andare a velocità diverse?

leo72

I timing della seriale sono calcolati indipendentemente dal clock. Se metti 9600 bps, sono 9600 bps sia per il micro a 1 MHz che per quello a 8 che per quello a 16.
La comunicazione seriale ha una sua tollerenza, finché rientri nei valori minimi e massimi non hai problemi.

dab77


I timing della seriale sono calcolati indipendentemente dal clock. Se metti 9600 bps, sono 9600 bps sia per il micro a 1 MHz che per quello a 8 che per quello a 16.
La comunicazione seriale ha una sua tollerenza, finché rientri nei valori minimi e massimi non hai problemi.


cioè mi dici che i bps non sono "temporizzati" sull'oscillatore? e su cosa? perchè se mi dici che ci può stare una variazione su ogni chip di tempo di oscillazione interna di +-20/30%, allora io intuisco che anche i bps derivati variano da chip a chip del 20/30%, o sbaglio?
..e se è così, con errori del 15% se setto entrambi a 9600bps, potrei avere un attiny che trasmette a 8160 e un 328P che riceve a (mumble,mumble..) 11040bps?

Dove sbaglio?

leo72

Voglio dire che la base dei calcoli sui tempi è il clock ma è come ottenere 1 secondo con il delay(1000): esso funziona sia su micro a 1 MHz che a 16 MHz. Cioè i 9600 sono sempre 9600 bps, anche su micro a frequenze differenti.
Poi ti parlo per esperienza diretta, ho fatto dialogare via seriale e via I2C un Tiny85 a 1MHz ed un Arduino a 16 MHz. E considera che sia la seriale che l'I2C sul Tiny85 vanno in software. Ed anche 2 Tiny85 via RS485. Quindi le tolleranze ci sono ma non è detto che siano quelle massime che ti mandano alle ortiche tutto, sarebbe una sfiga assurda  :smiley-sweat:

dab77


Voglio dire che la base dei calcoli sui tempi è il clock ma è come ottenere 1 secondo con il delay(1000): esso funziona sia su micro a 1 MHz che a 16 MHz. Cioè i 9600 sono sempre 9600 bps, anche su micro a frequenze differenti.
Poi ti parlo per esperienza diretta, ho fatto dialogare via seriale e via I2C un Tiny85 a 1MHz ed un Arduino a 16 MHz. E considera che sia la seriale che l'I2C sul Tiny85 vanno in software. Ed anche 2 Tiny85 via RS485. Quindi le tolleranze ci sono ma non è detto che siano quelle massime che ti mandano alle ortiche tutto, sarebbe una sfiga assurda  :smiley-sweat:


Ok, grazie!

Go Up