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