Hallo,
Code ist für eine Steuerung von sog. KAP-Rig, Luftbildaufnahmen von einem Drachen bzw. einem Gestell an der Leine
des Drachens aus!
Das ganze ist noch im Entwicklungsmodus...
ADC hatte ich gelesen, kann noch etwas Strom einsparen. Die gesamte Schaltung soll so wenig wie möglich Strom aufnehmen,
wenn die Spannung unter 6,3 Volt fällt. Ziel ist nicht, diese über Interrupt ooder so aufzuwecken.
Aufwecken halt nur über Neustart bzw. Reset wenn Spannungsversorgung neu angelegt wird!
Bascom Version ist: 2.0.7.1
"Powerdown" wird ganz unten unter "lipo_saver_off" aufgerufen!
Code:
'--------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'--------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 7372800 ' 7,3728 Mhz Quarzoszillator an PB6 / XTAL 1
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600
'--------------------------------------------------------------------------
' Definition von Ressourcen
'--------------------------------------------------------------------------
Pwr_all Alias Portc.4 'Abschaltung der Servos und LM2675 (5V f¸r GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portc.1
Pwr_video Alias Portd.4
Bit0 Alias Portc.2
Bit1 Alias Portd.5
Bit2 Alias Portb.5
Cam_gnd Alias Portd.6
Led_rot Alias Portc.5
Pan1 Alias Portb.0 ' f¸r L293 D
Pan2 Alias Portd.7
'--------------------------------------------------------------------------
' Definition von Konstanten
'--------------------------------------------------------------------------
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0 -> ADC auflˆsen
Const S1_links = 100 'je nach Servo!
Const S1_rechts = 50 'je nach Servo!
'--------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'--------------------------------------------------------------------------
'---- Betriebsspannung messen ----
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5
'---- Commands ----
Dim Quittierung As String * 14
Dim Gpshoehe As String * 13
'---- Command empfangen xxx----
Dim Cmd As Byte
'Dim f¸r GPS einlesen
Dim Gelesen As Byte 'eingelesenes Zeichen
Dim Teilstring(14) As String * 12
Dim Anzahl2 As Byte
Dim Gpsdaten As String * 98
Dim Header As String * 6
'Dim Stunde As Byte
Dim Tempstring As String * 2
'---- Temperaturmessung ----
Dim Temp(9) As Byte
Dim X As Byte
Dim Celsius As Integer
Dim T As Single
Dim Temperatur As String * 5
'---- PWM f¸r A293D ----
Dim A As Byte
Dim Swert As Byte
'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------
'---- CONFIG ----
' RS232 Hardware
Config Serialin = Buffered , Size = 1 ' konfig serial in
Open "COMB.7:9600,8,N,1" For Input As #1 'PB.7 = RxD SoftUART / GPS
' ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren
' Servo
Config Servos = 1 , Servo1 = Portb.2 , Reload = 10
' Timer f¸r PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8
' schaltbare Ausg‰nge
Config Pwr_all = Output ' GPS- und Video-Modul sowie 5 Volt Versorgung hierf¸r abschalten
Config Pwr_gps = Output
Config Pwr_video = Output
Config Bit0 = Output
Config Bit1 = Output
Config Bit2 = Output
Config Cam_gnd = Output
' Status-LED rot
Config Led_rot = Output
' L293D f¸r Servo als Motor
Config Portb.1 = Output
Config Pan1 = Output 'LD293
Config Pan2 = Output
' Servo PIN
Config Portb.2 = Output
'1wire f¸r Temp.-Messung
Config 1wire = Portc.0 ' Pin f¸r 1wire Schnittstelle festlegen, Schnittstelle wird von Bascom durch Software realisiert
'Interrupts
Enable Interrupts
Enable Timer1
' sonstige
Start Adc
Declare Sub Xbee ' Senderoutine, um $GROUND#... permanent zu senden
'--------------------------------------------------------------------------
' Init
'--------------------------------------------------------------------------
Pwr_all = 0 ' bei Systemstart Peripherie auf OFF
Pwr_video = 0
Pwr_gps = 0
Led_rot = 1 ' Led_rot OFF
Pan1 = 0 'L293D OFF
Pan2 = 0
Bit0 = 0
Bit1 = 0
Bit2 = 0
Cam_gnd = 1
Swert = 100
Servo(1) = Swert 'Servo
'LED blinken lassen
Led_rot = 1
Waitms 100
Led_rot = 0
Waitms 100
Led_rot = 1
Waitms 100
Led_rot = 0
Led_rot = 1
Waitms 100
Led_rot = 0
Waitms 100
Led_rot = 1
Waitms 100
Led_rot = 0
'nach einer Sek. Pwr_all ON
Wait 1
Pwr_all = 1
'nach einer weiteren Sek. Pwr_gps ON
Wait 1
Pwr_gps = 1
' Begr¸flung
Quittierung = "Hallo"
Wait 2
Cam_gnd = 0
Waitms 150
Cam_gnd = 1
Cam_gnd = 0
Waitms 150
Cam_gnd = 1
'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------
Do
'========== hier laufen Tests ab ==========================================
'==========Temperaturmessung mit DS18B20Z 1Wire============================
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 600
1wreset
1wwrite &HCC
1wwrite &HBE
For X = 1 To 9
Temp(x) = 1wread()
Next
Celsius = Makeint(temp(1) , Temp(2))
T = Celsius / 16
Temperatur = Fusing(t , "##.#")
'==========Spannung LiPo 2S messen========================================
Spannung = Getadc(3) ' Zelle messen und berechnen
Zellspannung_orig = Spannung * Adc_multi
Zellspannung_orig = Zellspannung_orig * 2
Zellspannung = Fusing(zellspannung_orig , "#.#")
If Zellspannung_orig <= 6.4 Then ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...
Gosub Lipo_saver_off
End If
'==========Rx Pr¸fen auf GPS Eingang GPGGA=================================
Gelesen = Inkey(#1)
If Gelesen = 36 Then Input #1 , Gpsdaten Noecho '36 = $
Header = Mid(gpsdaten , 1 , 5)
If Header = "GPGGA" Then
Anzahl2 = Split(gpsdaten , Teilstring(1) , ",")
Gpsdaten = ""
Gpshoehe = Teilstring(10)
End If
'==========Rx Pr¸fen auf Befehlseing‰nge==================================
' Inputbin Cmd
If Ischarwaiting() = 1 Then
Cmd = Inkey()
End If
Select Case Cmd
Case "r"
Clear Serialin
Cmd = ""
Quittierung = "rechts"
Call Xbee
A = 160
Compare1a = A
Pan1 = 0
Pan2 = 1
Waitms 70
Pan1 = 0
Pan2 = 0
Case "R"
Clear Serialin
Cmd = ""
Quittierung = "REchts"
Call Xbee
A = 160
Compare1a = A
Pan1 = 0
Pan2 = 1
Waitms 700
Pan1 = 0
Pan2 = 0
Case "l"
Clear Serialin
Cmd = ""
Quittierung = "links"
Call Xbee
A = 160
Compare1a = A
Pan1 = 1
Pan2 = 0
Waitms 70
Pan1 = 0
Pan2 = 0
Case "L"
Clear Serialin
Cmd = ""
Quittierung = "LInks "
Call Xbee
A = 160
Compare1a = A
Pan1 = 1
Pan2 = 0
Waitms 700
Pan1 = 0
Pan2 = 0
Case "+"
Clear Serialin
Cmd = ""
Quittierung = "S1 hoch "
Swert = Swert + 10
Servo(1) = Swert
Case "U"
Clear Serialin
Cmd = ""
Quittierung = "S1 Hoch "
Servo(1) = S1_links
Case "-"
Clear Serialin
Cmd = ""
Quittierung = "S1 runter "
Swert = Swert - 10
Servo(1) = Swert
Case "D"
Clear Serialin
Cmd = ""
Quittierung = "S1 Runter "
Servo(1) = S1_rechts
Case "1"
Clear Serialin
Cmd = ""
Quittierung = "LED "
Cam_gnd = 0
Waitms 150
Cam_gnd = 1
End Select
Call Xbee ' kontinuierliches Senden der Parameter
Loop
End
'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------
Lipo_saver_off:
Quittierung = "LiPo-Saver!" ' Quittierung an Bodenstation
Quittierung = "" 'Quittierung lˆschen
Waitms 500
Pwr_all = 0 ' testweise Ausgabe PWR_all = 0 --> hier: LED an!
Led_rot = 1
Disable Adc
Disable Timer1
Portb.7 = 0
Powerdown
Return
'----------------Sonstiges------------------------------------------------------
Link:
Led_rot = 1
Return
No_link:
Led_rot = 0
Return
Sub Xbee
Print "$GROUND" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe
End Sub
Lesezeichen