Autor |
I2C Thermometer: Kommunikationsprotokoll: Fragen zum DB Suche nach: i2c (582) thermometer (978) |
|
|
|
|
BID = 440667
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
|
Hallihallo,
ich möchte gerne den DS1631 Temperatursensor an einem Mega8 betreiben.
Er kann die Temperatur per I2C zum AVR schicken und es lassen sich auch noch andere Parameter über diese Schnittstelle einstellen.
Hier mal das Datenblatt:
http://www.tranzistoare.ro/datasheets2/24/249334_1.pdf
Ich verweise auf die Seiten 12 und 13 des Datenblatts.
Ich hab zum Übertragungsprotokoll eine Frage.
Am Anfang ist klar, der Master (der Mega) gibt nach dem START die Adresse des Thermometers auf den Bus. Dann kommt das ACK vom Thermometer.
Danach muss ein "Command Byte" vom Master kommen. Dieses Byte sagt dem Thermometer, was es tun soll. Nach diesem "Command Byte" kommt nochmals ein ACK vom Thermometer und dann kommen die Daten vom Master.
Nur: Ich finde in diesem DB nirgends die Angabe, wie das "Command Byte" für die jeweilige Aktion aussehen soll... Also wenn ich z.B. die Temperatur auslesen möchte... welches Command Byte muss ich ihm dann schicken? Irgendwie finde ich so eine Liste im DB nicht.. Auf Seite 12 sind zwar die verschiedenen Möglichkeiten aufgelistet, doch nirgends die Codierung der Bytes
Oder was Bedeuten diese Zahlen in den eckigen Klammern auf Seite 12? Sind das die Command Bytes??...
Herzlichen Gruss und Danke
Mario
_________________
Meine Projekte:
http://mauerer.m.googlepages.com |
|
BID = 440672
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Zitat :
| Oder was Bedeuten diese Zahlen in den eckigen Klammern auf Seite 12? Sind das die Command Bytes??... | Ja.
Auf der nächsten Seite steht dann, wie das auf der Leitung aussieht.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten ! |
|
BID = 440675
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Ja aber hää... Ich brauche Nullen und Einsen
Auf der nächsten Seite sind die Command Bytes ja auch nicht explizit angeschrieben... Meist ja so C7...C0 / D7..D0? (Z.B. beim fall e.)) auf S.13
Zu Seite 14:
Beispiel:
TX RX ACh MASTER sends Access Config command.
Nun schön... Was ist ACh (=Command Byte) in Binär ausgedrückt?
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
[ Diese Nachricht wurde geändert von: Steppenwolf am 3 Jul 2007 13:52 ]
[ Diese Nachricht wurde geändert von: Steppenwolf am 3 Jul 2007 13:55 ]
|
BID = 440676
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
... und auf Seite 14 ist ein gesammtes Protokoll von Master (=AVR) an Slave (=Thermometer) abgedruckt. TX = senden, RX = empfangen.
|
BID = 440677
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Im AVR310 (Application Note von Atmel) http://www.atmel.com/dyn/resources/prod_documents/doc2561.pdf
findest Du auf Seiten 2...4 die Umsetzung von Byte -> Bitstream.
Edit:
ACh bedeutet: 10101100
(2*4bit, A= 1010, C=1100, h=Kennzeichen hexadezimale Schreibweise)
[ Diese Nachricht wurde geändert von: hajos118 am 3 Jul 2007 14:12 ]
|
BID = 440678
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Hä? Und was hat das mit meinem Problem zu tun?
Jetzt weiss ich ja immer noch nicht, was ich dem Thermometer sagen muss, damit es mir z.B. die zwei Temperatur-Bytes rauslässt...
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
|
BID = 440680
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
Steppenwolf hat am 3 Jul 2007 14:11 geschrieben :
|
Hä? Und was hat das mit meinem Problem zu tun?
Jetzt weiss ich ja immer noch nicht, was ich dem Thermometer sagen muss, damit es mir z.B. die zwei Temperatur-Bytes rauslässt...
|
Na ja, Dein Thermometer "spricht" I2C - also dürfte es doch am einfachsten sein, den AVR auch in dieser Sprache zu betreiben. Die Application Note beschreibt einen I2C Master - genau das, was dein Temp-Chip als Gegenstelle braucht.
Damit hast Du schon eine gemeinsame Sprache. Fehlt nur noch die höfliche Anfrage (das protokoll), mit dem der Temp-chip dann auf die Anfrage des I2C - Master reagiert, wenn er angesprochen wird (I2C Adresse muss passen). Dieses Protokoll ist im Datenblatt Deines Temp-Chip beschrieben.
Du mußt dich also gar nicht mit 0 und 1 herumschlagen - das macht schon der I2C Master...
|
BID = 440681
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Hä ja wie jetzt...
Das mit I2C is mir schon klar.
Nur: Ich kann dem Thermo-Chip ja verschiedene Befehle geben wie z.B.
- Gib mir die Temperatur aus
- Lass mich dein Config-Register ändern
- etc.
Dies macht man ja, indem man nach der Aufnahme der Verbindung zum Slave das Command-Byte schickt... (S.13 des Thermo-DB)
Nur: Wie sieht dieses Command-Byte denn nun für die jeweilige Aktion aus? Bei einigen Fällen steht das im Thermo-DB (S.13), im Fall "e)" auf Seite 13 stehen für das Command-Byte ja nur so doofe Nummerierungen.. Was muss da rein?
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
[ Diese Nachricht wurde geändert von: Steppenwolf am 3 Jul 2007 14:26 ]
|
BID = 440682
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
|
BID = 440699
cholertinu Inventar
Beiträge: 3755 Wohnort: CH
|
Zitat :
Steppenwolf hat am 3 Jul 2007 14:29 geschrieben :
|
Was muss ich für C7...C0 einsetzen?
|
Das musst du nicht selbst binär einsetzen, das macht der I2C Master für dich.
Deine vielen hää? sind übrigens etwas irritierend, besonders wenn explizit auf deine Fragen geantwortet wurde:
Zitat :
| Was ist ACh (=Command Byte) in Binär ausgedrückt? |
Antwort:
Zitat :
| Edit:
ACh bedeutet: 10101100
(2*4bit, A= 1010, C=1100, h=Kennzeichen hexadezimale Schreibweise) |
Reaktion:
Zitat :
| Hä? Und was hat das mit meinem Problem zu tun? |
Wie meinen?
Zurück zum Problem: Du übergibst dem Master Adress- und Daten bytes, der Master schickt die dann binär über den I2C Bus.
Der DB Ausschnitt zeigt das Timing-Diagramm der Datenübertragung auf dem Bus.
So weit musst du aber gar nicht gehen - ausser du willst die Kommunikation mit dem KO nachvollziehen.
Und weiter gehts...
Zitat :
| Das mit I2C is mir schon klar.
|
Wirklich?
Zitat :
| auf Seite 13 stehen für das Command-Byte ja nur so doofe Nummerierungen.. |
Nimm das Command Set auf Seite 12. Da sind die Befehle doch beschrieben.
|
BID = 440706
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Ne, sry, aber gewisse Sachen sollten schon geläufig sein, beispielsweise Hex-Darstellungen etc.
Zudem täte ein Blick in den Bereich "TWI" im Datenblatt erheblich zum Aha-Effekt beitragen.
P.S.: Was kümmert dich denn der Bitstrom? Wenn du Daten senden willst, dann macht man das so:
TWDR = &HAC 'in Basic
TWDR = 0xAC; 'in C
ldi r16, 0xAC
out TWDR, r16 'in Assembler
Da die I²C- /TWI-Hardware alles selbst macht muss du dich nur um die Start- und Stopkonditionen und die Lese-Schreib-Bits kümmern.
Im besseren Fall wertest du noch die Statusregisterwerte aus, um beispielsweise zu checken, ob die Kommunikation erfolgreich war.
_________________
|
BID = 440722
Steppenwolf Schreibmaschine
Beiträge: 1757 Wohnort: Zürich, Schweiz
|
Jäsoo... Jetzt is klar...Hab das Edit oben nicht gesehen
Hab doch noch nie was mit Hex gemacht... Bzw. hab gedacht, dass das Hex ist, nur beim "übersetzen" hab ich das "h" mit dazugenommen...
Wie I2C rennt ist mir schon bewusst... ich habs halt lieber binär und bin durch die "komische" Darstellung der Bytes etwas ins Trudeln geraten...
Ok, nun sind alle Fragen beantwortet, vielen Dank!!
Gruss
Mario
_________________
Meine Projekte:
http://mauerer.m.googlepages.com
[ Diese Nachricht wurde geändert von: Steppenwolf am 3 Jul 2007 16:38 ]
|
BID = 440725
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
_________________
|