Hallo, ich schreibe zur Zeit meine Diplomarbeit. So zu meinem Problem ich habe leider überhaupt keine Ahnung was den I2C Bus betrifft. Ich habe mir ein kleines Testboard mit dem Atmega32 gebaut, jetzt dacht ich mir ich gehe langsam vor und lasse den µc erstmal nur als Master Bytes senden, aber hierbei hapert es leider schon. Ich habe noch gar keinen Slave angeschlossen, wollte mir das Ergebnis erstmal am Oszilloskop ansehen. Ich suche eine gut verständlich Anleitung, hab mich schon seit heute moorgen durchs Netzt gewühlt und irgendwie nix passendes gefunden.
Hallo, http://de.wikipedia.org/wiki/I%C2%B2C naja, selbst Wikipedia liefert da schon sinnvolles und wenn es nur die Links zu den Spezifikationen sind... Beispielcodes für den AVR sollte es bei Atmel oder hier im Forum geben. Weit kommst Du ohne Slave ohnehin nicht, Startcondition senden, Adresse senden und dann ist Schluß, weil ja kein ACK vom Slave kommt. Gruß aus Berlin Michael
Hi, hab mir das den ganzen morgen schon durchgelesen und ich denke auch verstanden. Kannst du mir vielleicht helfen das schonmal in ein c-Programm zu fügen? -Startcondition senden -Adresse senden
Peulebo schrieb: > Hi, hab mir das den ganzen morgen schon durchgelesen und ich denke auch > verstanden. > > Kannst du mir vielleicht helfen das schonmal in ein c-Programm zu fügen? > > -Startcondition senden > -Adresse senden Peter Fleury hat eine fertige I2C Library. Dort kann man sich das alles mal in Natura ansehen.
Hi
>Kannst du mir vielleicht helfen das schonmal in ein c-Programm zu fügen?
Lies dir das entsprechende Kapitel vom Datenblatt durch. Da ist auch ein
kommentiertes Codebeispiel drin.
MfG Spess
Peulebo schrieb: > Ich habe mir ein kleines Testboard mit dem Atmega32 gebaut, jetzt dacht > ich mir ich gehe langsam vor und lasse den µc erstmal nur als Master > Bytes senden, aber hierbei hapert es leider schon. Ich habe noch gar > keinen Slave angeschlossen, wollte mir das Ergebnis erstmal am > Oszilloskop ansehen. Das kann schon problematisch sein, weil der Master nach dem ersten Senden ein ACK des angesprochenen Slave erwartet. Mit dem Oszilloskop könntest du max. bis zu diesem Punkt etwas sehen, d.h die Adresse und ob der Master ein READ oder WRITE macht. Statt Oszilloskop sind auch spezialisierte Sniffer oder Monitore interessant. Die können mit Softwareunterstützung auch die Bedeutung der beobachteten Bits udn Bytes aufschlüsseln. Näheres im Artikel I2C
Stefan B. schrieb: > Das kann schon problematisch sein, weil der Master nach dem ersten > Senden ein ACK des angesprochenen Slave erwartet. Mit dem Oszilloskop > könntest du max. bis zu diesem Punkt etwas sehen, d.h die Adresse und ob > der Master ein READ oder WRITE macht Genau das wollte ich machen. Hast du eine Idee?
int main (void) { uint8_t twst; unsigned char address=0x66; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); twst = TW_STATUS & 0xF8; if ( (twst != TW_START) && (twst != TW_REP_START)) return 1; TWDR = address; TWCR = (1<<TWINT) | (1<<TWEN); twst = TW_STATUS & 0xF8; if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1; return 0; } Habe das so erstmal übernommen.
Hi, bin immer noch am probieren also das ist mein code soweit, sieht jemand Fehler? #include <avr/io.h> int main (void) { TWBR=0x20; DDRC = (1<<DDC0)|(1<<DDC1); //Pins als Ausgang PORTC = (1<<DDC0)|(1<<DDC1); //Pull ups aktivieren while(1) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //Startbedingung TWDR = 0x93; TWCR = (1<<TWINT)|(1<<TWEN); TWDR = 0x20; TWCR = (1<<TWINT)|(1<<TWEN); } }
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.