Forum: Mikrocontroller und Digitale Elektronik Event-Zähler


von Axel L. (ligonap)


Lesenswert?

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.

von Oliver J. (skriptkiddy)


Lesenswert?

Was hängt genau an PINB4?

von Axel L. (ligonap)


Lesenswert?

Skript Kiddy schrieb:
> Was hängt genau an PINB4?

Der PINB4 wird über ein BC548 auf Masse gezogen. Am BC548 befindet sich 
ein 08/15 Empfänger (433 MHz) vom blauen "C". Mir ist schon klar, dass 
bessere Sende/Empfangsmodule diese Probleme nicht haben, aber ich wollte 
nicht mit Kanonen auf Spatzen schießen.

Sender und Empfänger befindet sich nicht an einem TX/RX-PIN.

Wie schon geschrieben, im Prinzip läuft alles, aber ich möchte die 
Störimpulse negieren. Eine entsprechende Pulsfolge könnte da doch 
Abhilfe schaffen, oder?

von Karl H. (kbuchegg)


Lesenswert?

Könnte, möglicherweise.


Ich würde das ganze aber wahrscheinlich eher wie das Problem des 
Entprellens von Tastern angehen.
Entprellung
sie Interrupt Lösung.

nur dann, wenn das Signal lang genug ist, wird es auch tatsächlich 
gewertet. Störimpulse haben die Eigenschaft, dass sie meisten nur sehr 
kurz sind.

Unud mit delay wird das sowieso nichts.

von Axel L. (ligonap)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ich würde das ganze aber wahrscheinlich eher wie das Problem des
> Entprellens von Tastern angehen.
> Entprellung
> sie Interrupt Lösung.

Schwebt Ihnen dieses Lösung vor?
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29

Ist ein sehr großes Programm, durch das ich mich erstmal durchkämpfen 
muss, um dessen Funktion zu verstehen. Ein Umschreiben auf mein quasi 
Ein-Tasten-Problem am ATTiny sollte doch möglich sein, oder?

von Hostelfritz (Gast)


Lesenswert?

Nimm "Debounce" in BASCOM , Standard sind dann 25 msec. Entprellzeit.
Entprellzeit auch leicht änderbar mit Config debounce...

von Axel L. (ligonap)


Lesenswert?

Hostelfritz schrieb:
> Nimm "Debounce" in BASCOM , Standard sind dann 25 msec. Entprellzeit.
> Entprellzeit auch leicht änderbar mit Config debounce...

Das Problem mit "Debounce"/"Config debounce" ist, dass ich zwar mit 
Config den Wert hoch setzen kann, aber auch gleich die Pulse vom Sender 
weg filtere.
Folge: Die LED wird nicht mehr geschaltet.

Bessere wäre statt "Debounce"/"Config debounce" eine Art Zählung der 
Pulse vom Sender innerhalb eines vorgegeben Zeitraums. Stimmt die 
Pulszahl nicht mit dem Sollwert überein, so war es kein Signal vom 
Sender.

Übrigens, man glaubt gar nicht wie viele Pulse so eine Leuchtstoffrohre 
abgibt. Ich schätze, dass die Pulse auch sehr unterschiedliche Längen 
haben und so mit den Pulsen des Senders vergleichbar sind.

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.