Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
José Braga Neto

Frequencimetro com pic

Recommended Posts

Olá amigos !

Sou novo aqui no forum , e já comecei pedindo.

Sou técnico em eletrônica, e estou tentando aprender um pouco de

microcontroladores , em especial o pic.

Estou aprendendo primeiro o Basic,por ser mais fácil a meu ver,

depois pretendo partir para outras linguagens.

Atualmente estou trabalhando com o Pic Basic Pro, mas já aprendi um

pouco também com o Pic Simulador Ide, já fiz vários projetinhos , copiados

aqui na iternet e vou modificando a meu jeito para ver o resultado.

Agora estou querendo aprender configurar o pic para ler a frequência de

um pino ou seja, fazer um frequêncimetro.

Todos os projetos que encontrei na internet estão em asm. e eu ainda não

cheguei lá.

Se alguém puder me dar uma luz , em BASIC ,fico muito grato.

De preferência pic16f628a ou 16f84a.

BOA NOITE A TODOS!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá amigos !

Sou novo aqui no forum , e já comecei pedindo.

Sou técnico em eletrônica, e estou tentando aprender um pouco de

microcontroladores , em especial o pic.

Estou aprendendo primeiro o Basic,por ser mais fácil a meu ver,

depois pretendo partir para outras linguagens.

Atualmente estou trabalhando com o Pic Basic Pro, mas já aprendi um

pouco também com o Pic Simulador Ide, já fiz vários projetinhos , copiados

aqui na iternet e vou modificando a meu jeito para ver o resultado.

Agora estou querendo aprender configurar o pic para ler a frequência de

um pino ou seja, fazer um frequêncimetro.

Todos os projetos que encontrei na internet estão em asm. e eu ainda não

cheguei lá.

Se alguém puder me dar uma luz , em BASIC ,fico muito grato.

De preferência pic16f628a ou 16f84a.

BOA NOITE A TODOS!

Tente a funcao COUNT

Exemplo: COUNT PORTA.7,1000,resutl

Ele ira contar quantos pulsos tem porta.7 por um segundo e guardara o valor em result

Celio Rodrigues

www.centertecno.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola amigos aguel poderia me ajuda preciso fazer um multimetro com os sguinte intes:

todos ele em mikroc Pro

1.Voltimetro

2.Amperimetro

3.Conta giro

4.Frequencimetro

5.Termometro

6.Capacimetro

7.Resistor

Ja possuo os codigo seguinte com men adaptado abaixo:



void escreveVet(char *vet,int linha);
void conv_freq(long temp);


// Lcd pinout settings
sbit LCD_RS at RB4_bit;
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;
sbit SelectButton at Rd7_bit;

sbit Gate_Enable at RC1_bit;
// Define Messages
char message3[] = "T=";
char message4[] = "I=";
char message5[] = "Freq= Hz";
// End Message

unsigned char ch;
unsigned int adc_rd;
char *text;
long tlong;
//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
}
}
unsigned int select, update_select;
void debounce_delay(void){
Delay_ms(200);
}
char texto1[7], numflancos=0;
int rpm, rads;
/////////////////////////
int counts,oldCounts;

char txt[6];
void showdata(unsigned int);
void showdata(unsigned int ia)
{
WordToStr(ia, txt); // Transform counter value to string


}
/////////////////////
void main(){
//inicializando os registradores
TRISC = 0b00000001; // PORTC All Outputs
CMCON = 0x07; // Turn off comparators
TRISB= 0X00; // Porta B como saida para o LCD
TRISA=0XFF; //Porta A como entrada
TRISC=0XFF; //Porta C como entrada
ADCON1=0X00; //Configura conversor AD da porta A
T1CON=0X06; //Configura timer 1
OPTION_REG=0X80; //Desabilita pull-up internas ///0x80
PIE1=0X00; //Desabilita algumas interrupcoes
PIR1=0X00; //Desabilita algumas interrupcoes
INTCON=0X00; //Desabilita todas as interrupcoes
PORTB=0X00; //Inicia Porta B com zero
TRISd=0XFF; //Porta A como entrada
PORTD=0XFF; //Porta A como entrada
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); // CLEAR display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off




select = 0;

update_select = 1;

