hab ich schon gemacht, siehe:Zitat:
und wenn interesse besteht könnte ich auch erklären wie man einen ATmega als I2C Slave konfiguriert und Codebeispiele posten.
https://www.roboternetz.de/phpBB2/vi...er=asc&start=0
Druckbare Version
hab ich schon gemacht, siehe:Zitat:
und wenn interesse besteht könnte ich auch erklären wie man einen ATmega als I2C Slave konfiguriert und Codebeispiele posten.
https://www.roboternetz.de/phpBB2/vi...er=asc&start=0
ok aber ich hab dort nichts gesehen wie der AVR dann damit umgeht.
ich hab ein beispiel mit registern die man nur lesen und welche die man nur beschreiben kann.
Konkret sieht es so aus das ein AVR kontinuierlich alle 8 A/D Ports durchwechselt und misst, das Ergebnis in einer Variable speichert und diese als Register zur verfügung stellt. In meinem Code ist auch ein Register in das man schreiben kann und der AVR führ dann eine Funktion mit dem Register Wert aus. z.B. Register 10 für Drehung links (Wert 0-360). In Register Schreiben funktioniert bei mir wie bei den US-Sensoren oder EEPROMS. Und ich berüchsichtige in meinem Code alle Statuscodes nicht nur 0x80 und 0x60.
Aber ne Frage zu deinem Beispiel, wenn es für Slave ist wieso stellts du dann mit TWBR usw. die Frequenz ein, die bekommt der doch über den Takt Pin vom Master oder hab ich da was übersehen?
Gruß Muraad
versteh das bitte auch nicht so, dass ich denke, dass mein Code der beste und ausführlichste ist, der war hauptsächlich für einen speziellen Fall gedacht und hab ihn dann al Beispiel gepostet
es ging ja auch nicht darum, eine möglichst umfangreiche Funktion zu schreiben, die alle Eventualitäten abdeckt, sondern ein Beispiel, das die Funktionsweise des TWI beim Slave erläutert
mein Code soll auch nur dafür da sein, damit der Master dem Slave Daten übermitteln kann, ich wollte das eher allgemein machen, kein konkretes Beispiel, was der Slave dann mit den Daten macht, muss man fallspezifisch programmieren (ist aber auch nur zum Senden, nicht zum Empfangen von Slavedaten)Zitat:
ok aber ich hab dort nichts gesehen wie der AVR dann damit umgeht.
ich hab nur die benutzt, die nötig waren, für meine Anwendung waren nur diese nötigZitat:
Und ich berüchsichtige in meinem Code alle Statuscodes nicht nur 0x80 und 0x60.
hängt wieder von meiner Anwendung ab...da können beide AVRs mal Master werden, deswegen hab ich das gleich mit reingeschrieben, damit ich das später nicht vergesse(ich hätte es für den Beispielcode rausmachen können)Zitat:
wieso stellts du dann mit TWBR usw. die Frequenz ein
@muraad
Dann poste doch mal deinen Code hier. Damit auch andere was davon haben...
MfG Kjion
Ok da ich keine zeit habe den Code noch zu bearbeiten poste ich das ganze Beispiel und meine i2cmaster.h . Es kann gut sein das noch kleinere Fehler im Code sind. Ich habe keine zwei AVR´s um den Code zu testen. Hab leider nie viel Geld :( konnte mir bis jetzt nur ein RN-Control und einen Sharp IR zum testen kaufen, aber schon viel Code geschrieben, auch für PWM, A/D Converting. usw.
In meinem angehängten Quellcode sind viele Kommentare, wie gesagt nicht überarbeitet, aber es dürfte eigentlich alles erklären.
Meine i2cmaster Funktionen sind aus dem ATmega32 Datenblatt übernommen. Hab sie nur geringfügig abgeändert, und es ist noch keine repeat-start vorhanden.
EDIT
wenn ihr die Datei nicht gleich beim Download öffnen könnt wie ich, dann
bitte mit Programmers Notepad (oder anderer Editor) öffnen.