LM73 - macht mich irre

  • 1
  • 2
  • 3
  • 4
  • Seite 1 von 4
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

LM73 - macht mich irre

 · 
Gepostet: 13.12.2016 - 16:31 Uhr  ·  #1
Hallo @ all,

ich versuche gerade einen LM73 auszulesen und die gleiche Schaltung habe ich mit abweichendem Layout und einem Mega8 vor 3 Jahren schon einmal erfolgreich aufgebaut und programmiert. Jetzt ist ein Mega168V drin und nichts geht.
Das ist der Teil mit dem damals der LM ausgelesen wurde:
Code
TWIOut(LM73Adr,$00);               { Register 0                            }
LMStatus:=TWIInp(LM73Adr,HiTemp,LoTemp);

Einfach gesagt: Das Temperaturregister auswählen und Hi-/LoByte lesen. Exakt die gleiche Zeile 2 führt nun dazu, daß sich der uC komplett in den Wald stellt.
Also habe ich zuerst wieder das Temperaturregister gewählt und dann mit zwei getrennten TWIInp die beiden Bytes gelesen. Das hat aber zur Folge, daß zweimal das HiByte gelesen wird und kein LoByte.
Wenn ich nun ein Word oder Integer lese kommt auch nur Mist raus. Als nächstes versuche ich mal ein Array aus zwei Bytes mit einem Pointer (geht das bei TWI?).
Evtl. hat ja einer von euch noch einen Tip für mich :)

Wenn nichts mehr geht werde ich mal eine meiner 3 Jahre alten Schaltungen neu flashen in der Hoffnung, das ich diese nicht damit kille.

Gruss
Harry
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: LM73 - macht mich irre

 · 
Gepostet: 13.12.2016 - 18:45 Uhr  ·  #2
Hallo Harry,
hast Du schon mal in den generierten ASM Code reingeschaut?
Oder die beidem ASM Files dahingehend verglichen?

rolf
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: LM73 - macht mich irre

 · 
Gepostet: 13.12.2016 - 19:45 Uhr  ·  #3
Hallo Rolf,
die beiden ASM-Files schauen in den relevanten Routinen gleich aus.
Ich hab aber ein bisschen getestet und was ganz kurioses festgestellt:
Code

Procedure Messung;                     { LM73 auslesen                         }
  Var LoTemp, HiTemp : Byte;
  Begin
    LMStatus:=TWIOut(LM73Adr,$00);     { Register 0                            }
    LMStatus:=TWIInp(LM73Adr,HiTemp,LoTemp);
  End Messung;

ist compilierbar. Wenn ich jedoch die beiden Var LoTemp und HiTemp global deklariere und in der Procedure lösche kommt ein Fehler: siehe Bild - der Cursor steht nach HiByte. D.h. heißt doch, daß TWIInp bei lokal deklarierten Variablen 2 Bytes lesen kann und bei globalen nur ein Byte. Bahnhof??????

Gruss
Harry

PS:Noch was: Wenn ich sage, daß sich der µC komplett aufhängt, heißt das, daß das angeschlossene Display (5x7 Punktmatrix per Software gemultiplext) nichts anzeigt - auch nicht den vorhandenen statischen Text, der immer und auch ohne Messwert erscheinen sollte. Wenn ich nun Make&Optimize mache und
Code
{$OPTI No_Phase_2_OR_3}
aktiviere wird wenigstens der statische Text (mit der Zeile von oben TWIInp(LM73Adr,HiByte,LoByte); !!!) angezeigt, wenn auch der Messwert immer noch sche...e ist :D
Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: LM73 - macht mich irre

 · 
Gepostet: 13.12.2016 - 20:09 Uhr  ·  #4
Ich habs :wav1: :wav1:

So funktioniert es (kein Hänger und richtige Temperatur):
Code

Var Temp : Array[0..1] of Byte;

Procedure Messung2;                     { LM73 auslesen                         }
  Begin
    LMStatus:=TWIOut(LM73Adr,$00);     { Register 0                            }
    LMStatus:=TWIInp(LM73Adr,Temp);
  End Messung2;


.... nur wieso?????

Gruss
Harry
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: LM73 - macht mich irre

 · 
Gepostet: 13.12.2016 - 20:36 Uhr  ·  #5
Hi Harry,
das
Code
LMStatus:=TWIInp(LM73Adr,HiTemp,LoTemp);

hat damals zufällig funktioniert.
Da hat er dein HiTemp als dst Pointer genommen und LoTemp als Count wenn dort nun mehr als 2 drin stand dann hat es den Frame zerlegt und dein Prog ist abgenippelt.

Richtigwäre es gewesen
Code

Var
  tmp : word;
LMStatus:=TWIInp(LM73Adr,Tmp,2);  // pointer und Anzahl bytes


oder einfach:
Code

var 
Tmp : word; // oder  .. array[0..1] of byte
LMStatus:=TWIInp(LM73Adr,Tmp);  // var dst 


Gruß
miparo
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: LM73 - macht mich irre

 · 
Gepostet: 13.12.2016 - 21:30 Uhr  ·  #6
Hi miparo,

mit einer Word-Var hat es definitiv nicht funktioniert.

Aber damals Zufall bei 12 Geräten?

Gruss
Harry
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 988
Dabei seit: 09 / 2007
Betreff:

Re: LM73 - macht mich irre

 · 
Gepostet: 13.12.2016 - 22:12 Uhr  ·  #7
Code
LMStatus:=TWIInp(LM73Adr,HiTemp,LoTemp);

das hätte auch nur als als
Code
LMStatus:=TWIInp(P)(LM73Adr,HiTemp,LoTemp);

funktionieren dürfen mit einem random Ergebnis.
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2155
Dabei seit: 03 / 2003
Betreff:

Re: LM73 - macht mich irre

 · 
Gepostet: 14.12.2016 - 08:11 Uhr  ·  #8
Nagut :D ..... jetzt funktioniert es und ich hab das nächste Problem: irgendwas auf der Platine sorgt für eine Erwärmung des Sensors. Nur ist da außer dem uC eigentlich nicht viel drauf .... ich will ja nur die Raumtemperatur messen.
  • 1
  • 2
  • 3
  • 4
  • Seite 1 von 4
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 8 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.019869s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI