|  |  | @ -50,14 +50,6 @@ static void spule_onoff(uint8_t state){ | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void set_spooling_speed(uint16_t speed){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     ICR5=speed; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     OCR5C = ICR5/2; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     ICR1 = ICR5/TRANS_ROT_FACTOR; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     OCR1A = ICR1/2; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | void do_spule(){ |  |  |  | void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |     //PORTH &= ~(1<<5);
 |  |  |  |     //PORTH &= ~(1<<5);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){ |  |  |  |     if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){ | 
			
		
	
	
		
		
			
				
					|  |  | @ -77,38 +69,22 @@ void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         set_Output(MOTOR_TRANS_DIR, 1); // direction: front
 |  |  |  |         set_Output(MOTOR_TRANS_DIR, 1); // direction: front
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         TCCR1B |= _BV(CS11); //TURN ON
 |  |  |  |         TCCR1B |= _BV(CS11); //TURN ON
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     else if(!get_abzug_state()){ |  |  |  |     else if(taenzer_state.pos <= 10){ | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         if(read_Input(BTN_WICKELN_EIN, LEVEL)){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             set_spooling_speed(300); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             spule_onoff(1); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         else |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         spule_onoff(0); |  |  |  |         spule_onoff(0); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     else{ |  |  |  |     else{ | 
			
		
	
		
		
			
				
					
					|  |  |  |         /* speed regulation - keep taenzer at 10% */ |  |  |  |         /* speed regulation - keep taenzer at 10% */ | 
			
		
	
		
		
			
				
					
					|  |  |  |         float p = 100.0/(int32_t)(taenzer_state.pos/1000); |  |  |  |         int32_t tmp = 0;//(100 - (int32_t)taenzer_state.pos/1000);
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         p-=1; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         p/=2; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         p+=1; |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //printf("temp1: %d\n", tmp);
 |  |  |  |         //printf("temp1: %d\n", tmp);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //TODO fix bounds
 |  |  |  |         //TODO fix bounds
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //if(tmp < -7500/abzug_speed/2)
 |  |  |  |         //if(tmp < -7500/abzug_speed/2)
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //    tmp = -7500/abzug_speed/2;
 |  |  |  |         //    tmp = -7500/abzug_speed/2;
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //printf("temp2: %d\n", tmp);
 |  |  |  |         //printf("temp2: %d\n", tmp);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(p < 0.75) |  |  |  |         if(tmp < -35) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             p = 0.75; |  |  |  |             tmp = -35; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         if(p > 1.5) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             p = 1.5; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         uint16_t base_speed = (7500/abzug_speed); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         uint16_t ctrl_speed = base_speed * p; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(ctrl_speed <= 70) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ctrl_speed = 70; |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         ICR5 = ctrl_speed; |  |  |  |         ICR5=7500/abzug_speed + tmp; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         OCR5C = ICR5/2; |  |  |  |         OCR5C = ICR5/2; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         ICR1 = ICR5/TRANS_ROT_FACTOR; |  |  |  |         ICR1 = ICR5/TRANS_ROT_FACTOR; | 
			
		
	
	
		
		
			
				
					|  |  | @ -120,7 +96,7 @@ void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (read_Input(BTN_WICKELN_AUS, RISING)) { |  |  |  |         if (read_Input(BTN_WICKELN_AUS, RISING)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             spule_onoff(0); |  |  |  |             spule_onoff(0); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         if (read_Input(BTN_INIT, RISING)) { |  |  |  |         if (read_Input(BTN_INIT, RISING)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             spule_trans_homed = 0; |  |  |  |             spule_trans_homed = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |             taenzer_state.homed = 0; |  |  |  |             taenzer_state.homed = 0; | 
			
		
	
	
		
		
			
				
					|  |  | @ -128,6 +104,7 @@ void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |             windings = 0; |  |  |  |             windings = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |             windings_wakeup = 0; |  |  |  |             windings_wakeup = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     //PORTH |= (1<<5);
 |  |  |  |     //PORTH |= (1<<5);
 | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |