mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega 8 mit LM75 (TWI bzw. I²C)


Autor: René P. (speedy909)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: René P. (speedy909)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Falk Brunner
oh, die habe ich vergessen zu erwähnen pullup mit 10k hab ich drin!

Autor: Falk Brunner (falk)
Datum:

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

Autor: René P. (speedy909)
Datum:

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

Autor: Jörg X. (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gast:
>Das macht aus Deinen 0x90 / 0x91 in Wirklichkeit 0xA0 und 0xA1.
 nee, macht es nicht ...

hth. Jörg

Autor: René P. (speedy909)
Datum:
Angehängte Dateien:

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

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
#define LM75_ADR 0x48 // SIEBEN Bits! 
#define READ 1
#define WRITE 0   // besser lesbar

//LM75 Register
#define TEMP 0
#define CONF 1
#define T_HYST 2
#define T_OS 3

//...
// main().
send( (LM75_ADR<1)|WRITE, TEMP);
ewert = empf( (LM75_ADR<1)|READ);
PORTB = ewert;
//...

hth. Jörg
ps.: Sobald das läuft, nimm eine 'richtige' I2C-Lib (z.B. von 
http://jump.to/fleury)

Autor: Kaktus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Kaktus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.