|  |  | @ -1,6 +1,7 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <avr/io.h> |  |  |  | #include <avr/io.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <avr/interrupt.h> |  |  |  | #include <avr/interrupt.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <avr/wdt.h> |  |  |  | #include <avr/wdt.h> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <stdint.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <string.h> |  |  |  | #include <string.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <stdlib.h> |  |  |  | #include <stdlib.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -71,19 +72,10 @@ static void avr_init() | 
			
		
	
		
		
			
				
					
					|  |  |  |     return; |  |  |  |     return; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void send_info(void){ |  |  |  | // send processvalues that are constantly changing
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | void send_values(void){ | 
			
		
	
		
		
			
				
					
					|  |  |  |     char msg[10]; |  |  |  |     char msg[10]; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /* Abzug */ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     sprintf(msg, "%d", abzug_speed); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/speed", msg, strlen(msg)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if(TCCR3B & (1<<CS31)) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sprintf(msg, "True"); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         sprintf(msg, "False"); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/onoff", msg, strlen(msg)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     /* Taenzer */ |  |  |  |     /* Taenzer */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     if(kraftsensor_valid) |  |  |  |     if(kraftsensor_valid) | 
			
		
	
		
		
			
				
					
					|  |  |  |         ltoa(kraftsensor_value, msg, 10); |  |  |  |         ltoa(kraftsensor_value, msg, 10); | 
			
		
	
	
		
		
			
				
					|  |  | @ -95,23 +87,41 @@ void send_info(void){ | 
			
		
	
		
		
			
				
					
					|  |  |  |     ltoa(temp, msg, 10); |  |  |  |     ltoa(temp, msg, 10); | 
			
		
	
		
		
			
				
					
					|  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/taenzer/pos", msg, strlen(msg)); |  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/taenzer/pos", msg, strlen(msg)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     itoa((250*60)/ICR5, msg, 10); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/speed", msg, strlen(msg)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | // send settings wich only change on buttion press
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 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)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if(TCCR3B & (1<<CS31)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         sprintf(msg, "True"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         sprintf(msg, "False"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/onoff", msg, strlen(msg)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /* Taenzer */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     itoa(taenzer_state.force_setpoint, msg, 10); |  |  |  |     itoa(taenzer_state.force_setpoint, msg, 10); | 
			
		
	
		
		
			
				
					
					|  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/taenzer/sp_kraft", msg, strlen(msg)); |  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/taenzer/sp_kraft", msg, strlen(msg)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     /* Spule */ |  |  |  |     /* Spule */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     itoa((250*60)/ICR5, msg, 10); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/speed", msg, strlen(msg)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if(TCCR5B & (1<<CS31)) |  |  |  |     if(TCCR5B & (1<<CS31)) | 
			
		
	
		
		
			
				
					
					|  |  |  |         sprintf(msg, "True"); |  |  |  |         sprintf(msg, "True"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     else |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |         sprintf(msg, "False"); |  |  |  |         sprintf(msg, "False"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/onoff", msg, strlen(msg)); |  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/spule/onoff", msg, strlen(msg)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /* Uptime */ |  |  |  |     ///* Uptime */
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     sprintf(msg, "%ld", millis()/1000); |  |  |  |     //sprintf(msg, "%ld", millis()/1000);
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/uptime", msg, strlen(msg)); |  |  |  |     //mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/uptime", msg, strlen(msg));
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -186,13 +196,16 @@ int main() | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     set_Output(LED_FEHLER, OFF); |  |  |  |     set_Output(LED_FEHLER, OFF); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     set_Output(BitPH5, ON); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     while(1) |  |  |  |     while(1) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         wdt_reset(); // WDT reset at least every sec
 |  |  |  |         wdt_reset(); // WDT reset at least every sec
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #if PLC_MQTT_ENABLED |  |  |  | #if PLC_MQTT_ENABLED | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(millis() < 10) |  |  |  |         if(millis() < 10) | 
			
		
	
		
		
			
				
					
					|  |  |  |             send_info(); |  |  |  |             send_settings(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  | #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         ioHelperReadPins(); |  |  |  |         ioHelperReadPins(); | 
			
		
	
	
		
		
			
				
					|  |  | @ -206,6 +219,7 @@ int main() | 
			
		
	
		
		
			
				
					
					|  |  |  |             outStates[2] ^= outStatesBlinking[2]; |  |  |  |             outStates[2] ^= outStatesBlinking[2]; | 
			
		
	
		
		
			
				
					
					|  |  |  |             outStates[3] ^= outStatesBlinking[3]; |  |  |  |             outStates[3] ^= outStatesBlinking[3]; | 
			
		
	
		
		
			
				
					
					|  |  |  |             timer_blink_outs = millis(); |  |  |  |             timer_blink_outs = millis(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //printf("icr5: %u\n", ICR5);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(millis() - timer_modbus_poll > 20){ |  |  |  |         if(millis() - timer_modbus_poll > 20){ | 
			
		
	
	
		
		
			
				
					|  |  | @ -217,7 +231,8 @@ int main() | 
			
		
	
		
		
			
				
					
					|  |  |  |         // send misc info
 |  |  |  |         // send misc info
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(millis() - timer_send_info > 200){ |  |  |  |         if(millis() - timer_send_info > 200){ | 
			
		
	
		
		
			
				
					
					|  |  |  |             timer_send_info += 200; |  |  |  |             timer_send_info += 200; | 
			
		
	
		
		
			
				
					
					|  |  |  |             send_info(); |  |  |  |             send_values(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //send_info(); // 27ms every 200ms
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  | #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -229,10 +244,10 @@ int main() | 
			
		
	
		
		
			
				
					
					|  |  |  | #if PLC_MQTT_ENABLED |  |  |  | #if PLC_MQTT_ENABLED | 
			
		
	
		
		
			
				
					
					|  |  |  |         ioHelperSetBit(outStates, LED_BUS_OK, 1); |  |  |  |         ioHelperSetBit(outStates, LED_BUS_OK, 1); | 
			
		
	
		
		
			
				
					
					|  |  |  |         ioHelperSetOuts(); |  |  |  |         ioHelperSetOuts(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         MQTTYield(&mqtt_client, 10); //blocking call
 |  |  |  |         MQTTYield(&mqtt_client, 1); //blocking call
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         ioHelperSetBit(outStates, LED_BUS_OK, 0); |  |  |  |         ioHelperSetBit(outStates, LED_BUS_OK, 0); | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  | #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |         ioHelperSetOuts(); |  |  |  |         ioHelperSetOuts(); //40us
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     return 0; |  |  |  |     return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |