|
|
|
|
@ -12,19 +12,23 @@
|
|
|
|
|
#include "lcd.h"
|
|
|
|
|
#include "i2c.h"
|
|
|
|
|
#include "modbus.h"
|
|
|
|
|
#include "menu.h"
|
|
|
|
|
|
|
|
|
|
volatile uint16_t holdingRegisters[4];
|
|
|
|
|
volatile uint16_t holdingRegisters[10];
|
|
|
|
|
|
|
|
|
|
void modbusGet(void) {
|
|
|
|
|
if (modbusGetBusState() & (1<<ReceiveCompleted))
|
|
|
|
|
{
|
|
|
|
|
switch(rxbuffer[1]) {
|
|
|
|
|
case fcReadHoldingRegisters:
|
|
|
|
|
i2c_start(0x71);
|
|
|
|
|
holdingRegisters[0] = i2c_readNak();
|
|
|
|
|
i2c_stop();
|
|
|
|
|
case fcPresetSingleRegister:
|
|
|
|
|
case fcPresetMultipleRegisters:
|
|
|
|
|
modbusExchangeRegisters(holdingRegisters,0,4);
|
|
|
|
|
lcd_home();
|
|
|
|
|
lcd_write("test %x", holdingRegisters[0]);
|
|
|
|
|
lcd_set_position(holdingRegisters[1], holdingRegisters[2]);
|
|
|
|
|
lcd_write("test");
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
modbusSendException(ecIllegalFunction);
|
|
|
|
|
@ -33,6 +37,26 @@ void modbusGet(void) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void do_buttons(){
|
|
|
|
|
//i2c_start(0x71);
|
|
|
|
|
//uint8_t buttons = i2c_readNak();
|
|
|
|
|
//i2c_stop();
|
|
|
|
|
////TODO error handling
|
|
|
|
|
|
|
|
|
|
//if(buttons & (1 << 0))
|
|
|
|
|
// set_item(1);
|
|
|
|
|
//else if(buttons & (1 << 1))
|
|
|
|
|
// set_item(2);
|
|
|
|
|
//else if(buttons & (1 << 2))
|
|
|
|
|
// set_item(2);
|
|
|
|
|
//else if(buttons & (1 << 2))
|
|
|
|
|
// set_item(3);
|
|
|
|
|
//else if(buttons & (1 << 3))
|
|
|
|
|
// set_item(4);
|
|
|
|
|
//else if(buttons & (1 << 4))
|
|
|
|
|
// set_item(5);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
i2c_init();
|
|
|
|
|
@ -47,8 +71,11 @@ int main(void)
|
|
|
|
|
TCCR0B|=(1<<CS01); //prescaler 8
|
|
|
|
|
TIMSK0|=(1<<TOIE0);
|
|
|
|
|
|
|
|
|
|
draw_menu();
|
|
|
|
|
|
|
|
|
|
while(1){
|
|
|
|
|
modbusGet();
|
|
|
|
|
do_buttons();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|