Hallo ich versuche I²C kommunikation zwischen Master und Slave zu programmieren. Master habe ich programmiert und wollte euch fragen ob ihr mein code anschauen könnt und mich auf evtl. Fehler hinweisen könntet. Danach habe ich vor den Slave zu programmieren. // TWBR = 0x3C; TWSR = ((1<<TWPS0)|(1<<TWPS1)); while(1) { if(!(PINB & (1<<PB2))) { twi_start_condition(); twi_adress(); twi_read(); twi_data(); twi_read(); twi_stop_condition(); } } } void twi_start_condition(void) { TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); while(!(TWCR & (1 << TWINT))); } void twi_adress() { TWDR = 0xEE; TWCR = (1<<TWINT)|(1<<TWEN); while(!(TWCR & (1 << TWINT))); } void twi_data() { TWDR = 0x2E; TWCR = (1<<TWINT)|(1<<TWEN); while(!(TWCR & (1 << TWINT))); } void twi_read() { TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWAR); while(!(TWCR & (1 << TWINT))); } void twi_stop_condition() { TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); } Danke
> > void twi_read() > { > TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA); > while(!(TWCR & (1 << TWINT))); > } > > > Danke Die Stelle habe ich korrigiert
Hi >Master habe ich programmiert und wollte euch fragen ob >ihr mein code anschauen könnt und mich auf evtl. Fehler hinweisen >könntet. Mach dich erst mal schlau, wie I2C wirklich tickt: http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.nxp.com%2Fdocuments%2Fuser_manual%2FUM10204.pdf&ei=XD3zUvqqNcWqtAa9rICwDA&usg=AFQjCNG5emVs3tU5RbGVKjblTMFgLLHdqg&bvm=bv.60799247,d.Yms&cad=rja dann würdest merken, das solche Konstrukte > twi_adress(); > twi_read(); > twi_data(); überhaupt nicht funktionieren. Beim Senden der Adresse wird dem Slave in Bit0 mitgeteilt ob geschrieben oder gelesen werden soll. Und das gilt solange bis ein Stop oder Repeated Start gesendet wurde. MfG Spess
Hi >Verstanden! Danke. An deiner Stelle würde ich als Slave erst mal etwas fertiges, z.B. PCF8574, nehmen und damit den Code für dem Master entwickeln. Wenn der läuft kannst du mit dem Slave anfangen. MfG Spess
. > > An deiner Stelle würde ich als Slave erst mal etwas fertiges, z.B. > PCF8574, nehmen und damit den Code für dem Master entwickeln. Wenn der > läuft kannst du mit dem Slave anfangen. > > MfG Spess Hi Spess, Danke nochmals. Ich habe allerdings folgendes Problem. Das Projekt ist als ein Technikerarbeit gedacht und wir(3er Team) haben die Funktionen leider schon so festgelegt. Ich kann leider die Platine nicht mehr ändern. D.h für mich dass ich irgend wie den Slave auch Softwaremäßig lösen muss. (Ich musste diesen Part übernehmen, da ich eigentlich nicht gut programmieren kann.). Kannst du mir bitte paar hinweise geben, worauf ich beim Slave achten muss und wie ich die empfangene Datenpacket auslesen kann? Danke
Hi Einen AVR als I2C-Slave habe ich bisher noch nicht gebraucht. Aber von Atmel gibt es AppNotes mit Software zu TWI: Master: http://www.atmel.com/Images/doc2564.pdf http://www.atmel.com/Images/AVR315.zip Slave: http://www.atmel.com/Images/doc2565.pdf http://www.atmel.com/Images/AVR311.zip Noch ein anderer Link: http://www.jtronics.de/avr-projekte/library-i2c-twi-slave.html MfG Spess
Dani schrieb: > Ich kann leider die Platine nicht mehr > ändern. D.h für mich dass ich irgend wie den Slave auch Softwaremäßig > lösen muss. Na, einen Draht für SCL und einen für SDA an die Platine löten kann doch nicht so schwer sein. MfG Klaus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.