Assignment title: Information


#include "MK64F12.h" #include #include #define TEMP_LOW 40 #define TEMP_MED 60 #define TEMP_HIGH 80 void dacOut(int value){ // Send the lower 8 bits to DAT0L DAC0_DAT0L = value & 0xFF; // Send the upper 4 bits to DAT0H DAC0_DAT0H = (value >> 8) & 0xF; } void fanOff(void){ dacOut(0x000); // 0V } void fanSlow(void){ dacOut(0xFFF/2); // 1.6V } void fanHigh(void){ dacOut(0xFFF); // 3.3V } void ledRed(void){ GPIOB_PCOR = (1 << 22); // Turn on RED (clear) GPIOE_PSOR = (1 << 26); // Turn off Green (set) } void ledGreen(void){ GPIOB_PSOR = (1 << 22); // Turn off RED (set) GPIOE_PCOR = (1 << 26); // Turn on Green (clear) } void relayOff(void){ GPIOB_PCOR = (1 << 3); } void relayOn(void){ GPIOB_PSOR = (1 << 3); } double tempConvert(); void Init(); void fanOn (); void Switch(); /* * Fan off * Relay Off * Red LED */ void Disabled(void){ fanOff(); relayOff(); ledRed(); } /* * Fan off * Relay On * Green LED */ void NormalTemp(void){ printf("Normal\n"); fanOff(); relayOn(); ledGreen(); } /* * Fan slow * Relay On * Green LED */ void LTemp(void){ printf("Low\n"); fanSlow(); relayOn(); ledGreen(); } /* * Fan high * Relay On * Green LED */ void HTemp(void){ printf("High\n"); fanHigh(); relayOn(); ledGreen(); } /* * Fan High * Relay Off * Red LED */ void OffTemp(void){ printf("Too high!\n"); fanHigh(); relayOff(); ledRed(); } void delay_ms(int ms){ int i = 12100*ms; for (int x= 0;x<=i;x++){} } #include "MK64F12.h" #include #include void Init(void){ SIM_SCGC6|= SIM_SCGC6_ADC0_MASK ; // Enable ADC0 ; SIM_SCGC4 |= SIM_SCGC4_UART0_MASK; // Enable UART0 SIM_SCGC2 |=SIM_SCGC2_DAC0_MASK ; // Enable DAC0 // Enabled the module clock for PORTB (Switch 3, Relay), and PORTA (Red and Green LEDs) SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK |SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTE_MASK; // Enable port // Sets the channel of the ADC to 12 ADC0_SC1A = ADC_SC1_ADCH(0xC); // PTB2: ADC0_SE12 ADC0_CFG1 = ADC_CFG1_MODE(0x01); // 12-bit mode PORTB_PCR2 = PORT_PCR_MUX(0); // Set the pin function to ADC DAC0_C0 |= DAC_C0_DACEN_MASK ;// TO ENABLE THE DAC DAC0_C0 |= DAC_C0_DACRFS_MASK ; // ENABLE DAC REFERENCE. // set UART PORTB_PCR16 |= PORT_PCR_MUX(3); // MUX 3 PORTB_PCR17 |= PORT_PCR_MUX(3); // MUX 3 UART0_C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK ); UART0_C1 = 0b00000000; UART0_BDH = 0; // Setting the baud rate to 9600 UART0_BDL = 0x88; UART0_C2 |=(UART_C2_TE_MASK |UART_C2_RE_MASK); // set LED PORTE_PCR26 = PORT_PCR_MUX(1); // Green LED PORTB_PCR22 = PORT_PCR_MUX(1); // Red LED GPIOB_PDDR |= (1<<22); // set data direction as output for Blue LED GPIOE_PDDR |= (1<<26); // set data direction as output for Greed LED PORTC_PCR6 = PORT_PCR_MUX(1); // Switch 2 PORTB_PCR3 = PORT_PCR_MUX(1); // Relay GPIOB_PDDR |= (1 << 3); // set data as output for Relay } // Uart //void put(char *ptr_str){ //while(*ptr_str) //uart_putchar(*ptr_str++); //} void DelayFunction (void) { unsigned long Counter = 0xFFFFF; do { Counter--; }while(Counter); } //ADC CONVERT #define CALIBRATION 43.5 double tempConvert() { int t; ADC0_SC1A = ADC_SC1_ADCH(0xC); t = ADC0_RA; //delay_ms(100); double volts = t*(3.3/0xfff); double temp = (volts-2.98) * 100 + 25 + CALIBRATION; return(temp); } int button_state = 0; int check = 0; void Switch(void){ int value = GPIOC_PDIR & (1 << 6) ? 1 : 0; if(button_state == 1 && value == 0){ check = !check; } button_state = value; } void tempSelect(double temp){ if(check == 0){ Disabled(); } else if(temp < TEMP_LOW){ NormalTemp(); } else if(temp >= TEMP_LOW && temp < TEMP_MED){ LTemp(); } else if(temp >= TEMP_MED && temp < TEMP_HIGH){ HTemp(); } else{ OffTemp(); } } /***************************************Main Program Code*****************************************************/ int main(void){ Init(); Disabled(); for(;;){ Switch(); double temp = tempConvert(); printf("Temp: %d.%d\n", (int)temp, (int)((temp*10))%10); tempSelect(temp); //delay_ms(21); DelayFunction(); } }