Relatorio embarcados
22 pág.

Relatorio embarcados


DisciplinaMetodologia de Pesquisa I8.764 materiais58.455 seguidores
Pré-visualização4 páginas
quantidade de amostras a serem coletadas. 
 
ADC_SoftwareStartConvCmd(ADC1, ENABLE); 
Habilita o início da conversão por software. 
 
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); 
value = ADC_GetConversionValue(ADC1); 
Enquanto o status do registrador EOC (End of Conversion) for nulo, a 
conversão continua, jogando valores para o registrador Value. 
 
 
Void mostra (int num ) 
{ 
 switch (num) 
 { 
case(0): 
 GPIO_ResetBits(GPIOA,GPIO_Pin_1); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(1): 
 GPIO_SetBits(GPIOA,GPIO_Pin_1); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 
 
 
 
case(2): 
 GPIO_ResetBits(GPIOA,GPIO_Pin_1); 
 GPIO_SetBits(GPIOA,GPIO_Pin_2); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(3): 
 GPIO_SetBits(GPIOA,GPIO_Pin_1); 
 GPIO_SetBits(GPIOA,GPIO_Pin_2); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(4): 
 GPIO_ResetBits(GPIOA,GPIO_Pin_1); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2); 
 GPIO_SetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(5): 
 GPIO_SetBits(GPIOA,GPIO_Pin_1); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2); 
 GPIO_SetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(6): 
 GPIO_ResetBits(GPIOA,GPIO_Pin_1); 
 GPIO_SetBits(GPIOA,GPIO_Pin_2); 
 GPIO_SetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(7): 
 GPIO_SetBits(GPIOA,GPIO_Pin_1); 
 GPIO_SetBits(GPIOA,GPIO_Pin_2); 
 GPIO_SetBits(GPIOA,GPIO_Pin_3); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(8): 
 GPIO_ResetBits(GPIOA,GPIO_Pin_1); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3); 
 GPIO_SetBits(GPIOA,GPIO_Pin_4); 
 break; 
 case(9): 
 GPIO_SetBits(GPIOA,GPIO_Pin_1); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_2); 
 GPIO_ResetBits(GPIOA,GPIO_Pin_3); 
 GPIO_SetBits(GPIOA,GPIO_Pin_4); 
 break; 
 } 
} 
 
 Função que recebe um valor unitário, e de acordo com o valor, Passa para o 
conversor Binario-BCD 7-Segmentos, uma configuração diferente, correspondendo 
em bits, o valor da variável. 
 
 
 
 
 
 
 
 
 
 
 
 
void display_unid (int unid) 
{ 
 int aux = 0; 
 int tempo = 5000; 
 for (aux=0;aux<=tempo;aux++); 
 { 
 GPIO_ResetBits(GPIOA,GPIO_Pin_6); 
 GPIO_SetBits(GPIOA,GPIO_Pin_5); 
 mostra(unid); 
 } 
} 
 
void display_dez (int dez) 
{ 
 int aux = 0; 
 int tempo = 5000; 
 for (aux=0;aux<=tempo;aux++); 
 { 
 GPIO_ResetBits(GPIOA,GPIO_Pin_5); 
 GPIO_SetBits(GPIOA,GPIO_Pin_6); 
 mostra(dez); 
 } 
} 
 
 Funções que, Ligam e desligam os transistores dos displays, e passam os 
respectivos valores das variáveis, (dezena e unidade) para a função mostra (função 
analisada anteriormente) para que os valores sejam mostrados nos displays. 
 
 
void rele (int ctrl, int temp_max, int temp_min) 
{ 
 int aux1; 
 if(ctrl >= temp_max) 
 { 
 aux1 = 1; 
 GPIO_ResetBits(GPIOC,GPIO_Pin_3); 
 } 
 if (ctrl <= temp_min) 
 { 
 aux1 = 2; 
 GPIO_SetBits(GPIOC,GPIO_Pin_3); 
 } 
 if ((ctrl>temp_min)&&(ctrl<temp_max)) 
 { 
 if ((aux1 == 1)) 
 { 
 GPIO_ResetBits(GPIOC,GPIO_Pin_3); 
 } 
 if ((aux1 == 2)) 
 { 
 GPIO_SetBits(GPIOC,GPIO_Pin_3); 
 } 
 } 
} 
 
 Função de tomada de decisão do relé, onde se a temperatura controlada 
(CTRL), for maior que a temperatura máxima parametrizada, o relé é desligado, 
caso CTRL for menor do que a temperatura mínima, aciona o relé. 
 Caso o Relé esteja entre a temperatura mínima e máxima, a variável aux1 
