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] |  * FAST_PWM_FAN_FREQUENCY [undefined by default] | ||||||
|  *   Set this to your desired frequency. |  *   Set this to your desired frequency. | ||||||
|  *   If left undefined this defaults to F = F_CPU/(2*255*1) |  *   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 |  *   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. |  *   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
 |   // Duration to hold the switch or keep CHDK_PIN high
 | ||||||
|   //#define PHOTO_SWITCH_MS   50 // (ms) (M240 D)
 |   //#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 | #endif | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | |||||||
| @ -62,11 +62,44 @@ | |||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if PIN_EXISTS(PHOTOGRAPH) | #if PIN_EXISTS(PHOTOGRAPH) | ||||||
|   constexpr uint8_t NUM_PULSES = 16; | 
 | ||||||
|   constexpr float PULSE_LENGTH = 0.01524; |   FORCE_INLINE void set_photo_pin(const uint8_t state) { | ||||||
|   inline void set_photo_pin(const uint8_t state) { WRITE(PHOTOGRAPH_PIN, state); _delay_ms(PULSE_LENGTH); } |     constexpr uint32_t pulse_length = ( | ||||||
|   inline void tweak_photo_pin() { set_photo_pin(HIGH); set_photo_pin(LOW); } |       #ifdef PHOTO_PULSES_US | ||||||
|   inline void spin_photo_pin() { for (uint8_t i = NUM_PULSES; i--;) tweak_photo_pin(); } |         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 | #endif | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user