Zeitgesteuerte LED's mit Taster und Timer

OP #1416527
Guten Nachmittag zusammen,

ich möchte gerne meinen Atmega 16 programieren. Und zwar das er nach dem 
drücken einer Taste (bzw. Taster) die erste LED für 2 Sek., sie 
abschaltet und danach die zweite LED für 5 Sek. leuchten lässt und diese 
dann auch abschaltet. Hab schon viel gegooglet, doch zu einem richtigen 
ergebnis kam ich bis jetzt noch nicht. Möchte das mit einem Timer 
realisieren, jedoch hab ich keinerlei ahnung von der Programierung bzw. 
der Funktionsweise eines Timers. Hier mein bis jetzt zusammen 
gebastelter Quellcode:





   1.
      $regfile = "m16def.dat"
   2.

   3.

   4.

   5.
      '$crystal = 8000000
   6.
      $baud = 38400
   7.

   8.
      Ddrb = &B1111_0000
   9.

  10.
      Ddrd = &B0000_0000
  11.

  12.

  13.

  14.
      Portb.4 = 0
  15.
      Portb.5 = 0
  16.
      Portb.6 = 0
  17.
      Portb.7 = 0
  18.
      Portd = &B1111_1111
  19.

  20.

  21.
      Dim LEDZeit1 As Word
  22.
      Dim LEDZeit2 As Word
  23.

  24.

  25.
      LED1 Alias Portb.4
  26.
      LED2 Alias Portb.5
  27.

  28.

  29.
      'TASTER1 an PD2
  30.
      Taster1 Alias Pind.2
  31.
      Config Taster1 = Input
  32.

  33.
      'TASTER2 an PD3
  34.
      Taster2 Alias Pind.3
  35.
      Config Taster2 = Input
  36.

  37.

  38.

  39.
      Config Timer1 = Timer , Prescale = 256
  40.
      On Timer1 Zeit
  41.

  42.
      Enable Timer1
  43.
      Load Timer1 , 34285
  44.

  45.

  46.
      Enable Interrupts
  47.

  48.
      LEDZeit1 = 0
  49.
      LEDZeit2 = 0
  50.

  51.

  52.
      Do
  53.
         Debounce Taster1 , 0 , On_taster1 , Sub
  54.
         Debounce Taster2 , 0 , On_taster2 , Sub
  55.
      Loop
  56.

  57.
      'End
  58.

  59.
      Zeit:
  60.

  61.
      On_taster1:
  62.

  63.
      Incr LEDZeit1
  64.
      If LEDZeit1 => 1 Then LED1 = 1 Else LED1 = 0
  65.
      If LEDZeit1 = 9 Then Reset LEDZeit1
  66.

  67.
      Return
  68.

  69.
      On_taster2:
  70.
      Incr LEDZeit2
  71.
      If LEDZeit2 => 1 Then LED2 = 1 Else LED2 = 0
  72.
      If LEDZeit2 = 9 Then Reset LEDZeit2
  73.

  74.
      Return
  75.

  76.
      End





Weiter weiß ich nicht....das ding macht einfach nicht was ich will. Wäre 
nett von euch wenn ihr mir weiterhelfen könnten. Habe nicht wirklich 
Ahnung vom Programieren, also bitte nicht so viele Fachausdrücke ;-) 
Danke im Vorraus


Gruß Eli
Angehängte Dateien:
#1416545
Wozu benutzt du Timer?

Lass einfach in deiner Do-Loop Schliefe die Tastenabfrage laufen und 
wenn eine Taste gedrückt wurde,dann spingst du in einer Sub Routine. 
Dort machst du die Wartezeit mit dem WAITMS befehl und nachdem die 2. 
LED ausgeht springst du wieder zurück in deine Do-Loop. Und der Debounce 
Befehl ist dann auch unnötig

gruss Axel
OP #1416570
Erstmal danke für die schnelle Antwort.

Das problem an der Sache ist nur: Das Programm stellt erstmal nur ein 
Grundgerüst da, wenn ich es erweitern möchte bzw. ich will es später 
erweitern, ist das mit waitms nicht vorteilhaft. Bei waitms geht der 
"Prozessor" wie ich gehört habe in einen Ruhezustand oder so ähnlich und 
kann zu dieser zeit keine anderen befehle mehr annehmen bzw. 
verarbeiten. Bitte korrigier mich wenn ich da falsch liege.

Gruß Eli
OP #1416620
Bis jetzt rein garnichts was ich will. Wenn ich den Mikrocontroller 
starte leuchtet LED1 sofort. Wenn ich dann Taster1 drücke schaltet sich 
LED2 dazu. Beim drücken von Taster2 gehen beide LEDs aus solange ich ihn 
gedrückt halte. Danach geht wieder LED1 an...wie beim start.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.