do {
if (Button(&PORTd, 5, 10, 0))
{counts--;
if(counts<=0)counts =0;}
if (Button(&PORTd, 6, 1, 0)) ///1000
{counts++;
if(counts>=150000)counts=150000;}
if(oldCounts!=counts)
{
showdata(counts);
oldCounts = counts;
}

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=0;
break;
} //case end
}
if(select == 0){ // Diode Tester
if(update_select){
Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,1,Message3);
Lcd_Chr(1,7,'V');
Lcd_Out(1,9,Message4);
Lcd_Chr(1,16,'A');
Lcd_Out(2,1,message5);

// Clear display
update_select=0;
}
// Read Current
adc_rd = ADC_read(1); // get ADC value from 2nd channel


tlong = (long)adc_rd * 1000; // covert adc reading to milivolts
tlong = tlong / 1023; // 0..1023 -> 0-5000mV

ch = tlong / 1000; // extract volts digit
LCD_Chr(1,11,48+ch); // write ASCII digit at 2nd row, 9th column


ch = (tlong / 100) % 10; // extract 0.1 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
LCD_Chr_CP('.');
ch = (tlong / 10) % 10; // extract 0.01 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point

ch = tlong % 10; // extract 0.001 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point


Delay_ms(333);
// Read Voltage

adc_rd = ADC_read(0); // get ADC value from 2nd channel


tlong = (long)adc_rd * 9000; // covert adc reading to milivolts
tlong = tlong / 1023; // 0..1023 -> 0-5000mV

ch = tlong / 1000; // extract volts digit
LCD_Chr(1,3,48+ch); // write ASCII digit at 2nd row, 9th column


ch = (tlong / 100) % 10; // extract 0.1 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
LCD_Chr_CP('.');
ch = (tlong / 10) % 10; // extract 0.01 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point


LCD_Chr_CP('V');

Delay_ms(333);

// 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,' ');
}

delay_ms (333);
} // End if(select == 0)
/////////////////////////
if(select == 1){ // Diode Tester
if(update_select){
Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,1,"Termometro");
Lcd_Out(2,1,"Temp.=");

// Clear display
update_select=0;
}
adc_rd = ADC_read(2); // get ADC value from 2nd channel


adc_rd = ADC_read(2); // get ADC value from 2nd channel
// print string a on LCD, 2nd row, 1st column

tlong = (long)adc_rd * 5000; // covert adc reading to milivolts
tlong = tlong / 1023; // 0..1023 -> 0-5000mV

ch = tlong / 1000; // extract volts digit
LCD_Chr(2,7,48+ch); // write ASCII digit at 2nd row, 9th column


ch = (tlong / 100) % 10; // extract 0.1 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point

ch = (tlong / 10) % 10; // extract 0.01 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
LCD_Chr_CP('.');
ch = tlong % 10; // extract 0.001 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point

Lcd_Chr(2,12,223);
Lcd_Chr(2,13,'C');

Delay_ms(333);


} // End if(select == 0)
if(select == 2){ // Diode Tester
if(update_select){
Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,1,"Conta Giro");
Lcd_Out(2,1,"Rpm=");

// Clear display
update_select=0;
}
TMR0=0; //Inicializa el registro TMR0.
Delay_1sec(); //Cuenta durante 1 segundo.
numflancos=TMR0; //numflancos=velocidad en rps.
rpm=60*numflancos; //Transformación a rpm.
rads=6.28*numflancos; //Transformación a rad/s.
IntToStr(rpm,texto1); //Transformación de rpm a texto.

Lcd_Out(2,5,texto1);

Delay_ms(1000); //Espera para la nueva medición.

} // End if(select == 2)

if(select == 3){ // Diode Tester
if(update_select){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Contador de evento");


// Clear display
update_select=0;
}
Lcd_Out(2, 1, "N°");
Lcd_Out(2, 8, txt);
Delay_ms(333);
} // End if(select == 3)

} while(1); // endless loop
}
//declr funções

Editado por Bcpetronzio
Inseris code

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Alberto,

Caramba.... haja ajuda ein ????????

Bom, vamos ao começo da encrenca :

Como já dizia Jack, o Estripador, vamos por partes ....

Escolha uma para a gente poder te ajudar ! Ou voce pensa que nós não temos nada para fazer o tempo todo ?

Começe com algo que voce pelo menos tenha uma ideia de como fazer, e a gente te orienta, ok ?

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, vamos fazer um de cada vez e como de padrão, do mais fácil para o mais complicado.

A lista seria assim (ao meu ver) um voltímetro, termometro, ohmimetro (resistor), amperimetro, contagiro, frequencimetro e capacímetro.

voce tem noção de como fazer algum desses? Como vai mostrar os valores, se vai ser em um lcd, 7 segmentos, ou vai enviar os dados para outro equipamento ou pc?

Se você é iniciante, faça um projeto de cada vez, porque vai ter erros, e se você colocar tudo junto vai ter muitos erros e vai ficar mais difícil debugar, então faça um de cada vez e teste, funcionou... passa para outro, a hora que terminar é só agrupar todo mundo.

Eu programo em Basic tb, uso o MikroBasic, acho infinitamente superior aos demais (em Basic), a única vantagem que vi no PicBasi PRO é o recebimento de dados na serial que tem uma função no biblioteca que o MikroBasic não tem, mas hj é tudo usb, então... já sabe né rsrs.

o que precisar tamos aii

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara, vamos fazer um de cada vez e como de padrão, do mais fácil para o mais complicado.

A lista seria assim (ao meu ver) um voltímetro, termometro, ohmimetro (resistor), amperimetro, contagiro, frequencimetro e capacímetro.

voce tem noção de como fazer algum desses? Como vai mostrar os valores, se vai ser em um lcd, 7 segmentos, ou vai enviar os dados para outro equipamento ou pc?

Se você é iniciante, faça um projeto de cada vez, porque vai ter erros, e se você colocar tudo junto vai ter muitos erros e vai ficar mais difícil debugar, então faça um de cada vez e teste, funcionou... passa para outro, a hora que terminar é só agrupar todo mundo.

Eu programo em Basic tb, uso o MikroBasic, acho infinitamente superior aos demais (em Basic), a única vantagem que vi no PicBasi PRO é o recebimento de dados na serial que tem uma função no biblioteca que o MikroBasic não tem, mas hj é tudo usb, então... já sabe né rsrs.

o que precisar tamos aii

pic16f684
/////////////////////////////////////////////////////////////////////////////////////////codigo abaixo/////////////
///Oscillator -> Internal RC No Clock
Watchdog Timer -> Off
Power Up Timer -> On
Master Clear Enable -> Enabled
Code Protect -> Off
Data EE Read Protect -> Off
Brown Out Detect -> BOD Enabled, SBOREN Disabled
Internal External Switch Over Mode -> Enabled
Monitor Clock Fail-Safe -> Enabled/////

// LCD module connections
sbit LCD_RS at RC4_bit;

sbit LCD_EN at RC5_bit;

sbit LCD_D4 at RC0_bit;

sbit LCD_D5 at RC1_bit;

sbit LCD_D6 at RC2_bit;

sbit LCD_D7 at RC3_bit;

sbit LCD_RS_Direction at TRISC4_bit;

sbit LCD_EN_Direction at TRISC5_bit;

sbit LCD_D4_Direction at TRISC0_bit;

sbit LCD_D5_Direction at TRISC1_bit;

sbit LCD_D6_Direction at TRISC2_bit;

sbit LCD_D7_Direction at TRISC3_bit;

// End LCD module connections
char Message1[] = "Miniteste";
char Message4[] = "by Albertoice";
char Message2[] = "Volt:";
char Message3[] = "Rpm:";
char Message5[] = "Temp";
unsigned int ADC_Value, DisplayVolt,DisplayTemp;
char texto1[7], texto2[7], numflancos=0;
int rpm, rads;
char *volt = "00.0";
char *temp = "00";
////////////////
char *freq = "00";
void Display_Freq(unsigned int freq2write) {

freq[0] = (freq2write/10)%10 + 48; // Extract tens digit
freq[1] = freq2write%10 + 48; // Extract ones digit
// Display Frequency on LCD

}

