Zitat:
'--------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'--------------------------------------------------------------------------
$regfile = "m16def.dat"
$crystal = 7372800 '7372800 ' 7,3728 Mhz Quarzoszillator an PB6 / XTAL 1
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600
'--------------------------------------------------------------------------
' Definition von Ressourcen
'--------------------------------------------------------------------------
Led_gruen Alias Portb.0
Led_lcd Alias Portb.1
Taster Alias Pind.6
'--------------------------------------------------------------------------
' Definition von Konstanten
'--------------------------------------------------------------------------
'Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0 -> ADC auflösen
'--------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'--------------------------------------------------------------------------
'---- Commands einlesen ----
Dim Quittierung As String * 21
'---- Command senden ----
Dim Cmd As String * 11
'---- Betriebsspannung messen ----
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5
'Dim für lesen
Dim Dollarzeicheneingang As Byte 'Beginn des Datenstrings mit Dollarzeichen
Dim Teildaten(14) As String * 20 ' Array mit den extrahierten Daten
Dim Anzahl As Byte
Dim Datenstring As String * 40
Dim Datenkopf As String * 7
Dim Lcd_command As String * 20
Dim Lcd_voltage As String * 20
Dim Lcd_temperatur As String * 20
Dim Lcd_gps As String * 20
Dim Connect As Byte
'---- LCd Menü ----
'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------
'---- CONFIG ----
' RS232 Hardware
Config Serialin = Buffered , Size = 100 ' konfig serial in
' ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren
' LEDs
Config Led_gruen = Output
Config Led_lcd = Output
' Taster
Config Taster = Input
' LCD
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Cursor Off
Deflcdchar 0 , 32 , 32 , 21 , 14 , 4 , 4 , 4 , 4 ' Link-Zeichen
Deflcdchar 1 , 32 , 14 , 31 , 31 , 31 , 31 , 31 , 31 ' battery-full
Deflcdchar 2 , 32 , 14 , 31 , 17 , 17 , 31 , 31 , 31 ' battery-half
Deflcdchar 3 , 32 , 14 , 31 , 17 , 17 , 17 , 17 , 31 ' battery empty
'Interrupts
Enable Interrupts
' sonstige
Start Adc
Declare Sub Xbee ' Senderoutine, um $KAPRIG#... permanent zu senden
'--------------------------------------------------------------------------
' Init
'--------------------------------------------------------------------------
Led_gruen = 1 ' Led-grün OFF
Led_lcd = 0 ' LCD-Beleuchtung ON
Connect = 0
' Begrüßung
Wait 1
Cls
Cursor Off
Locate 1 , 1
Lcd "KaprigControlRxZ1"
Locate 2 , 1
Lcd "KaprigControlRxZ2"
Locate 3 , 1
Lcd "KaprigControlRxZ3"
Locate 4 , 1
Lcd "KaprigControlRxZ4"
Led_lcd = 1
Waitms 200
Led_lcd = 0
Led_gruen = 0
Waitms 100
Led_gruen = 1
Waitms 100
Led_gruen = 0
Waitms 100
Led_gruen = 1
'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------
Cls
Do
'========== hier laufen Tests ab ==========================================
If Taster = 0 Then
Led_lcd = 1
Cmd = "foto"
Locate 1 , 10 'test für sende cmd
Lcd Cmd
Elseif Taster = 1 Then
Led_lcd = 0
Cmd = ""
Locate 1 , 10 'test für sende cmd
Lcd " "
End If
'==========Rx Prüfen auf Befehlseingänge==================================
Dollarzeicheneingang = Inkey()
If Dollarzeicheneingang = 36 Then
Gosub Link
Input Datenstring Noecho '36 ist das Dollarzeichen
Else
Gosub No_link
End If
Datenkopf = Mid(datenstring , 1 , 6)
If Datenkopf = "GROUND" Then
Anzahl = Split(datenstring , Teildaten(1) , "#") '# Trennzeichen der Daten
Datenstring = ""
Gosub Lcd_anzeigen
End If ' --> $GROUND#quit-test#7.5#24.4#gpshigh
'==========Menüstruktur=========================== ========================
'==========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 Befehlseingänge==================================
Call Xbee ' kontinuierliches Senden der Parameter
Loop
'Eop:
'Close #2
End
'----------------LCD Anzeigen---------------------------------------------------
Lcd_anzeigen:
Lcd_command = Teildaten(2)
Lcd_voltage = Teildaten(3)
Lcd_temperatur = Teildaten(4)
Lcd_gps = Teildaten(5)
Locate 2 , 1
Lcd "command:" ; Lcd_command
Locate 3 , 1
Lcd "Voltage:" ; Lcd_voltage ; "Volt"
Locate 4 , 1
Lcd "Temp.:" ; Lcd_temperatur ; Chr(223) ; "C"
Locate 4 , 14
Lcd Lcd_gps
Return
'----------------Befehlsbibliothek "Commands"-----------------------------------
Commands:
Return
'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------
Lipo_saver_off:
Return
'----------------XBee Link------------------------------------------------------
Link:
Connect = 1
Led_gruen = 0
Locate 1 , 1
Lcd Chr(0)
Return
'----------------XBee NO Link---------------------------------------------------
No_link:
Connect = 0
Led_gruen = 1
Locate 1 , 1
Lcd "_"
Lcd_command = " "
Lcd_voltage = " "
Lcd_temperatur = " "
Lcd_gps = " "
Return
'----------------Sonstiges------------------------------------------------------
Sub Xbee
Print "$KAPRIG" ; "#" ; Cmd
End Sub
Zitat:
'--------------------------------------------------------------------------
' 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 Portd.2 'Abschaltung der Servos und LM2675 (5V für GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portd.3
Pwr_video Alias Portd.4
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
'--------------------------------------------------------------------------
' 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 * 21
Dim Gpshoehe As String * 10
'---- Command empfangen ----
Dim Cmd As Byte
'---- GPS-String einlesen ----
'---- 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 für lesen
Dim Dollarzeicheneingang As Byte 'Beginn des Datenstrings mit Dollarzeichen
Dim Teildaten(3) As String * 10 ' Array mit den extrahierten Daten
Dim Anzahl As Byte
Dim Datenstring As String * 40
Dim Datenkopf As String * 7
'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------
'---- CONFIG ----
' RS232 Hardware
'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 100 ' konfig serial in
'Open "com1:" For Binary As #1
'Open "COMB.7:9600,8,N,1" For Input As #2 'PB.7 = RxD SoftUART / GPS
' ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren
' 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
' Status-LED rot
Config Led_rot = Output
' L293D für Servo als Motor
Config Portb.1 = Output
Config Pan1 = Output 'LD293
Config Pan2 = 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
'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
'nach zweit weiteren Sek. Pwr_video ON
Wait 2
Pwr_video = 1
Wait 5 ' und nach 5 Sekunden Pwr_video wieder OFF
Pwr_video = 0
' Begrüßung
'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------
Do
'========== hier laufen Tests ab ==========================================
Quittierung = "123"
Gpshoehe = "gpshigh"
'==========Temperaturmessung mit DS18B20Z 1Wire============================
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 800
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 Befehlseingänge==================================
Dollarzeicheneingang = Inkey()
If Dollarzeicheneingang = 36 Then
Input Datenstring Noecho '36 ist das Dollarzeichen
Gosub Link
Dollarzeicheneingang = 0
Else
Gosub No_link
End If
Datenkopf = Mid(datenstring , 1 , 6)
If Datenkopf = "KAPRIG" Then
Anzahl = Split(datenstring , Teildaten(1) , "#") '# Trennzeichen der Daten
Datenstring = ""
Gosub Commands
End If
' --> $KAPRIG#foto
Call Xbee ' kontinuierliches Senden der Parameter
Loop
End
'----------------Befehlsbibliothek "Commands"-----------------------------------
Commands:
If Teildaten(2) = "foto" Then
A = 160
Compare1a = A
Pan1 = 0
Pan2 = 1
Waitms 70
Pan1 = 0
Pan2 = 0
End If
Return
'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------
Lipo_saver_off:
Quittierung = "LiPo-Saver!" ' Quittierung an Bodenstation
'Print #1 , "LiPo-Saver!"
Quittierung = "" 'Quittierung löschen
Waitms 500
Pwr_all = 0 ' testweise Ausgabe PWR_all = 0 --> hier: LED an!
Disable Interrupts
Powersave ' sleep
Return
'----------------Sonstiges------------------------------------------------------
Link:
Led_rot = 1
Return
No_link:
Led_rot = 0
Return
Sub Xbee
Print "$GROUND" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe
End Sub