Compare commits

..

7 Commits

Author SHA1 Message Date
ecd6f47400 cleanup 2022-02-21 05:42:24 +01:00
7e97d54d0f restructure mqtt msg routine 2022-02-21 05:40:14 +01:00
f590396e0c add files for spooling motion 2022-02-21 05:29:09 +01:00
8a759f7f21 change function name and update header 2022-02-21 05:26:11 +01:00
27cffc4971 add more button io defines 2022-02-21 05:22:42 +01:00
696c9eac0e basic p regulator 2022-02-21 05:20:29 +01:00
64751e00c7 faster homing speed 2022-02-21 05:19:46 +01:00
7 changed files with 89 additions and 35 deletions

View File

@@ -16,7 +16,7 @@ void timer3_init()
void send_abzug_speed(void);
void do_rolle(){
void do_abzug(){
if (read_Input(BTN_ABZUG_EIN, RISING)) {
TCCR3B |= _BV(CS31);

View File

@@ -3,6 +3,7 @@
extern uint16_t abzug_speed;
void do_rolle(void);
void do_abzug(void);
void timer3_init(void);
#endif

View File

@@ -141,8 +141,12 @@ void ioHelperEdgeDetector(void);
#define BTN_ABZUG_PLUS_FEIN BitPinK6
#define BTN_ABZUG_MINUS_FEIN BitPinK7
#define BTN_INIT BitPinF4
#define BTN_WICKELN_EIN BitPinF5
#define BTN_WICKELN_AUS BitPinF6
#define BTN_TAENZER_START BitPinF7
#define BTN_SPULENWECHSEL BitPinK0
#define BTN_INIT BitPinF4
#define IN_TAENZER_HOME BitPinF0
#endif

58
main.c
View File

@@ -1,11 +1,9 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h> // WatchDog
#include <avr/wdt.h>
#include <string.h>
#include <stdlib.h>
#include "common.h"
#include "Ethernet/socket.h"
#include "Ethernet/wizchip_conf.h"
@@ -17,12 +15,13 @@
#include "uart.h"
#include "spi.h"
#include "mqtt.h"
#include "common.h"
#include "util/delay.h"
#include "notaus.h"
#include "kraftsensor.h"
#include "taenzer.h"
#include "abzug.h"
#include "spule.h"
Client mqtt_client;
@@ -43,8 +42,6 @@ void get_mcusr(void)
//FUNC headers
static void avr_init(void);
void timer0_init(void);
void timer3_init(void);
void print_network_information(void);
void IO_LIBRARY_Init(void) {
@@ -75,7 +72,7 @@ static void avr_init()
return;
}
void send_abzug_speed(void){
void send_info(void){
char msg[4];
sprintf(msg, "%d", abzug_speed);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/speed", msg, strlen(msg));
@@ -85,8 +82,19 @@ void send_abzug_speed(void){
else
sprintf(msg, "False");
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/onoff", msg, strlen(msg));
ltoa(kraftsensor_value, msg, 10);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/kraft", msg, strlen(msg));
ltoa(taenzer_state.pos, msg, 10);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/speicher/pos", msg, strlen(msg));
sprintf(msg, "%ld", millis()/1000);
mqtt_pub(&mqtt_client, "/Filamentanlage/04_Messmodul/state/uptime", msg, strlen(msg));
}
int main()
{
// INIT MCU
@@ -95,8 +103,10 @@ int main()
kraftsensor_init();
printf("moin!\n\r");
//timer0_init();
timer3_init();
timer4_init();
timer5_init();
ioHelperInitBuffer();
ioHelperIoConf();
@@ -149,7 +159,7 @@ int main()
ioHelperSetBit(outStatesBlinking, LED_PLC_OK, 1);
uint32_t timer_blink_outs = millis();
uint32_t timer_send_uptime = millis();
uint32_t timer_send_info = millis();
uint32_t timer_modbus_poll = millis();
while(1)
@@ -158,7 +168,7 @@ int main()
#if PLC_MQTT_ENABLED
if(millis() < 10)
send_abzug_speed();
send_info();
#endif
ioHelperReadPins();
@@ -174,31 +184,23 @@ int main()
timer_blink_outs = millis();
}
#if PLC_MQTT_ENABLED
// send misc info
//if(millis() - timer_send_uptime > 5000){
// timer_send_uptime += 5000;
// char msg[64];
// sprintf(msg, "%ld", millis()/1000);
// mqtt_pub(&mqtt_client, "/Filamentanlage/04_Messmodul/state/uptime", msg, strlen(msg));
//}
#endif
if(millis() - timer_modbus_poll > 200){
timer_modbus_poll += 200;
do_kraftsensor();
#if PLC_MQTT_ENABLED
send_abzug_speed();
char msg[10];
ltoa(kraftsensor_value, msg, 10);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/kraft", msg, strlen(msg));
ltoa(taenzer_state.pos, msg, 10);
mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/speicher/pos", msg, strlen(msg));
#endif
}
#if PLC_MQTT_ENABLED
// send misc info
if(millis() - timer_send_info > 200){
timer_send_info += 200;
send_info();
}
#endif
do_notaus();
do_rolle();
do_abzug();
do_taenzer();
do_spule();
#if PLC_MQTT_ENABLED
ioHelperSetBit(outStates, LED_BUS_OK, 1);

30
spule.c Normal file
View File

@@ -0,0 +1,30 @@
#include <avr/io.h>
#include "avrIOhelper/io-helper.h"
void timer5_init()
{
TCCR5A |= (1<<COM5C1);
TCCR5B |= _BV(WGM53);
ICR5 = 500;
OCR5C = 250;
DDRL |= 1 << 5;
}
void do_spule(){
if (read_Input(BTN_WICKELN_EIN, RISING)) {
TCCR5B |= _BV(CS51); //TURN ON
}
if (read_Input(BTN_WICKELN_AUS, RISING)) {
TCCR5B &= ~(_BV(CS51));
}
if (read_Input(BTN_TAENZER_START, RISING)) {
ICR5-=15;
OCR5C = ICR5/2;
}
if (read_Input(BTN_SPULENWECHSEL, RISING)) {
ICR5+=15;
OCR5C = ICR5/2;
}
}

7
spule.h Normal file
View File

@@ -0,0 +1,7 @@
#ifndef _SPULE_H_
#define _SPULE_H_
void timer5_init(void);
void do_spule(void);
#endif

View File

@@ -4,6 +4,8 @@
#include "avrIOhelper/io-helper.h"
#include "kraftsensor.h"
#include <stdlib.h>
taenzer_state_t taenzer_state;
void do_taenzer(){
@@ -21,11 +23,19 @@ void do_taenzer(){
/* Force regualtion */
if(kraftsensor_valid && taenzer_state.homed){
if(kraftsensor_value < 9000){
int16_t err = abs(kraftsensor_value - 10000);
if(err > 8000)
err=8000;
ICR4 = 400000/err;
OCR4A = ICR4/2;
if(kraftsensor_value < 19000){
set_Output(MOTOR_TAENZER_DIR, 0); // direction: down
TCCR4B |= _BV(CS41); //TURN ON
}
else if(kraftsensor_value > 10000){
else if(kraftsensor_value > 20000){
set_Output(MOTOR_TAENZER_DIR, 1); // direction: up
TCCR4B |= _BV(CS41); //TURN ON
}
@@ -42,8 +52,8 @@ void timer4_init()
TIMSK4 |= 1<<TOIE4;
// TIMSK4 |= 1<<OCIE4A;
ICR4 = 100;
OCR4A = 50;
ICR4 = 50;
OCR4A = 25;
DDRH |= 1 << 3;
}