-         

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

Thema: Interrupt bei H/L Flanke

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    29
    Beiträge
    121

    Interrupt bei H/L Flanke

    Anzeige

    Nabend,
    ich benutze einen Mega32 AVR und möchte damit das Signal von meiner Lichtschranke auswerten. Mit Assembler funktionierts schon, allerdings krieg ich da das LCD nicht zum laufen und die LEDs reichen nichtmehr aus. Also habe ich es mit Bascom Probiert:
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Config Portd = Input
    Config Portc = Output
    
    Dim Zahler As Integer
    
    On Int0 Unterbrechung
    Config Int0 = Falling                                       'Interrupt 0 bei H/L-Flanke auslösen
    Enable Int0                                                 'Externen Interrupt 0 einschalten
    Enable Interrupts                                           'Interrupts global zulassen
    
    
    Do                                                          'Hauptschleife
    
    Loop
    '---------------------------------------------------------
    Unterbrechung:                                              'Int0-Routine
      If Pind.3 = 0 Then
          Incr Zahler
         Else
          Decr Zahler
         End If
    Return
    Bei einem Wechsel von High auf Low soll die Interruptroutine "Unterbrechung" aufgerufen werden, die dann etscheidet was weiter zu tun ist. Doch soweit kommt es nicht, denn Bascom meldet beim Kompilieren:
    "Error: 219 Line: 11 INT0-INT3 are always low level triggered in the MEGA"
    Was meiner Meinung falsch ist, denn Assembler kann den Intterupt ja auch bei einer H/L Flanke auslösen... Was soll ich denn mit einem Low Level Interrupt? Meint der das ernst, oder verstehe ich diese Fehlermeldung falsch?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Das verstehe ich auch nicht, aber du bist scheinbar nciht der einzige mit diesem Problem:

    http://www.grote.net/bascom/msg20413.html

    Bei mir erscheint die selbe Fehlermeldung. Bei anderen Programmen von mir kann ich das beliebig setzen, scheint ein Problem der Megas zu sein oder nur des Mega32.

    Aber wie die Fehlermeldung sagt, sollte das kein Problem sein, denn "Low level triggert" heißt doch eine H/L-Flnake oder?

    MFG Moritz

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    29
    Beiträge
    121
    ja, wenn man eine andere *def.dat einfügt geht es. Ich weiß nich aber wenn er low level Triggered ist, wird der Interrupt doch immer dann ausgelöst wenn der zugehörige Port 0 ist. Ist das das selbe wie H/L Triggered?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Hallo,
    mit dem MEGA8 und MEGA128 funktionierts. Das ist komisch, naja aber wenn du unbedingt diesen MEGA benutzen willst mach doch ne einfache Emitterstufe davor, also das du ne 180° Phasendrehung kriegst.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    29
    Beiträge
    121
    Hmmm, merkwürdig. Dann ist wohl die m32.def Fehlerhaft. Wie gesagt in Assembler gehts sehr gut, also liegts nicht am Mega32 bzw. Bascom hat eigentlich keinen Grund diese Meldung zu geben ....
    Dann werde ich wohl den Zählerstand über UART in Assembler an den Pc schicken, allerdings muss ich so oder so irgendwann Bascom benutzen.
    Oder ist es vielleicht möglich das Assembler Programm parallel zu nem Basic Programm laufen zu lassen \/ ? lol

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Ich glaube du kannst in Bascom auch assembler-code laufen lassen

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Probier doch erstmal aus, ob das nicht mit dem Low level triggert genau das ist was du willst, also H/L. Würde mich nämlich auch für spätere Projekte interessieren

    MFG Moritz

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.10.2004
    Ort
    PB
    Beiträge
    123
    Du brauchst dem Bascom - Compiler noch nicht einmal zu sagen, dass es sich um Assemblerbefehle handelt. Du kannst, also Basiccode mit Assemblercode mischen. Du solltest nur auf die Lesbarkeit und darauf achten, dass du bei den Assemblerbefehlen SUB, SWAP und OUT ein "!" davor stellst, ansonsten interpretiert der Compiler sie als normale Basic Befehle.

    Eine weiter Möglichkeit wäre, die Compilerdirektiven $asm und $end Asm zu benutzen.

    $asm
    [hier steht ganz viel Assemblercode]
    $end Asm

    Funktioniert beides gleich gut, jedoch finde ich letzteres übersichtlicher.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2004
    Beiträge
    5
    So jetzt hab ich mich hier auch mal angemeldet.
    Zu Deinem Problem: Das scheint wirklich ein Fehler in der m32def zu sein. Du kannst ihn aber leicht umgehen, wenn Du die Einstellung direkt in dem entspr. Register vornimmst und zwar so:
    Die Zeile Config Int0=Falling löschen und dafür
    mcucr.0=0
    mcucr.1=1
    Das bewirkt genau das gleiche.
    Ob mit "Low Level Triggered" das gleiche gemeint ist kann ich nicht sagen, es gibt aber einen Modus, da wird der Interrupt solange ausgeführt wie der Pegel Low ist, also ständig wiederholt(Ich glaube das ist die Grundeinstellung nach einem Reset.)

    Gruß
    Uwe

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    29
    Beiträge
    121
    lol, vielen Dank das man Assembler in Bascom benutzen kann könnte nochmal nützlich werden. Aber diesmal ging es auch einfacher. Bascom meint zwar die Interrupts wären low level triggered, aber wenn ich in dem Entsprechenden Register die Intterupts auf H/L triggered stelle gehts trotzdem \/
    wenn ihr versteht was ich meine...
    Hab das also so gemacht:
    Code:
    Mcucr = 00001010  'Interrupt 0 und 1 bei H/L-Flanke auslösen
    Jetzt funktioniert mein Drehsensor endlich, freu

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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