www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I²C Modifizierung 7-Bit --> 10-Bit


Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen !!

Ich wende mich noch mal verzweifelt an euch da ich mit meinen Nerven am 
ende bin. Versuche in einer Applikation mir Sensorwerte eines VTI 
3000-D02 an zwei Displays auszugeben.

Dabei benutze ich einen ATmega 16. Die Zwei Displays hängen am Port A 
der auch zu A/D-Wandlung benutzt wird. Auf jeden fall funktionieren die 
zwei Displays soweit. Nur das auslesen des Sensor mit I²C gelingt gar 
nicht. Hab in älteren Applikationen mit den A/D-Wandlern ADS1100 von TI 
gearbeitet (7-Bit Adressierung) und versuche das I²C-Protokoll das ich 
dort verwendet hab so zu modifizieren das ich auch den VTI-Sensor 
(10-Bit Adressierung) ansprechen kann.

Habe mal Spaßes halber das Protokoll so wie es war (in der ADS1100 
Applikation) auf den µC geladen und jetzt steigen mir die zwei Displays 
aus und zeigen nichts mehr an !!

Hat dafür jemand eine Erklärung ???
Vor allem wie könnte ich das Protokoll modifizieren um auch den 
VTI-Sensor zu verwenden ?

Hab das bestehende Protokoll mal angehängt, eventuell habt ihr ja ein 
paar Vorschläge oder Anregungen. Bin mit meinem Latein am ende…

Autor: m_bedded (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum können die Displays aussteigen?

- Diplay-Variablen im Speicher verletzt (String mit Länge x deklariert, 
aber mehr als x Chars darein geschrieben, dabei die benachbarte 
Display-Variablen erwischt -> Teilprogramm Display durcheinander)

- Unsaubere Interrupt-Handling bei I2C (vergessen, Flag zurückzusetzen). 
uC kommt einfach nicht mehr aus dem Interrupt raus, dadurch 'keine Zeit' 
für Display

- irgendwas globales - Stack reichen nicht mehr aus usw.?

- vielleicht gefällt Dir "AVR155: Accessing I2C Using the AVR 2-Wire 
Serial Interface" besser?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke !!

Werde die sachen mal überprüfen und schauen was davon in frage kommt.

> vielleicht gefällt Dir "AVR155: Accessing I2C Using the AVR 2-Wire
> Serial Interface" besser?

Wo krieg ich das den her ??

Autor: Carbolo Crb (carbolo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wo krieg ich das den her ??

Google hilft :-)

2.ter Treffer mit "AVR155"

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab’s schon raus !!

Der kommt wirklich aus dem I²C-Interrupt nicht mehr raus.
Danke noch mal, allerdings bezog sich die I²C-Frage nicht auf die 
Displays sondern auf den Sensor.

Mal im Bezug auf die Modifikation des I²C-Protokolls von 7-Bit auf 
10-Bit zum ansprechen des VTI-Sensors. Ist das Thema allgemein unbeliebt 
oder hat da niemand irgendwelche erfahrungswerte gesammelt.

Das währe das Hauptproblem.

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Thema ist EXTREM unbeliebt.
Der AVR kann nicht zwischen SLAVE-ACK und DATA-ACK unterscheiden.
Man bekommt es hin, muss aber ziemlich tricksen.
Ich bin jetzt auf den SPI Typ umgestiegen. (Der braucht auch nur die 
Hälfte Strom).
http://www.mikrocontroller.net/search?query=vti&fo...

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der AVR kann natürlich zwischen slave-ak und data-ack unterscheiden, 
aber das ACK vom Low Adress Byte wird bereits vom AVR als Data-Ack 
interpretiert.
Du schickst ja erst das Magic Word 1FF1 (oderso, habe ich jetzt nicht im 
Kopf) und bekommst ein SLVE-ACK (von allen 10Bit devices?), jetzt 
schickst Du die eigentlich Adresse, also das LowByte und bekommst vom 
angesprochenen Gerät ein ACK. Dieses Ack ist aber kein DATA-ACK, sondern 
dein eigentliches Slave-Ack.
Kann ich irgentwie nicht erklären... ;-(

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon gegoogelt?

http://www.elektronik-kompendium.de/public/borcher...
http://www.roboternetz.de/wissen/index.php/I2C#10-...

bisken Zeit muss man schon investieren, von nüscht iss nüscht :-)))

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AxelR. wrote:
> Das Thema ist EXTREM unbeliebt.
> Der AVR kann nicht zwischen SLAVE-ACK und DATA-ACK unterscheiden.

Kann er woll, das ACK auf das 2.Byte ist für den Controller immer ein 
DATA-ACK.
Wenn Du es anders interpretierst, ist das Dein Bier.

Daraus ergibt sich, daß das R/W-Bit immer auf Write stehen muß, sonst 
könnte man das 2.Byte (Data) ja nicht senden.

Um nun trotzdem zu lesen, muß man nochmal Repeat-Start, Adreßbyte+Read 
schicken.
D.h. der 10Bit-Adressen IC muß sich merken, daß er schon adressiert 
wurde und sich nach dem Repeat-Start nur mit dem 7Bit-Adreßbyte+Read 
zufrieden geben.

Wer mal mit I2C-EEPROMs gearbeitet hat, sollte das ja schon kennen. Die 
haben sogar 7+8+8=23 Bit Adressen (24C512).


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.