Hallo allerseits.
ich möchte gerne einen kleinen Zähler mit einer 7 Segmentanzeige, zwei
Tastern und einem Atmega8 in Bascom realisieren.
Im Netz bin ich leider nicht ganz fündig geworden, daher hoffe ich dass
ihr mir bei meinem Problem weiterhelfen könnt.
Ich habe einige Grundkenntnisse in Basic und arbeite seit 2 Monaten mit
Bascom.
Die Schaltung soll folgendes machen:
Wenn die Betriebspannung eingeschaltet wird, soll der AVR eine "0" auf
der Anzeige darstellen. Anschließend sollte man mit einem Taster die
Zahl um eins erhöhen und mit dem anderen die Zahl um eins verringern
können. Dies soll von "0" bis "9" funktionieren.
Ich habs mal mit Decr und Incr versucht aber das funktioniert noch nicht
ganz.
Der Code:
$regfile "m8def.dat"
$crystal = 1000000
Config Portd = Output
Config Portb.0 = Input
Config Portb.1 = Input
Pinb.0 = 1
Pinb.1 = 1
Dim Num(10) As Byte
Num(1) = &B00111111
Num(2) = &B00000110
Num(3) = &B01011011
Num(4) = &B01001111
Num(5) = &B01100110
Num(6) = &B01101101
Num(7) = &B01111101
Num(8) = &B00000111
Num(9) = &B01111111
Num(10) = &B01101111
Do
If Pinb.0 = 0 Then
Incr ....'Nummer soll hier um eins erhöht werden
End If
If Pinb.1 = 0 Then
Decr ....'Nummer soll hier um eins verringert werden
End If
Loop
Danke schonmal im vorraus
Gruß Fabian G.
P.S: Schaltplan kann ich noch erstellen. Falls einer benötigt werden
sollte, poste ich ihn noch nach. ;-)
Hallo Fabian,
was schonmal fehlt ist die Entprellung. Ein Tastendruck würde in
mehreren Durchläufen der Main-Loop den Wert verändern.
Somit bist du bei einem Tastendruck immer an den jeweiligen Anschlägen.
Weiterhin sieht das auch nicht richtig aus:
Config Portd = Output
Config Portb.0 = Input
Config Portb.1 = Input
Pinb.0 = 1
Pinb.1 = 1
probier mal:
Taster1 alias pinb.0 : config Taster1 = Input : Portb.0 = 1
Taster2 alias pinb.1 : config Taster2 = Input : Portb.1 = 1
und in der Main fragst du dann ab:
if Taster1 = 0 then ...
Gruß
Bodo Geue
Was denkst du, wie lange wohl ein Durchlauf hierdurch
Do
If Pinb.0 = 0 Then
Incr ....'Nummer soll hier um eins erhöht werden
End If
If Pinb.1 = 0 Then
Decr ....'Nummer soll hier um eins verringert werden
End If
Loop
dauert?
Kannst du einen Taster so schnell drücken und wieder loslassen?
Hallo,
dafür gibts viele Möglichkeiten.
Sehr einfach, wenn dein Rechner nichts weiteres zu tun hat und bei
niedriger Taster-drück-Frequenz wäre eine Pause, also einfach da wo
increased bzw. decreased wird jeweils ein waitms 200 oder so rein
Gruß
Bodo Geue
Karl Heinz Buchegger schrieb:> BASCOM Hilfe> "debounce" nachlesen
Hab ich gemacht.
Also muss ich z.B. schreiben: "Config Debounce = 30" ?
Bodo Geue schrieb:> und in der Main fragst du dann ab:>> if Taster1 = 0 then ...
Ja, das ist mir klar, aber wie schreibe ich das mit "Zahl erhöhen" und
Zahl verringern"?
Muss ich da Inrease und Decrease benutzen?
Wo und wie schreibe ich was in die Do-Loop Schleife?
Danke schonmal für die Tipps!
Gruß Fabian G.
Hi,
Zahlen werden mit incr Zahl um 1 erhöht und mit decr Zahl um eins
verringert.
Das und setzen der Grenzen, und der Pause gehört hinter die
Tasterauswertung.
Aber soviel Eigeninitiative solltest du selber aufbringen
Debounce ist die bessere Lösung, aber config debounce allein reicht da
nicht. Wichtiger ist der Befehl debounce, zum Beispiel:
Debounce Taster1 , 0 , Taster1_routine , Sub
und dann als Sub:
Taster1_routine:
incr Nummer
Return
Gruß BoGe-Ro
Fabian G. schrieb:> Ja, das ist mir klar, aber wie schreibe ich das mit "Zahl erhöhen" und> Zahl verringern"?
Du nimmst eine Variable, nennst die zb 'Zaehler' und erhöhst oder
verringerst sie. Wo ist das Problem?
> Muss ich da Inrease und Decrease benutzen?
Müssen nicht. Du kannst auch
Zaehler = Zaehler + 1
schreiben, wenn dir Incr unsympatisch ist.
Incr Zaehler
> Wo und wie schreibe ich was in die Do-Loop Schleife?
So wie du das erwarten würdest:
1
Abfragen ob eine Taste gedrückt ist
2
wenn ja, dann eine Sub aufrufen lassen, die die zugehörige
3
Funktionalität macht
4
5
ANzeige anktualisieren
6
7
eventuell ein bischen warten (muss aber nicht sein)
Danke für eure Hilfe!
Ich probier mal eure Vorschläge und Ansätze aus ;-)
Wenn ich nochmal auf dem Schlauch stehen sollte, melde ich mich.
Gruß Fabian G.