- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

Thema: debounce und interrupt kolision

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210

    debounce und interrupt kolision

    Anzeige

    Powerstation Test
    servus leute

    ich hab da ein problem mit dem 90S8515

    auf dem portD ist die tastenmatrix mit KBD
    es sind nur 7 ports belegt

    den D.3 alias int1 würde ich gerne zum detecten eines externen interupts nutzen

    problem getkbd debouncet ja alle 20ms den port

    kann ich irgendwie den debounce auf dem nicht für kbd genutzten pin abschalten

    mit ddrd=&B11111011 gehts nicht schon versucht

    mit
    disable int1
    taste=getkbd()
    enable int1

    gehts auch nicht
    der interrupt komt trotzdem


    danke

    irgendjemand ne idee

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Nein Getkbd läst sich nicht auf weniger konfigurieren ,nur auf 6 oder 7 Reihen.

    Ignorier in Getkbd einfach die Tasten dieser Reihe.
    Gruß
    Ratber

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210
    das hilft nicht weiter da das debounce dsignal mir den interrupt auslöst

    werde wohl den port tauschen müssen
    tasten an A und LCD an D dann sollte das problem gelöst sein

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    ......da das debounce dsignal mir den interrupt auslöst .......
    Verstehe ich jetzt nicht.

    Gib mal info wie du das Verschaltet hast.
    Gruß
    Ratber

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    ich vermute er meint, das er per Debounce n Unterprogramm
    anspringt. Der Unterschied zwischen Int und Sub ist nicht
    jedem geläufig
    was er aber mit debounced mir alle x ms den Port meint erschließt
    sich mir auch nicht.
    und wie er den debounce abschalten will hängt mir auch zu hoch.

    @magic33:
    Empfehlung: Poste mal den Code, dann kann man Dir am effektivsten helfen.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210
    code ist unwichtig

    ich hab meinen portd mit einer 4x3 tasten matrix belegt
    die über getkbd() abgefragt wird

    diese interne Bascom routine debounct den ganzen portd ist ja auch richtig

    nun ist der d.3 der externe interrupt int1 am port noch frei NICHT mit TASTEN belegt

    den würde ich gerne nutzen

    Jedoch funzt das mit disable interupt
    vor getKBD() und enable interrupt nach getKBD nicht

    ich hab nun den externen int auf ein freien port an A gelegt und frag den
    halt via timer interrupt ISR ab somit bin ich auch da wo ich hinwollte ohne internen Interrupt INT1

    wollte nur wissen ob das möglich wäre die pins für interupt an portd zu nutzen wärend da die getkbd() subroutine läuft die alle 20ms den port debounced sind die interupts dann nutzlos da sich ja der portzustand ändert

    vieleicht hatte ja das problem schon wer und konnte dafür eine lösung finden

    MARK von Bascom hat die anregung aufgenommen und wird in einer zukünftigen version
    wie bei LCD die benutzten pins bei getkbd als seperate config dem compiler übergeben

    Danke

    VORTEIL man kann eine 3x3 Tastatur nutzen ubnd hat die rest2Pins zur freien verfügung
    bei 3x4 immerhin noch 1nen pin der kann entscheident sein

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    wollte nur wissen ob das möglich wäre die pins für interupt an portd zu nutzen wärend da die getkbd() subroutine läuft die alle 20ms den port debounced sind die interupts dann nutzlos da sich ja der portzustand ändert
    ich verstehe zwar nicht, was debounce mit Getkbd() zu tun hat, aber warum benutzt du nicht eine eigene Function, um die Tasten abzufragen ?
    Getkbd macht nichts anderes als diese Function ...

    Code:
    $regfile = "8515def.dat"
    
    
    
    'dimension a variable that receives the value of the pressed key
    Dim B As Byte
    
    Declare Function Keyboard()as Byte
    
    'loop for ever
    Do
    
      B = Keyboard()
      'die Werte von B entsprechen denen von "Getkbd()"
    
    Loop
    
    
    Function Keyboard
    Local K As Byte
    
    K = 16                                                      'keine Taste gedrückt
    Portd = &B11110111                                          'außer Portd.3 alles auf High
    Ddrd = &B00000111                                           'Portb.0,1,2 = Ausgang, der Rest Eingang
    Portd = &B11110000                                          'Pullup aktivieren
    Waitus 5                                                    '5µs warten
    
    If Pind.4 = 0 Then K = 0
    If Pind.5 = 0 Then K = 4
    If Pind.6 = 0 Then K = 8
    If Pind.7 = 0 Then K = 12
    
    Ddrd = &B11110000                                           'Portb.4,5,6,7 = Ausgang, der Rest Eingang
    Portd = &B00000111                                          'Pullup aktivieren
    Waitus 5                                                    '5µs warten
    
    If Pind.0 = 0 Then K = K + 0
    If Pind.1 = 0 Then K = K + 1
    If Pind.2 = 0 Then K = K + 2
    
    Keyboard = K
    End Function
    Damit kann man dann jede Tastaturkombination benutzen.

Berechtigungen

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

Solar Speicher und Akkus Tests