]> mj.ucw.cz Git - home-hw.git/commitdiff
Aircon: MODBUS
authorMartin Mares <mj@ucw.cz>
Sun, 14 Jul 2019 18:50:12 +0000 (20:50 +0200)
committerMartin Mares <mj@ucw.cz>
Sun, 14 Jul 2019 18:50:12 +0000 (20:50 +0200)
aircon/Makefile
aircon/README
aircon/config.h
aircon/main.c

index 15d7d8e58b9808617a855ee0a99f0f76163ff160..1b9f247c502fa44af672fc4e69d681c5f4fafb2b 100644 (file)
@@ -1,6 +1,6 @@
 ROOT=..
 BINARY=main
 OBJS=main.o
-LIB_OBJS=util-debug.o ds18b20.o
+LIB_OBJS=util-debug.o ds18b20.o modbus.o
 
 include $(ROOT)/mk/bluepill.mk
index fab35a756586dee1e902b1445ead3570e3e4cff6..e5a5dabff6321357360a0c6e1bdf83a888f711b0 100644 (file)
@@ -27,7 +27,7 @@ bypass opto-coupler   | PC15           PB9 |
 RS485 TX enable                | PA6           PA15 |
 TIM3_CH2 - DS18B20 bus | PA7           PA12 |
 bypass LED* (green)    | PB0           PA11 |
-RC active LED* (red)   | PB1           PA10 |  RXD1 - debugging console
+MODBUS frame LED* (red)        | PB1           PA10 |  RXD1 - debugging console
 TXD3 - RS485           | PB10           PA9 |  TXD1 - debugging console
 RXD3 - RS485           | PB11           PA8 |
                        | RESET         PB15 |
index 77a5f337671a4bd258e97218e208811ba2da9600..a73fe503df2d67a25b01b643094898ecca84857e 100644 (file)
@@ -11,6 +11,7 @@
 // Debugging port
 
 #define DEBUG_USART USART1
+#define DEBUG_LED_BLUEPILL
 
 // MODBUS library parameters
 
@@ -19,7 +20,7 @@
 #define MODBUS_USART_ISR usart3_isr
 
 #define MODBUS_TXEN_GPIO_PORT GPIOA
-#define MODBUS_TXEN_GPIO_PIN GPIO1
+#define MODBUS_TXEN_GPIO_PIN GPIO6
 
 #define MODBUS_TIMER TIM2
 #define MODBUS_NVIC_TIMER_IRQ NVIC_TIM2_IRQ
@@ -29,6 +30,8 @@
 
 #define MODBUS_BAUD_RATE 19200
 
+#define MODBUS_DEBUG
+
 // DS18B20 library parameters
 
 #define DS_TIMER TIM3
index 09d563ae02d719bb0e82126d29e7ecbb8dc5bab5..db09ae1a7108134fd397825b7c5b70a63a461d5f 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "util.h"
 #include "ds18b20.h"
+#include "modbus.h"
 
 #include <libopencm3/cm3/nvic.h>
 #include <libopencm3/cm3/systick.h>
@@ -61,7 +62,7 @@ static void gpio_setup(void)
        gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO0);
        gpio_set(GPIOB, GPIO0);
 
-       // PB1 = IR RC active LED*
+       // PB1 = MODBUS frame LED*
        gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO1);
        gpio_set(GPIOB, GPIO1);
 
@@ -174,17 +175,17 @@ int main(void)
        debug_puts("Hello, world!\n");
 
        ds_init();
+       modbus_init();
 
        for (;;) {
-               gpio_toggle(GPIOC, GPIO13);
-
-               gpio_clear(GPIOB, GPIO1);
-               delay_ms(100);
-               gpio_set(GPIOB, GPIO1);
+               debug_led_toggle();
 
                gpio_clear(GPIOB, GPIO0);
-               delay_ms(100);
+               delay_ms(50);
                gpio_set(GPIOB, GPIO0);
+               delay_ms(50);
+
+               modbus_loop();
        }
 
 #if 0
@@ -232,3 +233,74 @@ int main(void)
 
        return 0;
 }
+
+/*** Modbus callbacks ***/
+
+bool modbus_check_discrete_input(u16 addr UNUSED)
+{
+       return false;
+}
+
+bool modbus_get_discrete_input(u16 addr UNUSED)
+{
+       return false;
+}
+
+bool modbus_check_coil(u16 addr UNUSED)
+{
+       return false;
+}
+
+bool modbus_get_coil(u16 addr UNUSED)
+{
+       return false;
+}
+
+void modbus_set_coil(u16 addr UNUSED, bool value UNUSED)
+{
+}
+
+bool modbus_check_input_register(u16 addr UNUSED)
+{
+       return false;
+}
+
+u16 modbus_get_input_register(u16 addr UNUSED)
+{
+       return 0;
+}
+
+bool modbus_check_holding_register(u16 addr UNUSED)
+{
+       return (addr < 16);
+}
+
+u16 modbus_get_holding_register(u16 addr UNUSED)
+{
+       return 0xbeef;
+}
+
+void modbus_set_holding_register(u16 addr UNUSED, u16 value UNUSED)
+{
+}
+
+void modbus_ready_hook(void)
+{
+       // Frame LED off
+       gpio_set(GPIOB, GPIO1);
+}
+
+void modbus_frame_start_hook(void)
+{
+       // Frame LED on
+       gpio_clear(GPIOB, GPIO1);
+}
+
+const char * const modbus_id_strings[MODBUS_ID_MAX] = {
+       [MODBUS_ID_VENDOR_NAME] = "United Computer Wizards",
+       [MODBUS_ID_PRODUCT_CODE] = "42",
+       [MODBUS_ID_MAJOR_MINOR_REVISION] = "1.0",
+       [MODBUS_ID_VENDOR_URL] = "http://www.ucw.cz/",
+       [MODBUS_ID_PRODUCT_NAME] = "Magic Gadget",
+       [MODBUS_ID_USER_APP_NAME] = NULL,
+};