|  |  | @ -13,7 +13,7 @@ volatile uint16_t windings_wakeup = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | int32_t spule_trans_pos = 0; |  |  |  | int32_t spule_trans_pos = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | uint8_t spule_trans_homed = 0; |  |  |  | uint8_t spule_trans_homed = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #define TRANS_ROT_FACTOR 0.07 |  |  |  | #define TRANS_ROT_FACTOR 0.14 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void timer1_init() |  |  |  | void timer1_init() | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
	
		
		
			
				
					|  |  | @ -59,7 +59,7 @@ void set_spooling_speed(uint16_t speed){ | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void do_spule(){ |  |  |  | void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |     //PORTH &= ~(1<<5);
 |  |  |  |     // Translatoric axis homeing code
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){ |  |  |  |     if(read_Input(IN_SPULE_HOME, LEVEL) && spule_trans_homed == 0){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         spule_trans_homed = 1; |  |  |  |         spule_trans_homed = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |         spule_trans_pos = 0; |  |  |  |         spule_trans_pos = 0; | 
			
		
	
	
		
		
			
				
					|  |  | @ -71,12 +71,15 @@ void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         OCR1A = ICR1/2; |  |  |  |         OCR1A = ICR1/2; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // if not homed goto home
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if(!spule_trans_homed){ |  |  |  |     if(!spule_trans_homed){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         ICR1 = 100; |  |  |  |         ICR1 = 100; | 
			
		
	
		
		
			
				
					
					|  |  |  |         OCR1A = 50; |  |  |  |         OCR1A = 50; | 
			
		
	
		
		
			
				
					
					|  |  |  |         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
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // manual forwarding if button is held
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     else if(!get_abzug_state()){ |  |  |  |     else if(!get_abzug_state()){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(read_Input(BTN_WICKELN_EIN, LEVEL)){ |  |  |  |         if(read_Input(BTN_WICKELN_EIN, LEVEL)){ | 
			
		
	
		
		
			
				
					
					|  |  |  |             set_spooling_speed(300); |  |  |  |             set_spooling_speed(300); | 
			
		
	
	
		
		
			
				
					|  |  | @ -85,24 +88,28 @@ void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         else |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |             spule_onoff(0); |  |  |  |             spule_onoff(0); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // normal operation
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     else{ |  |  |  |     else{ | 
			
		
	
		
		
			
				
					
					|  |  |  |         /* speed regulation - keep taenzer at 10% */ |  |  |  |         /* speed regulation - keep taenzer at 10% */ | 
			
		
	
		
		
			
				
					
					|  |  |  |         float p = 100.0/(int32_t)(taenzer_state.pos/1000); |  |  |  |         float p = 100.0/(int32_t)(taenzer_state.pos/1000); | 
			
		
	
		
		
			
				
					
					|  |  |  |         p-=1; |  |  |  |         p-=1; | 
			
		
	
		
		
			
				
					
					|  |  |  |         p/=2; |  |  |  |         p/=2; | 
			
		
	
		
		
			
				
					
					|  |  |  |         p+=1; |  |  |  |         p+=1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //tmp = (int32_t)(taenzer_state.pos/10000);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //printf("%ld\n", tmp);
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //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(p < 0.5) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             p = 0.75; |  |  |  |             p = 0.5; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         if(p > 1.5) |  |  |  |         if(p > 2) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             p = 1.5; |  |  |  |             p = 2; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         uint16_t base_speed = (7500/abzug_speed); |  |  |  |         uint16_t base_speed = (14000/abzug_speed); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         uint16_t ctrl_speed = base_speed * p; |  |  |  |         uint16_t ctrl_speed = base_speed * p; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(ctrl_speed <= 70) |  |  |  |         if(ctrl_speed <= 70) | 
			
		
	
	
		
		
			
				
					|  |  | @ -111,6 +118,7 @@ void do_spule(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         ICR5 = ctrl_speed; |  |  |  |         ICR5 = ctrl_speed; | 
			
		
	
		
		
			
				
					
					|  |  |  |         OCR5C = ICR5/2; |  |  |  |         OCR5C = ICR5/2; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         ICR1 = ICR5/TRANS_ROT_FACTOR; |  |  |  |         ICR1 = ICR5/TRANS_ROT_FACTOR; | 
			
		
	
		
		
			
				
					
					|  |  |  |         OCR1A = ICR1/2; |  |  |  |         OCR1A = ICR1/2; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -148,10 +156,11 @@ ISR(TIMER5_OVF_vect) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     //PORTH &= ~(1<<5);
 |  |  |  |     //PORTH &= ~(1<<5);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     static uint16_t steps = 0; |  |  |  |     static uint16_t steps = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |     steps++; |  |  |  |     steps++; | 
			
		
	
		
		
			
				
					
					|  |  |  |     if(steps == 50000){ |  |  |  |     if(steps == 25000){ | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         windings++; |  |  |  |         windings++; | 
			
		
	
		
		
			
				
					
					|  |  |  |         steps=0; |  |  |  |         steps=0; | 
			
		
	
		
		
			
				
					
					|  |  |  |         printf("windungen: %d\n", windings); |  |  |  |         printf("windungen: %d\t", windings); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         printf("trans pos: %ld\n", taenzer_state.pos); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if(windings == windings_wakeup){ |  |  |  |     if(windings == windings_wakeup){ | 
			
		
	
	
		
		
			
				
					|  |  | @ -179,5 +188,5 @@ ISR(TIMER5_OVF_vect) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         OCR1A = ICR1/2; |  |  |  |         OCR1A = ICR1/2; | 
			
		
	
		
		
			
				
					
					|  |  |  |         printf("nachlauf abbauen\n"); |  |  |  |         printf("nachlauf abbauen\n"); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     //PORTH |= (1<<5);
 |  |  |  |     //;PORTH |= (1<<5);
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |