Compare commits
3 Commits
9c6079bdee
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 3973ed17de | |||
| 7c9500f690 | |||
| 9c26592d38 |
@@ -12,17 +12,18 @@ auf einem Atmel AVR (ATmega328p) ist der Modbus-Slave implementiert.
|
|||||||
| Parameter | Wert |
|
| Parameter | Wert |
|
||||||
|----------------|--------|
|
|----------------|--------|
|
||||||
| Baudrate | 115200 |
|
| Baudrate | 115200 |
|
||||||
|
| Datenbits | 8 |
|
||||||
| Parität | none |
|
| Parität | none |
|
||||||
| Stopbits | 1 |
|
| Stopbits | 1 |
|
||||||
| Modbus Adresse | 1 |
|
| Modbus Adresse | 1 |
|
||||||
|
|
||||||
Das Gerät stellt den 24-bit ADC Wert in 2er-Komplement Darstelling über zwei
|
Das Gerät stellt den 24-bit ADC Wert in 2er-Komplement Darstellung über zwei
|
||||||
Holding-Register bereit. Somit ergibt sich ein 32-bit signed Integer Datentyp.
|
Holding-Register bereit. Somit ergibt sich ein 32-bit signed Integer Datentyp.
|
||||||
|
|
||||||
| Register Adresse | Wert |
|
| Register Adresse | Wert |
|
||||||
|------------------|-----------|
|
|------------------|-----------|
|
||||||
| 0 | ADC[0:15] |
|
| 0 | ADC[0:15] |
|
||||||
| 1 | ADC[23:16]|
|
| 1 | 8xADC[23],ADC[22:16]|
|
||||||
|
|
||||||
#### Beispiel:
|
#### Beispiel:
|
||||||
Abfragen des Wertes mit dem Tool modpoll (https://www.modbusdriver.com/modpoll.html)
|
Abfragen des Wertes mit dem Tool modpoll (https://www.modbusdriver.com/modpoll.html)
|
||||||
@@ -51,8 +52,8 @@ Data type.............: 32-bit integer, output (holding) register table
|
|||||||
|
|
||||||
| LED | Signal |
|
| LED | Signal |
|
||||||
|-----|--------|
|
|-----|--------|
|
||||||
| D1 | Bus Aktivität |
|
| D1 | Bus Error |
|
||||||
| D2 | |
|
| D2 | Bus Transmission |
|
||||||
| D3 | 5V Rail |
|
| D3 | 5V Rail |
|
||||||
|
|
||||||
### Klemmenbelegung
|
### Klemmenbelegung
|
||||||
|
|||||||
16
code/main.c
16
code/main.c
@@ -1,5 +1,6 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include "modbus.h"
|
#include "modbus.h"
|
||||||
|
|
||||||
@@ -7,6 +8,8 @@
|
|||||||
|
|
||||||
uint16_t holdingRegisters[4];
|
uint16_t holdingRegisters[4];
|
||||||
|
|
||||||
|
volatile uint32_t led_on_timer[3];
|
||||||
|
|
||||||
// return raw ADC data
|
// return raw ADC data
|
||||||
uint32_t HX711_get_data(uint8_t clk_PIN, uint8_t data_PIN, uint8_t gain_for_next_conv){
|
uint32_t HX711_get_data(uint8_t clk_PIN, uint8_t data_PIN, uint8_t gain_for_next_conv){
|
||||||
uint32_t data = 0;
|
uint32_t data = 0;
|
||||||
@@ -62,16 +65,20 @@ void modbusGet(void) {
|
|||||||
{
|
{
|
||||||
switch(rxbuffer[1]) {
|
switch(rxbuffer[1]) {
|
||||||
case fcReadHoldingRegisters:
|
case fcReadHoldingRegisters:
|
||||||
PORTC ^= 1 << 1; // toggle led
|
PORTC |= 1 << 0;
|
||||||
|
led_on_timer[0]=1000;
|
||||||
|
|
||||||
while(PINB & (1<<4)); // wait for data ready
|
while(PINB & (1<<4)); // wait for data ready
|
||||||
|
|
||||||
uint32_t tmp = HX711_get_data(3, 4, 128);
|
uint32_t tmp = HX711_get_data(3, 4, 128);
|
||||||
holdingRegisters[0] = tmp & 0xFFFF;
|
holdingRegisters[0] = tmp & 0xFFFF;
|
||||||
holdingRegisters[1] = (tmp>>16) & 0xFFFF;
|
holdingRegisters[1] = (tmp>>16) & 0xFFFF;
|
||||||
|
holdingRegisters[2] = led_on_timer[1];
|
||||||
modbusExchangeRegisters(holdingRegisters,0,4);
|
modbusExchangeRegisters(holdingRegisters,0,4);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
PORTC |= 1 << 1;
|
||||||
|
led_on_timer[1]=1000;
|
||||||
modbusSendException(ecIllegalFunction);
|
modbusSendException(ecIllegalFunction);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -97,4 +104,11 @@ int main(void){
|
|||||||
|
|
||||||
ISR(TIMER0_OVF_vect) { //this ISR is called 9765.625 times per second
|
ISR(TIMER0_OVF_vect) { //this ISR is called 9765.625 times per second
|
||||||
modbusTickTimer();
|
modbusTickTimer();
|
||||||
|
|
||||||
|
for(uint8_t i=0; i<2; i++){
|
||||||
|
if(led_on_timer[i]>0)
|
||||||
|
led_on_timer[i]--;
|
||||||
|
else
|
||||||
|
PORTC &= ~(1<<i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user