1-Taster LED-Steuerung

OP #3138213
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.
#3138220
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.
Gast #3138246
> 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
}
Gast #3138678
> 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
}
#3138683
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.
(Firma: Basta) #3138696
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 ;)
#3138735
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.
#3138771
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.
#3138793
> 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
Gast #3138800
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.