LCD zeigt nur ganz kurz an und ist wieder leer
Es ist, als wen man etwas an das LCD sendet und sofort CLS hinteher schickt...
Ich habe zum testen den Wait 3 sekunden befehl reingechrieben und nun blitzt der Text nur noch ganz kurz auf...
Was ist denn daran falsch?!
Tobias
Code:
$regfile = "m8def.dat" 'AT-Mega8
$crystal = 8000000 'Quarz: 8 MHz INTERN!!!
'$baud = 1200 'Baudrate der UART: 2400 Baud
'Konfiguration LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portd.6 , E = Portd.7 , Rs = Portb.0
Cursor Off Noblink ' Cursor aus
'Timer
'Config Portc = Input
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64 'FÜR PWM!!!
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 64 'FÜR PWM!!!
Config Timer0 = Timer, Prescale = 1024
On Timer0 Timer0
Const Timervorgabe = 61
Enable Timer0
Enable Interrupts
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddrb = &B11111111 '1 Ausgang, 0 Eingang = Pin PB7-0 als Ausgang
Ddrc = &B0000011 '1 Ausgang, 0 Eingang = Pin PC6-2 als Eingang; 1-0 als Ausgang
Ddrd = &B11111011 '1 Ausgang, 0 Eingang = Pin PD7-0 als Ausgang; 0 als Eingang (Freigabe)
'Portc = &B11111111 'PC0...PC7 auf High setzen
Portb.1 = 0 'damit der Motor nicht kurzzeitig anläuft
'-------------------------------------------------------------------------------
' Variablen
'-------------------------------------------------------------------------------
Dim Anzeige_z As Byte 'Zähler Anzeige
Dim Anzeige_auto As Bit
Dim Anzeige_hand As Bit
Dim Anzeige_e As Bit
Dim Analog_in1 As Word '=0-1023 vom Analogeingang
Dim S1 As Bit 'Schalter 1
Dim S2 As Bit 'Schalter 2
Dim S3 As Bit 'Schalter 3
Dim S3_m As Bit 'Schalter 3 MERKER
Dim Pro1 As Integer
Dim Pro2 As Single
Dim Proz As Integer
Dim Pwm1 As Single
Dim Pwm As Integer
Dim Taste_s1 As Byte
'Anzeige
'-------------------------------------------------------------------------------
'Programm:
'-------------------------------------------------------------------------------
'----------
'ANNIMATION
'----------
'----------------------------
Start Adc
Cls 'LCD löschen
Anzeige_auto = 1
Anzeige_hand = 0
Anzeige_e = 0
Do
Portb.5 = 1 'LCD Beleuchtung an
If Pinc.3 = 0 Then 'Schalter 1
S1 = 1
Else
S1 = 0
End If
If Pinc.4 = 0 Then 'Schalter 2
S2 = 1
Else
S2 = 0
End If
If Pinc.5 = 0 Then 'Schalter 3
S3 = 1
Else
S3 = 0
End If
Wait 3
'Analogeingänge auslesen:
'Analog_in1 = Getadc(1) 'Wert aus Analogeingang laden
'
'
''Umrechnung Eingang -> %
' Pro1 = Analog_in1 - 16 'Prozent1Wert analog 16-90 also -16 = 0-74
' Pro2 = Pro1 * 1.351 'Rechnen: 100% / max(74) = 1.351
' Proz = Round(pro2)
'
''Umrechnung % -> PWM
' Pwm1 = Proz * 2.55
' Pwm = Round(pwm1)
'
''Motorsteuerung
'If Pind.2 = 1 Then
'Compare1a = Pwm
'Else
'Compare1a = 0
'End If
'---ANZEIGE AUTO WÄHLEN ---------------------------------------
If Anzeige_hand = 1 And S1 = 1 And S2 = 0 And S3 = 0 Then
'Anzeige_auto = 1
'Anzeige_hand = 0
'Anzeige_e = 0
End If
'---ANZEIGE HAND WÄHLEN---------------------------------------
If Anzeige_auto = 1 And S3 = 1 And S2 = 0 And S1 = 0 Then
Anzeige_auto = 0
Anzeige_hand = 1
Anzeige_e = 0
End If
'---ANZEIGE "E" WÄHLEN---------------------------------------
If Taste_s1 => 120 And S2 = 0 And S3 = 0 Then 'ca. 3 Sekunden
Taste_s1 = 0
'Anzeige_auto = 0
'Anzeige_hand = 0
'Anzeige_e = 1
End If
Wait 3
'-------------------------------------------------------------
If Anzeige_z => 40 Then 'Wenn zähler voll, dann zur ausgewählten Anzeige gehen!
Anzeige_z = 0
If Anzeige_auto = 1 Then
Goto Anzeige_auto
End If
If Anzeige_hand = 1 Then
Goto Anzeige_hand
End If
If Anzeige_e = 1 Then
Goto Anzeige_e
End If
End If
Wait 3
'===RS232===
'Print "ANZEIGE_Z: " ; Anzeige_z , 'Zähler Anzeige
'Print "Anzeige_Auto: " ; Anzeige_auto ,
'Print "Anzeige_Hand: " ; Anzeige_hand ,
'Print "Anzeige_E: " ; Anzeige_e ,
'print "Analog in: " ; Analog_in1 , '=0-1023 vom Analogeingang
'Print "S1: " ; S1 , 'Schalter 1
'Print "S2: " ; S2 , 'Schalter 2
'Print "S3: " ; S3 , 'Schalter 3
'Print "S3_m: "; S3_m , 'Schalter 3 MERKER
'Print "Pro1: "; Pro1 ,
'Print "Pro2: " ; Pro2 ,
'Print "Proz: " ; Proz ,
'Print "PWM1: "; Pwm1 ,
'Print "PWM: "; Pwm ,
'Print "Taste_s1: " ; Taste_s1 ,
Loop
'-------------------------------------------------------------------------------
'Sprungmarken
'-------------------------------------------------------------------------------
Timer0: 'Timer1-Interruptroutine (40 x pro Sekunde)
Timer0 = Timervorgabe
Incr Anzeige_z
If S1 = 1 Then 'soll nur hochgezählt werden, wenn Taste links gedrückt
Incr Taste_s1
Else
S1 = 0
End If
Return
'------------------------------------------
Anzeige_auto:
Cls
Locate 1 , 1
Lcd "Drehzahl:"
Locate 1 , 11
Lcd Str(proz , "X") ; " %"
Locate 2 , 1
Lcd Str(s1 , "x")
Locate 2 , 2
Lcd Str(s2 , "x")
Locate 2 , 3
Lcd Str(s3 , "x")
Locate 2 , 6
Lcd ">AUTO<"
Locate 2 , 12
Lcd "Hand"
Locate 2 , 16
Lcd Str(anzeige_z , "x")
Return
'------------------------------------------
Anzeige_hand:
Cls
Locate 1 , 1
Lcd "Drehzahl:"
Locate 1 , 11
Lcd Str(proz , "X") ; " %"
Locate 2 , 1
Lcd "back"
Locate 2 , 8
Lcd "-"
Locate 2 , 14
Lcd "+"
Return
'------------------------------------------
Anzeige_e:
Cls
Locate 1 , 1
Lcd "Drehzahl:"
Locate 1 , 11
Lcd Str(proz , "X") ; " %"
Locate 2 , 1
Lcd Str(analog_in1 , "xxxx") ; "B"
Locate 2 , 7
Lcd Str(pwm , "x") ; "PWM"
Return