Hi @all! Kennt jemand von euch eine Möglichkeit seine I/O-Ports taktflankengesteuert abzufragen? Bei den externen Interrups geht das ja ohne probleme... aber geht das auch bei normalen I/O-Ports? wenn ich sie z.b. in einer schleife abfrage kann ich das eigentlich nur nach einen zustand (z.b. sbis portB, 1), was zur folge hat, dass er den daraus resultierenden Befehl dauern hintereinander ausführt, wenn ich mit dem Finger auf der taste bleibe. Ich programmiere meinen mega162 in Assembler mit AVRstudio. gruß waldemar
Gast
#459591
Den "pin change interrupt" gibt's zwar nicht bei allen AVRs, aber beim Mega162 durchaus schon. Wenn es das nicht ist, dann verrate mal mehr über den Kontext. Also was du damit wirklich erreichen willst.
Gast
#459606
>wenn ich sie z.b. in einer schleife abfrage kann ich das eigentlich nur >nach einen zustand (z.b. sbis portB, 1) Und die Information über aufgetretene Flanken erhälst Du dann, wenn Du den Tastenzustand abspeicherst, denn dann kannst Du bei der nächsten Abtastung den aktuellen Wert mit dem vorherigen vergleichen. Das Abspeichern kannst Du auf elegante Weise dadurch bewerkstelligen, dass Du das C-Flag je nach Tastenzustand setzt bzw. nicht setzt, und den Wert anschließend in ein "Tastenzustandsbyte" (jeder Taste musst Du ein solches spendieren) schiebst. Das ist ruck-zuck gemacht:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Nun geben Dir die niedrigwertigsten beiden Bits in TASTENZUSTAND (bzw. r16) Auskunft über das Taster-Geschehen: XXXXXX01 --> Taste wurde gerade gedrückt; XXXXXX10 --> Taste wurde gerade losgelassen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Natürlich gibt es noch hundert andere Möglichkeiten, das zu realisieren. Ich hab Dir nur eine vorgestellt, die mir besonders gut gefällt :-).