Ich bin auch langsam am verzweifeln! Bin absoluter Anfänger!! Ich muss für jemanden etwas bauen. Dies besteht aus 9 LED, die mit einem Taster jeweils wagrecht oder Diagonal leuchten sollen. Und wenn kein Taster gedrückt, sollen alle Blinklen. Bin jetzt so weit, dass ich die LED über den Atmega8 einschalten kann. Weder Blinklich noch Taster funktionieren. Das Flashen des Atmega8 klappt, nur ich weiß nicht wie ich das Programmieren soll. Kann mir jemand Helfen? Mit freundlichen Grüßen Stefan
Blinken über Interrupt und Timer realisieren, Abfrage der Taster mittels DEBOUNCE...
Kannst du mir ein Beispiel geben wie ich das programmieren soll?
Wird aber etwas später. Essen, Kind ins Bett, ...
Gast
#1079013
Dom. mach aber hin die Hausaufagbe muss morgen fertig sein !!!
Ich will das möglichst noch heute zumindest anfangen.
Gast
#1079038
Aha, der "jemand" ist ein Lehrer - und - wie bei meinen Herren Söhnen auch so oft - wird die Hausaufgabe mal wieder "in letzter Minute" begonnen. So eine Aufgabe erfordert aber schon ein wenig "Einarbeitung" - bis morgen wird das sicher nix mehr...
Hab meine Hausaufgaben längst gemacht.
Stefan Meyer wrote: > Ich will [...]. Meinem Sohn (5) hab ich "ich möchte" beigebracht... aber nungut. Wie darf ich mir "diagonal oder horizontal leuchten" vorstellen? Wie sind die LEDs angeordnet? Zeichnung? Gruß Dominique Görsch
Hier schonmal aus meiner Snippetsammlung was, womit ich blinke... aktuell für 5 LEDs A0-A4 vorgesehen, muss man für 9 dann noch ein bissl aufbohren, aber das schaffste sicher selber. Für mehr Hilfe brauch ich mehr Infos.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
Die LED werden wie ein Quadrat angeordnet also 3Led's in der 1. reihe, 3LED's in der 2. Reihe, 3LED's in der 3 Reihe. Diagonal = von links bis rechts oben.
Siehe oben, da haste schonmal ne ganze Menge... das Debounce muss halt noch in die Main-Loop. Debounce ist in der BASCOM-Hilfe ganz gut erklärt. Konkrete Fragen beantworte ich aber auch gern.
Der Meldet irgent wie so 3 errors. Aber so richtig blicke ich das noch nicht!
Stefan Meyer wrote: > Der Meldet irgent wie so 3 errors. Etwas präziser wäre nicht schlecht. > Aber so richtig blicke ich das noch nicht! Was genau? Gruß Dominique Görsch
Gast
#1079611
Und was hat der Lehrer zu der nicht Lösung gesagt? Oder hast Du heute krank gemacht?
1. ist das nicht für die Schule - sondern privat gebrauch!!! 2. Kann ich das ganze auch so machen: $regfile = "m8def.dat" $crystal = 1000000 Config Portd.2 = Output Config Portd.3 = Output Config Portd.4 = Output Config Portd.5 = Output Config Portd.6 = Output Config Portd.7 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Do Portd. 2 = 1 Waitms 100 Portd. 2 = 0 Waitms 100 Portd. 3 = 1 Waitms 100 Portd. 3 = 0 Waitms 100 Portd. 4 = 1 Waitms 100 Portd. 4 = 0 Waitms 100 Portd. 5 = 1 Waitms 100 Portd. 5 = 0 Waitms 100 Portd. 6 = 1 Waitms 100 Portd. 6 = 0 Waitms 100 Portd. 7 = 1 Waitms 100 Portd. 7 = 0 Waitms 100 Portb. 0 = 1 Waitms 100 Portb. 0 = 0 Waitms 100 Portb. 1 = 1 Waitms 100 Portb. 1 = 0 Waitms 100 Portb. 2 = 1 Waitms 100 Portb. 2 = 0 Waitms 100 Loop Und halt noch "irgendwie" die Taster danach setzten? Möglichst einfach, mit möglichst wenigen schritten. Die Geschwindigkeit gefällt mir so, nur das ,was Dominique Görsch gepostet hat weis ich nicht, wie ich die Led's den Port bestimme, bzw wie ich es erweitern oder bearbeiten kann. Mit freundlichen Grüßen Stefan
Gast
#1079712
Poste doch mal das ganze Bascom File damit mann etwas sieht.
Wie ganzes Bascom File? Was ich gerade gepostet habe, ist dass was ich mir gestern "angeeignet" habe. Also, dass weiß ich wie es funktioniert.
Gast
#1079734
Mehr wie das oben hast Du noch nicht als Code?
Richtig, deswegen such ich ja ne Lösung, mit der ich dann noch die Taster einbinden kann. Suche schon 2 Stunden im Internet nach möglichkeiten. Möchte ja so was wie Programmteile mache - weiß aber nicht wie das geht. Unter Programmteile meine ich, dass wenn ich z.b. Taster 1 Drücke eine bestimmte Aktion ausgeführt wird, die wenn ich dann los lasse, wie aufhört und das Blinken wieder anfängt.
"state machine", Herr Lehrer! Klaus.
Gast
#1079765
if taster1 == 0 then gosub test1 test1 mach irgend was return so in etwa?
Aha, du willst dass die LEDs der Reihe nach blinken, dann schreib das doch auch. > Und wenn kein Taster gedrückt, sollen alle Blinklen. Oben schrubst du nämlich, dass alle blinken sollen... Ich rate dir dennoch, statt mit Waitms das mit 'nem Timer zu machen, auch wenn du es auch so hinbekommst. Für die Taster hab ich dir schon mehrfach den Tipp zu Debounce gegeben. Die BASCOM-Hilfe enthält Beispiele dafür! Gruß Dominique Görsch
Eine neue Frage, würde dass mit sub Funktionieren bzw mit 5 Tastern? Wie müsste ich das in den oben Geposteten Code intergrieren?
Stefan Meyer wrote: > würde dass mit sub Funktionieren bzw mit 5 Tastern? Ich denk 2 Taster? > Wie müsste ich das in den oben Geposteten Code intergrieren? Eine Tastenabfrage (ohne Interrupts) macht in deinem Code keinen Sinn, weil die Schleife viel zu lange braucht, bis sie durchlaufen ist.
Entschuldigung, wenn ich mich unklar ausgedrückt habe. Möchte es mit ca. 5 Tastern machen, 1 für unterste led reihe, 2. Taster zweite reihe, 3. Taster 3. reihe Led's. 4. Taster Diagonale links unten nach rechts oben, 5. Taster von rechts unten nach links oben. Mir ist auch egal ob ohne Taster druck alle gleichzeitig Blinken oder der Reihenach, wie oben. Wie das mit Main-Loop oder Debounce funktionieren soll, weiß ich nicht NOCH nicht. Wie müsste ich die Subs eigentlich markieren, bzw. einbinden?
Was mach ich hier Falsch? $regfile = "m8def.dat" $crystal = 1000000 Config Portc.3 = Input Config Portd.2 = Output Config Portd.3 = Output Config Portd.4 = Output Config Portd.5 = Output Config Portd.6 = Output Config Portd.7 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Declare Sub Unterprogramm Do Portd. 2 = 1 Waitms 150 Portd. 2 = 0 Waitms 150 Portd. 3 = 1 Waitms 150 Portd. 3 = 0 Waitms 150 Portd. 4 = 1 Waitms 150 Portd. 4 = 0 Waitms 150 Portd. 5 = 1 Waitms 150 Portd. 5 = 0 Waitms 150 Portd. 6 = 1 Waitms 150 Portd. 6 = 0 Waitms 150 Portd. 7 = 1 Waitms 150 Portd. 7 = 0 Waitms 150 Portb. 0 = 1 Waitms 150 Portb. 0 = 0 Waitms 150 Portb. 1 = 1 Waitms 150 Portb. 1 = 0 Waitms 150 Portb. 2 = 1 Waitms 150 Portb. 2 = 0 Waitms 150 Loop If Pinc.3 = 1 Then Gosub 1 Do Loop Sub Unterprogramm Portc.5 = 1 End Sub
Dein If Pinc.3 = 1 Then Gosub 1 wird nie erreicht, da der Controller die Schleife darüber abarbeitet.
Kann ich das übverarbeiten irgentwie abstellen? Wie muss ich das programmieren, das die 9LED's an verschiedenen Ausgängen gleichzeitig blinken?
Gast
#1079900
Gast
#1079902
Gast
#1079905
Hi, Ich schlage dir vor, den BASCOM-Kurs auf www.halvar.at GRÜNDLICH durchzulesen! Dort stehen sehr viele interessante funktionen. MfG Bauteiltöter
Wenn ich das bei dem BASCOM-Kurs richtig verstanden habe, kann ich das mit dem AtMega8 gar nicht machen, da der nur 2 Ports hat, die als interrupt Port nutzen kann. Ist das richtig?
Gast
#1080051
Es gibt da noch den PinChangeInterrupt. Da kannst Du jedem Pin einen Int. zuordnen.
Halte deine Main-Loop kurz genug, schau das keine Waits drin sind, dann brauchst du für die Taster keine Interrupt.
Würde das als Mainloop funktionieren? Config Timer1 = Timer, Prescale = 8 Config Pinc.2 = Output Config Pind.2 = Output Config Pind.3 = Output Config Pind.4 = Output Config Pind.5 = Output Config Pind.6 = Output Config Pind.7 = Output Config Pinb.0 = Output Config Pinb.1 = Output Config Pinb.2 = Output Led1 Alias Portc.2 'Hier wird das Unterprogramm festgelegt, das 'in dem von ihnen eingestellten Intervall aufgerufen wird On Timer1 Timer_irq Const Timervorgabe = 23869 Enable Timer1 Enable Interrupts 'Hier ist die Programmhauptschleife Do 'Hier könnte Ihr Hauptprogramm stehen Loop Timer_irq: Timer1 = Timervorgabe Toggle Led1 Toggle Portd.2 Toggle Portd.3 Toggle Portd.4 Toggle Portd.5 Toggle Portd.6 Toggle Portd.7 Toggle Portb.0 Toggle Portb.1 Toggle Portb.2 Return Wie und wo müsste ich jetzt die Taster reinschreiben?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.