Balloon telemetry data using radio teletype or RTTY (Baudot)


Closed Thread
Results 1 to 7 of 7
  1. #1

    Default Balloon telemetry data using radio teletype or RTTY (Baudot)

    My project is to send aloft, a balloon carrying a GPS receiver, 2M FM amateur radio and a digital camera. Wanting to 'roll my own' or 'homebrew' the payload TM circuitry rather than buying it, steered me into using RTTY.

    While APRS and AX.25 provide data integrity, my programming skills lacked the expertise to implement this method. So I started thinking about using the amateur radio standard AFSK RTTY at 170Hz shift. Data integrity should be maintained fairly accurate because the receiving station and payload will be in Line of Site with each other. The payload TM signal should be very strong at the receiving station(s).

    Searching this site and using Google, I could only find a couple of articles in the PICAXE forum and none on this forum. My PIC of choice is the PIC16F627.

    Reading the GPS NEMA 0183 data was simple, converting the $GPGGA NEMA string ASCII data into Baudot and readying it for transmit it was a bit trickier.
    I have a test array sending Baudot to my o'scope and the data pulses are 22mS, and meet the 45.5 baud Baudot format.

    I welcome any comments, suggestions or critiques.

    Here is my code:

    Code:
     
    'PICBASIC PRO program to read a 4800 BAUD GPS GPGGA NEMA 
    ' 0183 string and transmit it using BAUDOT (RTTY) with standard amateur 
    ' radio AFSK 170Hz shift, using the XR2206 modem.
    '
    '
    INCLUDE "BS2DEFS.BAS"
    DEFINE HSER_CLROERR 1   'USART CLEAR OVERFLOW ERROR
    DEFINE HSER_TXSTA 24H   'SET USART TX STAUS REG 
    DEFINE HSER_RCSTA 90H   'SET USART RC STAUS REG 
    DEFINE HSER_BAUD 4800   'SET USART BAUD RATE
    define HSER_SPBRG 50    'SET PIC OSC FOR 4800 BAUD
    RXDATA var BYTE (80)   'ALLOCATE 80 BYTES FOR USART RX DATA
    PIR1 = $0C             'ASSIGN USART RX INTERUPT REG 
    PTT VAR PORTB.2        'ASSIGN PTT PIN 
    O Var PORTB.1          'ASSIGN BAUDOT OUTPUT PIN
    I VAR BYTE
    L VAR BYTE
     
    '---------------------READ $GPGGA DATA-----------------------------
    ' Read serial port and wait for "GGA", then load RXDATA with entire 
    ' GPGGA string. Continue loading data for the next 80 characters or
    ' unitl a "$" is detected.
    ' Sample GPGGA string:
    ' $GPGGA,150735.000,3444.9047,N,11849.3610,W,1,09,0.9,1019.8,M,
    ' -31.9,M,,0000*50
    LOADDATA:
        HSERIN [WAIT (71,71,65), STR RXDATA \80\24] 
     
    '---------------------PTT------------------------------------------
    ' Send PTT to radio and wait .5 seconds. Your radio interface circuitry
    ' should receive this PTT signal.
     
        HIGH PTT     
        PAUSE 500
     
    '---------------------MARK Tone------------------------------------ 
    ' Transmit Mark tone of 2295Hz for 2 seconds. No reason, I just 
    ' want to...
     
        HIGH O       
        PAUSE 2000
     
    '---------------------SEND LTRS 5X TO SYNC RCV STATION-------------
    ' Transmit LTRS data "11111" 5 times to synchronize recieving station's
    ' timing. This alerts the receiving station that the next characters are
    ' BAUDOT letter characters. The LTRS data only needs to be sent one time.
     
        FOR I = 1 TO 5
        GOSUB RTTYLTR
        NEXT I
     
    '----------------------SEND FIGS 5X--------------------------------
    ' Transmit FIGS data "11011" 5 times. This alerts recieving station
    ' that the next characters are to be BAUDOT FIG characters. The FIGS
    ' data only needs to be sent one time.
     
        FOR I = 1 TO 5  
        GOSUB RTTYFIG
        NEXT I
     
    '----------------------SEND CR AND LF -----------------------------
    ' Transmit Carriage Return (CR) and Line Feed (LF) 5 times to
    ' format receiving station display. This ensures the received GPS
    ' Baudot data will start on a new line.
     
        FOR I = 1 TO 5
        GOSUB RTTYCRLF
        NEXT I
     
    '----------------------Read GPS ASCII Data-------------------------   
    ' Read RXDATA and convert it to BAUDOT. Since we are only expecting
    ' 14 unique characters in the NEMA GPGGA string, there is no need to 
    ' convert the entire alphabet and other special characters to BAUDOT.
    ' Depending on your geographic location, you may want to add an "E" 
    ' and/or "S" to the RXDATA and character routines below.
     
        FOR L = 0 TO 80
        IF RXDATA (L) =  0 THEN GOSUB RTTY0
        IF RXDATA (L) =  1 THEN GOSUB RTTY1
        IF RXDATA (L) =  2 THEN GOSUB RTTY2
        IF RXDATA (L) =  3 THEN GOSUB RTTY3
        IF RXDATA (L) =  4 THEN GOSUB RTTY4
        IF RXDATA (L) =  5 THEN GOSUB RTTY5
        IF RXDATA (L) =  5 THEN GOSUB RTTY6
        IF RXDATA (L) =  7 THEN GOSUB RTTY7
        IF RXDATA (L) =  8 THEN GOSUB RTTY8
        IF RXDATA (L) =  9 THEN GOSUB RTTY9
        IF RXDATA (L) =  "N" THEN GOSUB RTTYN
        IF RXDATA (L) =  "W" THEN GOSUB RTTYW
        IF RXDATA (L) =  "," THEN GOSUB RTTYSPACE 'Convert "," to SPACE
        IF RXDATA (L) =  "." THEN GOSUB RTTYPERIOD
        NEXT L
    '---------------------DISABLE PTT AFTER ALL DATA IS TRANSMITTED----
     
        LOW PTT
     
    '------------------------------------------------------------------
     
        PAUSE 60000   'WAIT 60 SECONDS 
     
        GOTO LOADDATA 'GO BACK AND READ GPS DATA AGAIN
     
    '---------------------BAUDOT BIT TX SUBROUTINES--------------------
    ' EACH BAUDOT WORD CONTAINS A 22mS LOW START BIT, 5 22mS HIGH OR LOW
    ' DATA BITS AND A 44mS HIGH STOP BIT. THE BAUDOT DATA IS SENT LSB FIRST.
    ' THE ENTIRE BAUDOT WORD IS 176mS LONG. 
    ' START BIT     DATA BITS       STOP BIT 
    '    22mS    +    110mS     +     44mS
    '
    ' IN THE RTTY0: SUBROUTINE BELOW, L2 BRINGS PORTB.1 LOW FOR 44mS(22mS X 2).
    ' THE FIRST 22mS LOW IS THE START BIT AND THE LAST 22mS IS BIT0. H2 
    ' BRINGS PORTB.1 HIGH FOR 44mS. THE FIRST 22mS IS BIT1 AND THE LAST 22mS
    ' IS FOR BIT2...ETC.
    '
    ' L1 = LOW PORTB.1 FOR 22mS
    ' H2 = HIGH PORTB.1 FOR 44mS
    ' H5 = HIGH PORTB.1 FOR 110mS...ETC 
    '                                       
       RTTY0:        'TX BAUDOT "0" 
       GOSUB L2      'TX START BIT and BIT0(LSB)
       GOSUB H2      'TX BIT1 and BIT2
       GOSUB L1      'TX BIT3
       GOSUB H3      'TX BIT4(MSB) and STOP Bit                 
       RETURN
     
       RTTY1:        'TX BAUDOT "1"   
       GOSUB L1      'TX START BIT
       GOSUB H3      'TX BIT0, BIT1 AND BIT2
       GOSUB L1      'TX BIT4
       GOSUB H3      'TX BIT4(MSB) and STOP Bit
       RETURN
     
       RTTY2:        'TX BAUDOT "2" 
       GOSUB L1      'TX START BIT
       GOSUB H2      'TX BIT0 AND BIT1
       GOSUB L2      'TX BIT3
       GOSUB H3      'TX BIT4(MSB) and STOP Bit    
       RETURN
     
       RTTY3:        'TX BAUDOT "3" OR 01100011
       GOSUB L1      'TX START BIT
       GOSUB H2      'TX BIT0 AND BIT1
       GOSUB L3      'TX BIT2, BIT3 AND BIT4
       GOSUB H2      'TX STOP BIT
       RETURN
     
       RTTY4:         'TX BAUDOT "4"
       GOSUB L2       'TX START BIT and BIT0(LSB)
       GOSUB H1       'TX BIT1
       GOSUB L1       'TX BIT2
       GOSUB H1       'TX BIT3
       GOSUB L1       'TX BIT4
       GOSUB H2       'TX STOP BIT                
       RETURN
     
       RTTY5:        'TX BAUDOT "5"
       GOSUB L5      'TX START BIT AND BIT0 - BIT3
       GOSUB H3      'TX BIT4 and STOP Bit
       RETURN
     
       RTTY6:        'TX BAUDOT "6"
       GOSUB L1      'TX START BIT
       GOSUB H1      'TX BIT 0
       GOSUB L1      'TX BIT1
       GOSUB H1      'TX BIT2
       GOSUB L1      'TX BIT3
       GOSUB H3      'TX BIT4(MSB) and STOP Bit    
       RETURN
     
       RTTY7:        'TX BAUDOT "7"
       GOSUB L1      'TX START BIT
       GOSUB H3      'TX BIT0 - BIT2
       GOSUB L2      'TX BIT3 AND BIT4
       GOSUB H2      'TX STOP BIT
       RETURN
     
       RTTY8:        'TX BAUDOT "8"
       GOSUB L2
       GOSUB H2
       GOSUB L2
       GOSUB H2                       
       RETURN
     
       RTTY9:        'TX BAUDOT "9"
       GOSUB L4
       GOSUB H4
       RETURN
     
       RTTYN:        'TX BAUDOT "N"
       GOSUB RTTYLTR
       GOSUB L3
       GOSUB H2
       GOSUB L1
       GOSUB H2
       GOSUB RTTYFIG          
       RETURN
     
       RTTYW:        'TX BAUDOT "W"
       GOSUB RTTYLTR
       GOSUB L1      'TX START BIT
       GOSUB H2
       GOSUB L2
       GOSUB H3      'TX BIT4(MSB) and STOP Bit
       GOSUB RTTYFIG     
       RETURN
     
       RTTYSPACE:    'TX BAUDOT "SPACE"
       GOSUB L3
       GOSUB H1
       GOSUB L2
       GOSUB H2     
       RETURN
     
       RTTYPERIOD:   'TX BAUDOT "."
       GOSUB L3
       GOSUB H5
       RETURN
     
       RTTYCRLF:     'TX BAUDOT CR & LF
       GOSUB L4
       GOSUB H1
       GOSUB L1
       GOSUB H2          
       GOSUB L2
       GOSUB H1
       GOSUB L3
       GOSUB H2     
       RETURN
     
       RTTYLTR:      'TX BAUDOT LTR
       GOSUB L1      'TX START BIT
       GOSUB H7      'TX SEVEN HIGH PULSES BIT0 - BIT4 AND A STOP BIT
       RETURN
     
       RTTYFIG:      'TX BAUDOT FIG
       GOSUB L1      'TX START BIT
       GOSUB H2
       GOSUB L1
       GOSUB H4
       RETURN
     
    '-------------------RTTY HIGH/LOW PULSE LENGTH SUBS----------------
    ' IN BAUDOT, THE START BIT IS LOW FOR 22mS AND EACH DATA BIT IS 22mS 
    ' IN DURATION AND EITHER A LOW (0) OR HIGH (1). WHILE THE STOP BIT 
    ' IS HIGH FOR 44mS.
     
       L1:           'HOLD PORTB.1 LOW FOR 22mS IN DURATION
       LOW O
       PAUSE 22
       RETURN
     
       L2:           'HOLD PORTB.1 LOW FOR 44mS IN DURATION
       LOW O
       PAUSE 44
       RETURN
     
       L3:           'HOLD PORTB.1 LOW FOR 66mS IN DURATION
       LOW O
       PAUSE 66
       RETURN
     
       L4:           'ETC
       LOW O
       PAUSE 88
       RETURN
     
       L5:           'ETC
       LOW O
       PAUSE 110
       RETURN
     
       H1:           'HOLD PORTB.1 HIGH FOR 22mS IN DURATION
       HIGH O
       PAUSE 22
       RETURN
     
       H2:           'HOLD PORTB.1 HIGH FOR 44mS IN DURATION
       HIGH O
       PAUSE 44
       RETURN
     
       H3:           'ETC
       HIGH O
       PAUSE 66
       RETURN
     
       H4:           'ETC
       HIGH O
       PAUSE 88
       RETURN
     
       H5:           'ETC
       HIGH O
       PAUSE 110
       RETURN
     
       H7:           'ETC
       HIGH O
       PAUSE 154
       RETURN
     
       End
    Last edited by johnmaetta; - 4th June 2011 at 22:16.

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default Re: Balloon telemetry data using radio teletype or RTTY (Baudot)

    Have you seen this?
    http://www.byonics.com/

    I have used the TinyTrak3 with no complaints.
    Dave
    Always wear safety glasses while programming.

  3. #3


    Did you find this post helpful? Yes | No

    Default Re: Balloon telemetry data using radio teletype or RTTY (Baudot)

    Yes, pretty cool product.

    I wanted to use something not out of a box. Homebrewing it also make it flexible.
    I think with those products you're pretty much stuck with only modifying a couple of parameters. ie. Callsign, SSID, symbol, tx delay, etc. This is because you have to stick to the APRS protocol.

    Going old school is fun too....

    73

    John

  4. #4
    Join Date
    Aug 2005
    Location
    Michigan, USA
    Posts
    224


    Did you find this post helpful? Yes | No

    Default Re: Balloon telemetry data using radio teletype or RTTY (Baudot)

    Which PIC are you using John? At the risk of "going over your head", have you considered losing the XR2206 chip and generating the 2125 and 2295 Hz sine wave AF directly from the PIC (using DDS-PWM or DDS-R2R)?

    Vy 73, Mike, K8LH

  5. #5


    Did you find this post helpful? Yes | No

    Default Re: Balloon telemetry data using radio teletype or RTTY (Baudot)

    Hi Mike,

    It doesn't take too high of a step to "go over my head". Anyway, I am using the 16F648A and I am not sure about DDS and PWM, but I did see that some people generate sine waves with PICs. I recall seeing a PIC schematic with four resistors bridging four PIC output pins. Then I believe each pin is pulsed in sequence with varying amplitude while being swept over time. Is that the premise?

    I want to learn...

    73

    John
    N6VMO
    Last edited by johnmaetta; - 8th June 2011 at 13:02. Reason: spelling

  6. #6
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166


    Did you find this post helpful? Yes | No

    Default Re: Balloon telemetry data using radio teletype or RTTY (Baudot)

    johnmaetta, Why not just use a 10F222 to generate the frequency's with a fiilter? That saves a lot of parts and board space. A couple of years ago I used one to generate a 125khz carrier to send temperature and depth data to the surface from a device towed by a boat to emulate a cannon ball for Salmon fishing.

    Dave Purola,
    N8NTA

  7. #7


    Did you find this post helpful? Yes | No

    Default Re: Balloon telemetry data using radio teletype or RTTY (Baudot)

    Thank you to all who made suggestions and provided me help. Here is the prototype PIC RTTY Telemetry project:

    http://www.n6vmo.com/PIC/SARCHAB7.zip

Members who have read this thread : 1

You do not have permission to view the list of names.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts