So Sachen wie delay/wait/sleep kontra Timer/Interrupt sind an sich nicht Sprachabhängig, sondern bei fast allen µC üblich.
Delay ist fast immer ein KO für die Ausführung mehrerer Aktionen, da es die Programausführung einfach anhält. Sprich es wird nichts anderes verarbeitet (außer Hardwaretimer und Interrupts).
Für so was zwei Attiniy zu nehmen, ist tatsächlich nicht schön. Ob es einfacher umzusetzen ist weis ich nicht, da ja immer noch der eine per Delay auf nichts reagiert. also auch nicht auch ein Signal von außen.
Der führt dann 2068 Millisekunden pluß ein paar CPU Zykluszeiten das Blinken aus und reagiert da genau einmal auf einen eventuell grade dann anstehenden Pegel an einem Eingang.
Entweder man baut das ganze mit diskreter Schaltlogik auf oder muß sich einmal mit µCs an sich und dem C-Dialekt vom Amtel Studio im besonderen auseinander setzen.
Letzteres würde ich jetzt empfehlen.
Der Code von:
https://startingelectronics.org/tuto...-polled-timer/
scheint mir ganz gut zu sein.
Das Tutorial drumrum hilft dann vermutlich auch noch mal etwas weiter.
Code:
#include <avr/io.h>
int main(void)
{
char toggle = 0;
DDRD |= (1 << PD6); // LED on PD6
TCCR0A = 0x02; // Clear Timer on Compare Match (CTC) mode
OCR0A = 0xFF; // number to count up to
TCCR0B = 0x05; // clock source CLK/1024, start timer
while(1)
{
if (TIFR & 0x01) { // timer timed out?
TIFR |= 0x01; // reset timer flag
// toggle LED each time the timer times out
if (toggle) {
toggle = 0;
PORTD &= ~(1 << PD6);
}
else {
toggle = 1;
PORTD |= (1 << PD6);
}
}
}
}
Eventuell klinkt sich hier ja auch noch jemand ein der mit der Kombination "Attiny2313, Amtel Studio 7 und C" vertraut ist.
Bei dem Code oben wäre der Port für die LED anzupassen und der prescaler für den Timer, damit der Blinkintervall zu Deinen Anforderungen passt.
Dann könnte man die Tasterabfrage hinter dem while (direkt vor dem If) einbauen.

Zitat von
Jens1
zu den Tastendrücken hatte ich mir gedacht:
1x drücken, Blinken ein
ein weiters mal drücken LED´s einschalten
ein weiters mal drücken, alles aus und optional PD5 gegen Masse
dann wieder von vorn
Bei dieser Logik, kann man Blinken wählen, Blinken und LED's sowie alles aus.
LED's ohne Blinken ist nicht auswählbar.
Ist das so gewollt?
Oder hast Du diese Option übersehen?
Lesezeichen