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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren