-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Interrupt und PCF8574

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.04.2004
    Ort
    Gronau
    Beiträge
    155

    Interrupt und PCF8574

    Anzeige

    Hallo,

    ich habe den Interrupt-Ausgang eines PCF 8574 mit INT5 (PE.5)
    eines Mega128 verbunden. Am PCF 8574 sind Taster gegen
    Masse angeschlossen.

    Ich möchte nun in Bascom eine Interrupt-Routine anspringen und
    dort abfragen, welche Taster gedrückt sind.

    Code:
    Config Int5 = FALLING
    On Int5 PCF_Key
    
    Enable Interrupts
    Enable Int5                                                 
    
    Do
     'irgendwas
    Loop
    
    PCF_Key:
      Print "Taster gedrückt"
    Return
    Mein Problem ist, dass das Interrupt-Label immer/ständig
    angesprungen wird. Wie macht man das richtig?

    Danke: - Reinhard -

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    hast Du überall Pullup Widerstände drin (bei INT und Tastern), damit keine Signale ins flattern kommen?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.04.2004
    Ort
    Gronau
    Beiträge
    155
    @linux_80

    PullUp's sind bei den Tastern dran. Wie soll ich das beim INT
    machen?

    Ich habe gerade noch mal gemessen: wenn ich einen Taster
    drücke, wird der INT-Ausgang vom PCF auf low (0) gezogen.
    Ich kann das Signal aber beim M128 nicht auswerten ...

    Gruß: - Reinhard -

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    im DB unter 7.2 ist es auch dargestellt, Fig.12
    Die Tasten werden dann auch noch prellen,
    wenn nix gedrückt wird sollte zumindest kein INT ausgelöst werden.

    Wenn der M128 beim INT auf falling reagiert, sollte das schon mal dir richtige Richtung sein.

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    der INT -ausgang ist open-drain, verständlicherweise. Hast du das berücksichtigt ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.04.2004
    Ort
    Gronau
    Beiträge
    155
    @PicNick

    was sagt mir das genau?

    Ich habe jetzt den PullUp beim INT installiert (10K gegen VCC) und
    es läuft immer noch nicht ...

    Was muss ich noch einstellen, damit der M128 das Signal auswerten
    kann?

    Gruß: - Reinhard -

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ist der INT-Pin am 128-er als Input definiert ? Ich kann in den diversen Beschreibungen nicht entnehmen, ob das automatisch mit der Interrupt-definition geschieht.
    was sagt mir das genau?
    --> Pullup. Hat sich aber eledigt, seh ich.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.04.2004
    Ort
    Gronau
    Beiträge
    155
    @PicNick

    Den INT-Pin am M128 habe ich nicht explizit als Eingang definiert.

    Der folgende Code läuft fast richtig:

    Code:
    ' TestInt5.bas
    ' ------------
    ' PCF 8574 : P0 <- Taster gegen GND
    '            P4 -> grüne LED -> R -> VCC
    '            P5 -> gelbe LED -> R -> VCC
    '            P5 -> rote LED -> R -> VCC
    '           INT -> 10K -> VCC
    '
    ' M128     :PE5 (INT5) <- CD4050 <- INT von PCF8574
    
    
    $regfile = "m128def.dat"
    
    $hwstack = 64
    $framesize = 64
    $swstack = 64
    $crystal = 16000000                          'Quarzfrequenz 16 MHz
    
    $baud = 19200                                'Baudrate COM1
    $baud1 = 19200                               'Baudrate COM2
    
    Const PCF_Adr = &H40
    
    Dim PCF_Port As Byte
    Dim B As Byte
    
    
    Dim i As Integer
    
    Config Sda = Portd.1
    Config Scl = Portd.0
    
    
    I2cinit                                      'I2C-Bus initialisieren
    Waitms 250
    
    
    '1.Hardware UART
    'keine Definition notwendig (Ausgaben mit einfachem Print möglich)
    
    '2.Hardware UART
    Open "Com2:" For Binary As #1
    
    
    'alle LED's aus (invertiertes Schalten)
    PCF_Port = &B11111111
    I2CSend PCF_Adr , PCF_Port
    
    
    Config Int5 = Rising
    On Int5 INT5_ISR
    Enable Interrupts
    Enable Int5
    
    
    i = 0
    
    
    Print #1 , "Start ..."
    
    
    Do
    
       Print #1 , i ; "->" ; Bin(PCF_Port)
    
       'Tastenstatus lesen
       I2CReceive PCF_Adr , PCF_Port
    
       'gelbe LED an Port P5 einschalten
       PCF_Port.5 = 0
       I2CSend PCF_Adr , PCF_Port
    
       Waitms 250
    
       'grüne LED an Port P4 einschalten
       PCF_Port.4 = 0
       I2CSend PCF_Adr , PCF_Port
    
       Waitms 250
    
       'gelbe & grüne LED aus
       PCF_Port.5 = 1
       PCF_Port.4 = 1
       I2CSend PCF_Adr , PCF_Port
    
       Waitms 500
    
    Loop
    
    
    Close #1
    
    
    End
    
    
    'Service-Routine für INT5
    INT5_ISR:
    
       Incr i
    
       'Tastenstatus lesen, mit entprellen
       I2CReceive PCF_Adr , PCF_Port
       Waitms 50
       I2CReceive PCF_Adr , B
    
       If PCF_Port.0 = B.0 then
          'rote LED an Port P6 umschalten
          Toggle PCF_Port.6
          I2CSend PCF_Adr , PCF_Port
       End if
    
    Return
    Fast deshalb, weil nach ein paar Tastendrücken der Port 0 des
    PCF8574 (also der Port, wo der Taster angeschlossen ist) immer
    auf 0 stehen bleibt ... also kein Interrupt mehr ausgelöst wird.

    Grundsätzlich kann' s doch nicht so schwer sein ... . Kann jemand
    vielleicht noch mal über den Code schauen?

    Gruß: - Reinhard -

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Was den INT betrifft, seh ich da nix Böses.

    Äh, mir fällt ein, daß Bascom in der 1.117.4 Version Probleme mit den Interrupts hatte. Du hast ja wenigstens 1.11.7.8 oder 9 ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    und sollte der INT nicht auf falling reagieren !?
    Wir wärs, als hätte ich in so'nem Datenblatt was davon gelesen !

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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