Nikon IR support for time lapse photos (#16539)
This commit is contained in:
		
							parent
							
								
									bd550bb45a
								
							
						
					
					
						commit
						7481563bd9
					
				| @ -368,7 +368,7 @@ | ||||
|  * FAST_PWM_FAN_FREQUENCY [undefined by default] | ||||
|  *   Set this to your desired frequency. | ||||
|  *   If left undefined this defaults to F = F_CPU/(2*255*1) | ||||
|  *   ie F = 31.4 Khz on 16 MHz microcontrollers or F = 39.2 KHz on 20 MHz microcontrollers | ||||
|  *   i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers. | ||||
|  *   These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required | ||||
|  *   NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior. | ||||
|  * | ||||
| @ -2444,6 +2444,20 @@ | ||||
| 
 | ||||
|   // Duration to hold the switch or keep CHDK_PIN high
 | ||||
|   //#define PHOTO_SWITCH_MS   50 // (ms) (M240 D)
 | ||||
| 
 | ||||
|   /**
 | ||||
|    * PHOTO_PULSES_US may need adjustment depending on board and camera model. | ||||
|    * Pin must be running at 48.4kHz. | ||||
|    * Be sure to use a PHOTOGRAPH_PIN which can rise and fall quick enough. | ||||
|    * (e.g., MKS SBase temp sensor pin was too slow, so used P1.23 on J8.) | ||||
|    * | ||||
|    *  Example pulse data for Nikon: https://bit.ly/2FKD0Aq
 | ||||
|    *                     IR Wiring: https://git.io/JvJf7
 | ||||
|    */ | ||||
|   //#define PHOTO_PULSES_US { 2000, 27850, 400, 1580, 400, 3580, 400 }  // (µs) Durations for each 48.4kHz oscillation
 | ||||
|   #ifdef PHOTO_PULSES_US | ||||
|     #define PHOTO_PULSE_DELAY_US 13 // (µs) Approximate duration of each HIGH and LOW pulse in the oscillation
 | ||||
|   #endif | ||||
| #endif | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
| @ -62,11 +62,44 @@ | ||||
| #endif | ||||
| 
 | ||||
| #if PIN_EXISTS(PHOTOGRAPH) | ||||
|   constexpr uint8_t NUM_PULSES = 16; | ||||
|   constexpr float PULSE_LENGTH = 0.01524; | ||||
|   inline void set_photo_pin(const uint8_t state) { WRITE(PHOTOGRAPH_PIN, state); _delay_ms(PULSE_LENGTH); } | ||||
|   inline void tweak_photo_pin() { set_photo_pin(HIGH); set_photo_pin(LOW); } | ||||
|   inline void spin_photo_pin() { for (uint8_t i = NUM_PULSES; i--;) tweak_photo_pin(); } | ||||
| 
 | ||||
|   FORCE_INLINE void set_photo_pin(const uint8_t state) { | ||||
|     constexpr uint32_t pulse_length = ( | ||||
|       #ifdef PHOTO_PULSES_US | ||||
|         PHOTO_PULSE_DELAY_US | ||||
|       #else | ||||
|         15                    // 15.24 from _delay_ms(0.01524)
 | ||||
|       #endif | ||||
|     ); | ||||
|     WRITE(PHOTOGRAPH_PIN, state); | ||||
|     delayMicroseconds(pulse_length); | ||||
|   } | ||||
| 
 | ||||
|   FORCE_INLINE void tweak_photo_pin() { set_photo_pin(HIGH); set_photo_pin(LOW); } | ||||
| 
 | ||||
|   #ifdef PHOTO_PULSES_US | ||||
| 
 | ||||
|     inline void pulse_photo_pin(const uint32_t duration, const uint8_t state) { | ||||
|       if (state) { | ||||
|         for (const uint32_t stop = micros() + duration; micros() < stop;) | ||||
|           tweak_photo_pin(); | ||||
|       } | ||||
|       else | ||||
|         delayMicroseconds(duration); | ||||
|     } | ||||
| 
 | ||||
|     inline void spin_photo_pin() { | ||||
|       static constexpr uint32_t sequence[] = PHOTO_PULSES_US; | ||||
|       for (uint8_t i = 0; i < COUNT(sequence); i++) | ||||
|         pulse_photo_pin(sequence[i], !(i & 1)); | ||||
|     } | ||||
| 
 | ||||
|   #else | ||||
| 
 | ||||
|     constexpr uint8_t NUM_PULSES = 16; | ||||
|     inline void spin_photo_pin() { for (uint8_t i = NUM_PULSES; i--;) tweak_photo_pin(); } | ||||
| 
 | ||||
|   #endif | ||||
| #endif | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user