Ir ao conteúdo
  • Cadastre-se

Programa para leitura de termopar tipo k através do Pic18f1320


Posts recomendados

Galera, tudo beleza??? :D

Sou novo na parte de programação, ai tava precisando de ajuda. Faço engenharia mecânica e estou fazendo um projeto para leitura de 3 termopares que ficarão em cantos distintos de um motor afim de medir a variação de temperatura em função da eficiência do motor.

Eu pretendo usar o Pic18f1320 que contem 18 pinos. Pretendo usar 14 nos quais sao 3 para os termopares, queria colocar um display em um dos termopares que sao 7 pinos, o oscilador de cristal 2, o AD595 que no caso será um para cada termopar totalizando 3 pinos e 2 da alimentação que da no total 14 pinos. 

 

Estou apanhando no MPLAB pra fazer o programa e levando uns tapas do ISIS do Proteus quando tento fazer o circuito.

 

Nao sei quase nada de programação(só sei mexer no matlab mas nao ajuda muito em C)

 

Agradeço muito ^^


kkkkk esqueci de dizer o que eu queria

 

Se estou no caminho certo mesmo. E se é muito trabalho para um iniciante pois meu orientador ainda quer q eu envie os dados via radio do pic diretamente pra o computador. 

 

valeu

Link para o comentário
Compartilhar em outros sites

@Carlos Filho_448131,

 

Bom, primeiro de tudo, começe com um esquema do que voce está fazendo, pode ser no ISIS mesmo, fica mais fácil alguém te ajudar.

 

Acho que voce vai ter de aprender mais de C, a turma pode te ajudar nas suas dúvidas, mas é você que vai ter de fazer o programa.... pois é para voce aprender, não é ?

 

Primeiro, os termopares.... tem vários circuitos, mas profissionalmente se usa uma junção fria , verifique bem estes circuitos, e pense como voce vai usar os conversores A/D do Pic, o fundo de escala, a referência, etc.....

 

Quanto à transmissão de dados, se vai usar um computador, melhor usar um par de transceptores seriais... fica muito mais simpls de fazer a interface com o Windows.

 

Mas voce vai precisar usar algo do lado do micro, tipo um Visual Studio para fazer o programa.... ou seja, tem bem mais coisa para voce aprender ! 

 

Mas lembre do que eu falei aqui, voce vai pecisar aprender bem a programação em C, existem livros, tutoriais, assim voce poderá fazer o corpo do programa inteiro, e onde você tiver dificuldades, as respostas irão aparecer, ok ?

 

E seja bem vindo !

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olha eu!!
Seguinte consegui fazer um programa com base em alguns que vi na net no CCS C. Daí ficou assim:
#include <18F2550.h>#DEVICE ADC = 10#FUSES NOWDT                    #FUSES NOUSBDIV                 #FUSES HS                       #FUSES PUT                      #FUSES NOBROWNOUT               #FUSES MCLR#FUSES NOLVP                    #use delay(clock=8000000)#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)// PINOS LCD#define LCD_DB4   PIN_B0#define LCD_DB5   PIN_B1#define LCD_DB6   PIN_B2#define LCD_DB7   PIN_B3#define LCD_E     PIN_C0#define LCD_RS    PIN_C1#include <flex_lcd.c>#include <math.h>float reading;float temperature, fahrenheitTemp;void main(){   setup_adc(ADC_CLOCK_INTERNAL);    setup_adc_ports(AN0);          lcd_init();                      // INICIAR LCD   lcd_putc("\f");                  // LIMPAR LCD   delay_ms(500);   while(true)   {                           set_adc_channel(1);   // CANAL SELECIONADO         reading = read_adc();            delay_ms(1000);             temperature = (((reading*0.0048828125f))*100);  // Transformação dos dados para Celsius (Calibração!!)         fahrenheitTemp = (temperature*1.8) + 32;     // Para Fahrenheit         printf(lcd_putc,"\n%3.2f%CC, %3.2fF",temperature,0xdf, fahrenheitTemp);              }}

Nesse ai to pegando os dados do segundo termopar no Pino A1

 

Ai (não sei se tem, mas nao achei na net) queria saber se tem algum jeito de gravar os dados dos 3 termopares e salvar (pelo que eu vi acho que pode salvar os dados no proprio pic e depois retirar) para depois fazer  grafico dos 3. To mais acostumado com Matlab e lá tem :P
 
Se liga como ficou a interface 
www.imageshack.com/i/nm82hcj
Link para o comentário
Compartilhar em outros sites

@Carlos Filho_448131,

 

Gostei do "com base" ... tipo 99% de base né kkkkk !

 

Eis o projeto original :

 

http://stephenawotula.blogspot.com.br/

 

Mas não se esqueça desta frase do autor : Please, note that this is for educational purposes ONLY.

 

Deve ter um motivo, qual será ? Isso é para voce pensar !

 

 

Nada te impede de ler cada uma das entradas analógicas, fazer a conversão, e guardar em três variáveis, e ao final voce envia as três em sequência...

 

Paulo

