PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temp Auswertung mit DS1820 auf HD4470 LCD !



Import-Script
04.11.2003, 18:44
Hallo, <BR> <BR>ich verzweifle jetzt blad mit der simplen Ausgabe eines Temperaturwertes auf einem LCD. Als Sensor hab ich den DS1820 und als LCD 1&#42;8 mit HD4470 Chip. <BR> <BR>Ich hab das Problem das er einmal das richtige Anzeigt und danach nur noch 01 ! Er zeigt die Initalisierungszahl von 85 korrekt auf dem LCD an. Aber die nächsten Temperaturwerte sind dann immer 01, 01, 01. <BR> <BR>Ich häng meinen Quelltext hier mal dran vielleicht hat jemand erbarmen :-&#41; <BR>Ich hab die standard routinen wait.asm, lcd_4bit.asm und DS1Wire.asm verwendet. Sind nur umbenannt. <BR> <BR>Hier mein Quelltext: <BR> <BR>INCLUDE 89C2051.MC <BR> <BR>; Konstanten-, Speicher- und Portbelegung <BR>;--------------------------------------------------------------- <BR>StackP DATA 20h <BR> <BR>LCD_RAM DATA 08h <BR>LCD_RS EQU P3.4 <BR>LCD_RW EQU P3.3 <BR>LCD_ENABLE EQU P3.2 <BR>LCD_DATEN EQU P1 <BR>LCD_Zeile1 EQU !10000000 <BR>LCD_Clear EQU !00000001 <BR>LCD_homereturn EQU !00000010 <BR>LCD_Modus EQU !00000110 <BR>LCD_on EQU !00001111 <BR>LCD_links EQU !00011100 <BR>LCD_rechts EQU !00011000 <BR>LCD_interface EQU !00110000 <BR> <BR>DQ EQU P3.0 &#39;Dallas Signall. <BR>TempL DATA 17h <BR>TempH DATA 18h <BR>;Programmbeginn <BR>;---------------------------------------------- <BR> MOV SP,#StackP <BR> JMP start <BR> INCLUDE wait.asm <BR> INCLUDE lcd_4bit_axel.asm <BR> INCLUDE DS1WIRE.asm <BR> <BR>start: <BR> CALL LCD_Init <BR> <BR> MOV LCD_RAM,#LCD_Interface <BR> CALL LCD_Befehl <BR> <BR> MOV LCD_RAM,#LCD_on <BR> CALL LCD_Befehl <BR> <BR>goto: <BR> MOV LCD_RAM,#LCD_Clear <BR> CALL LCD_Befehl <BR> <BR> MOV LCD_RAM,#LCD_Zeile1 <BR> CALL LCD_Befehl <BR> <BR> CALL DS_Init <BR> IF BIT C THEN MOV LCD_RAM,#&#34;0&#34; <BR> IF NOT BIT C THEN MOV LCD_RAM,#&#34;1&#34; <BR> CALL LCD_schreiben <BR> <BR> MOV LCD_RAM,#LCD_Clear <BR> CALL LCD_Befehl <BR> <BR> MOV A,#CCh &#39;Rom Command <BR> CALL DS_senden <BR> <BR> MOV A,#44h &#39;Temp-Convert <BR> CALL DS_senden <BR> <BR> CALL wait_1000000 &#39;Benötigte <BR> <BR> CALL DS_Init &#39;Start <BR> <BR> MOV A,#CCh &#39;Rom Comman <BR> CALL DS_senden <BR> <BR> MOV A,#BEh &#39;Functions C <BR> Call DS_senden <BR> <BR> CALL DS_Lesen &#39;1. Byte 0 Lesen <BR> MOV TempL,A &#39;Speichert d <BR> <BR> CALL DS_Lesen &#39;2. Byte 1 Lesen <BR> MOV TempH,A <BR> <BR>&#39;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; Testbereich &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR> MOV A,TempL &#39; Werte in TempL sind richtig hab ich gepr&uuml;ft. <BR> CLR C <BR> RRC A <BR> MOV B,#10 <BR> DIV AB <BR> MOV TempL,A &#39;TempL Vorkommastelle <BR> MOV A,B <BR> MOV TempH,A &#39;TempH Nachkommastelle <BR> MOV A,#30h &#39; ASCI Anpassung <BR> ADD A,TempL <BR> MOV TempL,A &#39; Erste Zahl <BR> CLR C <BR> MOV A,TempH <BR> MOV A,#30h &#39; ASCI Anpassung <BR> ADD A,TempH &#39; Zweite Zahl <BR> MOV TempH,A <BR> CLR C <BR> NOP <BR> NOP <BR> NOP <BR> MOV LCD_RAM,TempL <BR> CALL LCD_schreiben <BR> MOV LCD_RAM,TempH <BR> CALL LCD_schreiben <BR>lopp: CALL wait_1000000 <BR> JMP goto <BR> <BR>&#39;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR>Wie gesagt beim ersten durchlauf schreibt er mir eine 85 aufs LCD was der Initalisierungszahl des Sensors laut Datenblatt entspricht. Beim nächsten Durchlauf kommt nur noch 01 auf dem Display. MAch ich den Sensor mit der Hand warm gehjt der Wert bis 09 rauf. Dann spring er völlig undefiniert in der gegen rum. <BR> <BR>Wenn jemand eine andere Idee hat wich ich die Temp ausgeben kann bin ich nat&uuml;rlich auch interessiert. <BR> <BR>Vielen Dank f&uuml;r eure Hilfe <BR> <BR>Gruß Euro.

Import-Script
05.11.2003, 12:31
Ich sehe hier auch nichts bösartiges auf Anhieb. <BR> <BR>Einzig, deine Register sind etwas weit unten. Positionier die doch ab 20h und den Stack auf z.B. 60h . <BR> <BR>Könnte es sein, dass deine Subroutinen die Register R0 - R7 benutzen und diese somit unter Umständen deine eigenen Register zerstören ? <BR> <BR>Hast du noch irgend einen Interrupt, der etwas nicht korrekt sichert und wieder herstellt ? <BR> <BR>Gr&uuml;essli <BR>Thedy <BR>