Hey Leute Ich steh mal wieder an. Möchte gerne mal mit TWI arbeiten. Die ersten Versuche mit Bascom und einem Luftdrucksensor gelangen mir vor einiger Zeit schon recht gut. Doch jetzt wollte ich mehr und ging über den gcc. Um einigermaßen zu verstehen nahm ich mir die Lektüre vor: http://www.mikrocontroller.net/articles/AVR_TWI#Grundlagen Nach ein wenig stöbern im Datenblatt fand ich raus das sich alles sehr ähnelt und das Beispiel sogar gleich ist. Ich denke ich habe es jetzt so einigermaßen verstanden. Jedes Mal wenn das TWINT Bit gesetzt wird führt die Hardware den Datenaustausch durch (zumindest im Mastermode). Ist das richtig? Denn irgendwie wiederspricht sich das mit dem Datenblatt wo steht: This bit is set by hardware when the TWI has finished its current job and expects application software response. Und auch steht: Also note that clearing this flag starts the operation of the TWI, so all accesses to the TWI Address Register (TWAR), TWI Status Register (TWSR), and TWI Data Register (TWDR) must be complete before clearing this flag. Warum wird das Bit dann immer gesetzt wie z.B. um das Startsignal zu erzeugen: TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); while (!(TWCR & (1<<TWINT)));{ } Dieses Beispiel findet sich im Datenblatt wie in meiner Lektüre gleich. Leider funktioniert das Beispiel auch nicht. Mein Programm befindet sich im Anhang. Wenn mal jemand so nett wär und mal drüber sehen könnte, vielleicht ist es auch nur ein dummer Fehler (Meine starke Vermutung) aber beim ersten Fehler kommt schon eine Meldung. Oder könnte das auch Hardware verbunden sein? Ich benütze zurzeit das Pollin Board mit einem 24C04 EEPROM und 10k Pullup Widerständen Wäre für Hilfe sehr Dankbar! MFG Stephan
Stephan Hochmüller schrieb: > Die ersten > Versuche mit Bascom und einem Luftdrucksensor gelangen mir vor einiger > Zeit schon recht gut. Doch jetzt wollte ich mehr und ging über den gcc. Hört sich für mich etwas nach I²C an. Wieso nimmst du nicht einfach was fertiges: http://homepage.hispeed.ch/peterfleury/avr-software.html (i2c Lib). Geht bei mir wunderbar mit allen erdenklichen I2C Sensoren (Luftdruck => MPL115A2, Temperatur etc.)
Timmo H. schrieb: > Hört sich für mich etwas nach I²C an. TWI ist ja auch die lizenzkostenfreie "Umschreibung" für I2C. ;-)
War die lizenskostenfreie "Umschreibung". Das Patent für I2C ist schon vor einigen Jahren abgelaufen und kann jetzt frei verwendet werden.
Hi >Warum wird das Bit dann immer gesetzt wie z.B. um das Startsignal zu >erzeugen: Es wird nicht gesetzt, sondern gelöscht . Datenblatt: The TWINT Flag must be cleared by software by writing a logic one to it. MfG Spess
Michael L. schrieb: > TWI ist ja auch die lizenzkostenfreie "Umschreibung" für I2C. ;-) heldvomfeld schrieb: > War die lizenskostenfreie "Umschreibung". [...] Weder noch. Eine patentierte Technologie wird ja nicht lizenzkostenfrei nur weil man ihr einen neuen Namen gibt. Ausser vielleicht in China... ;) Volker
Michael L. schrieb: > Timmo H. schrieb: >> Hört sich für mich etwas nach I²C an. > > TWI ist ja auch die lizenzkostenfreie "Umschreibung" für I2C. ;-) TWI kann noch etwas mehr als nur I²C.
Hi
>Ist das wieder eins der Bits wo 0=1 und 1=0? Ich komme da nicht ganz mit
Ganz einfach. Das Bit wird gelöscht indem man eine 1 an die Stelle
schreibt. Gleichzeitig wird damit die mit den anderen Bits bestimmte
TWI-Operation gestartet. Das Schreiben einer 0 bewirkt bei TWINT nichts.
Das Löschen durch Schreiben einer 1 trifft auch auf viele andere
'INT-Bit' zu.
MfG Spess
OK verstehe. Vielen Dank kann es jetzt kaum erwarten wieder ans Programmieren zu gehen aber jetzt steht mal Lernen und Trainieren am Programm Und sorry habe den vorigen Beitrag aus Versehen gelöscht. Hier nochmal: Vielen Danke für eure Antworten! Nur eins versteh ich dann nicht! Dann müsste es ja eigentlich heißen: TWCR = (1<<TWSTA)| (1<<TWEN); TWCR &= ~(1<<TWINT); Und nicht: TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); Wobei im Datenblatt steht auch (betrifft aber eigentlich nur die Interrups): The TWINT Flag must be cleared by software by writing a logic one to it. Ist das wieder eins der Bits wo 0=1 und 1=0? Ich komme da nicht ganz mit :/. MFG Stephan
Stephan Hochmüller schrieb: > TWCR &= ~(1<<TWINT); Würde eine logical Zero schreiben. Verlangt ist aber, dass man eine 1 reinschreibt und dann wird das Flag auch gelöscht.
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.