Forum: Mikrocontroller und Digitale Elektronik !!!!!! LM75 mit AVR300 Hilfe !!!!!!!!


von Condor (Gast)


Lesenswert?

Hallo

ich wollte mit dem 90s1200 über i2c einen LM75 auslesen.
ich habe das AVR300.asm genommen und diesen aufruf gemacht


  ldi  i2cadr,$90+i2cwr  ; Set device address and write
  rcall  i2c_start    ; Send start condition and address

  ldi  i2cdata,$00    ; Write word address
  rcall  i2c_do_transfer    ; Execute transfer

  ldi  i2cadr,$90+i2crd  ; Set device address and read
  rcall  i2c_rep_start    ; Send repeated start condition and address

  clc
  rcall  i2c_read    ; Execute transfer (read)
  mov  temp5,i2cdata

  sec
  rcall  i2c_read    ; Execute transfer (read)
  mov  zahl3,i2cdata

  rcall  i2c_stop    ; Send stop condition - releases bus


der 1. read befehl bringt mir wie gewünscht die temperatur
beim 2. read befehl solte das bit 7 0,5 grad anzeigen - ich bekomme
aber immer nur eine 0.

was mach ich beim 2. aufruf falsch? - wird der ack falsch gesendet ?

von Condor (Gast)


Lesenswert?

hat den keiner eine idee ?

von condor (Gast)


Lesenswert?

bin ich wirklich er einzige bei dem es nicht geht ?

von Oliver (Gast)


Lesenswert?

Moin Condor,

bei mir gehts, aber verwende Bascom und ein eigenes Test-Board.

Wichtig ist das erste Config-Word, steht aber im Manual drin ..

mfg
Oliver

von condor (Gast)


Lesenswert?

Hallo

Was heißt das erste config-word ?
ich will nur die term auslesen (adr00) nichts anderes will ich.

von Keyboard-Error (Gast)


Lesenswert?

Tausch mal Deine Tastatur aus, Deine !-Taste prellt...

von Oliver (Gast)


Lesenswert?

Also wenn Du nur auslesen möchtest, reicht es, die
Adresse zu senden, und die 2! Datenpakete zu empfangen.
Das erste ist high, dass andere low (,0 oder ,5°C).
Hast Du deinem Compiler auch gesagt, dass 2 Pakete vom LM75
gesendet werden ? Bei Bascom sieht das so aus:
 I2cstart
 I2cwbyte Lm75read
 I2crbyte Lm75high , Ack
 I2crbyte Lm75low , Nack
 I2cstop

Das ack sagt dem compiler, dass noch ein Word zu lesen ist, bei
Nack kommt anschl. nix mehr. Wie man das nun in assembler sagt, weiß
ich leider nicht.

von condor (Gast)


Lesenswert?

Hallo

bei der AVR300.asm(org. Atmel) steht in der beschreibung das es über
das
cary flag geht (CLC oder  SEC) nur leder bekomme ich halt nur das
1.byte
richtig übertragen.

Hat den noch keiner die AVR300.asm mit dem LM75 getestet ?

von condor (Gast)


Lesenswert?

Wo sind jetzt die LM75 Profis ?

von Peter D. (peda)


Lesenswert?

"Wo sind jetzt die LM75 Profis ?"

Ich bin kein "LM75 Profi", darf ich also nicht antworten ?

Schon mal an Murphies Gesetze gedacht, z.B. "Der Fehler ist
grundsätzlich nie da, wo man ihn sucht".

Werden z.B. temp3 und zahl5 richtig ausgegeben ?
Trag da einfach mal feste Werte ein und teste, ob sie richtig angezeigt
werden.

Debuggen ist ganz einfach:

Man teilt den Code in Stücke und testet diese.
Den Code, den man gerade nicht testet, muß natürlich drin bleiben, er
könnte ja Seiteneffekte haben.

Bloß machen muß man es selber, da hilft kein Schreien nach Profis.


Ich nehme lieber den DS18B20, den kann man bequem einschrumpfen, für
den LM75 braucht man ja ne extra Platine.


Peter

von Peter D. (peda)


Lesenswert?

P.S.:

Es gibt Leute die warten für jedes Ausrufezeichen im Betreff einen Tag
länger, ehe sie antworten.


Peter

von condor (Gast)


Lesenswert?

Hallo peter

es ist so das temp5 die Ganzzahlige temp. bringt z.b. 24 grad das
bekomme ich auch.
nur zahl3 bringt mir keinen wert.

die variable zahl3 habe ich extra aus testgründen gemacht - weil es die
im programm nicht gibt.

die zahl3 lase ich auch direckt auf LED´s ausgeben ohne damit irgend
was
zu rechnen oder so....


pull up habe ich extern 5,2K - ansonsten wenn ich CLC und  SEC tausche

bekomme ich immer FF auf zahl3 .......

ich bin echt verzweifelt

von Oliver (Gast)


Lesenswert?

Es gibt für das Low-Byte auch nur 127 und 255 als Wert,
oder war´s 0 und 127 ?
Dazwischen gibt es nix.

Daraus bastel ich mir dann die ,0°C oder ,5°C.

mfg
Oliver

von condor (Gast)


Lesenswert?

hallo oliver

beim erwärmen bekomme ich aber kein 0 - 128
sonern nur 0 oder wenn ich CLC und  SEC tausche nur 255 (also alles 1).

von Klaus (Gast)


Lesenswert?

Ich bin mir recht sicher das der Fehler in der APPLICATION NOTE AVR300
liegt.
In der Funktion i2c_put_ack wird SDA nicht mehr frei gegeben!!!
Wird darauf i2c_do_transfer aufgerufen wird, dann das letzte ACK (müßte
ja 0 sein, da sonst ein STOP folgt) gelesen.

Abhilfe: den code umschreiben, oder i2c_rep_start verwenden.
i2c_rep_start

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
Noch kein Account? Hier anmelden.