Fro
16.07.2005, 19:21
Hallo!
Ich arbeite mich gerade in TWI ein. Ich habe folgendes Ziel: Per TWI von einem Atmega8 (master) einen zahlenwert zu einem anderen Atmega 8 (slave) zu senden.
Zum Master gibt es ja genügend tutorials hier und ich glaube dass der bisher steht. Nur beim Slave bin ich mir nicht sicher, da sind auch die Hilfen relativ dünn gesät und dass Datenblatt hilft mir nicht wirklich weiter.
Folgendes habe ich bisher (ein Teil des Codes ist aus einem Post hier im Forum entnommen - sollte ich damit jemand auf den Schlipps treten bitte ich um Verzeihung). Es wäre nett, wenn ihr mal drübergehen könntet und mich auf Probleme oder Fehler hinweisen würdet.
#include <avr/io.h>
#include <compat/twi.h>
volatile uint8_t adresse = 2;
void twi_init(void){
TWAR = (1<<TWA0); //Das Slave-Adressenregister des Atmega 8 kriegt hier den Wert 2 zugewiesen - Slave hat den Wert 2
TWCR = (1<<TWEA)|(1<<TWEN); //TWEN enables TWI, TWCR aknowledges the slave adress
}
uint8_t receive_i2c(void){
TWDR = (adresse << 1) + 1; //load Slave Address + Read in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
return TWDR; //return TWDR
}
void main(void){
twi_init();
uint8_t minuten;
minuten = 0;
for(;;){
minuten = receive_i2c();
}
}
Ich arbeite mich gerade in TWI ein. Ich habe folgendes Ziel: Per TWI von einem Atmega8 (master) einen zahlenwert zu einem anderen Atmega 8 (slave) zu senden.
Zum Master gibt es ja genügend tutorials hier und ich glaube dass der bisher steht. Nur beim Slave bin ich mir nicht sicher, da sind auch die Hilfen relativ dünn gesät und dass Datenblatt hilft mir nicht wirklich weiter.
Folgendes habe ich bisher (ein Teil des Codes ist aus einem Post hier im Forum entnommen - sollte ich damit jemand auf den Schlipps treten bitte ich um Verzeihung). Es wäre nett, wenn ihr mal drübergehen könntet und mich auf Probleme oder Fehler hinweisen würdet.
#include <avr/io.h>
#include <compat/twi.h>
volatile uint8_t adresse = 2;
void twi_init(void){
TWAR = (1<<TWA0); //Das Slave-Adressenregister des Atmega 8 kriegt hier den Wert 2 zugewiesen - Slave hat den Wert 2
TWCR = (1<<TWEA)|(1<<TWEN); //TWEN enables TWI, TWCR aknowledges the slave adress
}
uint8_t receive_i2c(void){
TWDR = (adresse << 1) + 1; //load Slave Address + Read in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
return TWDR; //return TWDR
}
void main(void){
twi_init();
uint8_t minuten;
minuten = 0;
for(;;){
minuten = receive_i2c();
}
}