Zum Verständnis der Code des Sende-Atmega8:

Gesendet wird am Ende sub XBee:

'--------------------------------------------------------------------------
' 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 ----
Dim Gps_zeichen As Byte
Dim Gpsdaten As String * 98
Dim Gps_header As String * 6
Dim Gps_anzahl As Byte
Dim Gps_teilstring(14) As String * 12
Dim Gps_hoehenteilstring(2) As String * 8

'---- Commands einlesen ----
Dim Befehls_zeichen As Byte
Dim Befehlsdaten As String * 101
Dim Befehls_header As String * 6
Dim Befehls_anzahl As Byte
Dim Befehls_teilstring(5) As String * 21

'---- 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



'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------

'---- CONFIG ----

' RS232 Hardware
'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Serialin = Buffered , Size = 128
'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


'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 = "quit-test"
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==================================




'==========GPS-Auswertung (NL-504ETT)=====================================




'(

Inputbin cmd


Select Case Cmd

Case 50
Cmd = ""
Led_rot = 1
Wait 1
Led_rot = 0
Wait 1


End Select
')


Call Xbee ' kontinuierliches Senden der Parameter


Loop



End


'----------------Befehlsbibliothek "Commands"-----------------------------------

Commands:
Select Case Befehls_teilstring(2)

Case "50" ' Teilstring(2) auswerten auf "TAKEPHOTO"

Led_rot = 1
Wait 2
Led_rot = 0



End Select


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------------------------------------------------------


Sub Xbee

Print "$ground" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe


End Sub


und zum Empfangen:

'--------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'--------------------------------------------------------------------------

$regfile = "m16def.dat"
$crystal = 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 Byte

'---- Betriebsspannung messen ----
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5





'Dim für lesen
Dim Gelesen As Byte 'dollarzeichen einlesen

Dim Teilstring(14) As String * 12
Dim Anzahl As Byte

Dim Datenstring As String * 80
Dim Header As String * 6
Dim Tempstring As String * 2





'--------------------------------------------------------------------------
' 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

Deflcdchar 0 , 32 , 32 , 21 , 14 , 4 , 4 , 4 , 4 ' replace [x] with number (0-7)

'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




' 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
Wait 1
Led_gruen = 1
Wait 1
Led_gruen = 0
Wait 1
Led_gruen = 1
Wait 1
Led_gruen = 0
Cls


'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------



Do
Gelesen = Inkey() ' $ground#quit-test#7.1#24.6#gpshigh

Locate 1 , 1
Lcd Gelesen

If Gelesen = 36 Then Input Datenstring Noecho

Header = Mid(datenstring , 1 , 6)

If Header = "GROUND" Then

Cls
Anzahl = Split(datenstring , Teilstring(1) , "#")
Datenstring = ""

'Test
Locate 3 , 1
Lcd Teilstring(2)


Wait 1
End If





Locate 4 , 1
Lcd Chr(0)




If Taster = 0 Then
Cls
Led_gruen = 1
Led_lcd = 1
Powerdown
End If


Loop
End







'----------------Befehlsbibliothek "Commands"-----------------------------------

Commands:




Return



'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------

Lipo_saver_off:

Return


'----------------Sonstiges------------------------------------------------------



Sub Xbee




End Sub