(memória do estado anterior do relé) é o parâmetro para o relé, pois se o mesmo 
 
 
estava com a temperatura decrescendo, o relé não é acionado, porém se a 
temperatura estava em ascendência, o relé é acionado. 
 
 
int parame_dec () 
{ 
 GPIO_SetBits(GPIOC,GPIO_Pin_8); 
 GPIO_SetBits(GPIOC,GPIO_Pin_9); 
 int dec_param = 0; 
 int bounce = 0; 
 while (1) 
 { 
 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0) 
 { 
 while (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0) 
 { 
 bounce++; 
 } 
 if (bounce >700) 
 { 
 dec_param = 1; 
 return (dec_param); 
 } 
 } 
 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 0) 
 { 
 while (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 0) 
 { 
 bounce++; 
 } 
 if (bounce >700) 
 { 
 dec_param = 2; 
 return (dec_param); 
 } 
 } 
 bounce = 0; 
 } 
} 
 
 Ao entrar no modo de parametrização (apertar o botão USER), essa função é 
chamada. 
 Enquanto o usuário não apertar um dos botões externos, a função estará em 
LOOP permanente, esperando o usuário decidir, qual temperatura deseja 
parametrizar, a máxima ou a mínima. 
 
 
int ajust_temp_max(int temp_max) 
{ 
 GPIO_SetBits(GPIOC,GPIO_Pin_8); 
 GPIO_ResetBits(GPIOC,GPIO_Pin_9); 
 int aux_unid = 0; 
 int aux_dez = 0; 
 int aux_temp = 0; 
 int bounce = 0; 
 int confir = 0; 
 int tempo = 0; 
 aux_unid = temp_max%10; 
 aux_dez = temp_max/10; 
 while (1) 
 { 
 display_unid (aux_unid); 
 
 
 delay(); 
 display_dez (aux_dez); 
 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0) 
 { 
 while (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0) 
 { 
 bounce++; 
 } 
 if(bounce > 700) 
 { 
 aux_unid = aux_unid +1; 
 if (aux_unid == 10) 
 { 
 aux_unid = 0; 
 } 
 bounce =0; 
 } 
 } 
 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 0) 
 { 
 while (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2) == 0) 
 { 
 bounce++; 
 } 
 if (bounce > 700) 
 { 
 aux_dez=aux_dez +1; 
 if(aux_dez == 10) 
 { 
 aux_dez = 0; 
 } 
 bounce = 0; 
 } 
 } 
 if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1) 
 { 
 while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1) 
 { 
 bounce++; 
 } 
 if(bounce > 700) 
 { 
 while (confir != 5) 
 { 
 GPIO_SetBits(GPIOC,GPIO_Pin_8); 
 GPIO_SetBits(GPIOC,GPIO_Pin_9); 
 for (tempo=0;tempo<=200000;tempo++); 
 GPIO_ResetBits(GPIOC,GPIO_Pin_8); 
 GPIO_ResetBits(GPIOC,GPIO_Pin_9); 
 for (tempo=0;tempo<=200000;tempo++); 
 confir++; 
 } 
 GPIO_ResetBits(GPIOC,GPIO_Pin_8); 
 GPIO_ResetBits(GPIOC,GPIO_Pin_9); 
 aux_temp = ((aux_dez*10)+aux_unid); 
 return (aux_temp); 
 } 
 } 
 bounce = 0; 
 } 
} 
 
 Função onde é feita a parametrização da temperatura (no caso, máxima), nas 
linhas: 
 
 
 
aux_unid = temp_max%10; 
aux_dez = temp_max/10; 
é feita o div e mod da temperatura máxima , para separar a dezena e unidade para 
variáveis separadas, para que possam ser ajustadas. 
 A função fica em LOOP permanente, enquanto o botão USER não for 
apertado. 
 Cada botão externo, incrementa em 1 unidade (ou na dezena ou na unidade), 
o valor da temperatura, caso o valor chegue a 9, ao pressionar o botão novamente, 
o mesmo volta a 0. 
 Após escolher o valor máximo para a temperatura e pressionar o botão 
USER, o valor temp_max é substituído pelo novo valor de temperatura 
parametrizado, os LED\u2019s do micro controlador piscam em conjunto por um tempo, 
informando para o usuário que o novo valor foi aceito e está salvo na memória. 
 
 
int ajust_temp_min(int temp_min) 
{ 
 GPIO_ResetBits(GPIOC,GPIO_Pin_8); 
 GPIO_SetBits(GPIOC,GPIO_Pin_9); 
 int aux_unid = 0; 
 int aux_dez = 0; 
 int aux_temp = 0; 
 int bounce = 0; 
 int confir = 0; 
 int tempo = 0; 
 aux_unid = temp_min%10; 
 aux_dez = temp_min/10; 
 while (1) 
 { 
 display_unid (aux_unid); 
 delay(); 
 display_dez (aux_dez); 
 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0) 
 { 
 while (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)