-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Externe Interrupts beim Atmega32

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.04.2004
    Ort
    München
    Alter
    28
    Beiträge
    288

    Externe Interrupts beim Atmega32

    Hi!
    Ich hab hier nen ATmega32, den ich mit Bascom programmiere. Jetzt möchte ich, dass sobald an einem der 3 Externen Interrupt ports (INT0-2)
    sobald der Zustand von High auf Low wechselt eine Unterrutine aufrufen, bei dem 3 Variablen verendert werden sollen...
    Jetzt hab ich das Problem, dass ich diese Interrupts nicht also Falling definieren kann, da das laut Bascom ,ka warum, nicht geht... Die sind irgendwie immer auf Lowlvl gestellt ?! Warum ?? Wie kann ich das endern?
    Plz HELP !!
    Gruß Javik

  2. #2
    Gast
    Hallo Javik,
    Bascom stellt Dir frei, ob der Int bei fallender oder steigender Flanke ausgelöst werden soll.
    Habe keinen Mega32 zum testen....aber so sollte es doch klappen:

    $crystal = 16000000
    $regfile = "m32def.dat"
    '-----------------------------------
    Config Int0 = Falling 'extern. Interrupt Config
    Config Int1 = Falling
    Config Int2 = Falling
    On Int0 Int0_routine
    On Int1 Int1_routine
    On Int2 Int2_routine
    Enable Int0
    Enable Int1
    Enable Int2
    Enable Interrupts
    '-----------------------------------
    Dim Variable_1 As Byte ' Variablen deklarieren
    Dim Variable_2 As Byte
    Dim Variable_3 As Byte
    '-----------------------------------
    Do 'Hauptprogramm

    Loop
    End
    '-----------------------------------
    Int0_routine: 'Interruptroutine 0
    Incr Variable_1
    If Variable_1 = 255 Then
    Variable_1 = 0
    End If
    Return
    '-----------------------------------
    Int1_routine: 'Interruptroutine 1
    Incr Variable_2
    If Variable_2 = 255 Then
    Variable_2 = 0
    End If
    Return
    '-----------------------------------
    Int2_routine: 'Interruptroutine 2
    Incr Variable_3
    If Variable_3 = 255 Then
    Variable_3 = 0
    End If
    Return

    Viele Grüße
    Daniel

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.04.2004
    Ort
    München
    Alter
    28
    Beiträge
    288
    Ja, so hab ichs mir auch vorgestellt aber bei Bascom steht drin:

    The MEGA has also INT0-INT3. These are always low level triggered so there is no need /possibility for configuration.
    The number of interrupt pins depend on the used chip. Most chips only have int0 and int1.
    und wenn ichs doch so hinschreib: Config Int0 = Falling
    kommt beim compilieren dann der Fehler:
    INT0-3 are always LOW Level triggered in the MEGA
    Was sagst du dazu ?!?!
    Javik

  4. #4
    Gast
    Hallo

    Was passiert denn, wenn du das entsprechende Register direkt beschreibst.

    z.B.:
    MCUCR = 2

    für INT0 bei fallender Flanke .

    MFG
    Dieter

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.04.2004
    Ort
    München
    Alter
    28
    Beiträge
    288
    Hi
    Nein sry habs versucht, aber dann macht er gar keinen interrupt mehr...
    Fällt dir noch was anderes dazu ein??
    Gruß Javik

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2004
    Ort
    durmersheim international
    Alter
    56
    Beiträge
    159
    hi,

    warum willst du denn die int's konfigurieren?
    zitat: ...so there is no need /possibility for configuration
    sie brauchen nicht konfiguriert werden, nur enablen und schon sollten die funzen.

    gruss, harry
    der kopf ist rund damit das denken seine richtung ändern kann...

  7. #7
    Gast
    Hallo

    Weil er auf die fallenden Flanke reagieren will und nicht auf die steigende, warum auch immer. Geht auf jeden Fall.

    Probier mal das

    Mcucr = 10
    Gimsk = 224

    für das

    Config Int0 = Falling 'extern. Interrupt Config
    Config Int1 = Falling
    Config Int2 = Falling


    Bei Bascom heißt das GICR anscheinend GIMSK , laut m32def.dat.

    MFG
    Dieter

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2004
    Ort
    durmersheim international
    Alter
    56
    Beiträge
    159
    hi nochmal,
    klar, hab ich schon kapiert dass er auf die fallende flanke reagieren will.
    geht ja auch, oder andersrum, ein low-level int kann nicht durch steigende flanken ausgelöst werden.
    die int's sind von haus aus low-level getriggert, d.h. bei einem wechsel von high nach low wird erstmalig ausgelöst. ein low-level int löst aber immer wieder aus, solange der pin low bleibt. folglich muss als erstes in der int-routine der ausgelöste int disabled werden, dann kann der restliche code abgearbeitet werden.
    gruss, harry
    der kopf ist rund damit das denken seine richtung ändern kann...

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    50
    Beiträge
    247
    Hallo

    Klar geht das so auch, aber ob das so der "richtige" Weg ist, lass ich mal offen.

    Beim Mega 8 in Bascom bringt er die Fehler Meldung nicht, von daher tippe ich auf ein Problem in Bascom mit dem M32.

    MFG
    Dieter

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.04.2004
    Ort
    München
    Alter
    28
    Beiträge
    288
    Hi
    @Harryup: du hast mein Problem erfasst ^^ er soll nur einmal die unterrutine durchgehen und dann erst wieder wenn das Signal von High auf Low wechselt...
    Mit dem Disablen, wie funst des ? Weil dann wird der interrupt doch nur einmal ausgeführt und dann is er ja Disabled oder ?

    Edit:
    Wenn ich in dieser Int0 Intrrupt Routine ne Variable ändere, kann ich dann über die in einer Timer0 interruptroutine verfügen??
    Gruß Javik

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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