Zeitgesteuerte LED's mit Taster und Timer

OP #1416527
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren