-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: 20 Taster, Schieberegister, Interruptproblem

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.03.2008
    Alter
    26
    Beiträge
    114

    20 Taster, Schieberegister, Interruptproblem

    Anzeige

    Ich habe einen ATmega1284, dieser hat 32 I/O.

    Dann habe ich 20 Taster, UART, SPI und I2C in Betrieb, eine LCD-Anzeige
    8 Eingänge und 4 Ausgänge und 6 LEDs.
    Also habe ich ein Problem damit die 20 Taster anzuschließen.
    Meine Lösung wäre ein Schieberegister gewesen. Aber um Polling vermeiden zu können dachte ich an Interrupt.
    Nur wie wertet man von 20 Leitungen die Flanken aus (positiv und negativ, ich möchte jede Flanke als Interrupt werten) und gibt die auf ein ODER und schließt die an den ATmega1284 an.
    Edit: Die steigende und fallende Flanke brauche ich vorallem weil bei den 20 Tastern auch Schalter dabei sind.

    Was könnt Ihr mir für eine Lösung vorschlagen?

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Falls die Tasten nicht gleichzeitig gedrückt werden müssen, könnten alle über jeweils unterschiedliche Widerstände an eine ADC-Pin parallel angesclossen werden. Du erhälst nun für jede Taste einen anderen ADC-Wert. Falls doch Tasten gleichzeitig gedrückt werden müssen, kannst du evtl. 2 ADC-Pins nehmen oder mit einem neuen ADC-Wert der sich aus den nun parallel geschaltenen Widerständen ergibt, experimentieren (evtl. kannst du auch eine Taste an 2 Pins anschließen und dann irgendwie errechnen, welche gedrückt ist/sind).
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.07.2009
    Alter
    23
    Beiträge
    133
    Das wäre dann aber wieder Polling. Ich würde bald sagen, die einfachste und platzsparendste Variante ist, die Taster alle (als Matrix oder einzeln) an irgendeinen kleinen µC anzuschließen und mit diesem wiederum einen Interrupt im Atmega1284 auszulösen. Die Pins könnte man durchnummerieren und die "Adresse" und "steigend"/"fallend" ebenfalls an den großen Atmega weiterreichen. Das bräuchte dann allerdings auch 7 Pins.

    Gruß Justin

    Edit: Oh, ich seh grade, die 8 Ausgänge und 4 Eingänge sind nochmal extra?! Dann reichen die Pins natürlich wieder nicht.

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Das bräuchte dann allerdings auch 7 Pins.
    Nein, eine Pin reicht, wenn man die Daten seriell übergibt (evtl. TWI (I²C) verwenden?).
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.07.2009
    Alter
    23
    Beiträge
    133
    Hab ich auch schon überlegt, aber das wirkt mir irgendwie nicht viel einfacher und resourcensparender, als Polling.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.03.2008
    Alter
    26
    Beiträge
    114
    @justin Einen zweiten Mikrocontroller setze ich ungern ein.

    Auch einen größeren Mikrocontroller möchte ich vermeiden.

    Wenn es also doch noch eine Möglichkeit gibt das zu lösen, dann lasst es mich wissen.

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Was ist den wenn du 2 Interrupt Eingänge benutzt? Also einen für die positive Flanke und einen für die negative Flanke. Das kannst du in der Interruptkonfiuration im Programm festlegen.

    Config Int0 = Rising
    Config Int1 = Falling

    Und die 20 Taster schließt du dann an ein ODER an und das ODER dann an Int0 und Int1.
    So gibt das ODER bei einem Tastendruck eine positive Flanke raus. DIese wird dann am Int0 detektiert und der springt dann in die ISR. Sobald du den Taster wieder los lässt "entsteht" eine negative Flanke und der Controller springt in eine andere ISR.
    Alternativ kannste das auch so machen das du 2 ODER-Gatter nimmst und du die Taster dann sowohl an das 1. ODER und an das 2. ODER anschließt.

    Edit: Sorry meinte ODER Gatter keine UND

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.03.2008
    Alter
    26
    Beiträge
    114
    Manchmal ist die Lösung so einfach.

    @Kampi
    Deine Lösung hört sich gut an und gefällt mir recht gut.
    Ich ärgere mich nur gerade das ich nicht selbst darauf gekommen bin.


    Wenn jemand noch eine andere Lösung hat interessiere ich mich dafür auch. Weil es nie schlecht ist wenn man für ein Problem mehrere Lösungen parat hat, vorallem für die Zukunft.

    Ich werde jetzt mal ein paar UND einkaufen.

    Vielen Dank.

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Hab dir mal eine Skizze gemacht wie ich das mit den ODER meine.....
    Das mit den UND war falsch hab da was durcheinander geworfen, weil ich nebenbei was mit UND-Gattern gemacht habe.

    http://s7.directupload.net/file/d/2166/o4aldlrn_pdf.htm

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Edit: Die steigende und fallende Flanke brauche ich vorallem weil bei den 20 Tastern auch Schalter dabei sind.

    Wenn ein Schalter auf H steht kommen aber dann keine anderen Interrupts mehr durch die sich mit LH Flanke melden.

    Sonst müsstest du aus dem Schaltersignal einen Impuls machen.

    Die intelligenteste Lösung dürfte dann doch wieder ein µC sein.

    sast

    雅思特史特芬
    开发及研究

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •