Forum: Mikrocontroller und Digitale Elektronik _delay_ms() Funktion einbinden


von Daniel H. (daniel_fh)


Lesenswert?

Hallo Leute,
Habe ein kleines Problem...
Also, meine Funktion die ich programmiert habe funktioniert soweit
(siehe Code) --> Taster sind entprellt!!!

int main(void)
{
  // PD0 als Eingang
  DDRD &= ~(1<<PD2);
  PORTD |= (1<<PD2);

  //PD5 und PD6 als Ausgang
  DDRD |= (1<<PD5) | (1<<PD6);


  uint8_t zaehle = 0;

  for(;;)
  {
    if( debounce( PIND, PD2 ))
        zaehle++;

   switch( zaehle )
   {
     case 1:  PORTD |= (1<<PD5);
   break;

     case 2:  PORTD &= ~(1<<PD5);
   break;

     case 3:  PORTD |= (1<<PD6);
   break;

     default: state = 0;
              PORTD &= ~(1<<PD6);
   break;

   }
  }
}


Nun wollte ich jetzt als weitere Funktion, dass sich der Ausgang PD5 
bzw. PD6 entweder nach einen erneuten Tastendruck (PD2) ODER nach einer 
bestimmten Zeit auschalten soll und der nächste Zustand abgefragt werden 
kann. Nur weis ich, dass das nicht so einfach geht, da das Programm erst 
einmal bei Verwendung der _delay_ms() Funktion diese abarbeitet. Deshalb 
meine Frage: Wie kann ich so Etwas realisieren, bzw kann ich die 
_delay_ms() Funktion ODER verknüpfen?

Bedanke mich schon einmal im Voraus für euere Antworten. Danke!

von dom (Gast)


Lesenswert?

Verwende einen Timer-Interrupt und setze darin ein Flag, welches du in 
der main-llop abfragst.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich denke, du solltest dir mal ansehen, wie man einen Timer benutzt
und wie man ihn regelmäßig Interrupts generieren lässt.

Edith: dom war paar Sekunden schneller...

von Daniel H. (daniel_fh)


Lesenswert?

Okay...
Wie viele Taster kann ich abfragen? Bzw. für wie viele Taster diese 
Funktion realisieren, bzw die Interrupts benutzen? Habe 4 Taster.

von Daniel H. (daniel_fh)


Lesenswert?

Will diese Funktion jeweils 4 mal realisieren, sprich jeweils 1 Taster 
steuert wie im Code beschrieben 2 Ausgänge. Und genau das möchte ich 4 
mal machen. Also 4 Taster 8 Ausgänge.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Kein Problem. Wenn du pünktlich Frühstücken, Mittagessen und Abendessen 
willst, brauchst du auch nur eine Uhr.

von Daniel H. (daniel_fh)


Lesenswert?

Gute Antwort ;)
Danke, dann werd ich mir das mal anschauen.

Danke für eure Antworten

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.