-
-
Warum sehe ich auf dem LCD nichts?
Hallo Leute,
ich habe ein kleines Programm geschrieben das auch im Simulator ohne fehler läuft. Dieses habe ich nun zum Mega16 geschickt, die Kontroll LED blinkt auch aber auf dem LCD kann ich nichts sehen.
Kann mir jemand sagen was ich falsch mache?
Da ich auch nicht weiß wie man das Textfenster für die Programme macht, hänge ich es einfach mal an.
$regfile = "m16def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 16
$crystal = 1000000 'Die Frequenz des internen Oszilators
Config Lcd = 16 * 1 'Display
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Dim A As Word
Dim B As Single
Config Portb.0 = Output
Config Portc = Input
Portc.0 = 1 'Internen Pullup einschalten c0 zum einlesen ADCwert unten
Portc.1 = 1 'Internen Pullup einschalten c1 zum einlesen ADCwert oben
Portc.2 = 1 'Internen Pullup einschalten c2 zum einlesen der Aktuellen ADCwertes und Berechnung des Phwertes
Portc.3 = 1 'Internen Pullup einschalten
Config Adc = Single , Prescaler = Auto , Reference = Off 'Init ADC
Dim Unten As Word 'benutzte Variablen
Dim Oben As Word
Dim Phwert As Single
Dim Phunten As Single
Dim Phoben As Single
Dim Messwert As Word
Dim Hilf1 As Single
Dim Hilf2 As Single
Dim Hilf3 As Single
Dim Hilf4 As Single
Dim Hilf5 As Single
Start Adc
Dim Taste As Byte , Sperre As Byte 'Sperre wird immer aud 1 gesetzt wenn ein oder mehrere Tasten gedrückt sind
'wenn keine Taste gedrückt ist wird die Sperre wieder auf 0 gesetzt
Phunten = 4.3 'einfache Festlegung des unteren Cal.punktes zum Test
Phoben = 9.6 'einfache Festlegung des oberen Cal.punktes zum Test
Do
Taste = Portc
If Taste = 14 And Sperre = 0 Then 'nur wenn taste 1 gedrückt und die Sperre auf 0 ist wird der ADCwert gespeichert
Unten = Getadc(0)
Locate 1 , 1
Lcd "U=" ; Unten
Sperre = 1 'Sperre einschalten (1)
Else
End If
If Taste = 13 And Sperre = 0 Then 'nur wenn taste 2 gedrückt und die Sperre auf 0 ist wird der ADCwert gespeichert
Oben = Getadc(0)
Locate 1 , 1
Lcd "o=" ; Oben
Sperre = 1 'Sperre einschalten (1)
Else
End If
If Taste = 11 Then 'nur wenn taste 4 gedrücktist wird der ADCwert gespeichert
Messwert = Getadc(0) 'und der Phwert wird berechnet
Hilf1 = Phoben - Phunten 'Berechnung in einzelschritten
Hilf2 = Oben - Unten 'da die gesammte Formel Fehler verursachte
Hilf3 = Hilf1 / Hilf2
Hilf1 = Messwert * Hilf3
Hilf2 = Hilf1 + Phunten
Hilf4 = Unten * Hilf3
Phwert = Hilf2 - Hilf4
'Phwert = Messwert *(phoben - Phunten ) /(oben - Unten ) + Phunten - Unten *(phoben - Phunten ) /(oben - Unten )
'Phwert = Messwert * Hilf1 / Hilf2 + Phunten - Unten * Hilf1 / Hilf2
'phwert = Messwert * Hilf3 + Phunten - Unten * Hilf3
'Phwert = Hilf4 + Phunten - Unten * Hilf3
'Phwert = Hilf5 - Hilf6
Locate 1 , 1
Lcd "M" ; Messwert ; "P" ; Phwert
Else
End If
If Taste = 15 Then 'wenn keine Taste gedrückt ist wird die Sperre wieder aufgehoben (0)
Sperre = 0
Else
End If
Toggle Portb.0 'test ob prozessor noch läuft
Waitms 50 'damit man auch ein blinken sieht
Loop
End
Für Eure Hilfe bin ich echt dankbar.
Gruß
Rolf
-
Erfahrener Benutzer
Fleißiges Mitglied
Kleiner Tipp:
Wird das LCD auch richtig initialisiert? 4 oder 8 Bit - Modus ?
Bernhard
-
Erfahrener Benutzer
Fleißiges Mitglied
Kontrastspannung eingestellt?
-
zur Initialisierung sollte es doch reichen wenn ich folgendes schreibe:
Config Lcd = 16 * 1 'Display
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Der Kontrast ist auch richtig eingestellt.
Manschmal nach einem Poweron bekomme ich alles "p" in der Anzeige.
Bei anderen kleinen Programmen konnte ich das Display so benutzen, wobei nur 8 Zeichen angezeigt wurden. Ich dachte das Diaplay sei defekt aber nun habe ich manschmal 16 "p"´s auf dem Display.
Ich glaube das ich einen grundsätzlichen Fehler mache.
Rolf
-
Hi!
schon mal Config mit zusätzlichen"a" probiert?
Config Lcd = 16 * 1a 'Display
Hat schon mal bei einigen Ihr im Forum geholfen.
Alles richtig verdrahtet?
mfg,MX3
-
Config Lcd = 16 * 1a
bringt leider auch keine Änderung
-
Erfahrener Benutzer
Fleißiges Mitglied
Wenn Du zuerst das Display mit Spannung versorgst und dann den µC
erst startest, wie sieht dann die Anzeige aus ?
Anfangs müsste in der oberen Zeile nur Karos zu sehen sein?
-
ich weis nicht genau warum, aber nachdem ich nun die einzelnen Portbits mit If Pinc.0 = 0 auslese, sehe ich auch eine Anzeige im LCD.
Was jedoch seltsam ist, manschmal habe ich alle 16 Zeichen und manschmal nur 8
Gruß
Rolf
-
Erfahrener Benutzer
Fleißiges Mitglied
>Was jedoch seltsam ist, manschmal habe ich alle 16 Zeichen und >manschmal nur 8
Fehler beim initialisieren des LCD, 2 Zeilken - Modus muss erst aktiviert werden.
Vielleicht stimmt eine Wartezeit nicht exakt, denn manche Initalisierungs-Befehle verlangen längere Wartezeiten, bis der nächste Befehl folgen darf
-
??? das Display hat doch nur eine Zeile ???
Mein Program läuft nun aber bei manschen Ausgaben sehe ich nur 8 Zeichen und bei anderen 16 (im gleichen Programm, kein neustart zwichendurch)
Welche Wartezeit muss ich wo einhalten?
Trotzdem DANKE, ich werde es auch noch lernen
Gruß
Rolf
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen