-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GPS Driver #50
Comments
GPS will communicate over UART, and we'll use the second UART (called SCI2 in halcogen). It can be enabled by checking Then, the regular |
This video has background on configuring SCI (UART) https://training.ti.com/hercules-how-tutorial-using-sci-uart-communication The exact commands to send the GPS will be determined by AODCS, we just need to be ready to send them once they figure them out. I'll give you a logic analyzer once some code is written so you can test that it works. We will also try to get the GPS for our testing once we have enough code to be able to use it. Once send, receive, and a couple of specific functions (get position, reset) are implemented, we'll talk about integration with our command system and telemetry logging. |
So @victormleon we managed to get data out of the GPS. I've pushed the code we used for the successful test. The trick was to stop reading at the Here are some examples of data we got when there was no GPS lock:
And here's an example of some good data:
These results came from the Next up is to figure out how to parse this data as it comes in. Counting commas is probably a good way to discard data until we get to the coordinate section You will need to be able to handle locked and unlocked GPS states. If there is no lock, we should just set 0,0 as the position. For easier testing, you might want to try onlinegdb or another quick way to run C. To simulate the data coming in, you could loop through the data attached above, one character at a time and run your parser logic on each character. The GPS data sheet probably has more details on how to parse the data. Or, since the GPS can use NMEA mode, figure out which command to issue to read NMEA-formatted data. Once that's done, there are lots of NMEA parser implementations out there that we could use. |
Setup: - OBC/RF board set 1 compiled with STX strobe in rfTxTestSequence(). - OBC/RF board set 2 compiled with SRX strobe in rfTxTestSequence(). - In UART prompt, enter on both sets: > task resume 10 - Set 1 sample output: ... radio task (0x0) S 0x3d < 0x0f tx_underflowed:no tx_numbytes:0 S 0x3d < 0x0f TX FIFO_BYTES_AVAILABLE: 0xf S 0xbd < 0x00 RX FIFO_BYTES_AVAILABLE: 0x0 S 0x3d < 0x0f 62 Bytes Radio TX FIFO written AFTER: tx_underflowed:no tx_numbytes:62 S 0x35 < 0x02 STX strobed... S 0x3d < 0x24 StatusByte: 0x24 radio task (0x0) S 0x3d < 0x0f tx_underflowed:no tx_numbytes:0 S 0x3d < 0x0f TX FIFO_BYTES_AVAILABLE: 0xf S 0xbd < 0x00 RX FIFO_BYTES_AVAILABLE: 0x0 S 0x3d < 0x0f 62 Bytes Radio TX FIFO written AFTER: tx_underflowed:no tx_numbytes:62 S 0x35 < 0x02 STX strobed... S 0x3d < 0x24 StatusByte: 0x24 radio task (0x0) S 0x3d < 0x0f tx_underflowed:no tx_numbytes:0 S 0x3d < 0x0f TX FIFO_BYTES_AVAILABLE: 0xf S 0xbd < 0x00 RX FIFO_BYTES_AVAILABLE: 0x0 S 0x3d < 0x0f 62 Bytes Radio TX FIFO written AFTER: tx_underflowed:no tx_numbytes:62 S 0x35 < 0x02 STX strobed... S 0x3d < 0x24 StatusByte: 0x24 - Set 2 sample output: ... radio task (0x0) S 0x3d < 0x02 tx_underflowed:no tx_numbytes:62 S 0x3d < 0x02 TX FIFO_BYTES_AVAILABLE: 0x2 S 0xbd < 0x0f RX FIFO_BYTES_AVAILABLE: 0xf S 0x3d < 0x02 Radio did not write AFTER: tx_underflowed:no tx_numbytes:62 S 0x34 < 0x02 STX strobed... S 0x3d < 0x12 StatusByte: 0x12 RX Byte #0: 3e RX Byte #1: 10 RX Byte #2: 02 RX Byte #3: 03 RX Byte #4: 04 RX Byte #5: 05 RX Byte #6: 06 RX Byte #7: 07 RX Byte #8: 08 RX Byte #9: 09 RX Byte #10: 0a RX Byte #11: 0b RX Byte #12: 0c RX Byte #13: 0d RX Byte #14: 0e RX Byte #15: 0f RX Byte #16: 10 RX Byte #17: 11 RX Byte #18: 12 RX Byte #19: 13 RX Byte #20: 14 RX Byte #21: 15 RX Byte #22: 16 RX Byte #23: 17 RX Byte #24: 18 RX Byte #25: 19 RX Byte #26: 1a RX Byte #27: 1b RX Byte #28: 1c RX Byte #29: 1d RX Byte #30: 1e RX Byte #31: 1f RX Byte #32: 20 RX Byte #33: 21 RX Byte #34: 22 RX Byte #35: 23 RX Byte #36: 24 RX Byte #37: 25 RX Byte #38: 26 RX Byte #39: 27 RX Byte #40: 28 RX Byte #41: 29 RX Byte #42: 2a RX Byte #43: 2b RX Byte #44: 2c RX Byte #45: 2d RX Byte #46: 2e RX Byte #47: 2f RX Byte #48: 30 RX Byte #49: 31 RX Byte #50: 32 RX Byte #51: 33 RX Byte #52: 34 RX Byte #53: 35 RX Byte #54: 36 RX Byte #55: 37 RX Byte #56: 38 RX Byte #57: 39 RX Byte #58: 3a RX Byte #59: 3b RX Byte #60: 3c RX Byte #61: 3d RX Byte #62: e8 RX Byte #63: ba Misc: - Fix calculation of fifo bytes in writeToTxFIFO. - TODO: readFromRxFIFO changed to always queuering FIFO_RX; change to check only when needed. - Create IS_STATE macro to check state easily.
The balloon GPS will work a little differently from the satellite GPS. They just constantly send NMEA sentences once per second. So the driver will need to change a bit:
|
The GPS communicates over a UART. It has a system of commands for configuring it and getting data out from it.
It is possible to put the GPS into NMEA mode. This is a standard message format, allowing us to leverage existing GPS libraries, such as tinygps/tinynmea, so this is probably a good idea.
Tasks:
Most of the details (which specific commands to send to the GPS) should/will be figured out by the AODCS team. We write functions to send out the appropriate GPS commands to do a specific thing (get location, reset, etc.), and we hook those up to the existing command system so they can be executed during a mission.
http://docs.novatel.com/OEM7/Content/PDFs/OEM7_Commands_Logs_Manual.pdf
The text was updated successfully, but these errors were encountered: