It really depends on how much data we are talking about. If it is tens of bytes in a second, it is probably fairly easy to do it in an Arduino/digispark, and you likely won't need a hardware URT (which can help with the buffering, etc.). If you are dealing with lots of data, particularly if the Arduino has to do a lot of number crunching, then the Arduino might not be able to keep up, or have enough memory to process the data. In that case you probably want to go to a faster processor with more memory (such as an Arm based processor).
If you don't have to use a serial line, and can design the other two pieces to talk to the Arduino, you could have them be SPI or I2C devices. If they are existing devices, you have to adapt to the fixed format.
I'm not really sure how much data is being sent out per second between the 2 devices but its probably a decent amount of data. I'm clueless about bits and bytes but somebody would have to look at the data outputs to see exactly how much data were talking about.
Here is some data about the MODBUS data output format and a list of data points that are avaliable to pull from.
The solar charge controller http://www.morningstarcorp.com/en/sunsavermppt
has a regular RJ11 phone jack data port on it so I have no idea how I would interface that with the Adurino input.
The SunSaver MPPT supports the industry standard MODBUS® application protocol via its Meter RJ-11
interface. A Meterbus to Serial Converter (MSC) is required to adapt the Meter interface to an isolated RS-232
This document assumes the user is familiar with the MODBUS® protocol and its terminology.
Please refer to the documents listed in the References section for more information.
MODBUS® is a registered trademark of Modbus-IDA (www.modbus-ida.org
The SunSaver MPPT supports RTU mode only.
16bit MODBUS® addresses (per the modbus.org spec)
The serial communication parameters are
BPS: 9600 baud
Data bits: 8
Stop bits: 2
Flow control: None
All addresses listed are for the request PDU.
The SunSaver MPPT default server address: 0x01.
Supported MODBUS® Functions
Read Holding Registers (0x03) and Read Input Registers (0x04)
Variable name Variable description Units Scaling or Range
0x0008 9 Adc_vb_f Battery voltage, filtered (τ ≈ 1s) V n·100·2-15
0x0009 10 Adc_va_f Array voltage, filtered (τ ≈ 1s) V n·100·2-15
0x000A 11 Adc_vl_f Load voltage, filtered (τ ≈ 1s) V n·100·2-15
0x000B 12 Adc_ic_f Charging current, filtered (τ ≈ 1s) A n·79.16·2-
0x000C 13 Adc_il_f Load current, filtered (τ ≈ 1s) A n·79.16·2-
0x000D 14 T_hs Heatsink temperature ºC -128 to
0x000E 15 T_batt Battery temperature (Either ambient or RTS if
ºC -127 to
0x000F 16 T_amb Ambient temperature ºC -127 to
0x0010 17 T_rts Remote battery temperature sensor (0x80 if not ºC -127 to
0x0011 18 charge_state Charge state -
0x0012 19 array_fault Array fault bitfield -
0x0013 20 Vb_f Battery voltage, slow filter (τ ≈ 25s) V n·100·2-15
0x0014 21 Vb_ref Battery regulator reference voltage V n·96.667·2-
0x0015 22 Ahc_r_HI Ah charge resetable, HI word Ah n·0.1
0x0016 23 Ahc_r_LO Ah charge resetable, LO word -
0x0017 24 Ahc_t_HI Ah charge total, HI word Ah n·0.1
0x0018 25 Ahc_t_LO Ah charge total, LO word -
0x0019 26 kWhc kWh charge (resetable?) kWh n·0.1
0x001A 27 load_state Load state -
0x001B 28 load_fault Load fault bitfield -
0x001C 29 V_lvd load current compensated LVD voltage V n·100·2-15
0x001D 30 Ahl_r_HI Ah load resetable, HI word Ah n·0.1
0x001E 31 Ahl_r_LO Ah load resetable, LO word -
0x001F 32 Ahl_t_HI Ah load total, HI word Ah n·0.1
0x0020 33 Ahl_t_LO Ah load total, LO word -
0x0021 34 hourmeter_HI hourmeter, HI word h 0 to (224-1)
0x0022 35 hourmeter_LO hourmeter, LO word -
0x0023 36 alarm_HI alarm bitfield – HI word -
0x0024 37 alarm_LO alarm bitfield – LO word -
0x0025 38 dip_switch dip switch settings at power on
switch[1..8] in bits[0..7]
0x0026 39 led_state SOC LED state -
0x0027 40 Power_out Charge output power W n·989.5·2-
0x0028 41 Sweep_Vmp Array Vmp found during sweep V n·100·2-15
0x0029 42 Sweep_Pmax Arrap Pmax(output) found during sweep W n·989.5·2-
0x002A 43 Sweep_Voc Array Voc found during sweep V n·100·2-15
0x002B 44 Vb_min_daily Vb minimum voltage – daily V n·100·2-15
0x002C 45 Vb_max_daily Vb maximum voltage – daily V n·100·2-15
0x002D 46 Ahc_daily Ah charge - daily Ah n·0.1
0x002E 47 Ahl_daily Ah load - daily Ah n·0.1
0x002F 48 array_fault_daily Array fault bitfield - daily -
0x0030 49 load_fault_daily Load fault bitfield - daily -
0x0031 50 alarm_HI_daily alarm bitfield – daily, HI word -
0x0032 51 alarm_LO_daily alarm bitfield – daily, LO word -
0x0033 52 vb_min minimum battery voltage V n·100·2-15
0x0034 53 vb_max maximum battery voltage V n·100·2-1
0x0039 58 va_ref_fixed fixed Vmp if set (overrides % if both set) V n·100·2-15
0x003A 59 va_ref_fixed_pct Vmp = % of Voc if set (0 or 0xff disables) % n*100*2-8
1 Due to MODBUS® message length limits, it is unlikely that all 128 points of sweep data can be returned in
one request. Request sweep data in two separate requests.