Hallo, habe nur eine ganz kurze Frage, auf die Google mir irgendwie keine Antwort liefern konnte (wahrscheinlich falsche Suchbegriffe?). Ich habe es jetzt geschafft, meinen Motor per PWM zu steuern. nun möchte ich einen Taster einbauen und wenn dieser einmal gedrückt wird, dann soll der Motor x schnell laufen, wird der Taster zwei Mal gedrückt, soll der Motor y schnell laufen, wird der Taster drei Mal gedrückt, soll er z schnell laufen und beim vierten Drücken soll er wieder x schnell laufen. Könntet ihr mir dabei vielleicht helfen oder mir ein Stichwort für Google geben? Ich benutze übrigens Bascom. Edit: Das Stichwort, das ich suche scheint Entprellen zu sein. Kann das sein?
:
Bearbeitet durch User
Max Muster schrieb: > Könntet ihr mir dabei vielleicht helfen oder mir ein Stichwort für > Google geben? Ich benutze übrigens Bascom. Weniger auf Google und Copy&Paste setzen und mehr selber nachdenken und ausprobieren. Woher kommt bei machen Leuten dieser Reflex, beim Programmieren erst mal für alles ein Codebeispiel zu benötigen?
Max Muster schrieb: > Edit: Das Stichwort, das ich suche scheint Entprellen zu sein. Kann das > sein? Ja, und Bascom hat dafür eine spezielle Funktion.
hinz schrieb: > Max Muster schrieb: >> Edit: Das Stichwort, das ich suche scheint Entprellen zu sein. Kann das >> sein? > > Ja, und Bascom hat dafür eine spezielle Funktion. Debounce. ^^
Einfach eine variable inkrementieren und gucken was Sache ist.
1 | while(1){ |
2 | if(get_key_short(1<<KEY1)) |
3 | state = (state+1) % 3; |
4 | |
5 | switch(state){ |
6 | case 0: |
7 | speed = x; |
8 | break; |
9 | case 1: |
10 | speed = y; |
11 | break; |
12 | case 2: |
13 | speed = z; |
14 | break; |
15 | }
|
16 | |
17 | OCR1A= speed; |
18 | }
|
Timmo H. schrieb: > Einfach eine variable inkrementieren und gucken was Sache ist. > [c] Ich arbeite aber mit Bascom zur Zeit. Das sieht aber eher nach C aus, oder?
Hallo, du brauchst in jedem Fall einen Timer: 1. um festzustellen, dass der Key nicht nur 2 x gedrückt wurde, sondern dass das innerhalb x ms geschehen ist. 2. um bei einer Pause länger x ms den Befehl auszuführen und den Zähler zurückzustellen. Wenn du nur einfach zählst, bekommst du ein ganz anderes verhalten als gewünscht, z.B. kannst du nicht 2x nacheinender Motor 1 ansprechen. Georg
Georg schrieb: > Hallo, > > du brauchst in jedem Fall einen Timer: > > 1. um festzustellen, dass der Key nicht nur 2 x gedrückt wurde, sondern > dass das innerhalb x ms geschehen ist. > > 2. um bei einer Pause länger x ms den Befehl auszuführen und den Zähler > zurückzustellen. > > Wenn du nur einfach zählst, bekommst du ein ganz anderes verhalten als > gewünscht, z.B. kannst du nicht 2x nacheinender Motor 1 ansprechen. > > Georg Gibt es irgendwie bestimmte Pins am Attiny 2313 mit denen das nur geht? Oder geht das mit allen? MFG
Max Muster schrieb: > Gibt es irgendwie bestimmte Pins am Attiny 2313 mit denen das nur geht? Der Timer hat mit dem Pin garnichts zu tun. Praktisch richtest du einen Timer ein mit z.B. 1 ms und in der Timer-ISR fragst du die Taste ab. Dann lässt sich Entprellen und die beschriebene Abfrage zusammen erledigen. Georg
Mein Code sieht bisher so aus:
1 | $regfile = "attiny2313.dat" |
2 | $crystal = 1000000 |
3 | |
4 | |
5 | Config Portb. 3 = Output 'B3 Output |
6 | Config Pind. 2 = Input 'D2 Input |
7 | |
8 | Motor Alias Portb. 3 |
9 | Taster Alias Pind. 2 |
10 | Pinb. 0 = 1 'Pull Up Widerstand |
11 | |
12 | Do |
13 | |
14 | Debounce Pind. 2 , 0 , Gedruekt , Sub |
15 | |
16 | Loop |
17 | |
18 | End |
19 | |
20 | Gedruekt: |
21 | Motor = 1 'Motor läuft, wenn Taste gedrückt wurde |
22 | Return |
Funktioniert so aber absolut nicht, aber dieses Tutorial z.B. http://halvar.at/elektronik/kleiner_bascom_avr_kurs/taster_entprellen/ hilft auch nicht sehr viel.
:
Bearbeitet durch User
Ein fertiges Programm für Tastenentprellung und PWM-Ausgabe für einen DC-Motor, deren Werte in einer Tabelle stehen. Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."
m.n. schrieb: > Ein fertiges Programm für Tastenentprellung und PWM-Ausgabe für einen > DC-Motor, deren Werte in einer Tabelle stehen. > Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä." Hey, der Link hilft mir auf jeden Fall schon mal, aber leider wurde das in C geschrieben und ich arbeite ja mit Bascom..
Du meinst wohl du Copy und Pastest mit Bascom. Mach dir halt mal Gedanken! EIn gutes Beispiel hast du ja jetzt schon bekommen
Cyblord ---- schrieb: > Woher kommt bei machen Leuten dieser Reflex, beim Programmieren erst mal > für alles ein Codebeispiel zu benötigen? Weil es oft funktioniert. Ohne Internet fällt denken leichter. ;-)
Max Muster schrieb: >> Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä." > > Hey, der Link hilft mir auf jeden Fall schon mal, aber leider wurde das > in C geschrieben und ich arbeite ja mit Bascom.. Sieh das doch positiv. Der Link zeigt Dir ein Programm, das wohl das macht, was Du Dir vorstellst oder nur leicht verändert werden müßte. Es ist auch recht einfach auf Deinen ATtiny2313 zu übertragen. Das Programm ist recht kurz und übersichtlich, und in jeder Zeile ist ein Kommentar, der beschreibt, was passieren soll. Vielleicht ist der schnellere, erfolgreichere Weg, einfach einmal C zu probieren? Das Atmel AVR-Studio 4.18 ist kostenlos herunterzuladen und einfach zu installieren. Ein Projekt erstellen, den Quellcode kopieren und das Übersetzen sollte fehlerfrei klappen. Wenn es dann noch in Deiner Schaltung funktioniert, ist es vielleicht überlegenswert, es auszubauen und bei C zu bleiben ;-)
Hi Max, was möchtest du genau? a) Soll derMotor nach x kurzen Tastendrücken innerhalb eines Zeitfensters, mit Speed x laufen? mit x=1...3 b) Soll er nach dem ersten Tatsendruck mit Speed_1 alleine weiterlaufen, beim zweiten mit Speed_2.... und beim 4. Tastendruck wieder mit Speed_1...? c) Soll der Motor nur solange mit Speed x laufen, wie die Taste gedrückt bleibt? d) ...weiß der Geier... ;-) Gewöhne dir bitte mal eine präzise Beschreibung des Ziels bzw. des Funktionsablaufes an, sonst redet man hier aneinander vorbei und verschwendet Zeit...
Eine Einbahnstraße? Also nur schneller? Was bei Erreichen des Maximums. Insgesamt sollte das ganze kein Problem sein, einen freien Timer vorausgesetzt und eine vernünftige Entprellung. Ein kleines Problem wird der Rhythmus in sich bergen: Was ist der Unterschied zwischen zweimal x und einmal y?
m.n. schrieb: > > Vielleicht ist der schnellere, erfolgreichere Weg, einfach einmal C zu > probieren? > Das Atmel AVR-Studio 4.18 ist kostenlos herunterzuladen und einfach zu > installieren. Ein Projekt erstellen, den Quellcode kopieren und das > Übersetzen sollte fehlerfrei klappen. Wenn es dann noch in Deiner > Schaltung funktioniert, ist es vielleicht überlegenswert, es auszubauen > und bei C zu bleiben ;-) vielleicht ist die Idee ja gar nicht so schlecht. Gibt es irgendein Tutorial, das Du mir für den Anfang empfehlen kannst?
Amateur schrieb: > Schau mal oben links auf dieser Home-Page. Da gibt's: > AVR-GCC-Tutorial Und hier gibt http://www.mikrocontroller.net/articles/Atmel_Studio es viele Links zu AVR Studio, wobei die Version 4.19 gut geeignet ist. Die 124 MB sind auch schnell geladen und enthalten die komplette Installation.
Max Muster schrieb: > Funktioniert so aber absolut nicht, Das das hier
1 | ... |
2 | Taster Alias Pind. 2 |
3 | Pinb. 0 = 1 'Pull Up Widerstand |
4 | ... |
nicht funktioniert, glaub ich dir sogar. Der Pullup sollte natürlich schon auch auf dem Pin eingeschaltet werden, an dem der Taster hängt. Und eingeschaltet wird ein Pullup mit dem Port Register und nicht dem Pin Register (wobei ich mir nicht sicher bin, ob das bei BASCOM nicht egal ist)
Max Muster schrieb: > vielleicht ist die Idee ja gar nicht so schlecht. > > Gibt es irgendein Tutorial, das Du mir für den Anfang empfehlen kannst? Wenn du da auch so planlos, unstrukturiert und schlampig rangehst wie bei der BASCOM-Programmierung, wird das allerdings nichts werden. Noch simpler als mit BASCOM kriegst du es nirgends(Arduino spielt noch in einer ähnlichen Liga). Und selbst das kriegst du nicht hin.
:
Bearbeitet durch User
Karl Heinz schrieb: > Wenn du da auch so planlos, unstrukturiert und schlampig rangehst wie > bei der BASCOM-Programmierung, wird das allerdings nichts werden. Noch > simpler als mit BASCOM kriegst du es nirgends (Arduino spielt noch in > einer ähnlichen Liga). Und selbst das kriegst du nicht hin. Gib ihm die Zeit, die er braucht. Bei Anderen bist Du ja auch nicht so demotivierend. Treten hilft da überhaupt nicht :-(
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.