Ihr lieben Leute, als C-Neuling ist es mir gelungen, die I2C/TWI Quellen von Pascal Stang http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/i2c_8h.html mit der neuesten WinAVR Installation compilieren zu können. Das ich allerhand Defines und Redefines einbauen musste, war mir anfangs nicht klar aber nach intensivem Bemühen der Suchfunktion hier habe ich tatsächlich Zugriff in allen vier TWI Betriebsarten. Danke an dieser Stelle ;-)))) Jetzt habe ich allerdings ein Problem, wo ich nicht weiterkomme. Ich habe ein I2C Beschleunigungssensor von VTI. Der hat eine 10Bit Adresse Vorweg: Schreibenzugriff habe ich aufs Devices (Register setzen usw.), nur lesen geht noch nicht .-( Ich verwende die INterruptbasierende Steuerung (Mega168) Beim Schreiben gehts noch, im Sendepuffer an Stelle0 steht das niederwertige Adressbit, das höherwertige (entspräche sonst der 8BitAdresse) gebe vorab bei "SendStart" mit auf den Weg. Da die Antworten für Adresserkennung und Dataack. im Code im gleichen Case Zwei landen, kann ich das niederwertige Adressbyte als erste Datenbyte Durchgehen lassen. Beim Lesen vom Gerät geht das leider nicht! Klar könnte ich einfach so tun, als wenn ich ein Byte schicken wöllte und dieses ist dann das niederwertige Adressbyte. Da die Sache aber nach Absenden der Startbedingung komplett für sich im Interrupt läuft, kommt nach der Adressierung ein "STOP". Ich brauche noch ein START (Repeated Start). Ich poste morgen mal den Code, wenn ich darf und das Datenblatt ach - moment: Beitrag "SCA3000-D02 von VTI via I2C Erfahrungen?" Hier habe ich schon "vorgewarnt" / Datenblatt verlinkt Vielleicht kann mir einer helfen, bin ja schon gut vorangekommen (ist mein zweites oder drittes Projekt mit WinAVR") Dankeschön AxelR.
Hallo Axel, Das Ding - die Software - braucht hierfür mehr als nur Lesen und Schreiben, nämlich das Abarbeiten von Command-Sequenzen, die ihre einzelnen Stücke per "RESTART" aneinanderkleben. Derartige Command-Sequenzen sind z.B. auch in einer Multi-Master-Umgebung erforderlich, um atomare Operationen mit einem Slave (erst Schlüssel reinschreiben, dann Daten lesen) zu ermöglichen. Ich schätze, daß hier ein Redesign der Software sinnvoll ist. meint Bernhard R.
Generell sollte man I2C nicht im Interrupt machen. Das bringt nur dann etwas, wenn wirklich nur ständig I2C gemacht werden muß. Aber auch dann sollte man es zum Testen erst im Main machen. Und erst wenn alles gut läuft, rubelt man es auf Interrupt um. Peter
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.