projects:ukhas_glider_project:master
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
projects:ukhas_glider_project:master [2007/09/05 10:37] – laurenceb | projects:ukhas_glider_project:master [2008/07/19 23:33] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 3: | Line 3: | ||
$crystal = 16000000 | $crystal = 16000000 | ||
$baud = 16000 | $baud = 16000 | ||
- | $hwstack = 40 | + | $hwstack = 32 |
- | $swstack = 40 | + | $swstack = 64 |
- | $framesize = 40 | + | $framesize = 96 |
Open " | Open " | ||
Open " | Open " | ||
Open " | Open " | ||
+ | Open " | ||
Config Adc = Single , Prescaler = Auto , Reference = Internal | Config Adc = Single , Prescaler = Auto , Reference = Internal | ||
Config Portd.7 = Output | Config Portd.7 = Output | ||
Line 22: | Line 23: | ||
Config Portc.0 = Input | Config Portc.0 = Input | ||
Config Portc.5 = Input | Config Portc.5 = Input | ||
+ | Config Watchdog = 4096 | ||
' | ' | ||
' | ' | ||
Line 39: | Line 41: | ||
Declare Sub Checkvoltage() | Declare Sub Checkvoltage() | ||
Declare Sub Cutdown(byval Channel As Byte , Byval Duration As Byte) | Declare Sub Cutdown(byval Channel As Byte , Byval Duration As Byte) | ||
+ | Declare Sub Radiocomms() | ||
Echo Off | Echo Off | ||
Start Adc | Start Adc | ||
+ | Dim Rate As Integer | ||
+ | Dim Temperature As Integer , Error As Byte , Heading As Single , Filteredrate As Single , Pulselenght As Word | ||
+ | Dim Pulses As Byte | ||
Dim S As String * 100 | Dim S As String * 100 | ||
Dim T As String * 15 | Dim T As String * 15 | ||
+ | Dim Printstring As String * 20 | ||
Dim K As Single | Dim K As Single | ||
- | Dim Iterations As Byte | + | Dim Iterations |
- | Dim Windxs(256) As Eram Byte | + | Dim Windxs(251) As Eram Byte |
- | Dim Windys(256) As Eram Byte | + | Dim Windys(251) As Eram Byte , Placemark As Eram Byte |
+ | Dim Target_es As Eram Single | ||
+ | Dim Target_ns As Eram Single | ||
Dim Lock As Bit | Dim Lock As Bit | ||
Dim Gpfloatone As Single , Gpsheading As Single | Dim Gpfloatone As Single , Gpsheading As Single | ||
- | Dim R As String * 90 | + | Dim U As String * 100 |
Dim B As String * 6 | Dim B As String * 6 | ||
Dim Contents(17) As String * 15 | Dim Contents(17) As String * 15 | ||
Line 55: | Line 64: | ||
Dim N As Byte | Dim N As Byte | ||
Dim I As Byte | Dim I As Byte | ||
+ | Dim Statuscode As Byte | ||
Dim Heightupto As Byte , Rxenable As Byte , Servoenable As Byte | Dim Heightupto As Byte , Rxenable As Byte , Servoenable As Byte | ||
- | Dim Gpbyteone As Byte , Gpbytetwo As Byte , Telcounter As Byte | + | Dim Gpbyteone As Byte , Gpbytetwo As Byte , Telcounter |
Dim Gpintegerone As Integer | Dim Gpintegerone As Integer | ||
Dim Intcount As Integer , Timeelapsed As Integer | Dim Intcount As Integer , Timeelapsed As Integer | ||
Line 67: | Line 77: | ||
Dim Derivative As Single | Dim Derivative As Single | ||
Dim Target As Single | Dim Target As Single | ||
+ | Dim Target_e As Single | ||
+ | Dim Target_n As Single | ||
Dim Offset As Single | Dim Offset As Single | ||
Dim Windy_total As Single | Dim Windy_total As Single | ||
Line 79: | Line 91: | ||
Dim North As Single | Dim North As Single | ||
Dim East As Single | Dim East As Single | ||
- | Dim Target_e As Single | ||
- | Dim Target_n As Single | ||
Dim Store_east As Single | Dim Store_east As Single | ||
Dim Store_north As Single | Dim Store_north As Single | ||
Line 88: | Line 98: | ||
Dim Degrees As String * 3 | Dim Degrees As String * 3 | ||
Dim Command As String * 10 | Dim Command As String * 10 | ||
+ | Statuscode = 0 | ||
Lock = 0 | Lock = 0 | ||
Iterations = 0 | Iterations = 0 | ||
Line 93: | Line 104: | ||
Wind_x = 0 | Wind_x = 0 | ||
Wind_y = 0 | Wind_y = 0 | ||
- | Waitms | + | Landcount = 0 |
+ | Telcounter = 0 | ||
+ | Portd.3 = 1 | ||
+ | Waitms | ||
+ | Gpintegerone = Getadc(5) | ||
+ | Gpfloatone = Gpintegerone | ||
+ | Gpintegerone = Getadc(0) | ||
+ | Gpfloatone = Gpfloatone / Gpintegerone | ||
+ | If Gpfloatone < 0.5 And Gpfloatone > 0.4 Then | ||
+ | Print " | ||
+ | Else | ||
+ | Print " | ||
+ | Start Watchdog | ||
+ | | ||
+ | | ||
+ | | ||
+ | Case 1: | ||
+ | Goto Cutdownlbl | ||
+ | Case 2: | ||
+ | Goto Descentloop | ||
+ | Case Else: | ||
+ | Goto Cutdownlbl | ||
+ | End Select | ||
+ | End If | ||
+ | Waitms 50 | ||
Call Checkvoltage() | Call Checkvoltage() | ||
- | Waitms 500 | ||
'Call Cutdown(1 , 4) | 'Call Cutdown(1 , 4) | ||
Print "wind records:" | Print "wind records:" | ||
- | For Gpbyteone = 1 To 255 | + | For Gpbyteone = 1 To 251 |
| | ||
- | Print Gpbyteone ; "," | + | Print Gpbyteone ; "," |
| | ||
Print Gpbytetwo | Print Gpbytetwo | ||
Line 122: | Line 156: | ||
Gotlock: | Gotlock: | ||
Print "Okay we have GPS" | Print "Okay we have GPS" | ||
+ | Print "check rc ground control, then" | ||
Print "Enter target north and east" | Print "Enter target north and east" | ||
Input #3 , Target_n | Input #3 , Target_n | ||
Line 127: | Line 162: | ||
Input #3 , Target_e | Input #3 , Target_e | ||
Print Target_e | Print Target_e | ||
- | Print " | + | Gpfloatone = Target_ns |
+ | If Target_n <> Gpfloatone Then Target_ns = Target_n | ||
+ | Gpfloatone = Target_es | ||
+ | If Target_e <> Gpfloatone Then Target_es = Target_e | ||
+ | Portd.3 = 1 | ||
+ | Print " | ||
+ | Start Watchdog | ||
+ | Placemark = 1 ' | ||
Do | Do | ||
- | While B <> " | + | Reset Watchdog |
- | Input R | + | Do |
- | B = Mid(r , 2 , 6) | + | Input U |
- | Wend | + | B = Mid(u , 2 , 6) |
- | | + | Loop Until B = "$GPGGA" |
+ | Do | ||
Input S | Input S | ||
B = Mid(s , 2 , 6) | B = Mid(s , 2 , 6) | ||
- | Wend | + | Loop Until B = " |
I = Split(s , Contents(1) , "," | I = Split(s , Contents(1) , "," | ||
K = Val(contents(9)) | K = Val(contents(9)) | ||
Line 149: | Line 192: | ||
Incr L ' | Incr L ' | ||
Incr Timeelapsed | Incr Timeelapsed | ||
- | I = Split(r , Contents(1) , "," | + | I = Split(u , Contents(1) , "," |
K = Val(contents(10)) | K = Val(contents(10)) | ||
K = K / 100 | K = K / 100 | ||
Line 157: | Line 200: | ||
Windx_total = Windx_total / L | Windx_total = Windx_total / L | ||
Gpbyteone = Windx_total + 127 | Gpbyteone = Windx_total + 127 | ||
- | Windxs(arrayat) = Gpbyteone | + | Windxs(heightupto) = Gpbyteone |
Windy_total = Windy_total / L | Windy_total = Windy_total / L | ||
Gpbyteone = Windy_total + 127 ' | Gpbyteone = Windy_total + 127 ' | ||
- | Windys(arrayat) = Gpbyteone | + | Windys(heightupto) = Gpbyteone |
L = 0 ' | L = 0 ' | ||
End If | End If | ||
If Arrayat > 40 Then | If Arrayat > 40 Then | ||
+ | Print " | ||
Goto Cutdownlbl | Goto Cutdownlbl | ||
End If | End If | ||
- | If Timeelapsed > 900 Then | + | If Timeelapsed > 1200 Then |
+ | Print "Time cutdown" | ||
Goto Cutdownlbl | Goto Cutdownlbl | ||
End If | End If | ||
| | ||
While Clearsecond = 0 | While Clearsecond = 0 | ||
- | Waitus | + | Waitus |
Wend | Wend | ||
| | ||
- | Print #1 , "#, | + | Waitus 50 |
- | | + | |
- | Input #2 , S | + | |
+ | Inputbin | ||
Incr Telcounter | Incr Telcounter | ||
- | If Telcounter > 10 Then Call Checkvoltage() | + | If Telcounter > 10 Then Call Checkvoltage() |
- | ' our callsign is UKHAS | + | |
If Radiocts = 1 Then ' | If Radiocts = 1 Then ' | ||
- | | + | |
End If | End If | ||
Loop | Loop | ||
Cutdownlbl: | Cutdownlbl: | ||
+ | If L > 0 Then ' | ||
+ | | ||
+ | | ||
+ | End If | ||
Call Cutdown(1 , 12) | Call Cutdown(1 , 12) | ||
+ | Placemark = 2 ' | ||
+ | Descentloop: | ||
+ | Statuscode = 1 | ||
+ | Requestsecond = 1 | ||
+ | While Clearsecond = 0 | ||
+ | | ||
+ | Wend 'but that was a stupid idea as in the slave code, when if first enters the decent loop | ||
+ | Requestsecond = 0 ' | ||
+ | Waitus 50 ' | ||
+ | Printbin #1 , Statuscode | ||
Do | Do | ||
+ | Reset Watchdog | ||
' | ' | ||
- | While B <> " | + | Do |
- | Input R | + | |
- | B = Mid(r , 2 , 6) | + | |
- | Wend | + | Loop Until B = "$GPGGA" |
- | | + | Do |
- | Input S | + | Input S |
- | B = Mid(s , 2 , 6) | + | |
- | Wend | + | Loop Until B = " |
I = Split(s , Contents(1) , "," | I = Split(s , Contents(1) , "," | ||
| | ||
Line 287: | Line 346: | ||
End If | End If | ||
' | ' | ||
- | I = Split(r , Contents(1) , "," | + | I = Split(u , Contents(1) , "," |
K = Val(contents(10)) | K = Val(contents(10)) | ||
Altitude = K | Altitude = K | ||
- | If V = 0 And Altitude < 200 Then | + | If V < 0.5 And Altitude < 250 Then |
- | Servoenable = 0 | + | Incr Landcount |
Else | Else | ||
- | | + | Landcount |
- | End If ' | + | End If |
- | | + | |
- | Rxenable | + | Landcount = 5 'ie we had 5 stationary gps updates |
+ | Incr Flashcount | ||
+ | If Flashcount > 9 Then | ||
+ | Cutdownpintwo | ||
+ | Flashcount = 0 | ||
+ | | ||
+ | Cutdownpintwo = 0 ' | ||
+ | End If | ||
+ | | ||
Else | Else | ||
- | | + | If Altitude < 300 Then 'so we are moving but low |
+ | Cutdownpintwo = 1 ' | ||
+ | | ||
+ | Else | ||
+ | Cutdownpintwo | ||
+ | Rxenable = 0 | ||
+ | End If | ||
+ | Flashcount = 0 | ||
+ | Servoenable = 1 ' | ||
End If | End If | ||
| | ||
While Clearsecond = 0 | While Clearsecond = 0 | ||
- | Waitus | + | Waitus |
Wend | Wend | ||
| | ||
- | Print #1 , "#," | + | Waitus 50 'make sure slave is ready |
+ | | ||
| | ||
- | Input #2 , S | + | Inputbin |
K = K / 100 | K = K / 100 | ||
| | ||
- | | + | Incr Arrayat |
- | | + | Gpbyteone = Windxs(arrayat) |
- | | + | If Gpbyteone <> 255 Then Wind_x = Gpbyteone - 127 ' |
- | | + | |
+ | If Gpbyteone <> 255 Then Wind_y = Gpbyteone | ||
Incr Telcounter | Incr Telcounter | ||
If Telcounter > 10 Then Call Checkvoltage() | If Telcounter > 10 Then Call Checkvoltage() | ||
If Radiocts = 1 Then ' | If Radiocts = 1 Then ' | ||
- | | + | |
End If | End If | ||
Loop | Loop | ||
Sub Checkvoltage() | Sub Checkvoltage() | ||
+ | S = " | ||
Gpintegerone = Getadc(5) | Gpintegerone = Getadc(5) | ||
Gpfloatone = Gpintegerone | Gpfloatone = Gpintegerone | ||
Gpfloatone = Gpfloatone * 9.503 | Gpfloatone = Gpfloatone * 9.503 | ||
Gpfloatone = Gpfloatone / 1000 | Gpfloatone = Gpfloatone / 1000 | ||
- | If Radiocts | + | Printstring |
+ | S = S + Printstring | ||
+ | S = S + "," | ||
Gpintegerone = Getadc(0) | Gpintegerone = Getadc(0) | ||
- | Print Gpintegerone | ||
Gpfloatone = Gpintegerone | Gpfloatone = Gpintegerone | ||
Gpfloatone = Gpfloatone * 4.250 | Gpfloatone = Gpfloatone * 4.250 | ||
Gpfloatone = Gpfloatone / 1000 | Gpfloatone = Gpfloatone / 1000 | ||
- | If Radiocts | + | Printstring |
+ | S = S + Printstring | ||
+ | S = S + "," | ||
+ | Printstring | ||
+ | S = S + Printstring | ||
+ | S = S + "," | ||
+ | Printstring = Str(pulses) | ||
+ | S = S + Printstring | ||
+ | Print S | ||
+ | Print #4 , S | ||
Telcounter = 0 | Telcounter = 0 | ||
End Sub | End Sub | ||
Line 341: | Line 429: | ||
While Radiocts = 0 And Gpbyteone < 30 ' | While Radiocts = 0 And Gpbyteone < 30 ' | ||
| | ||
+ | Reset Watchdog | ||
Incr Gpbyteone | Incr Gpbyteone | ||
Wend | Wend | ||
- | Print " | + | Print "UKHASC,Cutdown channel=" |
If Channel = 1 Then Cutdownpinone = 1 | If Channel = 1 Then Cutdownpinone = 1 | ||
If Channel = 2 Then Cutdownpintwo = 1 | If Channel = 2 Then Cutdownpintwo = 1 | ||
- | Wait Duration | + | For Gpbyteone = 0 To Duration |
+ | Wait 1 | ||
+ | Reset Watchdog | ||
+ | Next | ||
Cutdownpinone = 0 | Cutdownpinone = 0 | ||
Cutdownpintwo = 0 | Cutdownpintwo = 0 | ||
End Sub | End Sub | ||
- | </ | ||
+ | Sub Radiocomms() | ||
+ | If Statuscode = 0 Then | ||
+ | S = " | ||
+ | Else | ||
+ | S = " | ||
+ | End If | ||
+ | S = S + Contents(3) | ||
+ | S = S + Contents(4) | ||
+ | S = S + Contents(5) | ||
+ | S = S + Contents(6) | ||
+ | S = S + Contents(10) | ||
+ | | ||
+ | | ||
+ | S = S + Printstring | ||
+ | | ||
+ | | ||
+ | S = S + Printstring | ||
+ | | ||
+ | | ||
+ | S = S + Printstring | ||
+ | | ||
+ | | ||
+ | S = S + Printstring | ||
+ | | ||
+ | | ||
+ | S = S + Printstring | ||
+ | | ||
+ | | ||
+ | S = S + Printstring | ||
+ | | ||
+ | | ||
+ | S = S + Printstring | ||
+ | | ||
+ | S = S + " | ||
+ | | ||
+ | S = S + Printstring | ||
+ | Print S | ||
+ | Print #4 , S | ||
+ | End Sub | ||
+ | </ |
projects/ukhas_glider_project/master.1188988640.txt.gz · Last modified: 2008/07/19 23:32 (external edit)