Scambiare dati tra due Atmel tramite I2C

Sezione dedicata al sistema di sviluppo BASCOM-AVR per i micro AVR
At90s, Attiny, Atmega e Xmega

Scambiare dati tra due Atmel tramite I2C

Postby traliccio » 16 Mar 2012, 16:13

Ciao a tutti !
Vorrei porre una domanda se qualcuno può darmi una traccia da seguire!
Io ho un atmel che fa una parte di lavoro e genera dei dati conservati in una decina di variabili !
Vorrei poterli "passare" ad un altro Atmel tramite I2C che al bisogno li richiede al primo uP. Qualcuno mi può dare un esempio in bascom dove viene realizzata una cosa di questo tipo?
Grazie
traliccio
 
Posts: 3
Joined: 16 Mar 2012, 16:02

Re: Scambiare dati tra due Atmel tramite I2C

Postby flz47655 » 16 Mar 2012, 17:53

Se puoi implementare un tuo protocollo puoi aver maggior controllo su quello che accade e ottimizzare la comunicazione, se vuoi usare I2C credo sia possibile ma non so aiutarti al momento

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Scambiare dati tra due Atmel tramite I2C

Postby deluca » 16 Mar 2012, 18:38

traliccio wrote:Ciao a tutti !
Vorrei porre una domanda se qualcuno può darmi una traccia da seguire!
Io ho un atmel che fa una parte di lavoro e genera dei dati conservati in una decina di variabili !
Vorrei poterli "passare" ad un altro Atmel tramite I2C che al bisogno li richiede al primo uP. Qualcuno mi può dare un esempio in bascom dove viene realizzata una cosa di questo tipo?
Grazie


Caro traliccio,
purtroppo La tua richiesta è troppo generica.
Per poterti aiutare ho bisogno di sapere alcune cose:

Quali uC (sigla) stai usando ?
Che versione di Bascom-AVR stai usando ?
Vuoi realizzare una comunicazione Master-Slave con la TWI ?
Perchè vuoi usare proprio la I2C per scambiare i dati tra i 2 uCs ?

Ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Scambiare dati tra due Atmel tramite I2C

Postby traliccio » 19 Mar 2012, 18:07

deluca wrote:
traliccio wrote:Ciao a tutti !
Vorrei porre una domanda se qualcuno può darmi una traccia da seguire!
Io ho un atmel che fa una parte di lavoro e genera dei dati conservati in una decina di variabili !
Vorrei poterli "passare" ad un altro Atmel tramite I2C che al bisogno li richiede al primo uP. Qualcuno mi può dare un esempio in bascom dove viene realizzata una cosa di questo tipo?
Grazie


Caro traliccio,
purtroppo La tua richiesta è troppo generica.
Per poterti aiutare ho bisogno di sapere alcune cose:

Quali uC (sigla) stai usando ?
Che versione di Bascom-AVR stai usando ?
Vuoi realizzare una comunicazione Master-Slave con la TWI ?
Perchè vuoi usare proprio la I2C per scambiare i dati tra i 2 uCs ?

Ciao




Scusa il ritardo!!!!!
Io stò usando un ATmega128 che mi fa al momento tutte le funzioni ma un pò per risolvere dei problemi ed un po per rendere il tutto più versatile vorrei spostare una parte( In pratica la lettura di una frequenza ed alcuni calcoli su questa ) su di un altro uC, pensavo un Attiny2313 che ho in casa. A questo punto devo poi passarmi i valori calcolati dal 2313 al Mega128 e visto che su quest' ultimo utilizzo la I2C per leggere dati da un modulo orologio e da un termometro persavo di utilizzare lo stesso sistema!
Però per quei moduli so già che leggendo certi registri trovo i dati richiesti ma dovendo crearli io sul tiny2313 non so come fare!!
In pratica devo creare uno slave sul Tiny e poi dal Mega128 master devo poter leggere il valore diciamo di 4 - 5 variabili formato Byte!!

Il Bascom che uso è la ver. 1.11.8.8.

Spero abbastanza chiaro quello che vorrei fare e scusate forse è una banalità ma le mie capacità sono quelle che sono!!!!!!!!!
In attesa di risposta vi ringrazio
traliccio
 
Posts: 3
Joined: 16 Mar 2012, 16:02

Re: Scambiare dati tra due Atmel tramite I2C

Postby flz47655 » 19 Mar 2012, 18:57

Ciao,
Se utilizzi l'ambiente di Arduino praticamente hai già una libreria che si occupa del protocollo.
Hai metodi come send() e receive() per inviare e ricevere i dati.

Ti lascio alcuni link:
http://digitalcave.ca/resources/avr/arduino-i2c.jsp
http://dsscircuits.com/articles/arduino-i2c-slave-guide.html
http://www.instructables.com/id/I2C-between-Arduinos/

Puoi comunque usare le librerie di Arduino anche da AVR Studio o studiare il sorgente della classe wire e cercare di eliminare le dipendenze dalle altre classi

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Scambiare dati tra due Atmel tramite I2C

Postby deluca » 19 Mar 2012, 22:24