Link para o comentário
Compartilhar em outros sites

kkkkkkk de fato. Isso é pra fazer um equipamento pra eu poder usar no meu tcc. O que vou usar só são os dados que vou obter. Só vou fazer porque pra pegar um emprestado nessa gota de universidade é uma burocracia da gota na qual eu nao tenho tempo (mas tambem desejo aprender e entender se possivel) :/

. O que deu trabalho foi no ISIS pra ver se daria certo, ai fui testando um por um. estou aqui tentando aprender o WRITE_EEPROM e o READ_EEPROM mas não entendo os endereços. Pensei que endereço era PIN_A1

Link para o comentário
Compartilhar em outros sites

olha eu!

O que ta errado nessa gota??

To tentando fazer com que os termopares apareçam no lcd a manhã toda e nada

     set_adc_channel(0);   // CANAL SELECIONADO         reading = read_adc();            delay_ms(250);             temperature0 = (((reading*0.0048828125f))*100);  // Transformação dos dados para Celsius (Calibração!!)                                      set_adc_channel(1);   // CANAL SELECIONADO         reading = read_adc();            delay_ms(250);             temperature1 = (((reading*0.0048828125f))*100);  // Transformação dos dados para Celsius (Calibração!!)                                     set_adc_channel(2);   // CANAL SELECIONADO         reading = read_adc();            delay_ms(250);             temperature2 = (((reading*0.0048828125f))*100);  // Transformação dos dados para Celsius (Calibração!!)                  while(1){         lcd_gotoxy (1, 1);         printf(lcd_putc,"\n%3.2f%C,%3.2f",temperature0,0xdf,temperature1);                  lcd_gotoxy (1, 2); // Posiciona cursor no LCD         printf(lcd_putc,"\n%3.2f%C",temperature2); 

e ainda ta dando erro de ADC nas entradas


Consegui ^^

  while(true){         lcd_gotoxy (1, 1);         printf(lcd_putc,"1:%3.2f%C,2:%3.2f%c",temperature0,0xdf,temperature1, 0b11011111);                  lcd_gotoxy (1, 2); // Posiciona cursor no LCD         printf(lcd_putc,"3:%2.1f%cC",temperature2, 0b11011111);          }

Só que ainda ta dando erro. O unico PIC disponivel é o PIC16F877. To lendo o datasheet pra ver se ajuda

Link para o comentário
Compartilhar em outros sites

Deu em nada a troca :/. Ta do mesmo jeito

agora o bicho pegou.

O erro era que eu nao tinha configurado as portas como analogicas. Ficou assim:

#include <16F877.h>#DEVICE ADC = 10#FUSES NOWDT                    #FUSES HS                       #FUSES PUT                      #FUSES NOBROWNOUT               #FUSES NOLVP                        #use delay(clock=8000000)#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)// PINOS LCD#define LCD_DB4   PIN_B0#define LCD_DB5   PIN_B1#define LCD_DB6   PIN_B2#define LCD_DB7   PIN_B3#define LCD_E     PIN_C0#define LCD_RS    PIN_C1#include <flex_lcd.c>#include <analo.h>float reading;float temperature0,temperature1,temperature2 ;void main(){   setup_adc(ADC_CLOCK_INTERNAL);    setup_adc_ports(AN0_AN1_AN2_AN3_AN4);   setup_adc(ADC_CLOCK_INTERNAL);   setup_psp(PSP_DISABLED);   setup_spi(SPI_SS_DISABLED);   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);   setup_timer_1(T1_DISABLED);   setup_timer_2(T2_DISABLED,0,1);        lcd_init();                      // INICIAR LCD   lcd_putc("\f");                  // LIMPAR LCD   printf ("TempPictronics\r");    delay_ms(500);      while(true)   {                           set_adc_channel(0);   // CANAL SELECIONADO         reading = read_adc();            delay_us(20);             temperature0 = (((reading*0.0048828125f))*100);  // Transformação dos dados para Celsius (Calibração!!)                                      set_adc_channel(1);   // CANAL SELECIONADO         reading = read_adc();            delay_us(20);             temperature1 = (((reading*0.0048828125f))*100);  // Transformação dos dados para Celsius (Calibração!!)                                     set_adc_channel(2);   // CANAL SELECIONADO         reading = read_adc();            delay_us(20);         temperature2 = (((reading*0.0048828125f))*100);  // Transformação dos dados para Celsius (Calibração!!)                  while(true){         lcd_gotoxy (1, 1);         printf(lcd_putc,"T1:%2.1f%cC,T2:%2.1f%cC",temperature0,0xdf,temperature1, 0b11011111);                  lcd_gotoxy (1, 2); // Posiciona cursor no LCD         printf(lcd_putc,"T3:%2.1f%cC",temperature2, 0b11011111);                   printf("%2.1f\r",temperature0);         }   }

Mas agora tá dando erro Error 23 no arquivo 16f877.h "Can not set this option this far into the code" e é em

#device PIC16F877 que aparece. Dando o mesmo erro no arquivo analo.h

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...