mikrocontroller.net

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


Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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/do...
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.


Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.