Hallo,
bin Newbie und habe Probleme bei der Kommunikation zweier ATmega8 untereinander.
Um folgendes geht es:
http://www.google.de/search?hl=de&sugexp=ppwl&cp=7&gs_id=13&xhr=t&q=kap+rig&pq=kap+rig&gs_sm=&gs_upl=&bav=on.2,or.r_gc.r_pw.,cf.osb&biw=1527&bih=937&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi
- an einem Drachen hängt eine durch Servos steuerbare Kameraaufhängung
- Kamera wird über das Canon CHDK gesteuert
- UART Verbindung zwischen dem ATmega8 am Boden und in der Luft per XBee 2,4 GHz
- zusätzlich so Features wie GPS, Video Downlink, etc.
Bei der Auswertung des GPS-Befehlssatzes(nur Höhe in vollen Metern anzeigen) bin ich auf die Idee gekommen, einen identischen Befehlssatz:
$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45
wie z. B. $GROUND#quittierung#zellspannung1#zellspannung1#hoehe zu verwenden.
Klappt so weit ganz gut. Problem ist die Auswertung bzw. das Schreiben in den o. g. Befehlssatz, der einfach an die Bodenstation per ATmega8 gesendet wird...
Irgendwo ist da beim Software und Hardware UART der Bock drin...
Hier funktionierts:
Also Höhe anzeigen...
hier nicht mehr:
Ich find das Problem nicht!
Danke und Gruß
Christoph
bin Newbie und habe Probleme bei der Kommunikation zweier ATmega8 untereinander.
Um folgendes geht es:
http://www.google.de/search?hl=de&sugexp=ppwl&cp=7&gs_id=13&xhr=t&q=kap+rig&pq=kap+rig&gs_sm=&gs_upl=&bav=on.2,or.r_gc.r_pw.,cf.osb&biw=1527&bih=937&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi
- an einem Drachen hängt eine durch Servos steuerbare Kameraaufhängung
- Kamera wird über das Canon CHDK gesteuert
- UART Verbindung zwischen dem ATmega8 am Boden und in der Luft per XBee 2,4 GHz
- zusätzlich so Features wie GPS, Video Downlink, etc.
Bei der Auswertung des GPS-Befehlssatzes(nur Höhe in vollen Metern anzeigen) bin ich auf die Idee gekommen, einen identischen Befehlssatz:
$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45
wie z. B. $GROUND#quittierung#zellspannung1#zellspannung1#hoehe zu verwenden.
Klappt so weit ganz gut. Problem ist die Auswertung bzw. das Schreiben in den o. g. Befehlssatz, der einfach an die Bodenstation per ATmega8 gesendet wird...
Irgendwo ist da beim Software und Hardware UART der Bock drin...
Hier funktionierts:
Also Höhe anzeigen...
Code:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 32 ' default use 10 for the SW stack
$framesize = 32
'serieller Eingang
Enable Interrupts
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cls
Cursor Off
Dim Gelesen As Byte 'eingelesenes Zeichen
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
Dim Test1 As String * 10
Open "comb.1:9600,8,N,1" For Input As #1
Cls
Cursor Off
Lcd "GPS"
Wait 2
Cls
Do
Gps_zeichen = Inkey(#1) ' Zeichen einlesen
If Gps_zeichen = 36 Then Input #1 , Gpsdaten Noecho ' ist "$" vorhanden, dann Daten/SoftUART #1 einlesen
Gps_header = Mid(gpsdaten , 1 , 5)
If Gps_header = "GPGGA" Then
Cls
Gps_anzahl = Split(gpsdaten , Gps_teilstring(1) , ",")
Gps_anzahl = Split(gps_teilstring(10) , Gps_hoehenteilstring(1) , ".")
Gpsdaten = ""
Lcd Gps_hoehenteilstring(1)
Test1 = Gps_hoehenteilstring(1)
Print Test1
End If
Loop
End
hier nicht mehr:
Code:
$regfile = "m8def.dat"
' Sendesyntax to GROUND: §GROUND#quittierung#zellspannung1#zellspannung2#gpshoehe#nn#
'
' Sendesyntax to KAPRIG: §KAPRIG#commands#nn#nn#nn#nn#
$crystal = 4000000
$framesize = 100 ' die Größe des Frames
$swstack = 100 ' die Größe des Software-stacks
$hwstack = 100
Pwr_all Alias Portb.0
Pwr_video Alias Portb.2
'Pwr_gps Alias Portb.3
Usb Alias Portb.4
Config Servos = 2 , Servo1 = Portc.4 , Servo2 = Portc.5 , Reload = 10 ' Servos definieren
Config Pwr_all = Output
Config Pwr_video = Output
'Config Pwr_gps = Output
Config Usb = Output
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cls
Cursor Off
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren
Start Adc 'ADC starten
Enable Interrupts
Declare Sub Rs232
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0 -> ADC auflösen
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 * 5
Dim Gpshoehe As String * 5
Dim Spannung1 As Word
Dim Spannung2 As Word
Dim Zellspannung1_orig As Single
Dim Zellspannung2_orig As Single
Dim Zellspannung1 As String * 5
Dim Zellspannung2 As String * 5
Dim Befehls_zeichen As Byte
Dim Befehlsdaten As String * 101
Dim Befehls_header As String * 7
Dim Befehls_anzahl As Byte
Dim Befehls_teilstring(6) As String * 21
Dim Quittierung As String * 21
Open "COMB.1:9600,8,N,1" For Input As #1
Pwr_all = 1
Pwr_video = 1
'Pwr_gps = 1
Print "KaprigCtrlRx"
Lcd "KaprigControlRx"
Wait 1
Cls
Do
'==========GPS-Auswertung (NL-504ETT)=====================================
Gps_zeichen = Inkey(#1) ' Zeichen einlesen
If Gps_zeichen = 36 Then Input #1 , Gpsdaten Noecho ' ist "$" vorhanden, dann Daten/SoftUART #1 einlesen >> gpsdaten
Gps_header = Mid(gpsdaten , 1 , 5)
If Gps_header = "GPGGA" Then 'wenn GPGGA Befehlssatz, dann
Print Gpsdaten
Cls
Gps_anzahl = Split(gpsdaten , Gps_teilstring(1) , ",") ' nur Höhe herausziehen
Gps_anzahl = Split(gps_teilstring(10) , Gps_hoehenteilstring(1) , ".") 'nur Höhe in Metern, vor dem "." herausziehen
Gpsdaten = ""
Gpshoehe = Gps_hoehenteilstring(1)
Locate 2 , 1
Lcd Gpshoehe
End If
'==========Rx Prüfen auf Befehlseingänge================================== ' Syntax >> KAPRIG#10ZeichenbefehlA#10ZeichenbefehlB#usw. <<
Befehls_zeichen = Inkey()
If Befehls_zeichen = 36 Then Input , Befehlsdaten Noecho
Befehls_header = Mid(befehlsdaten , 1 , 6) ' eigenen Befehlssatz auf Header "KAPRIG" prüfen
If Befehls_header = "KAPRIG" Then
Befehls_anzahl = Split(befehlsdaten , Befehls_teilstring(1) , "#")
Befehlsdaten = ""
Gosub Kamerabefehle
End If
Call Rs232 '''''''''''''''''''''''
Loop
End
'----------------Befehlsbibliothek "Kamerabefehle"------------------------------
Kamerabefehle: ''''''''''''''''''''''''''''''''''''
Select Case Befehls_teilstring(2)
Case "TAKEPHOTO" ' Lese Befehl ein und schalte USB-Port der Canon ' Kamera (Stichwort CHDK) für 100 ms ==>> Starten7Bedienen von Script in Kamera!
Locate 2 , 1
Lcd Befehls_teilstring(2)
Pwr_all = 0
Waitms 500
Pwr_all = 1
Quittierung = "Photo is taken"
Waitms 500
Quittierung = ""
Cls
Case ""
Case ""
End Select
Select Case Befehls_teilstring(3)
Case "hoehe"
Locate 2 , 1
Lcd Befehls_teilstring(3) ""
End Select
Return
'----------------Sonstiges------------------------------------------------------
Sub Rs232: ''''''''''''''''''''''''
Print "§GROUND#" ; Quittierung ; "#" ; Zellspannung1 ; "#" ; Zellspannung2 ; "#" ; Gpshoehe ; "#" ; "#"
End Sub
Ich find das Problem nicht!
Danke und Gruß
Christoph