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…
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?
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 ??
> Wo krieg ich das den her ??
Google hilft :-)
2.ter Treffer mit "AVR155"
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.
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&forums%5B%5D=1&forums%5B%5D=9&forums%5B%5D=10&forums%5B%5D=2&forums%5B%5D=4&forums%5B%5D=3&forums%5B%5D=6&forums%5B%5D=17&forums%5B%5D=11&forums%5B%5D=8&forums%5B%5D=12&forums%5B%5D=14&forums%5B%5D=7&forums%5B%5D=5&forums%5B%5D=15&forums%5B%5D=13&forums%5B%5D=16&max_age=-
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... ;-(
Schon gegoogelt? http://www.elektronik-kompendium.de/public/borchers/i2c/whatis.htm#10bit http://www.roboternetz.de/wissen/index.php/I2C#10-Bit_Adressierung bisken Zeit muss man schon investieren, von nüscht iss nüscht :-)))
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
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.