Menü für LCD Realisieren

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

Von Sam am 24.10.2010 18:00

Das wird gerade die einzige Möglichkeit sein.

Von Hotzenplotz am 24.10.2010 18:25

Mit Deinem letzten Code gibt es bei mir auch keine Fehler. Flashen mag ich das aber jetzt nicht, weil ich keine Lust habe ein LCD umzuloeten.

Von Sam am 24.10.2010 19:16

Rein theoretisch könnte man versuchen, den Befehl mit Assembler zu setzen. Allerdings habe ich davon keine Ahnung.

Von Hotzenplotz am 24.10.2010 19:39

Halte ich fuer unnoetig.
Man muesste erst einmal herausfinden, ob der Fehler im Code oder an seinem Compiler / Einstellungen liegt. Und da kann ich bei BASCOM nicht mitreden. Ich habe es installiert, Quelltext eingefuegt, abegespeichert, compiliert. Ging ohne Fehler.

Von Sam am 24.10.2010 20:27

Er könnte auch versuchen, ob es nach einer Neuinstallation funktioniert.

Von modellfreund am 25.10.2010 17:03

Hallo,

die Neuinstallation war der Schlüssel zum Erfolg.

Der Code funktioniert auch fast, außer das bei der Funktion "LCD-Beleuchtung" [Ein] die Hintergrundbeleuchtung auch nach 5 Sekunden ausgeht.

Außerdem ist mir anhand der Status Led aufgefallen, dass das Programm öfters mal sehr lange braucht ehe es wieder reagiert. Es hängt sich also regelrecht auf. Das merkt man auch daran, dass man dann Drücken kann wo man will, es passiert aber nichts.

LG Felix

Von Sam am 25.10.2010 17:27

Probier's mal so:

Code:
$regfile = "M8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100


Mcucr = &B00001010
Gicr = &B11000000
Sreg.7 = 1

Taster_1 Alias Pind.2       'grau
Config Taster_1 = Input
Portd.2 = 1

Taster_2 Alias Pind.3       'grau
Config Taster_2 = Input
Portd.3 = 1

Taster_3 Alias Pind.4       'orange
Config Taster_3 = Input
Portd.4 = 1

Melder_1 Alias Pinb.4       '10 cm
Config Melder_1 = Input
Portb.4 = 1

Melder_2 Alias Pinb.3       '10 cm
Config Melder_2 = Input
Portb.3 = 1

Melder_3 Alias Pinb.2       '10 cm
Config Melder_3 = Input
Portb.2 = 1

Melder_4 Alias Pinb.1       '10 cm
Config Melder_4 = Input
Portb.1 = 1


Led_1 Alias Portc.4       'rot
Config Led_1 = Output

Led_2 Alias Portc.5       'gelb
Config Led_2 = Output

Led_3 Alias Portc.3       'grün
Config Led_3 = Output

Led_4 Alias Portc.2       'rot
Config Led_4 = Output

Led_5 Alias Portc.1       'gelb
Config Led_5 = Output

Led_6 Alias Portc.0       'grün
Config Led_6 = Output

Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , _
Db7 = Portb.0 , E = Portd.1 , Rs = Portd.0
Config Lcd = 16 * 2
Config Lcdbus = 4
Waitms 200
Cls
Locate 1 , 1
Lcd "Willkommen      "
Wait 1
Cls
Locate 1 , 1
Lcd "Warte auf Befehl"

Enable Timer1
Config Timer1 = Timer , Prescale = 64
On Timer1 Beleuchtung_aus



Dim Menuepunkt As Byte
Dim Umstellen As Byte
Dim Wasserstand As Byte
Dim Batterie As Byte
Dim Pumpe As Byte
Dim Alarm As Byte
Dim Automatik As Byte
Dim Beleuchtung As Byte

Enable Interrupts

On Int0 Menuepunkt
On Int1 Umstellen

Pumpe = 1
Alarm = 2
Automatik = 1
Beleuchtung = 3


If Beleuchtung = 2 Then
   Led_6 = 1
Else
   Led_6 = 0
End If

Do

Toggle Led_1
Waitms 50
Toggle Led_1
Wait 1

Loop
End


