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
Pin Change Interrupt eventuell? Wird ausgelöst bei steigender und fallender Flanke.
Lucas S. schrieb: > Ich hab schon an malloc und so gedacht, http://www.c-howto.de/tutorial/arrays-felder/speicherverwaltung/ malloc = memory allocation, Speicherreservierung. Wo vermutest du bei malloc einen Zusammenhang mit Flanken(-Erkennung) ?
Du brauchst pro Pin Speicher für mehrere Zeitpunkte. Da die Anzahl der Pins beim Compilieren bekannt sein dürfte, könntest du einfach ein zweidimensionales Array benutzen. Oder was meinst du?
Kein Mensch versteht genau was du möchtest? Eventuell passt ja PeDas Entprellroutine für dein Problem.
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.
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.
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
MaWin schrieb: > uint8_t steigend=taster&^alt; > uint8_t fallend=^taster&alt; Ist deine Alt-Gr Taste defekt?
@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.
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]
:
Bearbeitet durch Moderator
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. Warum willst Du denn mehrere Flanken speichern, soll das ein Logikanalysator werden?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.