Hallo zusammen,
ich bin auf der Suche nach einem C-Code für den Atmega8.
An PD2 liegt ein Rechtecksignal an mit ca. 10 Hz. Wird dieses Signal
erkannt, soll an PD4 ein Dauersignal ausgegeben werden, solange das
Rechtecksignal an PD2 anliegt.
Habe zwar schon einen Code gebastelt aber der ist mir zu ungenau und
reagiert natürlich etwas "träge". Ausgang PD4 reagiert manchmal zu lange
nicht, und zwar genau dann, wenn an PD2 gerade eine steigende Flanke
kommt, wenn die Schleife beim "delay" Befehl ist, so ist das Signal an
PD2 dann wieder futsch, wenn die Schleife von vorne beginnt und PD4 ist
ungewollt nicht aktiv.
Jetzt möchte ich gerne das ganze über Interrupt Programmierung lösen.
Macht das Sinn? Oder kann man den bestehenden Code so hinbiegen, dass es
passt?
Danke
Christian
1 | // Hauptschleife
|
2 | while(1)
|
3 | {
|
4 |
|
5 | // WK-IN vorhanden?
|
6 | if ( (PIND & (1<<PIND2)) )
|
7 | {
|
8 | // Signal ausgeben
|
9 | PORTD &= ~(1<<PD4);
|
10 | }
|
11 |
|
12 | // WK-IN nicht aktiv?
|
13 | if ( !(PIND & (1<<PIND2)) )
|
14 | {
|
15 | // Auf 100% Tastverhältnis "erweitern" und dann WK-OUT deaktivieren
|
16 | _delay_ms(100);
|
17 | PORTD |= (1<<PD4);
|
18 |
|
19 | }
|
20 |
|
21 |
|
22 | }
|