Forum: Mikrocontroller und Digitale Elektronik Zeitgesteuerte LED's mit Taster und Timer


von Eli H. (meenzer)


Angehängte Dateien:

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

von Axel K. (axel)


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

von Eli H. (meenzer)


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

von Karsten (Gast)


Lesenswert?


von Axel K. (axel)


Lesenswert?

hast du ein Experimentierboard wo du Testen kannst?
Was macht er denn genau nicht?


btw. '$crystal = 8000000  fällt mir auf.

von Daniel (Gast)


Lesenswert?

waitms ist natürlich genau das was einem anfänger beigebracht werden 
sollte...

von Eli H. (meenzer)


Lesenswert?

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.

von Eli Heis (Gast)


Lesenswert?

Keiner mehr eine Idee???

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
Noch kein Account? Hier anmelden.