mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Event-Zähler


Autor: Axel L. (ligonap)
Datum:

Bewertung
0 lesenswert
nicht 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:
void delay_ms(int ms) 
{

  TCCR0B |= (1<<CS01) | (1<<CS00) ;
  int i ;
  for(i=0; i<ms; i++) {

    while(TCNT0<16) ;
    TCNT0=0;
  }
  TCCR0B=0;
}



int main()
{

// Als Ausgänge und Eingänge sind Definiert:
DDRB = 0b11101111;


 while(1)                  // Endlosschleife
 {

// Warte 1000 ms 
delay_ms(1000);


// Signal vom Sender?

while ( PINB & (1<<PINB4) ) ;

// LED PB0 Ein (HIGH) 

PORTB |= (1<<PB0) ;


// Warte 1000 ms 
delay_ms(1000);


// Erneutes Signal vom Sender?

while ( PINB & (1<<PINB4) ) ;

// LED PB0 Aus (Low)

PORTB &= ~(1<<PB0) ;


 }

}

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.

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hängt genau an PINB4?

Autor: Axel L. (ligonap)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Axel L. (ligonap)
Datum:

Bewertung
0 lesenswert
nicht 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/Entprellun...

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?

Autor: Hostelfritz (Gast)
Datum:

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

Autor: Axel L. (ligonap)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.