Ir ao conteúdo
  • Cadastre-se

Circuito para controle de cooler


Marcãooo

Posts recomendados

Olá pessoal eu estou terminando meu projeto ja tive alguma ajuda aqui no CH, mais agora no final me surgiu um problema, eu presciso controlar a velocidade de um cooler baseado na temperatura de um LM35 utilizando um PIC16F877A, "Eu presciso do program Na linguagem C", por exemplo quando o LM35 medir 20°, ele liga o cooler em certa velocidade, e quanto mais a temperatura aumenta, maior seria a velocidade do cooler, eu acho que n deva ser muito complicado( a nao ser para mim). eu só presciso disso, qualquer dica é bem vinda por favor ajudem pessoal.

qualquer dica circuito programa o que vs souberem serve pessoal

Lembrem-se na Linguagem C pessoal desde ja agradeço

Abrass

Link para o comentário
Compartilhar em outros sites

pra se aprender deve se pegar uma ideia e tenta la por em pratica amigo.Eu tentaria assim:Uma variavel q aumente conforme a temperatura do sensor ,essa variavel controlaria o duty cicle de um pwm q controlaria a ventoinha ,assim conforme aumenta a temperatura ,aumenta a velocidade,nao sei se tem logica ,mais os mais entendidos irão opinar .

Link para o comentário
Compartilhar em outros sites

@jorgeletronico: você está correto!

@Marcãooo: Como o amigo disse logo acima, você precisa ler a saída do LM35 e armazená-la em uma variável.

Para começar, utilizae um PIC mais barato. O 12F675 tá de bom tamanho, é mais bararto e vai te servir muito bem! :D

Aí você cria uma tabela do tipo:

Temperatura (ºC)           Fan PWM 
35 0
36 30
37 30
38 30
39 40
40 50
41 60
42 70
43 80
44 90
45 100

você vai ler o canal analógico do PIC fazer uma conversão e jogar o valor direto para o duty cicle do PIC.

O LM35 te dá 10mV/ºC e sua temperatura máxima é de 150ºC, logo, você terá uma saída máxima de 1,5V.

Assim senso, o ADC do PIC por definição vem configurado para operar de 0-VddV, ou seja de 0V a 5V. Logo com essa saída de 1,5V do LM35 você não terá todos os valores do AD. você tem 2 opções:

1º) Fazer um amplificador q aumente seu sinal do LM35 para que fique em 0-5V.

2º) Configurar seu PIC para que ele faça a conversão do canal analógico de 0-Vref.

Eu prefiro a segunda opção. Esse Vref é uma referência q você poe no pino do PIC para que o ADC pare ali. Nesse caso você deve utilizar um Vref de 1,5V.

No entanto, o datasheet do dispositivo recomenda que para uma boa conversão a diferença entre Vref e ground seja de pelo menos 2V. Nesse caso está em 1,5V.

Não montei esse circuito na prática ainda. Mas parece q funciona sim.

Caso você for usar o 12f675, a configuração do ADC fica assim:

setup_adc_ports(sAN0|VSS_VREF);         //Configura canais analógico
setup_adc(ADC_CLOCK_INTERNAL); //De acordo com relógio interno.

Aí você vai ler o canal com:

set_adc_channel(0);           //Habilita canal0 analógico
delay_us(20);
variavel = read_adc();
set_pwm1_duty(variavel);

Nesse exemplo que dei, está direto. você lê o ADC e joga direto no PWM. Note que dessa forma, seu cooler só estará em 100% em 150º :D

Para você resolver isso, você precisa fazer umas continhas. Por exemplo:

/*===========================================================================
A resolução do conversor AD segue a seguinte equação:
1LSB=(Vref-)+{[(Vref+)-(Vref-)]/1024}
E nesse caso (Vref+)=1.5V e (Vref-)=0V então a resolução é:
1LSB=1,5/1024=1,46mV
Por exemplo, se a leitura no canal analógico for de 512, a tensão
analógica será:
Vin=512*(1,46/1024)=512*1,46mV=0.75V
===========================================================================*/

Ora, se o ADC acusar 512 e você tem 0,75V, você sabe q isso são 75ºC. Só basta agora você colocar uns if, por exemplo:

if (variavel > 300 )   //vendo se a variavel ADC é maior q 43ºC
{
set_pwm1_duty(512); //coloca o pwm em 512, ou seja, 50%.
}

