- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 3 von 3

Thema: Problem mit Interrupts

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.05.2007
    Beiträge
    27

    Problem mit Interrupts

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo ,
    Ich bin Anfänger in Bascom.
    Ich habe ein RNControl v1.4 mit dem Chip ATmega32.
    Ich beschäftige mich mit Servomotor und PMW Signal.
    Mein Problem war:
    Ich will meinen Motor nach 50 Pülse bleibenstehen.
    Unten ist der Code
    Code:
    $programmer = 13
    $crystal = 16000000
    $baud = 9600
    $regfile = "m32def.dat"
    Config Int0 = Falling
    Dim Zaehlerirq0 As Integer
    Zaehlerirq0 = 0
    Enable Interrupts
    Enable Int0
    On Int0 Irq0
    Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down
    Pwm1b = 0
    Tccr1b = Tccr1b Or &H02
    Config Pinc.6 = Output
    Config Pinc.7 = Output
    Config Pind.4 = Output
    Portc.6 = 0
    Portc.7 = 0
    'Hauptprogramm
    Do
    Portc.6 = 1
    Portc.7 = 0
    Portd.4 = 1
    Pwm1b = 80
    Print Zaehlerirq0
    Waitms 500
    Loop Until Zaehlerirq0 > 50
    End
    Irq0:
    Incr Zaehlerirq0
    Return
    Der Motor läuft ewig.Ausserdem hab ich in Terminalemulator erkannt ,dass
    die Zaehlerirq0 zählt nicht.
    Was habe ich falsch gemacht?
    Könntet ihr mir helfen?
    Vielen Dank!
    MFG.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    So wie ich das seh, wird in IRQ0 der Zähler erhöht. Wenn der Zähler 50 überschreitet... was passiert dann? Das Programm wird nur beendet, aber PWM-technisch verändert sich da nichts. Ein END ist im Prinzip eine leere Do-Loop-Schleife.
    Da müsste also zwischen Loop und End noch irgendwas rein, um den Motor abzuschalten (z.B. PWM1B = 0 oder 255, je nach Auslegung)

    Warum aber IRQ0 nicht zählt, seh ich gerade auch nicht. Evtl kommen keine richtigen Pulse an. Versuch mal, die Interrupts/INT0 erst nach dem On Int zu enablen.
    #ifndef MfG
    #define MfG

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.05.2007
    Beiträge
    27
    Hi ,ich hab versucht .
    Hier unter nochmals neue code.(Wie du meinst)
    Code:
    $programmer = 13
    $crystal = 16000000
    $baud = 9600
    $regfile = "m32def.dat"
    Config Int0 = Falling
    Dim Zaehlerirq0 As Long
    Zaehlerirq0 = 0
    Enable Interrupts
    On Int0 Irq0
    Enable Int0
    Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down
    Pwm1b = 0
    Tccr1b = Tccr1b Or &H02
    Config Pinc.6 = Output
    Config Pinc.7 = Output
    Config Pind.4 = Output
    'Hauptprogramm
    Do
    Portc.6 = 1
    Portc.7 = 0
    Portd.4 = 1
    Pwm1b = 80
    Print Zaehlerirq0
    Waitms 500
    Loop Until Zaehlerirq0 > 500
    Portc.6 = 0
    Portc.7 = 0
    Pwm1b = 0
    End
    Irq0:
    Incr Zaehlerirq0
    Return
    Aber der Motor läuf ohne Ende und in Terminal emulator bekomme ich nur 0.
    MFG

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad