fix clangd and comments

This commit is contained in:
2025-02-21 10:55:45 +01:00
parent 951d79afe7
commit c5a0d59f36
5 changed files with 87 additions and 78 deletions

View File

@@ -2,4 +2,4 @@
CompileFlags: CompileFlags:
Add: Add:
- "-I/home/dennisgunia/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/" - "-I/home/dennisgunia/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/"
- "-I" - "-I/home/dennisgunia/.config/VSCodium/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/19.1.2/clangd_19.1.2/lib/clang/19/include/stddef.h"

View File

@@ -6,12 +6,12 @@
* https://github.com/dennis9819/splitflap_v1 * https://github.com/dennis9819/splitflap_v1
*/ */
#include <stdlib.h>
#include <string.h>
#include <avr/io.h> #include <avr/io.h>
#include <avr/wdt.h> #include <avr/wdt.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <util/delay.h> #include <util/delay.h>
#include <stdlib.h>
#include <string.h>
#include <avr/iom8.h> #include <avr/iom8.h>

View File

@@ -20,7 +20,6 @@ uint8_t motor_steps[4] = {
uint8_t step_index = 0; // cuurent index in motor_steps uint8_t step_index = 0; // cuurent index in motor_steps
uint8_t target_flap = 0; // target flap uint8_t target_flap = 0; // target flap
uint16_t absolute_pos = 0; // absolute position in steps uint16_t absolute_pos = 0; // absolute position in steps
uint16_t rel_offset = STEPS_OFFSET; // offset of '0' flap relative to home
uint16_t steps_since_home = 0; // steps since last home signal uint16_t steps_since_home = 0; // steps since last home signal
// homing util variables // homing util variables
@@ -31,7 +30,7 @@ uint8_t lastSens = 0; // home sonsor signal from last tick
uint8_t ticksSinceMove = 0; uint8_t ticksSinceMove = 0;
// value to goto after the current target_flap is reached. 255 = NONE. // value to goto after the current target_flap is reached. 255 = NONE.
uint8_t afterRotation = 255; uint8_t afterRotation = STEPS_AFTERROT;
int16_t *delta_err; int16_t *delta_err;
@@ -133,16 +132,16 @@ ISR(TIMER1_COMPA_vect)
{ {
homing = 3; homing = 3;
steps_since_home = 0; steps_since_home = 0;
absolute_pos = rel_offset; absolute_pos = STEPS_OFFSET;
incrementCounter(); incrementCounter();
} }
} }
else if (homing == 3) else if (homing == 3)
{ // Homing procedure 3. step: find magnet { // Homing procedure 3. step: apply offset
if (absolute_pos <= 0) if (absolute_pos <= 0)
{ {
homing = 0; homing = 0;
absolute_pos = rel_offset; absolute_pos = STEPS_OFFSET; // set correct position again
} }
mctrl_step(); mctrl_step();
absolute_pos--; absolute_pos--;
@@ -150,7 +149,7 @@ ISR(TIMER1_COMPA_vect)
else else
{ // when no failsafe is triggered and homing is done { // when no failsafe is triggered and homing is done
// calculate target position // calculate target position
uint16_t target_pos = (target_flap * STEPS_PER_FLAP) + rel_offset; uint16_t target_pos = (target_flap * STEPS_PER_FLAP) + STEPS_OFFSET;
if (target_pos >= STEPS_PER_REV) if (target_pos >= STEPS_PER_REV)
{ {
target_pos -= STEPS_PER_REV; target_pos -= STEPS_PER_REV;
@@ -192,7 +191,7 @@ ISR(TIMER1_COMPA_vect)
if (afterRotation < (STEPS_PER_FLAP + 5)) if (afterRotation < (STEPS_PER_FLAP + 5))
{ // if after rotation is set, apply it as new target { // if after rotation is set, apply it as new target
target_flap = afterRotation; target_flap = afterRotation;
afterRotation = 255; afterRotation = STEPS_AFTERROT;
} }
else if (ticksSinceMove < 2) else if (ticksSinceMove < 2)
{ // if motor has not been moved { // if motor has not been moved
@@ -255,10 +254,6 @@ void mctrl_set(uint8_t flap, uint8_t fullRotation)
if (fullRotation == 0) if (fullRotation == 0)
{ {
target_flap = flap; target_flap = flap;
// if (absolute_pos < STEPS_ADJ) {
// absolute_pos += STEPS_PER_REV;
// }
// absolute_pos -= STEPS_ADJ;
} }
else else
{ {
@@ -273,7 +268,7 @@ void mctrl_home()
homing = 1; homing = 1;
} }
// trigger home procedure // change motor power state
void mctrl_power(uint8_t state) void mctrl_power(uint8_t state)
{ {
if (state == 0) if (state == 0)

View File

@@ -17,7 +17,7 @@
#define STEPS_ADJ 0 // added per flap to compensate for motor power down #define STEPS_ADJ 0 // added per flap to compensate for motor power down
#define STEPS_OFFSET 1400 // ansolute offset between home and first flap #define STEPS_OFFSET 1400 // ansolute offset between home and first flap
#define AMOUNTFLAPS 45 // amount of flaps installed in system #define AMOUNTFLAPS 45 // amount of flaps installed in system
#define STEPS_AFTERROT 255 // value to goto after current target flap is reached
#define ERROR_DATASETS 8 // length of error array #define ERROR_DATASETS 8 // length of error array
#define MDELAY_STARTUP 1000 // delay to wait after motor startup #define MDELAY_STARTUP 1000 // delay to wait after motor startup

View File

@@ -8,87 +8,101 @@
#include "rs485.h" #include "rs485.h"
void rs485_init() { void rs485_init()
// init I/O {
DDRD &= ~(1 << PD0); // BUS_DIR & TX is OUTPUT // init I/O
DDRD |= (1 << PD2) | (1 << PD1); // BUS_DIR & TX is OUTPUT DDRD &= ~(1 << PD0); // BUS_DIR & TX is OUTPUT
PORTD &= 0x07; // clear PD0-PD4 DDRD |= (1 << PD2) | (1 << PD1); // BUS_DIR & TX is OUTPUT
// init UART PORTD &= 0x07; // clear PD0-PD4
UBRRH = (BAUDRATE >> 8); // init UART
UBRRL = BAUDRATE; // set baud rate UBRRH = (BAUDRATE >> 8);
UCSRB |= (1 << TXEN) | (1 << RXEN); // enable receiver and transmitter UBRRL = BAUDRATE; // set baud rate
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // 8bit data format UCSRB |= (1 << TXEN) | (1 << RXEN); // enable receiver and transmitter
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // 8bit data format
} }
void dbg(char data) { void dbg(char data)
while (!(UCSRA & (1 << UDRE))) {
; while (!(UCSRA & (1 << UDRE)))
UDR = data; ;
UDR = data;
} }
void rs485_send_c(char data)
void rs485_send_c(char data) { {
PORTD |= (1 << PD2); // set transciever to transmitt PORTD |= (1 << PD2); // set transciever to transmitt
while (!(UCSRA & (1 << UDRE))) while (!(UCSRA & (1 << UDRE)))
; // wait until buffer is empty ; // wait until buffer is empty
UCSRA = (1 << TXC); // clear transmit Complete bit UCSRA = (1 << TXC); // clear transmit Complete bit
UDR = data; UDR = data;
while (!(UCSRA & (1 << TXC))) while (!(UCSRA & (1 << TXC)))
; // wait until transmitt complete {
PORTD &= ~(1 << PD2); // set transciever to transmitt }; // wait until transmitt complete
PORTD &= ~(1 << PD2); // set transciever to transmitt
} }
void rs485_send_str(char* data) { void rs485_send_str(char *data)
for (unsigned int i = 0; i < sizeof(data); i++) { {
rs485_send_c(data[i]); for (unsigned int i = 0; i < sizeof(data); i++)
} {
rs485_send_c(data[i]);
}
} }
char rs485_recv_c() { char rs485_recv_c()
while (!(UCSRA & (1 << RXC))) {
; while (!(UCSRA & (1 << RXC)))
; // wait while data is being received ; // wait while data is being received
return UDR; return UDR;
} }
// SFBUS Functions // SFBUS Functions
uint8_t sfbus_recv_frame(uint16_t address, char* payload) { uint8_t sfbus_recv_frame(uint16_t address, char *payload)
while (rs485_recv_c() != '+') {} // Wwait for start byte {
while (rs485_recv_c() != SFBUS_SOF_BYTE)
{
} // Wwait for start byte
uint8_t frm_version = rs485_recv_c(); uint8_t frm_version = rs485_recv_c();
if (frm_version != 0) return 0; if (frm_version != 0)
uint8_t frm_length = rs485_recv_c(); return 0;
uint8_t frm_addrL = rs485_recv_c(); uint8_t frm_length = rs485_recv_c();
uint8_t frm_addrH = rs485_recv_c(); uint8_t frm_addrL = rs485_recv_c();
uint8_t frm_addrH = rs485_recv_c();
uint16_t frm_addr = frm_addrL | (frm_addrH << 8); uint16_t frm_addr = frm_addrL | (frm_addrH << SHIFT_1B);
if (frm_addr != address) return 0; if (frm_addr != address)
char* _payload = payload; return 0;
for (uint8_t i = 0; i < (frm_length - 3); i++) { char *_payload = payload;
*_payload = rs485_recv_c(); for (uint8_t i = 0; i < (frm_length - 3); i++)
_payload++; {
} *_payload = rs485_recv_c();
_payload++;
}
if (rs485_recv_c() != '$') return -1; if (rs485_recv_c() != SFBUS_EOF_BYTE)
return frm_length; return -1;
return frm_length;
} }
void sfbus_send_frame(uint16_t address, char* payload, uint8_t length) { void sfbus_send_frame(uint16_t address, char *payload, uint8_t length)
char framelen = length; {
uint8_t framelen = length;
rs485_send_c(SFBUS_SOF_BYTE); // send startbyte 3 times rs485_send_c(SFBUS_SOF_BYTE); // send startbyte 3 times
rs485_send_c(0); // send protocol version rs485_send_c(0); // send protocol version
rs485_send_c(framelen + 3); // send lentgh of remaining frame rs485_send_c((char)(framelen + 3)); // send lentgh of remaining frame
rs485_send_c(address & 0xFF); // target address rs485_send_c((char)(address & 0xFF)); // target address
rs485_send_c((address >> 8) & 0xFF); rs485_send_c((char)((address >> SHIFT_1B) & 0xFF));
while (framelen > 0) { // send payload while (framelen > 0)
rs485_send_c(*payload); { // send payload
payload++; rs485_send_c(*payload);
framelen--; payload++;
} framelen--;
}
rs485_send_c(SFBUS_EOF_BYTE); // send end of frame byte rs485_send_c(SFBUS_EOF_BYTE); // send end of frame byte
} }