///////////
void main() {
//OSCCON=0x40; //Oscilador interno a 1MHz.
//ANSEL=0x00; //Pines AN<6:0> como E/S digital.

ANSEL = 0b00000011; // RA2/AN2 is analog input

ADCON0 = 0b00001000; // Analog channel select @ AN2

ADCON1 = 0x00; // Reference voltage is Vdd

CMCON0 = 0x07 ; // Disable comparators

TRISC = 0b00000000; // PORTC All Outputs

TRISA = 0b00001111; // PORTA All Outputs, Except RA3 and RA2

Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // CLEAR display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,4,Message1);
Lcd_Out(2,3,Message4);
delay_ms(2000); // Hold for 500 ms
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
Lcd_Out(1,1,Message2);
Lcd_Out(2,1,Message3);
//Lcd_Out(1,10,Message5);
//Lcd_Chr(1,14,'V');


do {

ADC_Value = ADC_Read(0);

DisplayVolt = ADC_Value * 2;

volt[0] = DisplayVolt/1000 + 48;

volt[1] = (DisplayVolt/100)%10 + 48;

volt[3] = (DisplayVolt/10)%10 + 48;

Lcd_Out(1,6,volt);

delay_ms(333); // Hold for 500 ms
///////////////
ADC_Value = ADC_Read(1);

DisplayTemp = ADC_Value * 49.1;

temp[0] = DisplayTemp/1000 + 48;

temp[1] = (DisplayTemp/100)%10 + 48;

//volt[3] = (DisplayVolt/10)%10 + 48;

Lcd_Out(1,13,temp);
Lcd_Chr(1,15,223);
LCD_Chr_CP('C');
delay_ms(333); // Hold for 500 ms

////////////////////////////////////////
TMR0=0; //Inicializa el registro TMR0.
Delay_1sec(); //Cuenta durante 1 segundo.
Display_Freq(TMR0);
numflancos=TMR0; //numflancos=velocidad en rps.
rpm=60*numflancos; //Transformación a rpm.
rads=6.28*numflancos; //Transformación a rad/s.
IntToStr(rpm,texto1); //Transformación de rpm a texto.
//Lcd_Out(1,1,"W[rpm]=");
Lcd_Out(2,5,texto1);
Lcd_Out(2, 13, freq);
LCD_Chr_CP('H');
LCD_Chr_CP('z');
//IntToStr(rads,texto2); //Tramsformación de rads a texto.
//Lcd_Out(2,1,"W[rad/s]=");
//Lcd_Out(2,10,texto2);
//TMR0=0;
//Delay_ms(1000); //Espera para la nueva medición.

//Delay_ms(1000); // Delay 1 Sec
//Display_Freq(TMR0);
/// LCD_Chr_CP('H');
///LCD_Chr_CP('z');
} while(1);
} // End main()

post-755850-13884962616516_thumb.png

Editado por Bcpetronzio

Compartilhar este post


Link para o post
Compartilhar em outros sites
cara, vamos fazer um de cada vez e como de padrão, do mais fácil para o mais complicado.

A lista seria assim (ao meu ver) um voltímetro, termometro, ohmimetro (resistor), amperimetro, contagiro, frequencimetro e capacímetro.

voce tem noção de como fazer algum desses? Como vai mostrar os valores, se vai ser em um lcd, 7 segmentos, ou vai enviar os dados para outro equipamento ou pc?

Se você é iniciante, faça um projeto de cada vez, porque vai ter erros, e se você colocar tudo junto vai ter muitos erros e vai ficar mais difícil debugar, então faça um de cada vez e teste, funcionou... Passa para outro, a hora que terminar é só agrupar todo mundo.

Eu programo em basic tb, uso o mikrobasic, acho infinitamente superior aos demais (em basic), a única vantagem que vi no picbasi pro é o recebimento de dados na serial que tem uma função no biblioteca que o mikrobasic não tem, mas hj é tudo usb, então... Já sabe né rsrs.

O que precisar tamos aii

abaixo estÁ uma versao pequena quero que voce analise e me responadao como inclemantar mais menus, entenderao, esta ja esta funcionado visitem meu site la tem variedade de projeto valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola,

preciso fazer no proteus e no mikroc um projeto semelhante, você poderá me ajudar???

consiste em um contagiro/aceleromero:

-pic18f452

-usando um motor

-Fazer com um sensor magnético

Obrigada!

pic16f684

/////////////////////////////////////////////////////////////////////////////////////////codigo abaixo/////////////

///Oscillator -> Internal RC No Clock

Watchdog Timer -> Off

Power Up Timer -> On

Master Clear Enable -> Enabled

Code Protect -> Off

Data EE Read Protect -> Off

Brown Out Detect -> BOD Enabled, SBOREN Disabled

Internal External Switch Over Mode -> Enabled

