Hallo, ich bin neu hier im Forum und Anfänger in Sachen Mikroprozessor. Ich würde gerne folgendes in C realisieren: Ich möchte an einem Attiny13 mit 1 Taster 5 LED´s folgendermaßen steuern: Taster drücken, LED´s als Lauflicht. Taster nochmals drücken, alle LED´s an. Taster nochmals drücken, alle LED´s aus. Könnte mir bitte jemand zeigen, wie der Code hierfür lauten muß? Vielen Dank.
Markus Schäfer schrieb: > Könnte mir bitte jemand zeigen, wie der Code hierfür lauten muß? Das ist bereits reichlich kompliziert, weil die saubere und sichere Erfassung eines einzelnen Tastendrucks kein Einsteigerthema ist. Such dir ein anderes erstes Beispiel aus. Möglichst irgendwas, was ohne den Themenkomplex "Mach etwas wenn eine Taste einmalig niedergedrückt wurde" auskommt. Im AVR-Tutorial bzw AVR-GCC Tutorial solltest du dazu einsteigertaugliche Hinweise finden.
Markus Schäfer schrieb: > Könnte mir bitte jemand zeigen, wie der Code hierfür lauten muß? Den wirst du schon selber schreiben müssen. Wie willst du die LEDs denn anschließen? Der Attiny hat nur 5 für einen Anfänger nutzbare Pins.
> Könnte mir bitte jemand zeigen, wie der Code hierfür > lauten muß?
Je nach Anschlussbelegung
1 | void main(void) |
2 | {
|
3 | uint8_t gedrueckt, runter, zaehler; |
4 | DDRA=0x1F; |
5 | while(1) |
6 | {
|
7 | gedrueckt=PINA&0x20; |
8 | runter=gedrückt&~runter; |
9 | if(runter) mode=(mode+1)%3; |
10 | switch(mode) |
11 | {
|
12 | case 0: |
13 | PORTA=1<<(zaehler++/51); |
14 | break; |
15 | case 1: |
16 | PORTA=0x1F; |
17 | break; |
18 | default:
|
19 | PORTA=0; |
20 | }
|
21 | runter=gedrueckt; |
22 | _delay_ms(10); |
23 | }
|
24 | }
|
Man könnte sich ansehen, wie andere das schonmal gemacht haben: Beitrag "AVR Sleep Mode / Knight Rider"
Hallo, vielen Dank für die Antworten. @ Peter: ich habe lange gesucht bevor ich den Beitrag geöffnet habe. Leider aber nichts gefunden was meinem Projekt nahe kommt. Grüße Markus
> Leider aber nichts gefunden was meinem Projekt nahe kommt.
Und mein code war dir zu lang ?
1 | void main(void) |
2 | {
|
3 | uint8_t gedrueckt, runter, zaehler; |
4 | DDRB=0x1F; |
5 | while(1) |
6 | {
|
7 | gedrueckt=PINB&0x20; |
8 | runter=(gedrückt&~runter)*0x20; |
9 | mode=(mode+(runter!=0))%3; |
10 | PORTB=(mode==0?1<<(zaehler++/51):(mode==1?0x1F:0)); |
11 | runter=gedrueckt; |
12 | _delay_ms(10); |
13 | }
|
14 | }
|
Markus S. schrieb: > Hallo, > > vielen Dank für die Antworten. > @ Peter: > > ich habe lange gesucht bevor ich den Beitrag geöffnet habe. Leider aber > nichts gefunden was meinem Projekt nahe kommt. Das wirst du so auch nicht finden. Was du lernen musst: Dein Projekt in Einzelkomponenten zu zerlegen. Aus welchen Teilen besteht es? Von einigen Komponenten weiß man, wie man sie programmiert. Von anderen wiederrum weiß man das nicht. Dann sieht man sich andere Projekte an, in denen genau dieser Teilbereich ebenfalls vorkommt. Dieses andere Projekt kann über etwas ganz anderes gehen, das spielt so erst mal keine Rolle. Wichtig ist diese eine einzelne Komponente, die man benötigt. Die wird studiert ... wie funktioniert sie? ... wie wird sie benutzt? ... was kann sie genau? Und wenn man dann von allen Einzelteilen weiß, wie man sie realisiert, dann schraubt man aus diesen Einzelteilen das gewünschte Projekt zusammen. Bei einfachen Projekten ist es sogar sinnvoll, das nicht über Copy&Paste zu machen sondern tatsächlich selbst zu schreiben. Denn dann fallen einem nochmal 10 Details auf, die einem vorher entgangen sind. Das kann dir keiner abnehmen, bzw. es ist auch nicht sinnvoll das zu tun. Denn das ist etwas was du lernen musst. Tust du es nie, dann lernst du es auch nicht. Programmieren bedeutet nicht, sich im Web ein möglichst ähnliches Projekt zu suchen, dass man dann ein wenig anpasst. Programmieren bedeutet (neben vielen anderen Dingen, wie zb das Erlernen der Programmiersprache), Techniken zu erlernen, Algorithmen, die dann nach Bedarf kombiniert (und aneinander angepasst) werden.
Markus S. schrieb: > Könnte mir bitte jemand zeigen, wie der Code hierfür lauten muß? Mhh, was hast du davon, wenn du so einen Code siehst? Danach kannst du nicht mehr als vorher... Eine Person, die zur Lösung einer einfachen Aufgabe erstmal in einem Forum nach dem Code fragt, sollte sich zunächst mit ganz grundsätzlichen Dingen wie "Programmierung" befassen. Lies ein Buch. Karl Heinz Buchegger schrieb: > Das ist bereits reichlich kompliziert, weil die saubere und sichere > Erfassung eines einzelnen Tastendrucks kein Einsteigerthema ist. So kompliziert ist Debouncen jetzt auch nicht, wenn man weiß, dass ein Tastendruck mitunter mehrere Flanken auslösen kann. Natürlich sind Programmierkenntnisse hier sehr hilfreich ;)
Kan asta schrieb: > So kompliziert ist Debouncen jetzt auch nicht Die Praxis zeigt aber das Gegenteil. Jeder kennt bestimmt reichlich Geräte mit schlecht funktionierender Entprellung. Es scheint daher selbst für professionelle Programmierer sehr kompliziert zu sein. Der Programmierer sitzt in seinem Elfenbeintürmchen und geht von idealer Hardware aus, anstatt von realer Hardware.
Ja, Peter, wir kennen alle deine Debounce-Lib. Solange Programmierer nur mit Software jonglieren, hast du sicher Recht. Wer Hard- und Software kennt, kann evtl. auch selbst debouncen ;)
Kan asta schrieb: > Ja, Peter, wir kennen alle deine Debounce-Lib. Leider aber nicht die Leute, mit deren Geräten ich mich täglich rumärgern muß (Fahrstühle, Kaffeemaschinen, Wetterstationen, Frequenzgeneratoren usw.). Ich hab sogar den Eindruck, daß sich das verschlimmert, je neuer die Geräte sind. Das Wissen ums gute Programmieren scheint mehr und mehr verloren zu gehen.
> Ich hab sogar den Eindruck, daß sich das verschlimmert, je neuer die > Geräte sind. Das Wissen ums gute Programmieren scheint mehr und mehr > verloren zu gehen. Ja, das ist auch mir aufgefallen. Unser Saeco-Kaffeeautomat hat ein nur paar Tasten, die üblichen Knackfrösche. Drückt man normal drauf, hört man das "knick-knack", die Firmware erkennt den Tastendruck aber höchstens zu 50%. Vom Praktikanten programmiert? Oder am neuen Octavia: Am Lenkrad gibt es zwei Drehwalzen, mit denen kann man durch das Menü des Bordcomputers blättern. Dummerweise haben die mechanischen Rastschritte nichts zu tun mit den Drehgeberschritten. Mal springen sie zwei Schritte weiter oder auch gar keinen. Und sowas bauen die zigtausenfach in VWs, Audis, Skodas und Seats ein. Peter
> Drückt man normal drauf, hört > man das "knick-knack", die Firmware erkennt den Tastendruck aber > höchstens zu 50%. Vom Praktikanten programmiert? Eher ein Kontaktproblem wegen Korrosion.
In meinem Auto drückt sich ein Knopf manchmal von selbst. Diese Software...
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.