Flankenerkennung in C

OP #5871874
Lesenswert?
• ▲
▼
Hi ich hab da mal eine Frage,
ich will über die Arduino IDE ein Programm schreiben, wobei ich des 
Öfteren eine positive und negative Flanke auswerten muss.
Ich brauche deswegen eine universelle Funktion für Flanken.
Einzelne Flanken sind kein Problem, aber da ich für mehrere Flanken ja 
auch mehrere Speicher brauche funktioniert das nicht ohne weiteres mit 
einer einfachen Funktion.
Ich hab schon an malloc und so gedacht, aber so ganz klar ist mir das 
nicht mehr.
Vielleicht hat ja jemand Ahnung

Danke im Voraus
Moderator #5871909
Lesenswert?
• ▲
▼
Lucas S. schrieb:
> Einzelne Flanken sind kein Problem, aber da ich für mehrere Flanken ja
> auch mehrere Speicher brauche funktioniert das nicht ohne weiteres mit
> einer einfachen Funktion.

Eine Kombination mehrerer gleichartiger Speicher, die sich in einer
Programmschleife bearbeiten lassen, nennt man Array (s. Beitrag von
Dussel).

Informiere dich also über Arrays und Schleifen, dann wirst du vermutlich
die Lösung deines Problems finden.
Gast #5871920
Lesenswert?
• ▲
▼
Gestern bei der WM war es mit der Flankenerkennung auch nicht weit her.

Ich verstehe aber den Zusammenhang mit malloc nicht ganz. Allerdings ist 
Arduino-Code ja C++, und du kannst auf new ausweichen.
Gast #5871931
Lesenswert?
• ▲
▼
Lucas S. schrieb:
> Vielleicht hat ja jemand Ahnung

Schon. Folgenden code ausreichend oft wiederholen:
1
static uint8_t alt=0;
2
uint8_t taster=PIND; 
3
uint8_t steigend=taster&^alt;
4
uint8_t fallend=^taster&alt;
5
if(steigend&1)
6
 // Eingang PD0 runtergedrückt
7
if(fallend&1)
8
 // Eingang PD0 losgelassen
9
if(steigend&2)
10
 // Eingang PD1 runtergedrückt
11
if(fallend&2)
12
 // Eingang PD1 losgelassen
13
:
14
if(steigend&0x80)
15
 // Eingang PD7 runtergedrückt
16
if(fallend&0x80)
17
 // Eingang PD7 losgelassen
18
alt=taster;
Ich befürchte aber, bis du das verstehst,  musst du noch viele 
Grundlagen über das Programmieren erlernen. Mit malloc bist du dermassen 
auf dem falschen Dampfer...

Ic
#5871992
Lesenswert?
• ▲
▼
@Lucas
Da fehlen noch relativ viele Informationen.
Geht es, im Großen und Ganzen um die Erkennung eines Tasters/Schalters 
bzw. dessen Stellung, oder geht es darum ein Signal zu bewerten, dass 
sich entweder um µV/Woche oder um KV/µs ändert? Da gibt es nämlich den 
einen oder anderen Unterschied.
Gast #5872052
Lesenswert?
• ▲
▼
Will versuchen zu helfen. Wahrscheinlich geht aber die Formatierung 
kaputt.
Steigend heißt ja i.d.R. Wechsel von 0 auf 1. Also neuer Wert und der 
invertierte Wert 'von vorher' beide 1.
1
  alt: 0 0 0 0 0 1 1 1 0
2
 tast: 0 0 0 0 1 1 1 0 0
3
 ~alt: 1 1 1 1 1 0 0 0 1
4
~tast: 1 1 1 1 0 0 0 1 1
5

6
~alt & tast : 0 0 0 0 1 0 0 0 0
7
                      |   
8
                      |          
9
                      steigend, wechsel von 0 auf 1
10

11
alt & ~tast : 0 0 0 0 0 0 0 1 0 
12
                            |   
13
                            |          
14
                            fallend, wechsel von 1 auf 0

Reicht das als Erklärung für MaWin's post? Ob das jetzt ein Eigentor 
oder Bösartigkeit ist, weiß ich nicht.
Das Beispiel oben ist ja nur auf ein bit bezogen. Wie in MaWin's post zu 
sehen sei das dann auf ein ganzes Register zu erweitern.

Der Einwand ob das interne Signale sein sollen, oder etwas was von außen 
reinkommt (also ggf. entprellt werden muss) ist aber nicht von der Hand 
zu weisen. Da kommt dann Pedas Routine ins Spiel.

Deine Frage kommt aber tatsächlich etwas wenig mit Bedacht formuliert 
rüber nach dem Motto ich hau mal paar verwandte Begriffe raus und warte 
ab.
Das erklärt wohl den Reflex von z.B. user MaWin :-)

[Mod: Absatz formatiert]

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.