10Bit I2C Adresse mit Procyon AVRLib ansprechen?

Gast #458253
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.

#463519
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.
#463860
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.