Menuepunkt:

   If Beleuchtung = 3 then
      Timer1 = 0
      Led_6 = 1
      Start Timer1
   end if

   Incr Menuepunkt
   If Menuepunkt > 6 Then Menuepunkt = 1
   Select Case Menuepunkt
      Case 1:
         Cls
         Locate 1 , 1
         Lcd "Wasserstand:    "

      Case 2:
        Cls
         Locate 1 , 1
         Lcd "Batteriezustand:"

      Case 3:
         Cls
         Locate 1 , 1
         Lcd "Pumpe:          "

      Case 4:
         Cls
         Locate 1 , 1
         Lcd "Alarm:          "

      Case 5:
         Cls
         Locate 1 , 1
         Lcd "Automatik:      "

      Case 6:
         Cls
         Locate 1 , 1
         Lcd "LCD-Beleuchtung:"

   End Select

   Gosub Anzeigen
Return



Umstellen:

   If Beleuchtung = 3 then
      Timer1 = 0
      Led_6 = 1
      Start Timer1
   end if

   Select Case Menuepunkt
      Case 3
         Incr Pumpe
         If Pumpe > 2 Then Pumpe = 1
      Case 4
         Incr Alarm
         If Alarm > 2 Then Alarm = 1
      Case 5
         Incr Automatik
         If Automatik > 2 Then Automatik = 1
      Case 6
         Incr Beleuchtung
         If Beleuchtung > 3 Then Beleuchtung = 1
   End Select

   Gosub Anzeigen

Return

Anzeigen:

If Pumpe = 1 And Menuepunkt = 3 Then
   Locate 2 , 1
   Lcd "[Aus] /  Ein    "
End If

If Pumpe = 2 And Menuepunkt = 3 Then
   Locate 2 , 1
   Lcd " Aus  / [Ein]   "
End If



If Alarm = 1 And Menuepunkt = 4 Then
   Locate 2 , 1
   Lcd "[Aus] /  Ein    "
End If

If Alarm = 2 And Menuepunkt = 4 Then
   Locate 2 , 1
   Lcd " Aus  / [Ein]   "
End If


If Automatik = 1 And Menuepunkt = 5 Then
   Locate 2 , 1
   Lcd "[Aus] /  Ein    "
End If

If Automatik = 2 And Menuepunkt = 5 Then
   Locate 2 , 1
   Lcd " Aus  / [Ein]   "
End If


If Beleuchtung = 1 And Menuepunkt = 6 Then
   Locate 2 , 1
   Lcd "[Aus]/Ein/Auto  "
   Led_6 = 0
End If

If Beleuchtung = 2 And Menuepunkt = 6 Then
   Locate 2 , 1
   Lcd "Aus/[Ein]/Auto  "
   Led_6 = 1
End If

If Beleuchtung = 3 And Menuepunkt = 6 Then
   Locate 2 , 1
   Lcd "Aus/Ein/[Auto]  "
   Timer1 = 0
   Led_6 = 1
   Start Timer1
End If

Return

beleuchtung_aus:
Stop Timer1
Wait 5
Led_6 = 0
Return


Hab ich leider vergessen.

Von modellfreund am 25.10.2010 17:43

Die Beleuchtung funktioniert, aber wieso bleibt der µC mitten im Programm stehen und läuft dann erst nach einer paar Sekunden weiter?

Edit: Beleuchtung funktioniert immer noch nicht.

Von Sam am 25.10.2010 17:49

Nächster Versuch:

Code:
$regfile = "M8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100


Mcucr = &B00001010
Gicr = &B11000000
Sreg.7 = 1

Taster_1 Alias Pind.2       'grau
Config Taster_1 = Input
Portd.2 = 1

Taster_2 Alias Pind.3       'grau
Config Taster_2 = Input
Portd.3 = 1

Taster_3 Alias Pind.4       'orange
Config Taster_3 = Input
Portd.4 = 1

Melder_1 Alias Pinb.4       '10 cm
Config Melder_1 = Input
Portb.4 = 1

Melder_2 Alias Pinb.3       '10 cm
Config Melder_2 = Input
Portb.3 = 1

Melder_3 Alias Pinb.2       '10 cm
Config Melder_3 = Input
Portb.2 = 1

Melder_4 Alias Pinb.1       '10 cm
Config Melder_4 = Input
Portb.1 = 1


Led_1 Alias Portc.4       'rot
Config Led_1 = Output

Led_2 Alias Portc.5       'gelb
Config Led_2 = Output

Led_3 Alias Portc.3       'grün
Config Led_3 = Output

Led_4 Alias Portc.2       'rot
Config Led_4 = Output

Led_5 Alias Portc.1       'gelb
Config Led_5 = Output

Led_6 Alias Portc.0       'grün
Config Led_6 = Output

Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , _
Db7 = Portb.0 , E = Portd.1 , Rs = Portd.0
Config Lcd = 16 * 2
Config Lcdbus = 4
Waitms 200
Cls
Locate 1 , 1
Lcd "Willkommen      "
Wait 1
Cls
Locate 1 , 1
Lcd "Warte auf Befehl"

