Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche Hilfe bei Variablen und Anwengung mit LCD
Nubbidubi
02.01.2009, 20:38
Hallo Zusammen
vielleicht kann mir jemand bei einem Problem Helfen.
Da ich noch nie Programmiert habe(weder in Basic noch sonst was)
kenne ich mich nicht sehr gut mit Bascom aus.
Habe vereinzelt Leds zum blinken bekommen und das LCD angesteuert.
Jetzt würde es mich interesieren wie das mit den Variablen funktioniert. Bzw erklären worauf ich auchten muss und in welcher Reihenfolge die Befehle kommen müssen.
Ne idee hätte ich schon zur Anwendung:
Taster 1 an Pinc.1
Taster 2 an Pinc.2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 ,
Config Lcdpin = Pin , Db6 = Portd.6 , Db7 = Portd.7 ,
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Lcdbus = 4
Config Portd = Output
Aufgabe: Per Taste 1 die Zahl 1 bis 10 per Tastendruck nach oben zählen
Per Taste 2 nach untenzählen.
Das müsste relativ schnell funktionieren und für mich als Noobie auch einfach zu verstehen.
Wenn jemand Helfen könnte würde ich mich sehr freuen
Grüße Noobidubi
Nubbidubi
02.01.2009, 22:29
Hab mir da schnell was zusammen geschustert. Läuft alles eigentlich gar nicht schlecht,
nur beim drücken der Taste1 zählt das Display wie verrückt durch und bei Taste2 geht nur einmal zurück.
Woran könnte das liegen?
Vielleicht mal das Programm durchschauen ob Ihr einen Fehler findet?
:-k
Ein Fehler muss ja da sein, sonst würde es wie gewünscht funktionieren #-o
'---------------------------------------------------------------------------
'Titel : LCD-Grundlagen Testen
'Datei : Grundlagen_LCD ansteuern
'---------------------------------------------------------------------------
'Funktion : Textausgabe an LCD
'Schaltung : Erweiterungsplatine "LCD" an Buchsenleiste
' :
' :
'---------------------------------------------------------------------------
'Display- :
'controller : KS0070, HD44100 kompatibel
'---------------------------------------------------------------------------
'Prozessor : ATmega8 3,6864MHz
'Sprache : Bascom-AVR
'Datum : 04.11.2008
'Version : 1.0
'Autor : Stefan Merk
'---------------------------------------------------------------------------
' hier Initialisierung durchführen
'---------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 3686400
$hwstack = 32
$swstack = 10
$framesize = 60
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , ' Config können
Config Lcdpin = Pin , Db6 = Portd.6 , Db7 = Portd.7 , ' auch in einer
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2 ' Zeile stehen
Config Lcd = 16 * 2 ' LCD mit 16Zeichen
' je Zeile, 2 Zeilig
Config Portd = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
'---------------------------------------------------------------------------
'Hier Alias inizialisieren
Taster1 Alias Pinb.0
Taster2 Alias Pinb.1
'---------------------------------------------------------------------------
'Hier PullUp inizialisieren
Portb.0 = 1
Portb.1 = 1
'---------------------------------------------------------------------------
'Hier Variable inizialisieren
Dim A As Integer
Dim B As Integer
A = 1
B = 1
'---------------------------------------------------------------------------
'Hier Unterprogramme Declarieren
Declare Sub Count_up
Declare Sub Count_down
Declare Sub Weiter
'---------------------------------------------------------------------------
'Tasten entprellen
Config Debounce = 30
Debounce Pinb.0 , 0 , Count_up , Sub
Debounce Pinb.1 , 0 , Count_down , Sub
'---------------------------------------------------------------------------
Cls
Cursor Off
Upperline
Lcd "Counter"
Lowerline
Lcd "T1=Up; T2=Down"
Wait 1
Cls
Upperline
Lcd "T1=Up; T2=Down"
Wait 1
Do
Start:
If Taster1 = 0 Then
Gosub Count_up
Else
Gosub Weiter
End If
If Taster2 = 0 Then
Gosub Count_down
Else
Gosub Weiter
End If
Loop
End
Sub Count_up:
A = A + 1
Locate 2 , 1
Lcd A
End Sub
Sub Count_down:
B = A - 1
Locate 2 , 1
Lcd B
End Sub
Sub Weiter:
Locate 2 , 8
Lcd "Weiter"
End Sub
Hallo Noobidubi,
die Do..Loop läuft die ganze Zeit sehr schnell ab. Nur wenn einer der beiden Taster gedrückt ist, wird kurz die entsprechende Sub aufgerufen und dann geht's weiter in der Schleife. Da du die Taster nicht so schnell wieder loslassen kannst, werden immer gleich mehrere Durchläufe stattfinden.
Beim Count_up wird A erhöht und angezeigt. Bei mehrmaligen Durchlaufen wird A schnell größer.
Bei Count_down wird B=A-1 gesetzt und B wird angezeigt. Da A sich nciht ändert, wird die Sub zwar mehrfach aufgerufen, aber immer der gleiche Wert in B geschrieben.
Deine Debounce Befehle werden nur vor der Schleife aufgerufen. Wenn da keine Taste gedrückt ist, nutzen die nichts.
Schreibe mal so:
Do
Debounce Pinb.0 , 0 , Count_up , Sub
Debounce Pinb.1 , 0 , Count_down , Sub
Loop
End
Sub Count_up:
A = A + 1
Locate 2 , 1
Lcd A
End Sub
Sub Count_down:
A = A - 1
Locate 2 , 1
Lcd A
End Sub
dann solte es funktionieren.
Gruß
Rolf
Nubbidubi
02.01.2009, 23:03
hatt alles soweit funktioniert danke für die Hilfe. =D>
Jetzt ergibts sich nur ein Problem:
wenn bei 0 angekommen mit Taster2 gedrückt wird dann wird -1 angezeigt
wenn man jetzt mit Taster1 nach oben zählt ergibt sich dass aus -1 dann 01
wird und durch die Addresierung im Display Locate 2 , 1 dann bei 1 11steht bzw beim Weiterzählen 21; 31; 41 usw
WIe kann man das Umgehen?
Und noch eine Frage wie kann ich den Zählberreich begrenzen? So dass nur bis +10 bzw -10 gezählt werden kann.
Habe was mit 1 to 10 oder so ähnlich im Kopf. :-k
if then ....
if a>10 then a=10
Nubbidubi
02.01.2009, 23:18
if then ....
if a>10 then a=10
danke Vitis
code zum begrenzen des Zählers von 10 bis -10
Codeschnippsel
Sub Count_up:
A = A + 1
If A > 10 Then A = 10 'begrenzt auf 10
Locate 2 , 1
Lcd A
End Sub
Sub Count_down:
A = A - 1
If A < -10 Then A = -10 'gebrenzt auf -10
Locate 2 , 1
Lcd A
End Sub
was jetzt noch probleme macht ist
dass wenn unter 0 gezählt wird,
also -1 bis -10 dann wird bei -10 3stellen im LCD benutzt.
Wenn man dann zurück über 0 Zählt
als 0 bis 10 dann wird die 2. und 3. Stelle im LCD nicht zurückgesetzt.
Klartext schaut es dann so aus:
Von -10 nach 0 per Tastendruck:
-10; -90(sollte aber -9 sein); -80;-70;-60;-50;-40;-30;-20;-10;
dann weiter
von 0 bis 10 per Tastendruck:
010(sollte aber 0 sein);110; 210;310;410;510;610;710;810;910;100
Ich hab das Problem per CLS gelöst, bin aber damit nicht zufrieden.
Kann man die 2. und 3. in der unteren LCD Anzeige auch anderst aktualisieren ohne dass man das Lcd mit CLS löscht?
Wenn jemand Erfahrung gemacht hat mit solchen Sachen wäre ich für
einen Gedankenanstoß sehr erfreut :-k
hier das ganze Programm mit CLS im Gosub Count_up bzw Count_down
das Ergebnis ist wie gedacht. Ohne CLS ist es dann wie oben beschrieben
'---------------------------------------------------------------------------
'Titel : LCD-Grundlagen Testen
'Datei : Grundlagen_LCD ansteuern
'---------------------------------------------------------------------------
'Funktion : Textausgabe an LCD
'Schaltung : Erweiterungsplatine "LCD" an Buchsenleiste
' :
' :
'---------------------------------------------------------------------------
'Display- :
'controller : KS0070, HD44100 kompatibel
'---------------------------------------------------------------------------
'Prozessor : ATmega8 3,6864MHz
'Sprache : Bascom-AVR
'Datum : 04.11.2008
'Version : 1.0
'Autor : Stefan Merk
'---------------------------------------------------------------------------
' hier Initialisierung durchführen
'---------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 3686400
$hwstack = 32
$swstack = 10
$framesize = 60
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , ' Config können
Config Lcdpin = Pin , Db6 = Portd.6 , Db7 = Portd.7 , ' auch in einer
Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2 ' Zeile stehen
Config Lcd = 16 * 2 ' LCD mit 16Zeichen
' je Zeile, 2 Zeilig
Config Portd = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
'---------------------------------------------------------------------------
'Hier Alias inizialisieren
Taster1 Alias Pinb.0
Taster2 Alias Pinb.1
'---------------------------------------------------------------------------
'Hier PullUp inizialisieren
Portb.0 = 1
Portb.1 = 1
'---------------------------------------------------------------------------
'Hier Variable inizialisieren
Dim A As Integer
Dim B As Integer
A = 0
B = 0
'---------------------------------------------------------------------------
'Hier Unterprogramme Declarieren
Declare Sub Count_up
Declare Sub Count_down
'---------------------------------------------------------------------------
'Tasten entprellen
'---------------------------------------------------------------------------
Cls
Cursor Off
Upperline
Lcd "Counter"
Lowerline
Lcd "T1=Up; T2=Down"
Wait 1
Cls
Upperline
Lcd "T1=Up; T2=Down"
Wait 1
Do
Debounce Taster1 , 0 , Count_up , Sub
Debounce Taster2 , 0 , Count_down , Sub
Loop
End
Sub Count_up:
Cls 'Löscht LCD
A = A + 1 'berechnet variable
If A > 10 Then A = 10 'gebrenzen auf -10
Locate 1 , 1 'positioniert im LCD
Lcd "T1=Up; T2=Down"
Locate 2 , 1 'positioniert im LCD
Lcd A 'schreibt Variable ins LCD
End Sub
Sub Count_down:
Cls 'Löscht LCD
A = A - 1 'berechnet Variable
If A < -10 Then A = -10 'gebrenzt auf -10
Locate 1 , 1 'positioniert im LCD
Lcd "T1=Up; T2=Down"
Locate 2 , 1 'positioniert im LCD
Lcd A 'schreibt Variable ins LCD
End Sub
grüße Nubbidubi
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.