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
Hallo Bodo, Danke für den Tipp! Wie mache ich die Tasterentprellung? ;-) Gruß Fabian G.
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?
Fabian G. schrieb: > Hallo Bodo, > Danke für den Tipp! Wie mache ich die Tasterentprellung? ;-) BASCOM Hilfe "debounce" nachlesen
sry hab deinen Post jetzt erst vollständig sehen können, da mein Internet nicht grad das schnellste ist... :-) Gruß
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) |
eigentlich sehr logisch, oder nicht?
1 | Do |
2 | |
3 | Debounce Taster1, 0, Hoch, Sub |
4 | Debounce Taster2, 0, Nieder, Sub |
5 | |
6 | Num( Zaehler ) auf der 7_Seg ausgeben |
7 | |
8 | Wait |
9 | |
10 | Loop |
1 | Hoch: |
2 | if Zaehler kleiner 9 |
3 | Incr Zaehler |
4 | return |
1 | Nieder: |
2 | if Zaehler größer 0 |
3 | Decr Zaehler |
4 | return |
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.