if (variavel > 512 ) //vendo se a variavel ADC é maior q 75ºC
{
set_pwm1_duty(1024); //coloca o pwm em 1024, ou seja, 100%
}

Veja se você consegue compreender aí.

qualquer duvida, só postar.

Falou

Link para o comentário
Compartilhar em outros sites

Se for usar o 16f877a, o esquema é o mesmo. Pra você etr uma ideia, tenho um programa aqui q lê 4 sensores de temperatura LM35.


#device adc=10 //Habilitar ADC de 10 bits, obrigatório. Pode
//ser utilizado de 8 bits também.
#FUSES NOWDT //Sem Watch dog, evitando reset
#FUSES XT //Crystal de oscilação igual a 4mhz
#FUSES PUT //Tempo de início do PIC
#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000) //Meu clock
#include <LCD.C> //Rotina de LCD modo 4 vias. Obrigatório!

void lcd_scroll_right(void)
{
lcd_send_byte(0, 0x1E);
}

void main() {

int16 q,i; //Vaeriável inteira de 16 bits: 0 a 65535
float temp1,temp2,temp3,temp4; //Variável com vírgula, para poder fazer cáclulos.


setup_adc_ports(AN0_AN1_AN2_AN4_AN5_VSS_VREF); //Configura canais analógico
setup_adc(ADC_CLOCK_INTERNAL); //De acordo com relógio interno.

lcd_init(); //Inicia LCD, obrigatório!

for (;;) //Para sempre.
{
/*===========================================================================
A resolução do conversor AD segue a seguinte equação:
1LSB=(Vref-)+{[(Vref+)-(Vref-)]/1024}
E nesse caso (Vref+)=1.5V e (Vref-)=0V então a resolução é:
1LSB=1,5/1024=1,46mV
Por exemplo, se a leitura no canal analógico for de 512, a tensão
analógica será:
Vin=512*(1,46/1024)=512*1,46mV=0.75gV
===========================================================================*/

set_adc_channel(0); //Habilita canal 0
delay_us(20); //Espera um pouco, obrigatório!
q=read_adc(); //Lê canal 0
temp1=((1.5/1024)*q)*100; //Conversão para tensão e temperatura.

set_adc_channel(1); //Habilita canal 1
delay_us(20); //Espera um pouco, obrigatório!
q=read_adc(); //Lê canal 1
temp2=((1.5/1024)*q)*100; //Conversão para tensão e temperatura.

set_adc_channel(4); //Habilita canal 4
delay_us(20); //Espera um pouco, obrigatório!
q=read_adc(); //Lê canal 4
temp3=((1.5/1024)*q)*100; //Conversão para tensão e temperatura.

set_adc_channel(5); //Habilita canal 5
delay_us(20); //Espera um pouco, obrigatório!
q=read_adc(); //Lê canal 5
temp4=((1.5/1024)*q)*100; //Conversão para tensão e temperatura.

printf(lcd_putc, "\fTemperaturas em Celsius");//Título.
printf(lcd_putc, "\nTemp1=%1.0f Temp2=%1.0f Temp3=%1.0f Temp4=%1.0f", temp1,temp2,temp3,temp4);//Mostre a temperatura.

delay_ms(2000);

for(i = 0; i < 22 ; i++) //Faz o efeiro de scroll no LCD
{
lcd_scroll_right();
delay_ms(200); // scroll delay
}

delay_ms(2000);
}
}
#include <16F877A.h>             //O PIC utilizado, obigatório!

75% do caminha tá andado com o código acima. Só falta você colocar os if para ativar o seu pwm quando precisar.

Falou

Link para o comentário
Compartilhar em outros sites

Ok amigo mais eu gostaria de saber porque no display a temperatura chega só até 25, porque eu presciso que ele leia a temperaturas um pouco maiores também?

e sempre tem 0,6 °C +/- de diferença no display?

mais desde ja muito obrigado pela ajuda esta ajudando muito

agradesço

abrass

o que seria efeito scroll no LCD?

Link para o comentário
Compartilhar em outros sites

Ok amigo mais eu gostaria de saber porque no display a temperatura chega só até 25, porque eu presciso que ele leia a temperaturas um pouco maiores também?

e sempre tem 0,6 °C +/- de diferença no display?

mais desde ja muito obrigado pela ajuda esta ajudando muito

agradesço

abrass

Ahhh tá, esqueci de postar o esquemático. Provavelmente você esqueceu de colocar o Vref de 1,5V no pino do PIC, por isso não está passaando de 25ºC.

semttulolwm.jpg

Não entendi esse diferença de 0,6ºC... você diz q ele fica oscilando?

você está simulando ou está montando o circuito real?

Scroll LCD é uma função q faz com o texto deslize no LCD. Esse display tem 16 posições e as vezes você precisa escrever mais... aí você usa esse método.

Falou

Link para o comentário
Compartilhar em outros sites

Ah sim agora entendi muito obrigado nobre amigo

eu disse que varia por exemplo

a temperatura esta em 15.0°C

n display aparesce 15.6°C

é normal isso?

abrass

matheus montei esse programinha que você me mandou certinho

do jeito que ta ae funcionou

mais acontesce que a temperatura fica sempre 8°C

em todos

o que eu fiz errado?

abrass

a sim ja descobri era pelo falo de eu n ter jogado 1.5 v

valeu

Link para o comentário
Compartilhar em outros sites

Olá pessoal, eu estou fazendo um programa aqui, porém eu queria controlar a velocidade de um cooler usando o pino" PIN_B0 " do microcontrolador PIC16F87A, Meu professor nao me ensinou mais ele me disse que eu devo ativar um pwm, mais eu n sei como fazer isso:X

sera que vocês poderiam me ajudar?

ta ai o programa ele funciona certin eu só quero ativar o pwm, mais n sei como faço:S

#include <16F877A.h>             //O PIC utilizado, obigatório!
#device adc=10 //Habilitar ADC de 10 bits, obrigatório. Pode
//ser utilizado de 8 bits também.
#FUSES NOWDT //Sem Watch dog, evitando reset
#FUSES XT //Crystal de oscilação igual a 4mhz
#FUSES PUT //Tempo de início do PIC
#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000) //Meu clock
#include <LCD.C> //Rotina de LCD modo 4 vias. Obrigatório!






