Hallo ich bin neu hier, ich bin seit ein paar monaten im besitz eines atmega8. jetzt habe ich entlich mal zeit mich mit "atmel" zu beschäftigen. bisher habe ich mit PIC gearbeitet. jetzt stehe ich vor dem problem das ich den TWI baustein LM75 nicht auslesen kann. ich weiß das es bei euch im forum viele beiträge zu dem thema gibt, aber irgentwie hilft mir keiner dieser beiträge weiter. gibt es irgentwo ein tutorial in dem alles schrittweise erklärt wird? kann in C oder in ASM programmiert sein! wobei mir C lieber wäre (versuche ich gerade zu lernen) ich will einfach nur mal zum auslesen des LM75 kommen. mein versuchsaufbau ist folgendermaßen: SDA mit ATmega8 verbunden (PC4) SCL mit ATmega8 verbunden (PC5) + auf +5V verbunden - ist mit GND verbunden A0, A1, A2 sind auf GND verbunden die ausgabe der temperatur erfolgt mit LED´s auf portB bin für jede hilfe dankbar......
@ René Paterno (Firma www.pre1.eu) (speedy909) >irgentwie hilft mir keiner dieser beiträge weiter. gibt es irgentwo ein >tutorial in dem alles schrittweise erklärt wird? Keine Ahnung. Du musst eben den I2C Bus ansprechen. Zunächst erstmal Leseoprationen, dann Schreiboperationen. >mein versuchsaufbau ist folgendermaßen: Das fehlen wahrscheinlich die Pull-Up Widerstände and SDA und SCL. 10K sind OK. >die ausgabe der temperatur erfolgt mit LED´s auf portB Schlecht. Nutze den UART mit dem PC als Debugschnittstelle. Da kannst du dir auch Zwischenergebniss anzeigen lassen. Wenn du einen richtigen Debugger hast gehts natürlich auch damit. MFG Falk
@ Falk Brunner oh, die habe ich vergessen zu erwähnen pullup mit 10k hab ich drin!
@ René Paterno (Firma www.pre1.eu) (speedy909) >oh, die habe ich vergessen zu erwähnen pullup mit 10k hab ich drin! Tja, was geht denn dann nicht? Sinnvollerweise sollte man systematisch vorgehen. Ein Zugriff beginnt immer mit der Übertragung der Adresse + RW Bit. Wenn sich der LM75 angesprochen fühlt, generiert er ein ACK. Tut er das nicht, ist schon was faul. Das kann man leicht und schnell rausfinden. In der Art kann man nach und nach die Kommunikation prüfen. Mit Digitaloszi wird das ein Kinderspiel, geht aber auch ohne. MFG Falk
Falk Brunner wrote: > Mit Digitaloszi wird das ein Kinderspiel, geht aber auch ohne. ja, ein digitaloszi konnte ich mir bis jetzt leider noch nicht leisten (> 800€) ein punkt warum nichts funktioniert könnte vieleicht die adresse vom LM75 sein (ich habe ja A0, A1, A2 auf GND) also ist das die adresse 0? A0 = 1 A1 = 2 A2 = 4 oder wie wird sonst gezählt?
> [...] (ich habe ja A0, A1, A2 auf GND) also ist das die adresse 0? Dazu aus dem Datenlblatt (bei mir S. 8): >> Therefore, the complete slave address is: >> 1 0 0 1 A2 A1 A0 >> MSB LSB Also mit A2=A1=A0=0: 0x90 schreiben / 0x91 lesen ;) hth. Jörg
Hallo Jörg, im Datenblatt hat es bestimmt auch einen Taktplan, mit Start, Adresse, Daten, Stop, usw. Die Adresse beinhaltet noch das R/W-Bit. Das macht aus Deinen 0x90 / 0x91 in Wirklichkeit 0xA0 und 0xA1.
@Gast:
>Das macht aus Deinen 0x90 / 0x91 in Wirklichkeit 0xA0 und 0xA1.
nee, macht es nicht ...
hth. Jörg
hmm, irgentetwas ist bei mir da doch noch faul! ich bekomme als ergebnis 10100001 also 145 ich habe mal mein code im anhang hinzugefügt, vieleicht findet jemand von euch den fehler?!?!
Ich hatte doch "0x90 schreiben / 0x91 lesen" schon gepostet: 0x90 -> 1001 0000 8 1 W 0x91 -> 1001 0001 8 1 R (Timing diagram s.12) R\W ist das 8. gesendete bit, die Adresse hat 7 Bit (auch im Datenblatt)- Weitere Vorschläge: in empf() sind die Zeilen > "TWCR=(1<<TWINT)|(1<<TWEN); > loop_until_bit_is_set(TWCR,TWINT);" einmal zuviel
1 | #define LM75_ADR 0x48 // SIEBEN Bits!
|
2 | #define READ 1
|
3 | #define WRITE 0 // besser lesbar
|
4 | |
5 | //LM75 Register
|
6 | #define TEMP 0
|
7 | #define CONF 1
|
8 | #define T_HYST 2
|
9 | #define T_OS 3
|
10 | |
11 | //...
|
12 | // main().
|
13 | send( (LM75_ADR<1)|WRITE, TEMP); |
14 | ewert = empf( (LM75_ADR<1)|READ); |
15 | PORTB = ewert; |
16 | //...
|
hth. Jörg ps.: Sobald das läuft, nimm eine 'richtige' I2C-Lib (z.B. von http://jump.to/fleury)
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.