Enable Timer1
Config Timer1 = Timer , Prescale = 64
On Timer1 Beleuchtung_aus



Dim Menuepunkt As Byte
Dim Umstellen As Byte
Dim Wasserstand As Byte
Dim Batterie As Byte
Dim Pumpe As Byte
Dim Alarm As Byte
Dim Automatik As Byte
Dim Beleuchtung As Byte

Enable Interrupts

On Int0 Menuepunkt
On Int1 Umstellen

Pumpe = 1
Alarm = 2
Automatik = 1
Beleuchtung = 3


If Beleuchtung = 2 Then
   Led_6 = 1
Else
   Led_6 = 0
End If

Do

Toggle Led_1
Waitms 50
Toggle Led_1
Wait 1

Loop
End


Menuepunkt:

   If Beleuchtung = 3 then
      Timer1 = 0
      Led_6 = 1
      Start Timer1
   end if

   Incr Menuepunkt
   If Menuepunkt > 6 Then Menuepunkt = 1
   Select Case Menuepunkt
      Case 1:
         Cls
         Locate 1 , 1
         Lcd "Wasserstand:    "

      Case 2:
        Cls
         Locate 1 , 1
         Lcd "Batteriezustand:"

      Case 3:
         Cls
         Locate 1 , 1
         Lcd "Pumpe:          "

      Case 4:
         Cls
         Locate 1 , 1
         Lcd "Alarm:          "

      Case 5:
         Cls
         Locate 1 , 1
         Lcd "Automatik:      "

      Case 6:
         Cls
         Locate 1 , 1
         Lcd "LCD-Beleuchtung:"

   End Select

   Gosub Anzeigen
Return



Umstellen:

   If Beleuchtung = 3 then
      Timer1 = 0
      Led_6 = 1
      Start Timer1
   end if

   Select Case Menuepunkt
      Case 3
         Incr Pumpe
         If Pumpe > 2 Then Pumpe = 1
      Case 4
         Incr Alarm
         If Alarm > 2 Then Alarm = 1
      Case 5
         Incr Automatik
         If Automatik > 2 Then Automatik = 1
      Case 6
         Incr Beleuchtung
         If Beleuchtung > 3 Then Beleuchtung = 1
   End Select

   Gosub Anzeigen

Return

Anzeigen:

If Pumpe = 1 And Menuepunkt = 3 Then
   Locate 2 , 1
   Lcd "[Aus] /  Ein    "
End If

If Pumpe = 2 And Menuepunkt = 3 Then
   Locate 2 , 1
   Lcd " Aus  / [Ein]   "
End If



If Alarm = 1 And Menuepunkt = 4 Then
   Locate 2 , 1
   Lcd "[Aus] /  Ein    "
End If

If Alarm = 2 And Menuepunkt = 4 Then
   Locate 2 , 1
   Lcd " Aus  / [Ein]   "
End If


If Automatik = 1 And Menuepunkt = 5 Then
   Locate 2 , 1
   Lcd "[Aus] /  Ein    "
End If

If Automatik = 2 And Menuepunkt = 5 Then
   Locate 2 , 1
   Lcd " Aus  / [Ein]   "
End If


If Beleuchtung = 1 And Menuepunkt = 6 Then
   Locate 2 , 1
   Lcd "[Aus]/Ein/Auto  "
   Led_6 = 0
End If

If Beleuchtung = 2 And Menuepunkt = 6 Then
   Locate 2 , 1
   Lcd "Aus/[Ein]/Auto  "
   Led_6 = 1
End If

If Beleuchtung = 3 And Menuepunkt = 6 Then
   Locate 2 , 1
   Lcd "Aus/Ein/[Auto]  "
   Timer1 = 0
   Led_6 = 1
   Start Timer1
End If

Return

beleuchtung_aus:
Stop Timer1
Wait 5
Led_6 = 0
Return

Von modellfreund am 25.10.2010 17:58

Also, die Funktion Beleuchtung dauerhaft Ein funktioniert immer noch nicht.

Und das Problem mit der Unterbrechung ist auch nicht weg. Es ist so, dass wenn ich einen der beiden Taster 5 Sekunden nicht betätige, sich innerhalb der nächsten 5 Sekunden auch keine Reaktion zeigt. Danach funktioniert wieder alles.... usw. (das Problem ist nach jeder Eingabe erneut)