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







Zitieren

Lesezeichen