Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Posts posted by chicken

  1. Thought about this thread (and good old times on 43oh!) when I saw Big Clive finding an MSP430G2230 in a solar light ūüôā


    As usual, he discusses the circuit in great detail. Quite clever implementation of battery charging and brightness control.



  2. Hi Chumikov,

    The SR162 uses a Z80 MCU and two CMX589A GMSK modems (one per channel). The radio portion looks like a superheterodyne receiver with an oscillator, crystal filters and a ton of trimable passives. See attached a picture of the insides of the SR162.



  3. Hi Varnak,

    The dAISy software does change the channel every so often. The code for switching between the channels start at line 329 in packet_handler.c

    The receiver will switch to the other channel when the state is PH_RESET, which is the case after an error, successful message, or when there is no start of message within PH_SYNC_TIMEOUT (defined in line 27) clock ticks (one tick being 1/9600 second). Statistically, it will miss at least 50% of the message as it can only listen on one channel at a time.


  4. The Si4463 is backward compatible, as long as the chips have the same revision (B1 in this case).

    The pin out depends on the breakout board that you use for your project. I don't have a screenshot as I never updated the dAISy-E10-M4463D project to the new version of WDS. dAISy requires CLK and DATA from the radio, which the 4362 config files map to GPIO2 and GPIO3. If necessary, move them to other pins as they are available on your breakout board.

    But don't change CTS (GPIO1) as this pin is essential for SPI communication!

  5. Hi Ross,

    Yes, you can feed the serial data out of the HAT into an Arduino or ESP8266. It's 8N1 UART at 38400. You can expect a few hundred messages / minute in very busy areas down to a few per minute in quieter locations.

    The AIS payload is encoded into !AIVDM messages. If you want to do more with the AIS data than just forwarding it, you will have to decode the !AIVDM message and then make sense of the binary AIS payload embedded in them. You can find detailed documentation of !AIVDM and payload structure that here.

    As you can see, it's pretty exhaustive. If you want to process AIS messages on the Arduino/ESP8266, you likely will have to focus on a few message types. 1, 2, 3, 5, 18,19 are the most important for tracking ships. This here is an Arduino library for AIS decoding that I found, but I never used it so can't vouch for it.

    Happy to share logs of real-world AIS data if that's helpful. If interested, send me a PM.


  6. PS: Forgot to answer the second part of your question.

    All the variations of dAISy are suitable for something built around a Raspberry Pi. The HAT is the obvious fit, but the USB receivers work as well. The USB receivers have the added benefit, that you can also use them on a regular PC or laptop if you decide to move away from the Pi.

  7. Hi Ross,

    The best solution depends on what you want to achieve.

    If you want to build a chartplotter, then OpenPlotter or a standalone setup of OpenCPN would be a viable approach. Both will require a RPI 3 as the GUI of OpenCPN ps

    • For OpenPlotter, I recommend the 1.0 image and not their latest alpha, unless you know what you're doing.
    • For standalone OpenCPN, this tutorial worked for me.

    If you only want to track ships and may report to a website, then AISHub's rPiAIS is the quickest way to get up and running.

    More DIY alternatives are Kplex (which OpenPlotter uses under the hood) or some form of home-brew Python script.

    • ais-forwarder to send received AIS messages over the network
    • simpleAIS to decode AIS messages in your Python project

    You will find more AIS related projects under my Github stars.

    Best Regards,


  8. Hi @pileoni

    You can use a terminal program like Putty on Windows to connect to dAISy. Pressing ESC will bring up a debug/configuration menu. There, you can start a test mode by pressing T and then ENTER. dAISy will start outputting an AIS message every 5 seconds.
    Alternatively, while in regular receive mode, you can send & to get dAISy to respond with its serial number.
    Let me know if this helps.
    Best Regards,
  9. Hi @andimmike15

    To debug the application, I'd go through the following steps:

    1. Write something on the serial console to make sure that end works (uart_init, uart_send_string)

    If that doesn't work, search this forum for tips on setting up serial output from your model of the LaunchPad.

    2. Read the Si4362's part information and compare it to what's expected per datasheet (radio_setup, radio_part_info, radio_buffer.part_info.part_msb, radio_buffer.part_info.part_lsb)

    If you don't get the expected values (e.g. 0x43 for the msb, 0x62 for the lsb if you're using an Si4362), then something with the SPI connections is wrong.

    3. Toggle LEDs in strategic locations in the packet_handler ISR, to see whether raw data and clk bits from radio arrive at the MCU and the interrupt is invoked.

    If that doesn't work, check that the correct radio and GPIO pins are connected.

    If all the above works, then you're ready to worry about the actual AIS signal. That side is hard to simulate without an AIS target, but your transponder would be a good start. But be careful to not damage the Si4362 with a too strong signal. Directly connecting the transponder with the receiver will destroy the receiver.

    Let me know if this helps, or where on that list you get stuck.


  10. For all you AIS home-brewers out there: I've added the TAI-SAW TA0395A SAW filter to my Tindie store.


    This bandpass filter covers 6 MHz in the marine VHF band and can be found in many commercial AIS receiver and related equipment. As often with parts from specialist vendors, it is hard to come by without writing an RFQ and/or begging for samples. So I thought I'd sell some of my stash to fellow tinkerers.

  11. Hi @andimmike15

    AIS messages can be longer than 32 bytes, for example message type 5 which includes the ship's name is 424 bits / 53 bytes.

    You could filter messages to only receive the position messages (types 1, 2, 3, 4, 9 and 18) by evaluating the message type at line 261 and resetting the packet handler state machine in case of an unwanted message.

    Keep in mind, that while the received message is converted to NMEA0183, a new AIS message may start arriving. So allocate a few bytes more for the FIFO than the minimal message length (21 bytes for the above, so maybe make the FIFO 32 bytes long). Note that due to its current implementation, the FIFO length must be a power of two.

    Setting FIFO_PACKETS to 2 is the minimum, again because a new packet may arrive while the first isn't fully processed yet.

    Another big chunk of memory is in the NMEA encoding section. If filtering AIS messages, you can squeeze out a few bytes by limiting the maximum size of the NMEA payload to 21 bytes (nmea.c line 19), which translates to a NMEA output buffer of 43 bytes. You could shave of a few more bytes by not storing the AIVDM lead-in in the buffer but directly outputting it on serial.

    Still, squeezing everything into into 96 bytes of RAM will be quite a challenge. The MSP430G2553 has a luxurious 512 bytes.



  12. Yes, you can remove both and it will still work.

    #define TEST would enable extra code. I used that during development for testing the NMEA code without a radio. As long as the project does not define it, the test code will be skipped. It's not enabled in the code, so you don't have to worry about that.

    #define DEBUG_MESSAGES is useful to get more information about the radio communication. I would leave that in until you got the receiver working, as it will help you tracking down what's going on.


  13. Hello @NsNcc

    I'm not much of a Linux wizard, so I don't have a better method to achieve this.

    There was a thread on the Kplex Google group about issues with the dAISy USB because Linux didn't initialize the USB ports early enough, but I wasn't aware that the same issue exists with the regular serial port.


    Kplex may be overkill if you just need to forward AIS data to a network address. Alternatives are:

    A simple python script: https://github.com/jaluebbe/ais-forwarder

    Or a shell script:

    But of course, that still leaves you with the "run at startup problem". As a Linux noob, I'd try this (which looks very similar to what you're already doing):




  14. Hi @GeoffH

    I just sent out a request for a quote for a few more of the NMEA add-ons for the small dAISy. It will probably be 4-6 weeks before they are back in stock.

    I tried to directly connect dAISy TX to the A2 and GND to B2 on the NMEA2WiFi, but it does not have enough power to drive the signal.  If you are into tinkering, you can try something like this:


  15. Hi Fonsin,

    Glad to hear that you successfully upgraded your dAISy USB.

    As for the NMEA-0183 adapter: I didn't plan to build new ones as I think the 2+ is the more robust solution. But there were recently a number of requests from current owners of the dAISy USB, so I will probably spin a small batch in the next few months.

    It seems like the NMEA-0183 listeners are not too picky. Some (e.g. Garmin) even use just one data wire, which may directly work with the UART output on TX. Though input protection may be an issue.

    On my adapter I use the TI UA9638, which is also available as DIP package (UA9638CP)

    This IC is very easy to use. Just connect 5V, GND and TX, and you get a RS-422, i.e. NMEA-0183 compliant, differential output. And maybe add a 0.1uF and/or 1uf capacitor across the power pins if you want to get fancy.

    The downside of the UA9638 is, that it's relatively power hungry (50mA) compared to the rest of dAISy USB. It is responsible for 75% of the increased current consumption of the dAISy 2+. There are other RS-422 drivers which seem to be lower power, like for example the ST485 or MAX485. But I haven't used any of these.

    This document goes into great detail about the electrical characteristics of NMEA-0183:

    Best Regards,

    PS: As for logic gates, the 74HC00 could be a good alternative for the transistor. It depends a bit on the required current, but the NMEA-0183 spec says 2mA per listener, which a logic gate should be able to deliver. Another option is to use 74HC04 to create a true differential signal (1 inverter for one line, and 2 inverters in series on the other line).

  16. I don't have a MSP430FR2433, but a few items come to mind:

    1) Does the LCD display support 3.3V input? Most Arduinos are running at 5V, but the MSP430 family is 3.3V.

    2) Did you check if just wiggling a pin works? E.g. by turning on an LED or measuring with a multimeter? If that doesn't work, some additional GPIO configuration may be needed.

    3) If you have a logic analyzer or oscilloscope, check if the timing of the pin wiggles is as expected. Your code seems to assume, that the clock is running at 750KHz. I don't know if that's the speed at which the FR2433 starts up without any further configuration.



  17. This is the relevant line in radio_config.h:

    #define RF_GPIO_PIN_CFG 0x13, 0x1A, 0x00, 0x11, 0x14, 0x1B, 0x00, 0x00

    ..which in the M4463 branch looks like this:

    #define RF_GPIO_PIN_CFG 0x13, 0x11, 0x00, 0x21, 0x20, 0x14, 0x00, 0x00

    I have a few bare boards of the booster pack laying around. Happy to solder them up if there's interest.


  • Create New...