-
        

Ergebnis 1 bis 3 von 3

Thema: int0 eine bestimmte Zeit abschalten

  1. #1

    int0 eine bestimmte Zeit abschalten

    Anzeige

    Hallo Leute,
    ich beschäftige mich erst seit ein paar Wochen mit dem Programmieren.
    Im Programm läuft eine Softuhr, die einmal am Tag mit einem Funkwecker
    synchronisiert wird. Int0 wird bei steigender Flanke vom Pieper des Weckers
    angesteuert. Da aber der Wecker eine Weckwiederholung hat, muß der Int0
    für ca. 30 min abgeschaltet werden. Hatte mir vorgestellt mit fallender Flanke
    Int1 dafür zu nehmen, aber es hat nicht funktioniert.
    Ich versuch mal das Programm zu posten, ist das erstemal also schon mal
    Danke.
    Board ist R-N control 1.4 mit Mega 32
    Angehängte Dateien Angehängte Dateien

  2. #2
    Habs jetzt hinbekommen

  3. #3
    '-------------------------------------------------------------
    ' Solaris
    ' AtMega32 auf Rn Control Umbras
    '-------------------------------------------------------------
    'Solarnachführung
    'Weckzeitgesteuert mit Funkwecker

    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    Config Clock = User

    $framesize = 100
    $swstack = 100
    $hwstack = 100

    'Sound Portd.7 , 400 , 450 'BEEP









    Dim Lsyssec As Long
    Dim Lsyssec_old As Long
    Dim Strtime As String * 8
    Dim _tag As Integer
    Dim Zaehler As Long
    'Dim W1 As Word ' Workaround to get _DIV16




    'W1 = W1 / W1

    'Ports für 'horizontal Motor
    Config Pinc.6 = Output 'Linker Motor Kanal 1 -> Pins definieren, die für die Drehrichtung verantwortlich sind:
    H_1 Alias Portc.6
    Config Pinc.7 = Output 'Linker Motor Kanal 2 -> Pins definieren, die für die Drehrichtung verantwortlich sind:
    H_2 Alias Portc.7


    'Ports für vertikal Motor
    Config Pinb.0 = Output 'Rechter Motor Kanal 1 -> Pins definieren, die für die Drehrichtung verantwortlich sind:
    V_1 Alias Portb.0
    Config Pinb.1 = Output 'Rechter Motor Kanal 2 -> Pins definieren, die für die Drehrichtung verantwortlich sind:
    V_2 Alias Portb.1

    H_1 = 0
    H_2 = 0
    V_1 = 0
    V_2 = 0





    'Hier wird der Timer und der Teiler festgelegt
    Config Timer1 = Timer , Prescale = 256

    'Hier wird das Unterprogramm festgelegt, das
    'in dem von ihnen eingestellten Intervall aufgerufen wird
    On Timer1 Timerinterrupt

    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
    Const Timervorgabe = 3036


    'Hier werden die Timer aktiviert
    Enable Timer1


    Config Int0 = Rising 'Interrupt bei steigender Flanke
    On Int0 Irq0 'Festlegen wo bei externem Interrupt hin gesprungen wird
    Enable Int0 'Diesen Interrupt aktivieren

    Config Int1 = Falling 'Interrupt bei steigender Flanke
    On Int1 Irq1 'Festlegen wo bei externem Interrupt hin gesprungen wird
    Enable Int1 'Diesen Interrupt aktivieren




    Enable Interrupts 'Alle aktivierten Interrupts einschalten




    'Sound Portd.7 , 400 , 450 'BEEP



    Do
    Do


    Lsyssec = Syssec()


    Loop Until Lsyssec <> Lsyssec_old



    Strtime = Time(lsyssec) ' convert to time string
    'Print "Running " ; Strtime
    'Print "Tag : " ; _tag
    Print "sec : " ; Zaehler
    Lsyssec_old = Lsyssec





    'Main:

    'Motor läuft nach Westen
    If Zaehler < 34801 And _sec = 0 Then '34801

    Print " Motor läuft nach Westen"
    Sound Portd.7 , 400 , 450 'BEEP
    H_1 = 1
    H_2 = 0


    Waitms 340 'Dauer der Nachfuehrung von 8:20 - 18:00

    H_1 = 0
    H_2 = 0
    End If



    ' Rückfahrt nach Osten
    If Zaehler = 35000 Then '35000

    'Sound Portd.7 , 400 , 450 'BEEP
    Print "Rückfahrt nach Osten"

    H_1 = 0
    H_2 = 1



    End If




    If Zaehler = 35500 Then '35500

    H_1 = 0
    H_2 = 0

    End If
    '---------------------------------------------------- 'bis heir getestet und lauffähig

    If _tag > 182 And Zaehler = 36000 Then '36000

    V_1 = 0
    V_2 = 1 'Motor abwärts

    Waitms 400
    V_1 = 0
    V_2 = 0

    End If

    If _tag < 182 And Zaehler = 36000 Then '36000

    V_1 = 1
    V_2 = 0 'Motor aufwärts

    Waitms 400
    V_1 = 0
    V_2 = 0

    End If



    Loop










    Timerinterrupt:
    Incr Zaehler
    If Zaehler = 86400 Then
    Zaehler = 0
    End If
    Incr _sec
    If _sec = 60 Then
    _sec = 0
    Incr _min
    End If
    If _min = 60 Then
    _min = 0
    Incr _hour
    End If
    If _hour = 24 Then
    _hour = 0
    Incr _tag
    End If
    If _tag = 365 Then
    _tag = 0
    End If
    Return

    'Interrupt Routine wird immer ausgelöst wenn der Pegel von 0 auf 1 am
    'INT0 (Pin 18 PD2) Eingang wechselt
    'Weckzeit auf 8:20 Uhr
    Irq0:


    Zaehler = 0
    _sec = 0
    _min = 0
    _hour = 0

    'Goto Main

    Return

    'Interrupt Routine wird immer ausgelöst wenn der Pegel von 1 auf 0 am
    'INT1 (Pin 18 PD3) Eingang wechselt

    Irq1:

    'If Zaehler < 1800 Then Disable Int0

    Return

Berechtigungen

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