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();
}
}