Compare commits

..

No commits in common. '24ef8ce70d5a264b663f1825521b96eb6a66fb2b' and 'c62792a86436d189f4313daeab48a6309e7e00b4' have entirely different histories.

@ -40,8 +40,8 @@ void do_abzug(){
}
if (read_Input(BTN_ABZUG_PLUS, RISING)) {
if(abzug_speed <= 990)
abzug_speed += 10;
if(abzug_speed <= 900)
abzug_speed += 100;
else
abzug_speed = 1000;
#if PLC_MQTT_ENABLED
@ -50,8 +50,8 @@ void do_abzug(){
}
if (read_Input(BTN_ABZUG_MINUS, RISING)) {
if(abzug_speed >= 20)
abzug_speed -= 10;
if(abzug_speed >= 110)
abzug_speed -= 100;
else
abzug_speed = 10;
#if PLC_MQTT_ENABLED
@ -60,8 +60,8 @@ void do_abzug(){
}
if (read_Input(BTN_ABZUG_PLUS_FEIN, RISING)) {
if(abzug_speed <= 999)
abzug_speed += 1;
if(abzug_speed <= 990)
abzug_speed += 10;
else
abzug_speed = 1000;
#if PLC_MQTT_ENABLED
@ -70,8 +70,8 @@ void do_abzug(){
}
if (read_Input(BTN_ABZUG_MINUS_FEIN, RISING)) {
if(abzug_speed >= 11)
abzug_speed -= 1;
if(abzug_speed >= 20)
abzug_speed -= 10;
else
abzug_speed = 10;
#if PLC_MQTT_ENABLED

@ -152,8 +152,6 @@ void ioHelperEdgeDetector(void);
#define BTN_KRAFT_MINUS BitPinG2
#define IN_TAENZER_HOME BitPinF0
#define IN_SPULE_HOME BitPinF1
#define IN_BREMSE_STATE BitPinF2
#define IN_SPULE_HOME BitPinF1
#endif

@ -29,7 +29,10 @@ void kraftsensor_init(){
}
void do_kraftsensor(){
static int32_t last_read;
static int32_t old_value;
uint16_t m_data[4];
int32_t kraftsensor_read;
/* read 2 16bit values and merge to 32bit signed integer */
readReg(1,0,2);
@ -42,12 +45,31 @@ void do_kraftsensor(){
int32_t tmp = (uint32_t)m_data[1]<<16;
tmp |= m_data[0];
//kraftsensor_value = tmp;
/* conversion magic to milliNewton */
kraftsensor_value = (((tmp /* + 539363*/)*9.81)/177.380)+kraftsensor_zero_offset;
//if(abs(kraftsensor_read - old_value) > 10000){
// if(abs(last_read - kraftsensor_read) > 10000){
// kraftsensor_value = old_value;
// //printf("delta: %ld\tvalue:%ld\n", kraftsensor_read - old_value, kraftsensor_read);
// //printf("spike\n");
// }
// else{
// kraftsensor_value = kraftsensor_read;
// //printf("jump\n");
// }
//}
//else{
// kraftsensor_value = kraftsensor_read;
//}
//last_read = kraftsensor_read;
//old_value = kraftsensor_value;
}
}
int8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
uint8_t breaker = timeout;
while(!receiveOkay && breaker) { //wait for client response, time out after 1s
@ -72,23 +94,6 @@ int8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
return 0;
}
int8_t wait_write(uint8_t timeout){
uint8_t breaker = timeout;
while(!receiveOkay && breaker) { //wait for client response, time out after 1s
breaker--;
_delay_ms(1);
if(breaker==0)
return -1;
}
if(receiveOkay) { //if this fails, there was either no response or a crc error
if(rxbuffer[1]&0x80) { //client responded with an error code
return rxbuffer[1]&0x80;
}
}
return 0;
}
void readReg(uint8_t slaveid, uint16_t address, uint8_t amount) {
_delay_ms(2);
rxbuffer[0]=slaveid;

@ -13,7 +13,7 @@ extern int32_t kraftsensor_zero_offset;
void timer2_init();
void kraftsensor_init();
void do_kraftsensor(void);
int8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout);
uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout);
void readReg(uint8_t slaveid, uint16_t address, uint8_t amount);
void writeReg(uint8_t slaveid, uint16_t address, uint16_t value);

@ -2,7 +2,6 @@
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@ -90,12 +89,6 @@ void send_values(void){
itoa((250*60)/ICR5, msg, 10);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/speed", msg, strlen(msg));
sprintf(msg, "%d", windings);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/windings", msg, strlen(msg));
sprintf(msg, "%ld", spule_trans_pos);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/trans_pos", msg, strlen(msg));
}
// send settings wich only change on buttion press
@ -103,6 +96,8 @@ void send_settings(void){
//TODO only send on change or improve performance otherwise
char msg[10];
//PORTH &= ~(1<<5);
//PORTH |= (1<<5);
/* Abzug */
sprintf(msg, "%d", abzug_speed);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/speed", msg, strlen(msg));
@ -201,7 +196,7 @@ int main()
set_Output(LED_FEHLER, OFF);
set_Output(BitPH5, ON); //DEBUG
set_Output(BitPH5, ON);
#if PLC_MQTT_ENABLED
send_settings();
@ -225,7 +220,7 @@ int main()
}
if(millis() - timer_modbus_poll > 20){
do_kraftsensor(); // 8ms !!!
do_kraftsensor();
timer_modbus_poll += 20;
}
@ -233,7 +228,7 @@ int main()
// send misc info
if(millis() - timer_send_info > 200){
timer_send_info += 200;
send_values(); // 10ms
send_values();
//send_info(); // 27ms every 200ms
}
#endif

@ -25,7 +25,7 @@ typedef struct {
} PID_vars;
#define PID_VARS_INIT(x) PID_vars x = {.Kp=1.3,.Ki=0.00,.Kd=0.00,.output_max=25000.0, \
#define PID_VARS_INIT(x) PID_vars x = {.Kp=1.7,.Ki=0.00,.Kd=0.00,.output_max=25000.0, \
.output_min=-25000.0,._integral_sum=0.0,._prev_err=0.0,._dt=1.0}
/* Function Prototypes */

@ -10,8 +10,6 @@
volatile uint16_t windings = 0;
volatile uint16_t windings_wakeup = 0;
volatile uint8_t trans_state = 0;
int32_t spule_trans_pos = 0;
uint8_t spule_trans_homed = 0;
@ -82,7 +80,7 @@ void do_spule(){
}
// manual forwarding if button is held
else if(!get_abzug_state() || (get_abzug_state() && read_Input(IN_BREMSE_STATE, LEVEL)) ){
else if(!get_abzug_state()){
if(read_Input(BTN_WICKELN_EIN, LEVEL)){
set_spooling_speed(300);
spule_onoff(1);
@ -120,13 +118,11 @@ void do_spule(){
ICR5 = ctrl_speed;
OCR5C = ICR5/2;
if(trans_state != 4)
ICR1 = ICR5/TRANS_ROT_FACTOR;
else
ICR1 = 0.5*(ICR5/TRANS_ROT_FACTOR);
ICR1 = ICR5/TRANS_ROT_FACTOR;
OCR1A = ICR1/2;
if (read_Input(BTN_WICKELN_EIN, RISING) && !read_Input(IN_BREMSE_STATE, LEVEL)) {
if (read_Input(BTN_WICKELN_EIN, RISING)) {
spule_onoff(1);
}
if (read_Input(BTN_WICKELN_AUS, RISING)) {
@ -140,17 +136,6 @@ void do_spule(){
windings = 0;
windings_wakeup = 0;
}
if (read_Input(IN_BREMSE_STATE, FALLING)) {
printf("draußen\n");
spule_onoff(1);
}
if (read_Input(IN_BREMSE_STATE, RISING)) {
printf("drinne\n");
spule_onoff(0);
}
//PORTH |= (1<<5);
}
@ -175,8 +160,7 @@ ISR(TIMER5_OVF_vect) {
windings++;
steps=0;
printf("windungen: %d\t", windings);
printf("trans pos: %ld\n", spule_trans_pos);
printf("speed %d\n", ICR1);
printf("trans pos: %ld\n", taenzer_state.pos);
}
if(windings == windings_wakeup){
@ -186,30 +170,23 @@ ISR(TIMER5_OVF_vect) {
uint8_t windings_on_layer = windings % 25;
if(windings_on_layer == 0 && steps == 0){
trans_state = 1;
ICR1 = ICR5/TRANS_ROT_FACTOR;
OCR1A = ICR1/2;
set_Output(MOTOR_TRANS_DIR, TOGGLE);
printf("toggle at pos: %ld\n", spule_trans_pos);
printf("speed %d\n", ICR1);
}
if(windings_on_layer == 1 && steps == 0){
trans_state = 2;
printf("nachlauf aufbauen\n");
TCCR1B &= ~(_BV(CS11));
}
if(windings_on_layer == 3 && steps == 0){
trans_state = 3;
TCCR1B |= _BV(CS11);
printf("done\n");
printf("speed %d\n", ICR1);
}
if(windings_on_layer == 21 && steps == 0){
trans_state = 4;
ICR1 = 0.5*(ICR5/TRANS_ROT_FACTOR);
OCR1A = ICR1/2;
printf("nachlauf abbauen\n");
printf("speed %d\n", ICR1);
}
//;PORTH |= (1<<5);
}

@ -1,13 +1,8 @@
#ifndef _SPULE_H_
#define _SPULE_H_
#include <stdint.h>
void timer1_init(void);
void timer5_init(void);
void do_spule(void);
extern volatile uint16_t windings;
extern int32_t spule_trans_pos;
#endif