Hallo,
Ich habe einen sehr störanfälligen Empfänger am PINB4 des Attiny13
angeschlossen. Das folgende Programm im µC läuft eigentlich ganz gut:
1 | void delay_ms(int ms)
|
2 | {
|
3 |
|
4 | TCCR0B |= (1<<CS01) | (1<<CS00) ;
|
5 | int i ;
|
6 | for(i=0; i<ms; i++) {
|
7 |
|
8 | while(TCNT0<16) ;
|
9 | TCNT0=0;
|
10 | }
|
11 | TCCR0B=0;
|
12 | }
|
13 |
|
14 |
|
15 |
|
16 | int main()
|
17 | {
|
18 |
|
19 | // Als Ausgänge und Eingänge sind Definiert:
|
20 | DDRB = 0b11101111;
|
21 |
|
22 |
|
23 | while(1) // Endlosschleife
|
24 | {
|
25 |
|
26 | // Warte 1000 ms
|
27 | delay_ms(1000);
|
28 |
|
29 |
|
30 | // Signal vom Sender?
|
31 |
|
32 | while ( PINB & (1<<PINB4) ) ;
|
33 |
|
34 | // LED PB0 Ein (HIGH)
|
35 |
|
36 | PORTB |= (1<<PB0) ;
|
37 |
|
38 |
|
39 | // Warte 1000 ms
|
40 | delay_ms(1000);
|
41 |
|
42 |
|
43 | // Erneutes Signal vom Sender?
|
44 |
|
45 | while ( PINB & (1<<PINB4) ) ;
|
46 |
|
47 | // LED PB0 Aus (Low)
|
48 |
|
49 | PORTB &= ~(1<<PB0) ;
|
50 |
|
51 |
|
52 | }
|
53 |
|
54 | }
|
Aber auf jeden unerwünschten Störimpuls regiert leider der Empfänger.
Könnte man den ATtiny dahingehend programmieren, dass er erst dann eine
Entscheidung fällt (LED ein oder aus), wenn eine vorgegebene Event-Zahl
(z.B. drei Pulse am PINB4) innerhalb einer definierten Zeit (beginnend
mit dem ersten Event) erreicht wird??
Wird die vorgegebene Event-Zahl nicht erreicht, soll das Programm zum
Anfangszustand zurück springen und auf einen neuen Event-Start warten.