Guten Morgen zusammen! Hab mir mit nem 2x16 Zeichen Display und einem DS18S20 ein Thermometer gebastelt. Jetzt habe ich das Problem, dass die Gradanzeige im Sekundentakt blinkt. Wie bekomme ich das so hin, dass es normal angezeigt wird? Falls einer von euch eine Idee hat, dann nur zu. Ich bin jedenfalls ratlos. Grüße Code: $lib "lcd4busy.lbx" $regfile = "m8def.dat" $crystal = 4000000 Config Lcd = 16 * 2 Const _lcdport = Portd Const _lcdddr = Ddrd Const _lcdin = Pind Const _lcd_e = 1 Const _lcd_rw = 2 Const _lcd_rs = 3 Cls Cursor Off Noblink 'Config Pinb.0 = Output '***** DS1820 Befehle Const Read_rom = &H33 Const Skip_rom = &HCC Const Convertt = &H44 Const Read_ram = &HBE Const Write_ram = &H4E Const Copy_ram = &H48 Const Recall_ee = &HB8 Const Read_power = &HB4 Const Match_rom = &H55 Declare Sub 18s20_auslesen Declare Sub Temperatur Dim Bd(9) As Byte Dim I As Byte , Tmp As Byte Dim Crc As Byte Dim T As Integer , T1 As Single , Grad As Single Dim V As Byte Dim Temp_anzeige As String * 7 , Zeichen As Byte Dim Temp As Word Dim Messen As Bit , Empfang As Byte Config 1wire = Portb.2 ' DS18s20 an Pin b.2 Locate 1 , 1 Lcd "Temp:" Do Temperatur Waitms 5000 Loop End '/////////////////////////////////////////////////////////////////////// /////// Sub Temperatur 1wwrite Skip_rom 1wwrite Convertt ' Messung starten '**** warten bis abgeschlossen Do Temp = 1wread() Loop Until Temp.7 = 1 '***** Bit 8 muss 1 sein! 18s20_auslesen ' 9 bytes einlesen Temp_anzeige = Fusing(grad , "##.#" ) '**** um aufzurunden! Locate 1 , 7 Lcd Temp_anzeige End Sub '/////////////////////////////////////////////////////////////////////// /////// Sub 18s20_auslesen 1wreset ' Reset 1wwrite Skip_rom ' Chip ansprechen 1wwrite Read_ram ' Befehl zum Auslesen des Rams Bd(1) = 1wread(9) ' 9 Bytes lesen 1wreset 'Reset Temp = Bd(2) Shift Temp , Left , 8 Temp = Temp + Bd(1) T = Temp T = T / 2 Grad = Bd(8) - Bd(7) Grad = Grad / Bd(8) Grad = Grad + T Grad = Grad - 0.25 End Sub
liegt wahrscheinlich an deiner Initialisierung des Displays. Es gibt einen Punkt "Display on/off control" RS=0 R/W=0 DB7..DB4=0 DB3=1 DB2 Display on or off DB1 Cursor on or off DB0 Display blinkt (oder eben nicht :-))
Danke für die Antwort. Komischerweise blinkt ja nicht das ganze Display, sondern nur die Gradanzeige. Der Text "Temp:" steht ganz normal drauf, flackert nicht mal. Müsste also irgend etwas mit der Temperarurauslesung vom DS18S20 sein. Grüße
jo, dann liegt es nicht daran. Mit Basic kann ich allerdings nicht allzuviel anfangen. Prüf doch als erstes einfach die Ausgabe des DS auf Plausibilität, bevor du ausgibst. Das ändert zwar nichts am evtl. falschen Auslesen, verhindert aber die Symptome :-), ja, ich weiss, nicht die feine Art. Habe mit DS1820 noch nichts gemacht, aber es gibt Unmengen von threads mit Problemen darüber :-) Oder gib der SUB 18s20_auslesen erst mal einen festen Rückgabewert, dann kannst du den Fehler schon mal eingrenzen.
Gleich vorweg: Ich bin auch kein BASCOM Spezialist. Aber ich würde mal alles weg lassen, was nicht unbedingt notwendig ist. Als erstes würde mal die rundung mit Fusing dran glaucben müssen. Als nächstes würde ich mal kontrollieren, per Ausgabe, welche Werte denn vom Temp Sensor kommen. Wenn du 'blinken' sagst: Wie ist das gemeint? Ist das der Zahlenwert ist da, und in der nächsten Sekunde sind dort nur Leerzeichen, oder 'blinkt' da die korrekte Zahl abwechselnd mit 0? Eigentlich kann der erste Fall nicht auftreten, denn die Variable 'Grad' enthält immer eine Zahl. Die Zahl mag falsch sein, die Zahl mag mehr als 3 Stellen haben, aber es ist immer noch eine Zahl. Daher auch mein erster Testvorschlag, das FUsing mal wegzulassen und Grad direkt auszugeben.
taste Dich an das Problem langsam 'ran. Wofür ist die erste Zeile? ($lib "lcd4busy.lbx") Mein LCD geht auch ohne die. Außerdem: Kopiere einfach Dein Programm, setze die LCD-Ausgabe immer auf den gleichen Wert und kommentiere immer weitere Programmteile aus, bis es geht.
Ich denke, daß die erste Do-Loop Schleife das Problem ist. Laß doch mal die Sub Temperatur als Hauptprogramm laufen und oberste Do-Loop Schleife weg. MfG Paul
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.