void main() {

int16 q; //Vaeriável inteira de 16 bits: 0 a 65535
float p, temp,temp2; //Variável com vírgula, para poder fazer cáclulos.


setup_adc_ports(AN0_AN1_VSS_VREF); //Configura canal 0 analógico
setup_adc(ADC_CLOCK_INTERNAL); //De acordo com relógio interno.

lcd_init(); //Inicia LCD, obrigatório!

for (; //Para sempre.
{
/*===========================================================================
A resolução do conversor AD segue a seguinte equação:
1LSB=(Vref-)+{[(Vref+)-(Vref-)]/1024}
E nesse caso (Vref+)=Vdd e (Vref-)=Vss então a resolução é:
1LSB=5/1024=4,8mV
Por exemplo, se a leitura no canal analógico for de 512, a tensão
analógica será:
Vin=512*(5/1024)=512*4,8mV=2,4576V
===========================================================================*/

set_adc_channel(0); //Habilita canal 0
delay_us(20); //Espera um pouco, obrigatório!
q = read_adc(); //Lê canal 0
p = 5.0 * q / 1024.0; //Conversão para tensão.
temp=(p*100)/3.413; //Temperatura convertida de acordo com o
//amplificador utilizado.
set_adc_channel(1);
delay_us(20);
q = read_adc(); //Lê canal 0
p = 5.0 * q / 1024.0; //Conversão para tensão.
temp2=(p*100)/3.413; //Temperatura convertida de acordo com o
//amplificador utilizado.
if(temp2>=19)
output_bit(PIN_B0,1);
else
output_bit(PIN_B0,0);


printf(lcd_putc, " Bebedouro P&D");
printf(lcd_putc, " \n TEMP AGUA=%01.1fC ", temp );//Mostre a temperatura


delay_ms(50);

}
}

Link para o comentário
Compartilhar em outros sites

Ativar o pwm em C é mole, primeiro você deve configurar o módulo PWM q no caso é o CCP1. Depois você configura um timer para fazer a frequência do PWM. Eu uso o timer2. Aí você chama as 2 rotinas logo depois do inicio do programa, depois do "void main() {"

Fica assim:

setup_ccp1(ccp_pwm);
setup_timer_2(T2_DIV_BY_16,248, 1);

Aí depois q você configurar você seta o pwm com o seguinte comando:

set_pwm1_duty(valorPWM);

O calor pwm varia entre 0 e 1024.

aí seu código modificado seria mais ou menos assim:


#device adc=10 //Habilitar ADC de 10 bits, obrigatório. Pode
//ser utilizado de 8 bits também.
#FUSES NOWDT //Sem Watch dog, evitando reset
#FUSES XT //Crystal de oscilação igual a 4mhz
#FUSES PUT //Tempo de início do PIC
#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000) //Meu clock
#include <LCD.C> //Rotina de LCD modo 4 vias. Obrigatório!






void main() {

int16 q; //Vaeriável inteira de 16 bits: 0 a 65535
float p, temp,temp2; //Variável com vírgula, para poder fazer cáclulos.

setup_ccp1(ccp_pwm);
setup_timer_2(T2_DIV_BY_16,248, 1);
setup_adc_ports(AN0_AN1_VSS_VREF); //Configura canal 0 analógico
setup_adc(ADC_CLOCK_INTERNAL); //De acordo com relógio interno.

lcd_init(); //Inicia LCD, obrigatório!

for (;;) //Para sempre.
{
/*===========================================================================
A resolução do conversor AD segue a seguinte equação:
1LSB=(Vref-)+{[(Vref+)-(Vref-)]/1024}
E nesse caso (Vref+)=Vdd e (Vref-)=Vss então a resolução é:
1LSB=5/1024=4,8mV
Por exemplo, se a leitura no canal analógico for de 512, a tensão
analógica será:
Vin=512*(5/1024)=512*4,8mV=2,4576V
===========================================================================*/

set_adc_channel(0); //Habilita canal 0
delay_us(20); //Espera um pouco, obrigatório!
q = read_adc(); //Lê canal 0
p = 5.0 * q / 1024.0; //Conversão para tensão.
temp=(p*100)/3.413; //Temperatura convertida de acordo com o
//amplificador utilizado.
set_adc_channel(1);
delay_us(20);
q = read_adc(); //Lê canal 0
p = 5.0 * q / 1024.0; //Conversão para tensão.
temp2=(p*100)/3.413; //Temperatura convertida de acordo com o
//amplificador utilizado.
if(temp2>=19)
output_bit(PIN_B0,1);
else
output_bit(PIN_B0,0);

set_pwm1_duty(valorPWM);


printf(lcd_putc, " Bebedouro P&D");
printf(lcd_putc, " \n TEMP AGUA=%01.1fC ", temp );//Mostre a temperatura


delay_ms(50);

}
}
#include <16F877A.h>             //O PIC utilizado, obigatório!

Aí se você quiser mudar o pwm. você pode colocar uns if...

tenta aí..

Falou

Link para o comentário
Compartilhar em outros sites

ae pessoal eu gostaria de saber como eu faço pra ativar um pwm na linguagem em C do PIC16F877A e como faço para controlar, o problema é que eu n consigo controlar ele, nao entendo quase nada sobre PWM, eu quero ativar ele para fazer o controle de RPM de um cooler

eu presciso saber pelo menos a formula em C!!

desde ja agradesço abraas

Link para o comentário
Compartilhar em outros sites

o marcaaaao... o jeito d controlar o cooler eu disse um post acima do seu.

Lembra q a um tempo atras você me perguntou como acender um led quqndo a temperatura for igual a 20ºC? Lembra q você fez assim:

if (temp2>19)
{
output_high(PIN_C0);
}

Agora você faz a mesma coisa com o PWM do cooler. O raciocínio é o mesmo. Exemplo:

if (temp2>19)
{
set_pwm1_duty(512);
}

Dessa forma você poe a velocidade do cooler em 50%.

Falou

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

// LCD module connections


sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
sbit Gate_Enable at RC1_bit;
unsigned long RPM_Value;
char message3[] = "tensão=";
char message4[] = "Corrente=";
char message5[] = "Freq= Hz";
unsigned int ADC_Value, DisplayVolt, DisplayCurr, AdjustVolt;
char *volt = "00.0";
char *amp = "0.000";
//unsigned int Num;
char *freq = "00000.00";
long counter, Num, lowfreq;
unsigned short CountDone, upscale, prescaler;

void Display_Freq(long freq2write) {

freq[0] = (freq2write/10000000) + 48; // Extract tens digit
freq[1] = (freq2write/1000000)%10 + 48; // Extract ones digit
freq[2] = (freq2write/100000)%10 + 48;
freq[3] = (freq2write/10000)%10 + 48;
freq[4] = (freq2write/1000)%10 + 48;
freq[6] = (freq2write/100)%10 + 48;
freq[7] = (freq2write/10)%10 + 48;
// Display Frequency on LCD
Lcd_Out(2, 6, freq);
}

long count_pulse(){
long ff = 0;
Gate_Enable = 0;
CountDone = 0;
Num = 0;
TMR1L = 0xDC; //TMR1 start time = 3036 for 100 ms
TMR1H = 0x0B;
TMR0 = 0;
T1CON.TMR1ON = 1;
do {

}while(!CountDone);
Gate_Enable = 1;
T1CON.TMR1ON = 0; // Disable Timer1
ff = 256*Num + TMR0;
ff = ff*10*prescaler;
return ff;

}

// Interrupt service routine
void interrupt() {
if(INTCON.T0IF){
Num ++; // Interrupt causes Num to be incremented by 1
INTCON.T0IF = 0; // Bit T0IF is cleared so that the interrupt could reoccur
}
if (PIR1.TMR1IF){ //Let me use this even if no other interrupts are enabled
CountDone = 1;
PIR1.TMR1IF = 0; //reset timer1 flag
}
}
sbit LCD_RS at RB4_bit;

////ALTERACAO


long leitura_ad = 0, aux = 0;
char texto[5] = "00.0";
char valor[5] = "00.0";
long setpoint;
char teste = 1;
unsigned int select, update_select;

void debounce_delay(void){
Delay_ms(333);
}

void atualiza_lcd(){ // funçao atualiza lcd
Lcd_Init();

delay_ms(20);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);


}

