- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: meine Probleme mit dem Interrupt

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Praxistest und DIY Projekte
    Is ok, ich wollt nur mal sehen, ob die INt1-Bits auch richtig gesetzt werden
    Code:
                    IN	r24,MCUCR
                    ANDI	r24,0xF3          ; da putz er die Mode-Bits  ok
    	ORI	r24,0x0C         ; er setzt beide --> rising   ok
    	OUT	MCUCR,r24
    	IN	r24,GIMSK
    	ORI	r24,0x80          ; enbable int1  ok
    	OUT	GIMSK,r24
    	SEI                                  ; enable interrupts   ok
    das ist also pipifein, kann man nicht meckern. Ich hab gesehen, du hast einen Ellenlangen print in der ISR. Aber der sollte auch nix machen.

    Wie vermutet, kann's nur ein Problem in der Hardware sein.
    Das mit 0 und 5 verbinden wird wohl sehr prellen, da gäb ich nix drauf.

    Ich glaub, mit einer anständigen Außenbeschaltung (schmitt-trigger) wird sich das Problem in nix auflösen.

    Und sollte doch der mega einen Fehler haben, wird sich das dann rausstellen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Gast
    ich denk mal deinem programm fehlt nur ein gescheiter rücksprung aus der interrupt stelle
    du startest das programm
    gehst in eine schleife
    es wird ein int ausgelöst und ausgeführt
    aber wo soll es dann weiter gehen ?
    ... setze mal deine do loop in eine subrotine so richtig mit sub xx
    und end sub
    mfg sven

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124
    Hallo Sven,

    > aber wo soll es dann weiter gehen ?

    genau da wo der Interrupt aufgetreten ist. Ist schließlich Sinn und Zwck eines Interrupts an beliebiger Stelle im Programm ausgeführt werden zu können und anschließend genau da weiterzumachen.


    Ciao,
    Werner

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119
    Hallo Leute, ich hab mich nun seit Langen mal wieder mit meinem Problem mit den INterrupts beschäftigt, und hab mein Prblem immer noch nicht gelöst.
    Ich habe an den Hardware-Interrupt-PIN (PORT D, PIN3 -> INT0 oder PORT D, PIN4 -> INT1) den Ausgang von meinem SHARP GP1A70R (Gabellichtschranke) an diesen Port angeschlossen dort liegt bei LOW 0,08 Volt und bei High 3,7Volt an.
    Jedoch wenn ich den Interrupt auf Rising stelle, dann läuft meine Variable ständig hoch ohne das sich der Wert am Sensor ändert und wenn ich auf Falling setze bleibt die Variable = 0 ...
    Was mach ich denn nur Falsch, ich weiß wirklich nicht mehr weiter...

    hier noch mal mein Programm:
    Code:
    Declare Sub Mycounter()
    
    $regfile = "m32def.dat"
    
    Dim I As Word
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    
    Tccr1b = Tccr1b Or &H02                                     'Prescaler = 8
    
    On Int1 Mycounter
    
    Config Int0 = Rising                                        'interrupt für high level
    Enable Int0
    Enable Interrupts
    
    I = 0                                                       ' I auf Null setzen
    
    Do
           'main loop starts here
           Print "this is a test for interrupts I = " ; I
           Waitms 100
    Loop
    End
    
    Mycounter:
       Disable Interrupts
       Incr I
       Enable Interrupts
    Return

  5. #15
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Auf jeden Fall kannst du in der Mycounter routine das dis- und enablen schmeissen, das macht schon der AVR für dich.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    14.09.2005
    Alter
    68
    Beiträge
    77
    Hallo,

    Ich habe ja erst mit Bascom begonnen, aber warum du den Timer da einstellst, verstehe ich nicht.

    Und wie PicNich schreibt "das dis- und enablen schmeissen" denn währen einem Interrupt kann kein zweites aufgerufen werden.

    Ich würde das so machen.

    Code:
    Dim I As Integer
    Enable Interrupts
    Enable Int0
    On Int0 Label2 
    Do
    
    Loop
    End
    
    Label2:
    Incr I
    Return
    Ich frage mich ob das nicht an deinem Pegel liegt. Ich weis jetzt nicht wie der Pegel bei AVR sein muß damit der erkannt wird. Zum Testen nehme ich immer ein Flip-Flop mit einem Wechselschalter. Da bin ich sicher, daß ich einen sauberen Pegel von 0 oder 5 Volt habe. Und hundertprozentig keine Prellung.

    Mit freundlichen Grüßen
    Guy

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen