Forum: Compiler & IDEs 10Bit I2C Adresse mit Procyon AVRLib ansprechen?


von Axel R. (Gast)


Lesenswert?

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.


von Bernhard R. (barnyhh)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.