www.mikrocontroller.net

Forum: Compiler & IDEs Clickzähler mit 16 PIN


Autor: Christoph Krikl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

zur Hardware: atMega8, 2x PCF8574 interrupt verbunden mit INT0

ich hab nun also 16 Eingänge, bei Jedem status wechsel am PCF wird ein
interrupt ausgelöst, ich lese bei pcf aus und vergleiche den vorher
wert mit dem aktuellen wert hab ich irgentwo einen flanke von 1-> 0
zähle ich das als klick, max 16 klick pro pin, geht also ein PCF schön
in 4 char rein.

bis dahin ja noch ganz esay und die Variablem und die Größen sind auch
fix, ist auch super durch die interrupt und ums prellen der taster
brauch ich mich auch net kümmern

jetzt will ich aber nach 1sec wenn kein weiterer Click kommt ein
ereignis auslösen, abhängig von der Click zahl.

mit einem Pin ja kein problem timer setzen wenn er abgelaufen ist kommt
der interrupt der die clicks ausliest und danach das richtige  ereignis
auslöst, wenn ein click vor dem ablauf des timers kommt setzt ich den
zähler einfach wieder auf 1sec zurück.

jetzt für 16 wird das ganze ein bisserl kompleziert und irgetwie gerät
jeder lösungsansatz bei mir aus den fugen und wird zu einem Monster aus
buffern und IFs.

überlegt hätte ich mir ja
einen buffer als fifo für den timer(mit nächstem timerwert, Port und
Pin)
ja nur geht das ja auch nicht weil wenn ein click in der zwischenzeit
kommt müsste ich ja den buffer updaten

ein array nach ports aufteilen, bei jedem timerdurchlauf den gesamten
dieses komplett nach den niedrigsten wert zu druchsuchen ist ja nicht
grad sehr fein

und umgekährt bei jedem klick das alles zu machen ist ja auch nicht
wirklich schön

nur fällt mir irgentwei nicht besseres ein, hat jemand von euch
vielleicht eine gescheite lösung für ein solches problem???

danke
Christoph

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Timer, der z.B. alle 50ms überläuft und kontinuierlich einen counter
hochzählt. Dann für jeden Taster eine Variable, die die Klicks zählt und
eine, die den counter-Stand bei der letzten Betätigung enthält. Im
Timerinterrupt überprüfst du dann, ob bei einem der Taster die letzte
Betätigung mehr als 20ms zurückliegt und die clicks >=1 sind (er also
überhaupt betätigt wurde). Speicherbedarf ca. 40 Byte

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.