PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Timer und LCD-Ausgabe



MelMan
08.08.2008, 17:43
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

linux_80
08.08.2008, 18:14
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 !

MelMan
08.08.2008, 19:00
hab es auch schon mit integer versucht aber da ist das gleiche problem

for_ro
08.08.2008, 20:32
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

linux_80
08.08.2008, 23:45
Auch mal den Wert bei $hwstack erhöhen (mind. 40), der könnte nämlich etwas knapp werden bei ISR und Unterprogrammen :-k

MelMan
09.08.2008, 11:51
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

MelMan
10.08.2008, 15:05
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

Bauteiltöter
10.08.2008, 15:54
Hallo MelMan.

Beim KS0108 ist kein Zeichensatz integriert, man muss ihn im Programm einbinen, guck mal hier (https://www.roboternetz.de/phpBB2/viewtopic.php?t=41908) 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

MelMan
10.08.2008, 16:25
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% :-k .

Bauteiltöter
10.08.2008, 16:30
hm... jetzt weiß ich auch nicht weiter...

MelMan
10.08.2008, 16:51
habe auch immer den Error: Label not found [_LCD_CONTROL.
kann das was damit zutun haben? Habe schon gegoogelt und statt "lcd" "lcdat" vernwendet aber da tut sich nix