www.mikrocontroller.net

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


Autor: Eli Heis (meenzer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eli Heis (meenzer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Axel Krüger (axel)
Datum:

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


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

Autor: Daniel (Gast)
Datum:

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

Autor: Eli Heis (meenzer)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Eli Heis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner mehr eine Idee???

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.