Per usare I2Cslave su un ATmega / ATtiny devi acquisire l'add-on delle librerie i2cslave.lbx o i2c_TWI-slave.lbx.
Dopo sarà semplicissimo implementare uno slave I2c su ATtiny secondo la classica configurazione:
CONFIG I2CSLAVE = address , INT = interrupt , TIMER = tmr

i2cslave.lbx : Questa libreria è usata per gli AVR che non hanno interfaccia TWI/I2C hardware come ad esempio ATTINY2313 o ATTINY13.
In questo caso TIMER0 e INT0 vengono utilizzati per SDA e SCL (Timer0 Pin SCL =, INT0 Pin = SDA). Solo AVR con TIMER0 e INT0 sulla stessa porta può utilizzare questa libreria come ad esempio ATTINY2313 o ATTINY13.

i2c_TWI-slave.LBX : Questa libreria invece può essere utilizzata quando un AVR ha un'interfaccia TWI/I2C hardware come ad esempio ATMEGA8, ATMEGA644P o ATMEGA128.
In questo caso i pin hardware SDA e SCL dell' AVR vengono usati (con ATMEGA8: SCL è PORTC.5 e SDA è PORTC.4).
Questa libreria verrà utilizzata quando USERACK = OFF. Quando USERACK = ON allora i2c_TWI-slave-acknack.LBX verranno utilizzati.

The config i2cslave command will enable the global interrupt enable flag !
Config I2cslave = &B01000000 ' same as &H40
Config I2cslave = &H40 , Int = Int0 , Timer = Timer0

A byte named _i2c_slave_address_received is generated by the compiler.
This byte will hold the received address.
A byte named _i2c_slave_address is generated by the compiler.
This byte must be assigned with the slave address of your choice
the following constants will be created that are used by the slave library:

_i2c_pinmask = &H14
_i2c_slave_port = Portd
_i2c_slave_pin = Pind
_i2c_slave_ddr = Ddrd
_i2c_slave_scl = 4
_i2c_slave_sda = 2

Spero sia stato di tuo aiuto
Ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Scambiare dati tra due Atmel tramite I2C

Postby traliccio » 20 Mar 2012, 11:30

deluca wrote:Per usare I2Cslave su un ATmega / ATtiny devi acquisire l'add-on delle librerie i2cslave.lbx o i2c_TWI-slave.lbx.
Dopo sarà semplicissimo implementare uno slave I2c su ATtiny secondo la classica configurazione:
CONFIG I2CSLAVE = address , INT = interrupt , TIMER = tmr

i2cslave.lbx : Questa libreria è usata per gli AVR che non hanno interfaccia TWI/I2C hardware come ad esempio ATTINY2313 o ATTINY13.
In questo caso TIMER0 e INT0 vengono utilizzati per SDA e SCL (Timer0 Pin SCL =, INT0 Pin = SDA). Solo AVR con TIMER0 e INT0 sulla stessa porta può utilizzare questa libreria come ad esempio ATTINY2313 o ATTINY13.

i2c_TWI-slave.LBX : Questa libreria invece può essere utilizzata quando un AVR ha un'interfaccia TWI/I2C hardware come ad esempio ATMEGA8, ATMEGA644P o ATMEGA128.
In questo caso i pin hardware SDA e SCL dell' AVR vengono usati (con ATMEGA8: SCL è PORTC.5 e SDA è PORTC.4).
Questa libreria verrà utilizzata quando USERACK = OFF. Quando USERACK = ON allora i2c_TWI-slave-acknack.LBX verranno utilizzati.

The config i2cslave command will enable the global interrupt enable flag !
Config I2cslave = &B01000000 ' same as &H40
Config I2cslave = &H40 , Int = Int0 , Timer = Timer0

A byte named _i2c_slave_address_received is generated by the compiler.
This byte will hold the received address.
A byte named _i2c_slave_address is generated by the compiler.
This byte must be assigned with the slave address of your choice
the following constants will be created that are used by the slave library:

_i2c_pinmask = &H14
_i2c_slave_port = Portd
_i2c_slave_pin = Pind
_i2c_slave_ddr = Ddrd
_i2c_slave_scl = 4
_i2c_slave_sda = 2

Spero sia stato di tuo aiuto
Ciao


Ok grazie ora mi guardo tutto e vedo di fare prove.
Da quanto ho capito comunque per il uC slave devo mettere il valore del primo byte nel registro di scambio e poi una volta letto da parte del master il master stesso deve richiedere tramite il secondo adr e quando lo slave riceve l' adr nr 2 devo far caricare nel registro il secondo byte e così via ! Ho capito bene? Se così......... proverò a fare qualche prova e poi se posso richiederò ragguagli.
Grazie
traliccio
 
Posts: 3
Joined: 16 Mar 2012, 16:02

Re: Scambiare dati tra due Atmel tramite I2C

Postby flz47655 » 20 Mar 2012, 11:31

Sei sempre il benvenuto

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16


Return to BASCOM-AVR

Who is online

Users browsing this forum: No registered users and 6 guests

cron