-         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Eingänge ständig abfragen mit Bascom

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101

    Eingänge ständig abfragen mit Bascom

    Anzeige

    Hallo,
    kann mir einer sagen, wie ich mit BascomAVR am besten ein paar Eingänge ständig abfrage und wenn dann einer betätigt wird soll ein Unterprogramm aufgerufen werden. So, dass keiner verloren geht wenn z.B. zwei Eingänge
    kurz hintereinander betätigt werden.
    z.B. Portd.0 , Portd.1, Portd.2 Portd.3
    Wie macht man sowas?

    Gruß Hans

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.06.2007
    Beiträge
    18
    Hey,
    wie wäre es denn mit Interrupts dan musst du die Taster allerdings an die interrupt eingänge des avr's legen

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Geht das nicht auch ohne Interupt? Ich habs mit If..Then probiert, das geht zwar, aber wenn ich zwei Eingänge hintereinander betätige vergisst er einen.
    Wenn man alles ganz langsam macht funktionierts, ist aber beschi.. so.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.01.2005
    Alter
    46
    Beiträge
    294
    Poste Deinen Code, dann schauen wir mal was man verbessern kann.
    Das Gegenteil von "gut" ist "gut gemeint"!

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Nun, ganz grob könnte ich mir das so vorstellen, ohne grade an Bascom zu sitzen:

    Angenommen, du hast acht Taster an einem Port.
    Dazu eine Byte-Variable, in die per Interrupt der Zustand
    des Ports als Oder-Verknüpfung geschrieben wird. Die Oder-Verknüpfung deshalb, weil ein gedrückter Taster zwar ein ungesetztes Bit setzen soll, ein ungedrückter Taster soll aber ein gesetztes Bit nicht löschen, das sollen die entsprechenden Unterprogramme machen.

    In der Hauptschleife deines Programms kannst du nun gemächlich die einzelnen Bits dieser Variablen abfragen und bei einer 1 (je nachdem, wie du die Taster beschaltet hast) das entsprechende Unterprogramm aufrufen.
    Dieses Unterprogramme löscht nach Vollendung das entsprechende Bit.

    Selbst wenn du nun alle Tasten auf einmal drückst, geht nix verloren.

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Erst mal Danke alle zusammen!
    Ich muss mir zuerst das mit den Interrupts durchlesen und ausprobieren, das hört sich nämlich gut an. Bisher hatte ich es so wie unten. Probiert hab ichs auch mit If..Then usw.
    Das ging zwar alles so lala, aber eben nicht gescheid. Wenn man schnell hintereinander die Taste betätigt kriegt er oft garnix mit.
    Das ganze schaut so aus:
    Gruß
    Hans

    -AVR 8515 und STK200 Board.
    -LCD Display

    '///// INITIALISIERUNG //////
    $regfile = "8515def.dat"
    $crystal = 4000000
    Config Lcd = 20 * 4
    Config Lcdmode = Port
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6
    Config Lcdpin = Pin , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2

    Config Portd = Input
    Config Portb = Output

    Set Portb.0
    Set Portb.1
    Set Portb.2
    Set Portb.3
    Set Portb.4
    Set Portb.5
    Set Portb.6
    Set Portb.7
    Cls

    '///// HAUPTPROGRAMM ///////
    Do
    Debounce Pind.0 , 0 , Taste0 , Sub
    Debounce Pind.1 , 0 , Taste1 , Sub
    Debounce Pind.2 , 0 , Taste2 , Sub
    Loop

    '---------------------------------------------------------
    Taste0:
    ---------------------------------------------------------
    Cls
    Waitms 1000
    Lcd "Das war Taste0"
    Waitms 1000
    ....
    Return

    usw...


    '///// Unterprogramme /////

    END

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Wenn ich z.B. 5 Taster abfragen will und der AT908515 nur zwei Interrupt -Pins INT0 und INT1 hat. Was dann?
    Dann müsste ich doch von jedem Taster noch eine Leitung abzweigen und damit auf ein Externes ODER gehen (evtl. reichen auch 5 Dioden) und vom Ausgang des ODERs dann auf den INT0- Eingang des AVR.

    Wenn jetzt irgend ein Eingang betätigt wird, dann gibts einen INTERRUPT an INT0 (PD2) und ich kann die Interruptroutine aufrufen.

    In der INTR Routine lese ich dann die Eingänge ein und schaue nach, wer von denen auf "1" war. Ist das so richtig?

    Hat jemand eine Idee obs auch ohne die externe Schaltung geht?
    Wie würde das mit der Interruptroutine dann ausschauen?
    Hat mal jemand ein paar Codezeilen?

    Danke nochmal Hans55

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Ich glaube, du hast mich nicht richtig verstanden.

    Die Taster sind alle an einem normalen Port. Ein Interrupt, der z.B. alle 10 Millisekunden ausgeführt wird, springt in ein Unterprogramm, in dem die gesetzten Bits in eine Variable übergeben werden.
    HIER kommt dann eine logische Oder-Verknüpfung, da die bisher gesetzten Bits in der Variable bleiben und nur die per Tasten hinzugekommenen eingetragen werden sollen.
    Mein Hexapod im Detail auf www.vreal.de

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Hallo Meckpommer,
    als Anfänger mit Bascom (und über 55) hat man schon so seine Probleme. Ich finde ja nicht mal einen Befehl wie OR oder AND um auf die schnelle vergleichen zu können, welcher Eingang sich geändert hat. Vermutlich gibts den in Bascom nicht. Das alles ist vermutlich auch so einfach, dass man in keinem Forum was findet.
    Naja, dann heißt das eben weiterforschen.
    Gruß Hans55

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    die Operatoren sind gut versteckt auf dieser Seite zu finden,
    http://avrhelp.mcselec.com/language_fundamentals.htm
    auch in der lokalen Hilfe.

    Wenn soviele Taster auf einmal abgefragt werden sollen, und alle an einem Port sind (wenn nicht müssen die halt alle an einen ), kann man doch den ganzen Port auf einmal ein lesen, und dann nur vergleichen,
    ob der Wert grösser 0 ist, wenn die Taster nach Vcc schalten,
    oder kleiner 255 wenn die nach Gnd schalten.
    Danach kann man immer noch die einzelnen Werte raussuchen, um den richtigen Taster zu finden.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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