Compare commits
4 Commits
8b632ee3d6
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 120bd5f421 | |||
| 38975d27bd | |||
| bf14cbd8df | |||
| d09e496aa7 |
26
README.md
26
README.md
@@ -1,26 +1,5 @@
|
|||||||
## Network Config
|
## Network Config
|
||||||
|
-
|
||||||
|Parameter| Value
|
|
||||||
|---------|-------------
|
|
||||||
| IP Adr. | 192.168.2.1
|
|
||||||
| Subnet | 255.255.0.0
|
|
||||||
| MAC | 00-08-dc-ab-cd-f1
|
|
||||||
|
|
||||||
### MQTT
|
|
||||||
|
|
||||||
#### Connect to MQTT Host 192.168.5.2
|
|
||||||
|
|
||||||
##### Publish
|
|
||||||
|Topic |Values | Unit
|
|
||||||
|--------------------------------------------------------|------------|-------
|
|
||||||
| TODO | |
|
|
||||||
|
|
||||||
|
|
||||||
##### Subscribe
|
|
||||||
|
|
||||||
|Topic |Values | Unit
|
|
||||||
|--------------------------------------------------------|------------|-------
|
|
||||||
| TODO | |
|
|
||||||
|
|
||||||
## Hardware usage
|
## Hardware usage
|
||||||
|
|
||||||
@@ -29,6 +8,7 @@
|
|||||||
|Timer| Type | Usage | Mode | used ISRs | Output connected
|
|Timer| Type | Usage | Mode | used ISRs | Output connected
|
||||||
|-----|--------|-------------------------------|------------------------|----------------|------------------
|
|-----|--------|-------------------------------|------------------------|----------------|------------------
|
||||||
| 0 | 8 bit | Millis Tick Timer (1kHz) | 2 (CTC) | COMPA | -
|
| 0 | 8 bit | Millis Tick Timer (1kHz) | 2 (CTC) | COMPA | -
|
||||||
|
| 2 | 8 bit | Modbus Tick Timer (1kHz) | 2 (CTC) | COMPA | -
|
||||||
|
|
||||||
### UART
|
### UART
|
||||||
|
|
||||||
@@ -37,4 +17,4 @@
|
|||||||
| 0 | Debug Prints (connected to USB)
|
| 0 | Debug Prints (connected to USB)
|
||||||
| 1 |
|
| 1 |
|
||||||
| 2 |
|
| 2 |
|
||||||
| 3 |
|
| 3 | Modbus RS485
|
||||||
|
|||||||
@@ -93,8 +93,8 @@ void set_Output(uint8_t nr, uint8_t state);
|
|||||||
#define BitPinD7 16 //I16
|
#define BitPinD7 16 //I16
|
||||||
#define BitPinG2 17 //I17
|
#define BitPinG2 17 //I17
|
||||||
#define BitPinG1 18 //I18
|
#define BitPinG1 18 //I18
|
||||||
#define BitPinD3 10 //INO
|
#define BitPinD3 19 //INO
|
||||||
#define BitPinD2 11 //IN1
|
#define BitPinD2 20 //IN1
|
||||||
|
|
||||||
|
|
||||||
#define BTN_DREHZAHL_GROB_PLUS BitPinF4 // modbus
|
#define BTN_DREHZAHL_GROB_PLUS BitPinF4 // modbus
|
||||||
|
|||||||
64
main.c
64
main.c
@@ -9,6 +9,10 @@
|
|||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
#include "modbus.h"
|
#include "modbus.h"
|
||||||
|
|
||||||
|
volatile uint32_t inputEdgesBoth;
|
||||||
|
volatile uint32_t inputEdgesFalling;
|
||||||
|
volatile uint32_t inputEdgesRising;
|
||||||
|
|
||||||
// Timer0
|
// Timer0
|
||||||
// 1ms IRQ
|
// 1ms IRQ
|
||||||
// Used for millis() timing
|
// Used for millis() timing
|
||||||
@@ -35,31 +39,46 @@ void modbusGet(void) {
|
|||||||
case fcPresetSingleRegister:
|
case fcPresetSingleRegister:
|
||||||
case fcPresetMultipleRegisters:
|
case fcPresetMultipleRegisters:
|
||||||
case fcReadHoldingRegisters:
|
case fcReadHoldingRegisters:
|
||||||
//;
|
|
||||||
//uint16_t test;
|
|
||||||
//modbusExchangeRegisters(&test,0,1);
|
|
||||||
modbusExchangeRegisters((void *)outStates,0,1);
|
modbusExchangeRegisters((void *)outStates,0,1);
|
||||||
break;
|
break;
|
||||||
case fcReadInputRegisters:
|
case fcReadInputRegisters:
|
||||||
if(modbusRequestedAddress() < 100)
|
if(modbusRequestedAddress() < 100)
|
||||||
modbusExchangeRegisters((void *)inStates,0,nrOfInputs/16);
|
modbusExchangeRegisters((void *)inStates,0,nrOfInputs/16);
|
||||||
else if(modbusRequestedAddress() < 200)
|
else if(modbusRequestedAddress() < 200){
|
||||||
modbusExchangeRegisters((void *)inStatesBothEdges,100,nrOfInputs/16);
|
modbusExchangeRegisters((void *)&inputEdgesBoth,100,nrOfInputs/16);
|
||||||
else if(modbusRequestedAddress() < 300)
|
for(uint16_t i = modbusDataLocation - 100; i < modbusDataLocation-100+(modbusDataAmount*16); i++)
|
||||||
modbusExchangeRegisters((void *)inStatesFallingEdge,200,nrOfInputs/16);
|
inputEdgesBoth &= ~(1 << i);
|
||||||
else if(modbusRequestedAddress() < 400)
|
}
|
||||||
modbusExchangeRegisters((void *)inStatesRisingEdge,300,nrOfInputs/16);
|
else if(modbusRequestedAddress() < 300){
|
||||||
|
modbusExchangeRegisters((void *)&inputEdgesFalling,200,nrOfInputs/16);
|
||||||
|
for(uint16_t i = modbusDataLocation - 200; i < modbusDataLocation-200+(modbusDataAmount*16); i++)
|
||||||
|
inputEdgesFalling &= ~(1 << i);
|
||||||
|
}
|
||||||
|
else if(modbusRequestedAddress() < 400){
|
||||||
|
modbusExchangeRegisters((void *)&inputEdgesRising,300,nrOfInputs/16);
|
||||||
|
for(uint16_t i = modbusDataLocation - 300; i < modbusDataLocation-300+(modbusDataAmount*16); i++)
|
||||||
|
inputEdgesRising &= ~(1 << i);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case fcReadInputStatus:
|
case fcReadInputStatus:
|
||||||
if(modbusRequestedAddress() < 100)
|
if(modbusRequestedAddress() < 100)
|
||||||
modbusExchangeBits(inStates,0,nrOfInputs);
|
modbusExchangeBits(inStates,0,nrOfInputs);
|
||||||
else if(modbusRequestedAddress() < 200)
|
else if(modbusRequestedAddress() < 200){
|
||||||
modbusExchangeBits(inStatesBothEdges,100,nrOfInputs);
|
modbusExchangeBits((void*)&inputEdgesBoth,100,nrOfInputs);
|
||||||
else if(modbusRequestedAddress() < 300)
|
for(uint16_t i = modbusDataLocation - 100; i < modbusDataLocation+modbusDataAmount-100; i++)
|
||||||
modbusExchangeBits(inStatesFallingEdge,200,nrOfInputs);
|
inputEdgesBoth &= ~(1 << i);
|
||||||
else if(modbusRequestedAddress() < 400)
|
}
|
||||||
modbusExchangeBits(inStatesRisingEdge,300,nrOfInputs);
|
else if(modbusRequestedAddress() < 300){
|
||||||
|
modbusExchangeBits((void*)&inputEdgesFalling,200,nrOfInputs);
|
||||||
|
for(uint16_t i = modbusDataLocation - 200; i < modbusDataLocation+modbusDataAmount-200; i++)
|
||||||
|
inputEdgesFalling &= ~(1 << i);
|
||||||
|
}
|
||||||
|
else if(modbusRequestedAddress() < 400){
|
||||||
|
modbusExchangeBits((void*)&inputEdgesRising,300,nrOfInputs);
|
||||||
|
for(uint16_t i = modbusDataLocation - 300; i < modbusDataLocation+modbusDataAmount-300; i++)
|
||||||
|
inputEdgesRising &= ~(1 << i);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case fcForceMultipleCoils:
|
case fcForceMultipleCoils:
|
||||||
@@ -69,6 +88,15 @@ void modbusGet(void) {
|
|||||||
modbusExchangeBits(outStates,0,nrOfOutputs);
|
modbusExchangeBits(outStates,0,nrOfOutputs);
|
||||||
else if(modbusRequestedAddress() < 200)
|
else if(modbusRequestedAddress() < 200)
|
||||||
modbusExchangeBits(outStatesBlinking,100,nrOfOutputs);
|
modbusExchangeBits(outStatesBlinking,100,nrOfOutputs);
|
||||||
|
else if(modbusRequestedAddress() < 300){
|
||||||
|
uint8_t outStatesToggle[sizeof(outStates)];
|
||||||
|
memset(outStatesToggle, 0, sizeof(outStatesToggle));
|
||||||
|
modbusExchangeBits(outStatesToggle,200,nrOfOutputs);
|
||||||
|
for(uint8_t i=0; i<sizeof(outStates); i++){
|
||||||
|
outStates[i] ^= outStatesToggle[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -103,7 +131,11 @@ int main()
|
|||||||
ioHelperReadPins();
|
ioHelperReadPins();
|
||||||
ioHelperDebounce();
|
ioHelperDebounce();
|
||||||
ioHelperEdgeDetector();
|
ioHelperEdgeDetector();
|
||||||
|
|
||||||
|
inputEdgesBoth |= inStatesBothEdges[0] | ((uint32_t)inStatesBothEdges[1]<<8) | ((uint32_t)inStatesBothEdges[2] << 16) | ((uint32_t)inStatesBothEdges[3]<<24);
|
||||||
|
inputEdgesFalling |= inStatesFallingEdge[0] | ((uint32_t)inStatesFallingEdge[1]<<8) | ((uint32_t)inStatesFallingEdge[2] << 16) | ((uint32_t)inStatesFallingEdge[3]<<24);
|
||||||
|
inputEdgesRising |= inStatesRisingEdge[0] | ((uint32_t)inStatesRisingEdge[1]<<8) | ((uint32_t)inStatesRisingEdge[2] << 16) | ((uint32_t)inStatesRisingEdge[3]<<24);
|
||||||
|
|
||||||
modbusGet();
|
modbusGet();
|
||||||
|
|
||||||
// Toggle all outs which are set to blinking
|
// Toggle all outs which are set to blinking
|
||||||
|
|||||||
Reference in New Issue
Block a user