Add overtemperature shutdown
This commit is contained in:
		@@ -4,6 +4,7 @@
 | 
				
			|||||||
#include <ring-light/temp-adc.h>
 | 
					#include <ring-light/temp-adc.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RING_MAX_LED	32u
 | 
					#define RING_MAX_LED	32u
 | 
				
			||||||
 | 
					#define MAX_TEMP_CELSIUS 70
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum ring_modes {
 | 
					enum ring_modes {
 | 
				
			||||||
	RING_MODE_ALL,                  /*!< control all LEDs at once */
 | 
						RING_MODE_ALL,                  /*!< control all LEDs at once */
 | 
				
			||||||
@@ -63,30 +64,37 @@ int main(void)
 | 
				
			|||||||
	TIM3->PSC = 0;
 | 
						TIM3->PSC = 0;
 | 
				
			||||||
	TIM3->CR1 = TIM_CR1_CEN;
 | 
						TIM3->CR1 = TIM_CR1_CEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*! -# init TIM14 for PWM control of the magic LED driver */
 | 
						/*! -# Init TIM14 for PWM control of the magic LED driver */
 | 
				
			||||||
	/*! -# count up to 255 (0 bit resolution) */
 | 
						/*! -# Count up to 255 (8 bit resolution) */
 | 
				
			||||||
	TIM14->ARR = 0x00FFu;
 | 
						TIM14->ARR = 0x00FFu;
 | 
				
			||||||
	TIM14->CNT = 0u;
 | 
						TIM14->CNT = 0u;
 | 
				
			||||||
	TIM14->CCR1 = 0u;
 | 
						TIM14->CCR1 = 0u;
 | 
				
			||||||
	/*! -# set prescaler to 16 ==> ca. 11 KHz */
 | 
						/*! -# Set prescaler to 16 ==> ca. 11 KHz */
 | 
				
			||||||
	TIM14->PSC = 15u;
 | 
						TIM14->PSC = 15u;
 | 
				
			||||||
	/*! -# PWM Mode 1 + prefetch */
 | 
						/*! -# PWM Mode 1 + prefetch */
 | 
				
			||||||
	TIM14->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
 | 
						TIM14->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
 | 
				
			||||||
	/*! -# enable Output compare 1 */
 | 
						/*! -# Enable Output compare 1 */
 | 
				
			||||||
	TIM14->CCER = TIM_CCER_CC1E;
 | 
						TIM14->CCER = TIM_CCER_CC1E;
 | 
				
			||||||
	/*! -# finally enable TIM14 */
 | 
						/*! -# Finally, enable TIM14 */
 | 
				
			||||||
	TIM14->CR2 = 0;
 | 
						TIM14->CR2 = 0;
 | 
				
			||||||
	TIM14->CR1 = TIM_CR1_CEN;
 | 
						TIM14->CR1 = TIM_CR1_CEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*! -# set initial state to all 25% */
 | 
						/*! -# Set initial state to all 25% */
 | 
				
			||||||
	led_val = 64u;
 | 
						led_val = 64u;
 | 
				
			||||||
	mode    = RING_MODE_ALL;
 | 
						mode    = RING_MODE_WHITE_DISCRETE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	temperature_adc_init();
 | 
						temperature_adc_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SysTick_Config(800000);
 | 
						SysTick_Config(800000);
 | 
				
			||||||
	while(1) {
 | 
						while(1) {
 | 
				
			||||||
		temperature = temperature_adc_get_temp();
 | 
							temperature = temperature_adc_get_temp();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/*! -# Gradually dim down the LED brightness in case the temperature is too high */
 | 
				
			||||||
 | 
							if (temperature > ((MAX_TEMP_CELSIUS) * 10)) {
 | 
				
			||||||
 | 
								if (led_val > 20)
 | 
				
			||||||
 | 
									led_val--;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		led_pwm_val = 0u;
 | 
							led_pwm_val = 0u;
 | 
				
			||||||
		switch (mode)
 | 
							switch (mode)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user