Monitor Clock Fail-Safe -> Enabled/////

// LCD module connections

sbit LCD_RS at RC4_bit;

sbit LCD_EN at RC5_bit;

sbit LCD_D4 at RC0_bit;

sbit LCD_D5 at RC1_bit;

sbit LCD_D6 at RC2_bit;

sbit LCD_D7 at RC3_bit;

sbit LCD_RS_Direction at TRISC4_bit;

sbit LCD_EN_Direction at TRISC5_bit;

sbit LCD_D4_Direction at TRISC0_bit;

sbit LCD_D5_Direction at TRISC1_bit;

sbit LCD_D6_Direction at TRISC2_bit;

sbit LCD_D7_Direction at TRISC3_bit;

// End LCD module connections

char Message1[] = "Miniteste";

char Message4[] = "by Albertoice";

char Message2[] = "Volt:";

char Message3[] = "Rpm:";

char Message5[] = "Temp";

unsigned int ADC_Value, DisplayVolt,DisplayTemp;

char texto1[7], texto2[7], numflancos=0;

int rpm, rads;

char *volt = "00.0";

char *temp = "00";

////////////////

char *freq = "00";

void Display_Freq(unsigned int freq2write) {

freq[0] = (freq2write/10)%10 + 48; // Extract tens digit

freq[1] = freq2write%10 + 48; // Extract ones digit

// Display Frequency on LCD

}

///////////

void main() {

//OSCCON=0x40; //Oscilador interno a 1MHz.

//ANSEL=0x00; //Pines AN<6:0> como E/S digital.

ANSEL = 0b00000011; // RA2/AN2 is analog input

ADCON0 = 0b00001000; // Analog channel select @ AN2

ADCON1 = 0x00; // Reference voltage is Vdd

CMCON0 = 0x07 ; // Disable comparators

TRISC = 0b00000000; // PORTC All Outputs

TRISA = 0b00001111; // PORTA All Outputs, Except RA3 and RA2

Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // CLEAR display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

Lcd_Out(1,4,Message1);

Lcd_Out(2,3,Message4);

delay_ms(2000); // Hold for 500 ms

Lcd_Cmd(_LCD_CLEAR); // CLEAR display

Lcd_Out(1,1,Message2);

Lcd_Out(2,1,Message3);

//Lcd_Out(1,10,Message5);

//Lcd_Chr(1,14,'V');

do {

ADC_Value = ADC_Read(0);

DisplayVolt = ADC_Value * 2;

volt[0] = DisplayVolt/1000 + 48;

volt[1] = (DisplayVolt/100)%10 + 48;

volt[3] = (DisplayVolt/10)%10 + 48;

Lcd_Out(1,6,volt);

delay_ms(333); // Hold for 500 ms

///////////////

ADC_Value = ADC_Read(1);

DisplayTemp = ADC_Value * 49.1;

temp[0] = DisplayTemp/1000 + 48;

temp[1] = (DisplayTemp/100)%10 + 48;

//volt[3] = (DisplayVolt/10)%10 + 48;

Lcd_Out(1,13,temp);

Lcd_Chr(1,15,223);

LCD_Chr_CP('C');

delay_ms(333); // Hold for 500 ms

////////////////////////////////////////

TMR0=0; //Inicializa el registro TMR0.

Delay_1sec(); //Cuenta durante 1 segundo.

Display_Freq(TMR0);

numflancos=TMR0; //numflancos=velocidad en rps.

rpm=60*numflancos; //Transformación a rpm.

rads=6.28*numflancos; //Transformación a rad/s.

IntToStr(rpm,texto1); //Transformación de rpm a texto.

//Lcd_Out(1,1,"W[rpm]=");

Lcd_Out(2,5,texto1);

Lcd_Out(2, 13, freq);

LCD_Chr_CP('H');

LCD_Chr_CP('z');

//IntToStr(rads,texto2); //Tramsformación de rads a texto.

//Lcd_Out(2,1,"W[rad/s]=");

//Lcd_Out(2,10,texto2);

//TMR0=0;

//Delay_ms(1000); //Espera para la nueva medición.

//Delay_ms(1000); // Delay 1 Sec

//Display_Freq(TMR0);

/// LCD_Chr_CP('H');

///LCD_Chr_CP('z');

} while(1);

} // End main()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×