Motor de passo
Por: femina • 19/11/2015 • Projeto de pesquisa • 2.459 Palavras (10 Páginas) • 278 Visualizações
UNIVERSIDADE FUNDAÇÃO SANTO ANDRÉ
FACULDADE DE ENGENHARIA "ENGENHEIRO CELSO DANIEL"
ABNER RA:715115
FELIPE FEMINA RA:715246
ATIVIDADE DE MICROCONTROLADORES I
SANTO ANDRÉ
2015
Sumário
Fluxograma
Programa Comentado
Planilha de Teste de verificação 12
Lista de Dificuldade 12
Controle On-Off 13
Conclusão 16
Fluxograma
[pic 1]
Programa comentado
/*
* File:Controle de temperatura.c
* Author: Felipe Femina e Abner de Souza
*
* Created on 5 de Novembro de 2015
*/
#include
#include
#include
#include
#include "ADC_LibV1.h"
#include "LCD_8bitsV1.h"
#pragma config OSC=HS, PWRT=ON,WDT=OFF, MCLRE=OFF, DEBUG=OFF, LVP=OFF , BOREN=OFF
#define _XTAL_FREQ 8000000
void atraso50ms (int vezes);
void main(void) {
char Mens_L1[17] = {"LIC: "}; //*indica no display o valor do tripot ANAL0
char *bufpointer;
int LIC;
int status;
float LICF;
int LSC;
float LSCF;
int Temp;
floatTempFloat;
TRISC=0b00000000;
TRISB=0b11111111;
PORTC=0b00000000;
ADC_Init(0); // Canal 0 ligado
while(1){
LIC = ADC_Get_Sample();
LICF = (float)LIC/10.23;
bufpointer = ftoa(LICF, &status);
Mens_L1[5] = bufpointer[0];
Mens_L1[6] = bufpointer[1];
Mens_L1[7] = bufpointer[2];
Mens_L1[8] = bufpointer[3];
Mens_L1[9] = bufpointer[4];
IniciaLCD();
EscStringLCD(Mens_L1);
atraso50ms(20);
//Assim que o botao RB3 for apertado, ele comoça a ler o Anal1 (limite superior)
if(PORTBbits.RB3==0){
char Mens_L1[17] = {"LSC: "};
ADC_Init(1); // Canal 1 ligado
while(1){
LSC = ADC_Get_Sample();
LSCF = (float)LSC/10.23;
bufpointer = ftoa(LSCF, &status);
Mens_L1[5] = bufpointer[0];
Mens_L1[6] = bufpointer[1];
Mens_L1[7] = bufpointer[2];
Mens_L1[8] = bufpointer[3];
Mens_L1[9] = bufpointer[4];
IniciaLCD();
EscStringLCD(Mens_L1);
atraso50ms(20);
if(PORTBbits.RB4==0){
char Mens_L1[17] = {"Temp: "}; // batao RB4 acionado começa a ler a Temperatura
ADC_Init(2); // Canal 2 ligado ao LM35
while(1){
Temp = ADC_Get_Sample();
TempFloat = (float)Temp*(500.0/1023.0);
bufpointer = ftoa(TempFloat, &status);
Mens_L1[6] = bufpointer[0];
Mens_L1[7] = bufpointer[1];
Mens_L1[8] = bufpointer[2];
Mens_L1[9] = bufpointer[3];
Mens_L1[10] = bufpointer[4];
IniciaLCD();
EscStringLCD(Mens_L1);
atraso50ms(20);
if(TempFloat
PORTCbits.RC5=1;
PORTCbits.RC2=0;
}
if(TempFloat> LSCF){ //compara a temperatura com o limite superior de controle
PORTCbits.RC5=0;
PORTCbits.RC2=1;
}
}
}
}
}
}
return;
}
void atraso50ms (int vezes)
{
int i;
for( i = 1; i <= vezes; i++)
{
__delay_ms(50);
}
}
ADC_LibV1
#include
#include
#include
#include
voidADC_Init(unsigned short canal)
{
ADCON1 = 0b00001100;
// bits54 = 00 Vref-(VSS) e Vref+(VDD)
// bits3210 = 1100 Analógicos AN0, AN1 e AN2
ADCON2 = 0b10101001;
// bit7 = 1 Justificado à direita
// bits654 = 101 Tempo de aquisição: 12TAD
// bits321 = 001 AD Clock Tempo Conversão = FOSC/8
switch(canal) {
case 0:
ADCON0 = 0b00000001;
// bits5432 = 0000 Canal 0 - AN0
// Go/Done = 0
// ADON = Ligado
break;
case 1:
ADCON0 = 0b00000101;
// bits5432 = 0001 Canal 1 - AN1
break;
case 2:
ADCON0 = 0b00001001;
// bits5432 = 0010 Canal 2 - AN2
break;
}
}
intADC_Get_Sample (void)
{
intResult_AD;
ADCON0bits.GO = 1;
...