- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 8 von 8

Thema: Anzeige Menü mit Unterpunkten auf LCD?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2004
    Alter
    55
    Beiträge
    11

    Anzeige Menü mit Unterpunkten auf LCD?

    Anzeige

    Powerstation Test
    Hallo,
    seid kurzem beschäftige ich mich mit AVR’s. Bei meiner Suche nach einer leicht erlernbaren Programmiersprache bin ich auf Bascon gestoßen. Habe mir auch sofort Fachliteratur von Kühnel und Walter gekauft und arbeite diese gerade durch.
    Habe aber einer Frage an Euch. Sie bezieht sich auf mein späteres Projekt, welches übrigens der ausschlaggebende Faktor gewesen ist das ich mich mit AVR etc. beschäftige.
    Ich habe später vor mit dem Atmega 32 und einem (G)LCD eine Art „Überwachung“ für meine RC-Autos zu bauen. Dazu möchte ich mir eine Art „Menü“ auf dem Display anzeigen lassen.
    Warum Menü? Nun ich fahre unterschiedliche Antriebszahnräder, Reifengrößen und manchmal auch andere Verbrennermotoren. Damit ich nicht ständig auf einen Computer angewiesen bin, kam mir die Idee mit dem Menü in dem man über Taster „Festwert“ eingeben kann.
    Vorgestellt hatte ich mir das so, das der Atmega nach dem einschalten eine Abfrage startet ob „Festwerte“ im Menü eingetragen sind, wenn nicht erscheint das Menü „Basiswerte“ mit den Unterpunkten die eingetragen werden müssen. Diese Werte werden später zur Berechnung verwendet.
    Leider finde ich im Web nichts, in dem erklärt wird wie ich so ein Menü erstellen kann. Hoffe ihr könnt mir weiterhelfen.
    Danke

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Stichworte:
    ReadEEProm, Tastenabfrage, Case-Befehl, usw.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Hier ein paar Ausschnitte aus einem Code von mir.

    Code:
    Menü:
    Zeit = 0                                                    'anzeige der Zeit verhindern.
    
    Cls
    Locate 1 , 9
    Lcd "Menõ"
    Lowerline
    Lcd "--------------------"
    Thirdline
    Lcd "1. Datum & Zeit"
    Fourthline
    Lcd "2. Hintergrundbel."
    
    Waitms 300                                                  'alte FB-Taste ignorieren
    
    Do
     Gosub Getir
      If Command = 0 Then Goto Pc_aus
      If Command = 1 Then Goto Menü11
      If Command = 2 Then Goto Menü2
    Loop
    
     Menü11:
     Cls
     Locate 1 , 9
     Lcd "Menõ"
     Lowerline
     Lcd "--------------------"
     Thirdline
     Lcd "1. Zeit stellen     "
     Fourthline
     Lcd "2. Timer stellen   "
     Do
      Gosub Getir
       If Command = 0 Then Goto Menü
       If Command = 1 Then Gosub Zeit_stellen
       If Command = 2 Then
        A = 1
        Goto Timer_stellen
       End If
     Loop
    
      Zeit_stellen:
      Cls
      Lcd "    Zeit stellen"
      Lowerline
      Lcd "Bitte Datum und"
      Thirdline
      Lcd "Uhrzeit eingeben"
      Fourthline
      Lcd "  --.--.20--  --:--"
      Cursor Blink
    
      Do
      Locate 4 , 3
      Do
       Gosub Getir                                              'Tag stellen
      Loop Until Command < 10
      Lcd Command
      A = Command * 10
      Waitms 200
      Locate 4 , 4
      Do
       Gosub Getir
      Loop Until Command < 10
      Lcd Command
      B = Command
      Tag = A + B
      Loop Until Tag < 32
    
      Do
      Waitms 200
      Locate 4 , 6
      Do
       Gosub Getir                                              'Monat stellen
      Loop Until Command < 10
      Lcd Command
      A = Command * 10
      Waitms 200
      Locate 4 , 7
      Do
       Gosub Getir
      Loop Until Command < 10
      Lcd Command
      B = Command
      Monat = A + B
      Loop Until Monat < 13
    
      Waitms 200
      Locate 4 , 11
      Do
       Gosub Getir                                              'Jahr stellen
      Loop Until Command < 10
      Lcd Command
      A = Command * 10
      Waitms 200
      Locate 4 , 12
      Do
       Gosub Getir
      Loop Until Command < 10
      Lcd Command
      B = Command
      Jahr = A + B
      Writeeeprom Jahr , 8
    
      Do
      Waitms 200
      Locate 4 , 15
      Do
       Gosub Getir                                              'Stunden stellen
      Loop Until Command < 10
      Lcd Command
      A = Command * 10
      Waitms 200
      Locate 4 , 16
      Do
       Gosub Getir
      Loop Until Command < 10
      Lcd Command
      B = Command
      Stunden = A + B
      Loop Until Stunden < 24
    
      Do
      Waitms 200
      Locate 4 , 18
      Do
       Gosub Getir                                              'Minuten stellen
      Loop Until Command < 10
      Lcd Command
      A = Command * 10
      Waitms 200
      Locate 4 , 19
      Do
       Gosub Getir
      Loop Until Command < 10
      Lcd Command
      B = Command
      Minuten = A + B
      Loop Until Minuten < 60
    
      Sekunden = 0                                              'nach letzter Eingabe Sekunden wieder auf 0 setzen
    
      Cursor Off
      Cursor Noblink
    
      Jahr2 = Str(jahr)
      Tag2 = Str(tag)
      Monat2 = Str(monat)
      Tag2 = Format(tag2 , "00")
      Monat2 = Format(monat2 , "00")
    
      Waitms 1000
      Return
    
    
    Getir:                                                      'IR-Code empfangen und auswerten
    
     Getrc5(adress , Command)
     If Adress <> Fbcode Then Command = 127                     'Command für falsche Adresse setzen damit nicht auf andere FB reagiert wird
     If Command > 127 Then Command = Command - 128              'Togglebit einfernen
    
    Return
    
    Modus:
    
       Cls
       Lcd "  Modus der HGB"
       Lowerline
       Lcd "--------------------"
       Thirdline
       Lcd "1. wenn PC an"
       Fourthline
       Lcd "2. wenn PC aus"
    
       Waitms 200
    
       Do
        Gosub Getir
        If Command = 0 Then Return
        If Command = 1 Then Gosub Modus_an
        If Command = 2 Then Gosub Modus_aus
       Loop
    
    
        Modus_an:
    
        Cls
        Lcd "1. Lightcontrol"                                   '15 zeichen
        Lowerline
        Lcd "2. dauerhaft"                                      '12 Zeichen
        Thirdline
        Lcd "3. dimmer"                                         '9 zeichen
        Fourthline
        Lcd "4. Schwellwert"                                    '14 Zeichen
    
        Waitms 300
    
        Do
    
         Locate 1 , 17
         If Lightcontrol = 1 Then
          Lcd " Ja "
          Else
          Lcd "Nein"
         End If
    
         Locate 2 , 17
         If Pwmandauer = 1 Then
          Lcd "An "
          Else
          Lcd "Aus"
         End If
    
         Locate 3 , 19
         If Pwmandimmer = 1 Then
          Lcd "*"
          Else
          Lcd " "
         End If
    
         Locate 4 , 19
         If Pwmanschwell = 1 Then
          Lcd "*"
          Else
          Lcd " "
         End If
    
         Gosub Getir
    
         Select Case Command
         Case 0 : Return
         Case 1 : Toggle Lightcontrol
         Case 2 : Toggle Pwmandauer
         Case 3 : Toggle Pwmandimmer
         Case 4 : Toggle Pwmanschwell
         End Select
         Waitms 100
    
        Loop
    
    
    
    
        Modus_aus:
    
    
            Cls
        Lcd "1. dauerhaft"
        Lowerline
        Lcd "2. dimmer"
        Thirdline
        Lcd "3. Schwellwert"
    
        Waitms 300
    
        Do
    
         Locate 1 , 17
         If Pwmausdauer = 1 Then
          Lcd "An "
          Else
          Lcd "Aus"
         End If
    
         Locate 2 , 19
         If Pwmausdimmer = 1 Then
          Lcd "*"
          Else
          Lcd " "
         End If
    
         Locate 3 , 19
         If Pwmausschwell = 1 Then
          Lcd "*"
          Else
          Lcd " "
         End If
    
         Gosub Getir
    
         Select Case Command
         Case 0 : Return
         Case 1 : Toggle Pwmausdauer
         Case 2 : Toggle Pwmausdimmer
         Case 3 : Toggle Pwmausschwell
         End Select
    
         Waitms 100
    
        Loop
    
    
      Minhell:
    
      Cls
      Waitms 200
    
      Lowerline
      Lcd "Mit '1' speichern"
      Thirdline
      Lcd "mit '0' zurück"
    
      Do
    
       Upperline
       A = Getadc(0)
       B = A / 4
       Lcd B
    
       Gosub Getir
       If Command = 0 Then Return
       If Command = 1 Then
        Minhell = B
        Writeeeprom Minhell , 2
       End If
    
      Loop
    
    
      Maxhell:
      Cls
      Waitms 200
    
      Lowerline
      Lcd "Mit '1' speichern"
      Thirdline
      Lcd "mit '0' zurück"
    
      Do
    
       Upperline
       A = Getadc(0)
       B = A / 4
       Lcd B
    
       Gosub Getir
       If Command = 0 Then Return
       If Command = 1 Then
        Maxhell = B
        Writeeeprom Maxhell , 4
       End If
    
      Loop
    
    
       Hgb:
       Cls
       Lcd "     HGB"
       Lowerline
       Lcd "--------------------"
       Thirdline
       Lcd "1. min. Wert"
       Fourthline
       Lcd "2. max. Wert"
    
       Waitms 200
       Do
        Gosub Getir
        If Command = 0 Then Return
        If Command = 1 Then Gosub Hgbmin
        If Command = 2 Then Gosub Hgbmax
       Loop
    
    
        Hgbmin:
        Ocr2 = 0
        A = 0
    
        Cls
        Lowerline
        Lcd "7 = -     9 = +"
        Thirdline
        Lcd "1 = speichern"
        Fourthline
        Lcd "0 = zurück"
    
        Waitms 200
    
        Do
         Gosub Getir
         If Command = 0 Then Return
         If Command = 1 Then
          Pwmmin = A
          Writeeeprom Pwmmin , 100
         End If
         If Command = 7 Then A = A - 5
         If Command = 9 Then A = A + 5
         If A < 0 Then A = 0
         If A > 250 Then A = 250
         Ocr2 = A
         Upperline
         Lcd A ; "    "
        Loop
    
    
        Hgbmax:
        Ocr2 = 250
        A = 250
    
        Cls
        Lowerline
        Lcd "7 = -     9 = +"
        Thirdline
        Lcd "1 = speichern"
        Fourthline
        Lcd "0 = zurück"
    
        Waitms 200
    
        Do
         Gosub Getir
         If Command = 0 Then Return
         If Command = 1 Then
          Pwmmax = A
          Writeeeprom Pwmmax , 100
         End If
         If Command = 7 Then A = A - 5
         If Command = 9 Then A = A + 5
         If A < 0 Then A = 0
         If A > 250 Then A = 250
         Ocr2 = A
         Upperline
         Lcd A ; "   "
        Loop
    
    
    Savecode:
    Zeit = 0                                                    'anzeigen der Zeit (Sekunden) verhindern.
    Cls
     Lcd "Bitte eine Taste auf"
     Lowerline
     Lcd "der Fernbedienung"
     Thirdline
     Lcd "dr" ; Chr(245) ; "cken..."
    
     Do
      Getrc5(adress , Command)
      If Adress = 255 Then Loop                                 'wenn nix gedrückt, dann nochmal abfragen
     Writeeeprom Adress , 1
     Cls
     Lcd "Code gespeichert..."
     Fbcode = Adress
     Waitms 1000
     Cls
     Return           
    
    
    Timeroffset:                                                'Vor- und Nachlauf der Uhr kompensieren
    
    Zeit = 0
    Cls
    Lcd "     ACHTUNG!!!"
    Lowerline
    Lcd "Bedienungsanleitung"
    Thirdline
    Lcd "beachten!"
    Waitms 150
    
    Do
     Gosub Getir
    Loop Until Command < 127                                    'erst wenn eine Taste gedrückt wurde weiter machen
    If Command <> 5 Then Goto Pc_aus                            'nur bei "5" weiter machen
    Cls
    Lcd "Wert eingeben:"
    Lowerline
    Lcd "Sollwert: 18661"
    Thirdline
    Lcd "Istwert: " ; Timervorgabe
    Fourthline
    Lcd "-----"
    Cursor On
    Cursor Blink
    
    F = 1 : A = 10000 : C = 0
    Waitms 250
    Do
     Locate 4 , F
     Do
      Gosub Getir
      Loop Until Command < 10
     Lcd Command
     Waitms 250
     B = A * Command
     C = C + B
     A = A / 10
    
     Incr F
    
    Loop Until F = 6
    
    Cursor Off
    Cursor Noblink
    Waitms 1000
    
    Timervorgabe = C
    Writeeeprom Timervorgabe , 106
    
    Goto ...
    PS: (C) by Marco78!!!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2004
    Alter
    55
    Beiträge
    11
    Hallo ihr beiden,
    möchte mich vorab schon einmal bei Euch bedanken.
    Naja, als ich den Ausschnitt von deinem Code gelesen habe, stellt ich mit erschrecken fest das ich nocvh einen sehr weiten weg in sachen Programmieren vor mir habe.
    Hast du das in Bascom geschrieben? Wie sieht das Ergebniss auf einem LCD aus. Könntest du vielleicht mal ein Bild hier rein stellen?
    Danke

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ja, das ist mit Bascom.

    Fotos sind z.Zt. schlecht. Ich habe grade ein gLCD am "Testboard".
    Aber ich werde den Code mal dort einfügen wenn ich Zeit habe. Es sieht dann nur etwas verloren aus wenn 4 Zeilen auf 240*128 Punkten dargestellt werden.

    Im Code habe ich ja noch einige Subroutinen mit drin. Die sind speziell für's Menü ja nicht nötig.
    Du kannst den Code ja auch auf deinem AVR aufspielen und schauen wie es aussieht.

    Im Prinzip ist das ganze ja auch nicht soo schwer wie es aussehen mag.
    Zuerst die Menüpunkte auf's Display schreiben.
    Dann eine Abfrageroutine einbauen. Und ja nachdem was man auswählt muss in ein SUB gesprungen werden.
    Das könnte dann wie z.T. bei mir ein weiteres Untermenü sein.

    Die Abfrage passiert bei mir mit einer RC5-Fernbedienung.
    Im Code ist auch ein für dich ein evtl weiterer hilfreicher Teil mit drin. Das speichern von Einstellungen im EEPROM.

    Noch ein Tipp:
    Wenn du ein Text-LCD nimmst, kannst du anstelle von LOCATE 1,X usw Firstline, Lowerline, Thirdline und Fourthline verwenden. Damit wird der Code kleiner.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2004
    Alter
    55
    Beiträge
    11
    Meine güte wenn das Bascom ist dann habe ich ja noch einiges vor mir. In dem Buch von Walter (AVR Mikrocontroller Lehrbuch) kommt das bis jetzt noch nicht vor. Gut ist ein Buch für Leute wie mich, Einsteiger.
    Das mit dem Menü auf deinem GLCD darstellen klingt sehr interessant.
    Wie gibst du Daten(Werte) ein und speicherst du sie auf einem externen EEprom?
    Ich hatte mir überlegt das ich max. 4 Taster zur Menüführung und Eingabe (Werte) verwenden kann.
    Du schreibst etwas von RC5. Was genau machst du mit dem Programm?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    RC5 ist einfach nur einer von vielen Code für Fernbedienungen.
    Das schöne dran ist, das Bascom für das Auswerten der IR-Signale eine feste Routine hat.
    Schau in der Hilfe mal nach GETRC5.

    Die Zeit z.B. wird mit den Ziffern eingestellt. Den Menüpunkten habe ich auch Ziffern gegeben, auf die reagiert wird.
    Das ganze wäre aber auch mit Tastern möglich!

    Die Werte werden im internen EEPROM des Mega16 gespeichert. Ich denke, der wird für dich auch erstmal reichen. Der Mega16 hat 512Byte EEPROM und der Mega32 sogar 1024.
    Wenn es nur um ein paar Einstellungen geht reicht das sicherlich.
    Ein externen EEPROM kostet ja auch Geld und nimmt Platz weg

    Ich selbst bezeichne mich auch noch als Einsteiger.
    Ich habe zwar schon vor ein paar Monaten mit AVR'S angefangen aber noch nicht soviel Zeit gehabt mich damit zu beschäftigen. Andere hier sitzen da sicherlich fast jeden Tag/Abend dran.

    Ich bin aber mit Basic aufgewachsen (hab damit vor etwa 15 Jahren angefangen) von daher fällt es mir relativ leicht das alles nachzuvollziehen.

    Bücher habe ich mir auch zwei gekauft. Das eine war im Prinzip Müll, aber ist schön wenn man es mal zur Hand hat. Aber wenn nicht, ist es auch nicht schlimm.
    Das andere hat schon etwas mehr geholfen. Aber man schaut es sich auch nur einmal an und dann evtl nochmal wenn was unklar war.
    Vieles lernt man am besten in der Praxis.
    Vor allem treten da Probleme auf, die man beim Lesen noch garnicht erahnen konnte.

    Was ich mit dem Programm mache: Eine lange Geschichte, die auch noch nicht zuende ist...
    Wenn es fertig ist und alles so funktioniert wie es soll, werde ich es hier auch vorstellen für den Fall das es jemand gebrauchen kann. Aber das wird bei der Zeit die ich im Moment habe noch einige Monate dauern.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2004
    Alter
    55
    Beiträge
    11
    So, habe erst einmal meine beiden Beiträge in denen ich Fachbücher erwähne editiert. Grund dafür war das ich Tampert und Walter verwechselt habe. Wieso? Weis ich leider auch nicht.

    Ich beschäftige mich gerade mal zwei Wochen mit dem Thema Bascom und AVR, soweit es meine Zeit erlaubt.
    Bascom habe ich noch nicht auf meinem Comp. installiert. Grund dafür ist das ich hier oben zurzeit keine Hardware (AVR's u.s.w.) habe doch sobald ich Urlaub habe und wieder in GE bin packe ich alles ein was ich an Elektronik habe und nehme es mit hoch. Habe dann hoffentlich abends öfters Zeit um auch mal praktisch etwas zu machen. Na ja zumindest sobald ich den ISP gebaut habe. Irgendwie freue ich mich schon drauf die Beispiele mit dem Atmega 8 aus dem Walter Buch nach zu machen und wenn ich mal Problem habe weis ich ein tolles Forum in dem mir sicherlich schnell geholfen wird.
    Danke noch mal für eure Hilfe.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad