-
-
Erfahrener Benutzer
Roboter-Spezialist
Problem mit Timer und LCD-Ausgabe
Nabend zusammen,
Ich habe folgendes Problem: Habe ein 128*64 LCD an einem MEGA32. Hab verschiedene Menüs, die ich über einen Touchcontroller ansteuern kann. Das funktioniert soweit auch alles. Nun wollte ich eine Funktion einprogrammieren dass wenn nach 15 sek keine Bedienung/Eingabe über den Touchcontroller erfolgt, das Hauptmenu angezeit wird. Seit ich nun den Timer programmiert und verwendet habe, bekomme ich meine Menus immer total versetzt angezeigt (gebe die Menus mit Showpic aus) sodass man nichts mehr erkennen kann. Nehme ich den Timer wieder raus, läuft alles bestens. Weis da einer weiter? Hier mal Ausschnitte aus dem Programmcode:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
$lib "glcdKS108.lib"
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Portd , Ce = 2 , Ce2 = 3 , Cd = 4 , Rd = 5 , Reset = 7 , Enable = 6
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Timer1 = Timer , Prescale = 256
Stop Timer1
On Timer1 Cntfull
Enable Interrupts
Config Portb.0 = Output
Portb.0 = 1
Dim Beltimeist As Byte , Beltimesoll As Byte , Menutimeist As Byte , Menutimesoll As Byte
Dim Temp As Byte , X As Word , Y As Word
Dim Menu As Integer
Dim Nacht As Bit
Dim Menul As Integer
Start Adc
Print "Alles wird übertragen"
Showpic 0 , 0 , Mainmenu
Menu = 0
Menul = 0
Beltimesoll = 15
Beltimeist = 15
Menutimesoll = 15
Menutimeist = 15
Do
If X > 20 And Y > 20 Then : Beltimeist = Beltimesoll : Menutimeist = Menutimesoll : End If
If Beltimeist <= 0 Then : Portb.0 = 0 : End If
If Menutimeist <= 0 Then : Menu = 0 : Showpic 0 , 0 , Mainmenu : End If
If Menu <> 0 Then : Start Timer1 : Else : Stop Timer1 : End If
Select Case Menu
Case 0 : Gosub Menu0
Case 1 : Gosub Menu1
Case 2 : Select Case Menul
Case 0 : Gosub Menul0
Case 1 : Gosub Menul1
Case 2 : Gosub Menul2
Case 3 : Gosub Menul3
Case 4 : Gosub Menul4
End Select
Case 3 : Gosub Menu3
Case 4 : Gosub Menu4
Case 5 : Gosub Menu5
Case 6 : Gosub Menu6
Case 7 : Gosub Menu7
Case 8 : Gosub Menu8
Case 9 : Gosub Menu9
Case 10 : Gosub Menu10
Case 11 : Gosub Menu11
Case 12 : Gosub Menu12
End Select
Waitms 200
Loop
End
.
.
.
Cntfull:
Beltimeist = Beltimeist - 1
Menutimeist = Menutimeist - 1
Return
Mainmenu:
$bgf "mainmenu.bgf"
Musik:
$bgf "musik.bgf"
Musikplayer:
$bgf "Musik_player.bgf"
Musiknoconn:
$bgf "Musik_noconnection.bgf"
Steuerung:
$bgf "steuerung.bgf"
Steuerungl1:
$bgf "Steuerung_Lampe1.bgf"
Steuerungl2:
$bgf "Steuerung_Lampe2.bgf"
Steuerungl3:
$bgf "Steuerung_Lampe3.bgf"
Steuerungl4:
$bgf "Steuerung_Lampe4.bgf"
Pccontrol:
$bgf "PCControl.bgf"
Einstellungen:
$bgf "Einstellungen.bgf"
Einstellungen_beltime:
$bgf "Einstellungen_Beltime.bgf"
Einstellungen_kontrast:
$bgf "Einstellungen_Kontrast.bgf"
Einstellungen_menutime:
$bgf "Einstellungen_Menutime.bgf"
Einstellungen_nachts_aus:
$bgf "Einstellungen_Nachts_Aus.bgf"
Einstellungen_nachts_ein:
$bgf "Einstellungen_Nachts_Ein.bgf"
Einstellungen_nachts_eingabe_bis:
$bgf "Einstellungen_Nachts_Eingabe_Bis.bgf"
Einstellungen_nachts_eingabe_von:
$bgf "Einstellungen_Nachts_Eingabe_Von.bgf"
mfg mel
EDIT: x und y sind die übertragenen Koordinaten vom Touchcontroller
-
Erfahrener Benutzer
Robotik Einstein
Hallo,
was mir auffällt, Du verwendest Byte, und frägst die nach <0 ab, das kann aber nie passieren, denn wenn man von 0 eins abzieht kommt bei Byte 255 raus !
-
Erfahrener Benutzer
Roboter-Spezialist
hab es auch schon mit integer versucht aber da ist das gleiche problem
-
Erfahrener Benutzer
Roboter Genie
Hallo mel,
ich denke, dass dir der Timer Interrupt in die Ausgabe der Bilder dazwischen funkt. Dann kommt das Timing des LCDs durcheinander.
Schreib mal testweise so:
Disable Interrupts
Select Case Menu
.
.
.
End Select
Enable Interrupts
Waitms 200
Wenn es dann funzt, solltest du die Do...Loop etwas ändern.
Gruß
Rolf
-
Erfahrener Benutzer
Robotik Einstein
Auch mal den Wert bei $hwstack erhöhen (mind. 40), der könnte nämlich etwas knapp werden bei ISR und Unterprogrammen
-
Erfahrener Benutzer
Roboter-Spezialist
Hey super danke @ linux_80 und for_ro hab es nach euren Vorschlägen geändert und funktioniert einwandfrei. Da ist das Wochenende doch geretten. Vielen dank noch mal
Mfg
-
Erfahrener Benutzer
Roboter-Spezialist
sry ich bins nochmal habe noch ein problem. über showpic kann ich ohne probleme bilder darstellen. nun möchte ich aber einen einfachen text auf dem display ausgeben aber das display zeigt einfach nix an. und da ich ja bilder anzeigen kann denke ich nicht dass das display defekt ist oder?
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
$lib "glcdKS108.lib"
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Portd , Ce = 2 , Ce2 = 3 , Cd = 4 , Rd = 5 , Reset = 7 , Enable = 6
Locate 8 , 32
Lcd "Hallo"
das ist der code aber es tut sich nix. hab schon alles mögliche ausprobiert...kann mir da einer helfen?
mfg
-
Erfahrener Benutzer
Fleißiges Mitglied
Hallo MelMan.
Beim KS0108 ist kein Zeichensatz integriert, man muss ihn im Programm einbinen, guck mal hier und in der Bascom-Hilfe unter SETFONT.
Ich habe noch eine Frage: Du hast doch die Bascom-vollversion, oder? Bei den ganzen BGFs die du einbindest... un ich habe schon probleme wenn ich 2 Fonts einbinde...
MfG Bauteiltöter
-
Erfahrener Benutzer
Roboter-Spezialist
Hey Bauteiltöter
Danke erst mal für die Antwort. Das mit dem Setfont hab ich gemacht, jetzt bekomme ich schon mal Buchstaben aufs Display aber leider nicht die, die ich ausgebe. Jetzt wird das ganze Display mit "jk" beschrieben. Habe die font8x8 verwendet.
Zu deiner anderen Frage: Ja hab die Vollversion. Das Problem ist echt der Speicher für die Bilder die rauben mir ca. 60% .
-
Erfahrener Benutzer
Fleißiges Mitglied
hm... jetzt weiß ich auch nicht weiter...
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen