-
        

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

Thema: PCINT beim Mega88

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.06.2005
    Beiträge
    42

    PCINT beim Mega88

    Anzeige

    Hi

    ich möchte mit Bascom auch die Interrupteingänge PCINT1 bis 23 nutzen. Nur wie nutzt man diese Interruptfunktionen der Pins in Bascom? Geht das überhaupt?

  2. #2
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.990
    Blog-Einträge
    1
    Es gibt dazu ein Demo von MCS. Es funktioniert aber laut MCS nur mit der neusten Bascom-Version

    Code:
    '---------------------------------------------------------------------------
    '                       (c) 1995-2005, MCS Electronics
    '                             PCINT_CHANGE.BAS
    ' This sample shows how to use the PC interrupts
    '---------------------------------------------------------------------------
    
    $regfile = "m88def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Print "{027}[2J";        ' when you have a terminal emulator, this will clear the screen
    Print "Test M88 ints"    ' init message
    
    'The M88 and M168 can detect a level change on all port pins.
    'We will just check on portB, pins 0-3
    
    Config Portb = Input
    Portb = &HF                'activate pull up
    
    Enable Interrupts        'enable global ints
    Enable Pcint0              'we enable pcint0 as this has pcint0-pcint7
    On Pcint0 Isr_pcint0    'we jump to this label when one of the pins is changed
    Pcmsk0 = &B00001111      'enable pcint0-pcint3  (portb.0-portb.3)
    'With pcmsk you individual select which pins must react on a logic level
    'When you write a 1, the change in logic level will be detected.
    
    Do
      nop
      'you can do anything here
      'But we show how to use the pin level change in manual mode without interrupts
      'Say we want to detect logic level change of pin 23, (PINC.0) / INT8
      Config Pinc.0 = Input     'you can also detect output changes but we use input
      Pcmsk1 = &B00000001   ' enable the bit of PCINT8 which is in PCMSK1
      If Pcifr.pcif1 = 1 Then     ' change detected
          Print "pinc.0 has changed"     'in this case it must be pinc.0
          Pcifr.pcif1 = 1                      ' write a 1 to clear the flag so we can detect it again
      End If
    Loop
    
    
    Isr_pcint0:
      Print "Pin change " ; Bin(pcmsk0) ; Spc(3) ; Bin(pinb)
      'As you see the mask does not change, so to find out which pin changed,
      'you need to read the PINB register.
    Return
    
    End

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Ich habe folgenden Code:

    Code:
    '---[ SET INTERRUPT LOGIC ]-----------------------------------------------------
    Sreg.7 = 0
    
    On Int0 Isr_stop
    On Int1 Isr_ini
    On Int2 Isr_phase_a_edge
    On Pcint3 Isr_ini
    
    Eicra = &B00011111
    Eimsk = &B00000111
    Eifr = &B00000111
    
    Pcicr = &B00001000
    Pcifr = &B00001000
    Pcmsk3 = &B01010011
    Pcmsk2 = &B00000000
    Pcmsk1 = &B00000000
    Pcmsk0 = &B00000000
    
    Sreg.7 = 1
    leider will er den PCINT3 nicht kennen / sagt das er ihn nicht kennt meine Bascom Version ist die 1.11.8.2 (Vollversion)

    tobi

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    der Mega88 hat ja auch nur 3 Ports, die gehen von 0-2 !
    Welchen Interrupt Du aktivieren musst, hängt vom Port ab, an dem das gewünschte Pin hängt.

    Suche mal nach PCINT, das haben wir vor einiger Zeit mal genauer beschrieben.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    sry... ich wollte kein neues thema aufmachen habe den mega 644

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Macht ja nix, das Prinzip ist das gleiche.
    Wirf mal die Suche an nach PCINT,
    sind gleich die ersten paar Beiträge.

    zB:
    http://www.roboternetz.de/phpBB2/zei...=206514#206514
    http://www.roboternetz.de/phpBB2/zei...=199634#199634

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Also ich hab mal auf 1.11.8.3 geupdated...

    IMHO verstehst du das Prob. nicht so ganz

    der ATM 644 hat nen PCINT3 leider kennt Bascom diesen interrupt nicht (bild)

    Mfg
    Tobi
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken bascom.png  

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Ja,
    habs grad gesehen, PCINT3 geht mit der 11.8.3 Demo auch nicht !
    Da müssen dann andere Leute was machen, mal bei MCS oder wie die heissen vorbeimailen.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    joo bei der vollversion tuts eben auch nich *grpf* für was gibt man da geld aus...

    gibt es eine möglichkeit das irgentwie mit assembler zu lösen - gibts da was?

    mfg
    tobi

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Ich hab was gefunden.
    schau mal in die m644def.dat, ganz am Ende sind die Int-Vector-Namen,
    und die für den PCINT3 ist falsch geschrieben !!

    Wenn man das ändert, schon gehts \/

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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