void escreve_eeprom() {
EEPROM_Write (0,setpoint);
EEPROM_Write (1,setpoint>>8); // quebra var.teste de 16bit em dois de 8

delay_ms(40);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_out(1,4, "SUCESSSO");
Lcd_out(2,1, "AJUSTE GRAVADO");
delay_ms(800);
atualiza_lcd();

}
// Define Messages


void main() {
trisa.ra0 = 1;
trisa.ra1= 1; //configrada como entrada
trisa.ra2= 1; //configrada como entrada
ADCON1 = 0x82; // configure VDD as Vref, and analog channels

INTCON = 0;
PORTC = 0;
TRISB = 3; //'configura todos os pinos do portd como saída
TRISD = 3; //'configura todos os pinos do portd como saída
TRISE = 0; //'configura todos os pinos do porte como saída
TRISC = 0; //'configura todos os pinos do portd como saída

//'configura AN0,AN1,AN3 COMO analógico e os demais pinos como digital
Gate_Enable = 1;
// TMR1 settings
T1CON.TMR1CS = 0; // Fosc / 4
T1CON.T1CKPS1 = 1; // Setting prescale value to 1:8
T1CON.T1CKPS0 = 1;
PIE1.TMR1IE = 1;
INTCON.PEIE = 1;
INTCON.T0IE = 1;
INTCON.GIE = 1;
Lcd_Init();

Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Out(1,13, texto);
Lcd_Out(2,13, valor);
atualiza_lcd();

setpoint = eeprom_Read(1);setpoint<<=8;
setpoint |= eeprom_Read(0);

select = 0;
update_select = 1;

do {
if(!SelectButton){
debounce_delay();
update_select = 1;
switch (select) {
case 0 : select=1;
break;
case 1 : select=2;
break;
case 2: select=3;
break;
case 3: select=4;
break;
case 4: select=0;
break;
} //case end
}
if(select == 0){ // Diode Tester
if(update_select){
Lcd_cmd(_LCD_CLEAR);


update_select=0;
}
////////////////////********/////
leitura_ad = adc_read(0);
aux = leitura_ad;

leitura_ad = leitura_ad*5000/1023;
texto[0] = (leitura_AD%1000)/100 + 48;
texto[1] = (((leitura_AD%1000)%100)/10) + 48;
texto[2] = '.';
texto[3] = (((leitura_AD%1000)%100)%10) + 48;
Lcd_Out(1,13, texto);

if (Button(&PORTD, 0, 20 ,0)){ //verifica tecla1.
setpoint++;
}

if (Button(&PORTD, 1, 20, 0)){ //verifica se a tecla2.
setpoint--;
}
if (PORTd.Rd5 == 0){ //se portb.rb0 estiver em nivel baixo chama funçao
escreve_eeprom(); //chama a funçao escreve na eeprom
}
if (PORTd.Rd4 == 0 && teste ==1 ){
portc.rc7 = ~portc.rc7;
teste = 0; }
delay_ms(20);
if (PORTd.rd4 == 1 && teste == 0 ){
teste = 1;
delay_ms(20);
}
if(portc.rc7==1){
Lcd_out(2,10, "TL");
} else Lcd_out(2,10, "TD");

valor[0] = (setpoint%100)/10 + 48;
valor[1] = ((setpoint%100)%10) + 48;
valor[2] = '.';
valor[3] = '0';
Lcd_out(2,13, valor);
Lcd_Out(1,1,"TEMPERATURA");
Lcd_Out(2,1,"AJUSTE");
if (aux/2 <= setpoint){
portc.rc0 = 0;
}
else portc.rc0 = 1;
}//FIM DO MENU 0
if(select == 1){ // Diode Tester
if(update_select){

Lcd_cmd(_LCD_CLEAR);
Lcd_Out(1,1,"VOLTIMETRO");

update_select=0;
}
// Read Voltage

ADC_Value = ADC_Read(1);
DisplayVolt = ADC_Value * 2;
AdjustVolt = DisplayCurr/1000;
AdjustVolt = 29*AdjustVolt ; // 29 corresponds to 0.286 Ohm
DisplayVolt = DisplayVolt - AdjustVolt;
volt[0] = DisplayVolt/1000 + 48;
volt[1] = (DisplayVolt/100)%10 + 48;
volt[3] = (DisplayVolt/10)%10 + 48;
Lcd_Out(2,9,volt);
Lcd_Out(2,1,Message3);
Lcd_Chr(2,13,'V');
///AQUI VAI OS TEXTO

} // End if (detail_select)

if(select == 2){ // Diode Tester
if(update_select){
Lcd_cmd(_LCD_CLEAR);
Lcd_Out(1,1,"AMPERIMETRO");

update_select=0;
}
// Read Current
ADC_Value = ADC_Read(2);
DisplayCurr = ADC_Value * 17;
amp[0] = DisplayCurr/10000 + 48;
amp[2] = (DisplayCurr/1000)%10 + 48;
amp[3] = (DisplayCurr/100)%10 + 48;
amp[4] = (DisplayCurr/10)%10 + 48;
Lcd_Out(2,10,amp);
Lcd_Chr(2,15,'A');

///AQUI VAI OS TEXTO
} // End if (detail_select)
if(select == 3){ // Diode Tester
if(update_select){
Lcd_cmd(_LCD_CLEAR);
Lcd_Out(1,1,"FREQUENCIMETRO");

update_select=0;
}
// Calculate Frequency
// First begin with prescaler 1:64
OPTION_REG = 0b00110101; // Prescaler (1:64), TOCS =1
prescaler = 64;

Counter = count_pulse();

if (Counter > 99990) {
Display_Freq(Counter);
Lcd_Chr(2,14,'K');
//lowfreq = Counter*1000;
//Lcd_Out(2,1,message5);
//Display_Freq(lowfreq);
}
if (Counter <= 99990) {
OPTION_REG = 0b00111000; // Prescaler (1:1), TOCS =1
prescaler = 1;
Counter = count_pulse();
Counter = 1000*Counter;
Display_Freq(Counter);
Lcd_Chr(2,14,'H');
Lcd_Chr(2,15,'z');
}
Delay_ms(3);
// Ends Frequency display
///AQUI VAI OS TEXTO
} ///FIM DO MENU
if(select == 4){ // Diode Tester
if(update_select){
Lcd_cmd(_LCD_CLEAR);
Lcd_Out(1,1,"CONTA GIRO");

update_select=0;
}


///AQUI VAI OS TEXTO
} ///FIM DO MENU
//iluminacao no lcd liga e desliga
if (PORTd.Rd4 == 0 && teste ==1 ){
portc.rc7 = ~portc.rc7;
teste = 0; }
delay_ms(20);
if (PORTd.rd4 == 1 && teste == 0 ){
teste = 1;
delay_ms(20);
}
if(portc.rc7==1){
;
} else ;


} while(1);
}
sbit SelectButton at Rd7_bit;

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!