-
-
'-------------------------------------------------------------
' 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
-
Foren-Regeln
Lesezeichen