Ir ao conteúdo
  • Cadastre-se

EJO

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

0
  1. Fiz um programa para comunicar com um dispositivo via porta serial. Preciso que chegue até este equipamento a mensagem conforme imagem anexa (parte destacada em vermelho). Acontece que o SerialPort.Write (visual studio 2015 - C#) só envia mensagens contendo caracteres e já tentei diversas formas e não consigo enviar a mensagem. Conto com apoio de vocês.
  2. Fiz um programa simples para aquisição de corrente CA (RMS) usando o conversor AD do PIC16F876A (com um circuito adequado). Acontece que quando faço poucas amostras o valor oscila muito. Estou pensando em fazer uma média das amostras da seguinte forma: Continuadamente pego o valor lido e divido por uma constante. Um vetor por exemplo de 20 posições. No início vou tem um erro até estabilizar as medidas. Vou gravando os valores e fazendo a média. Quando completar os vinte valores volta a gravar na primeira posição e assim sucessivamente (sobrescrevendo). Segue o trecho do código onde pretendo implementar esta lógica. void corrente() { int i, i_aux; float i_med; i_rms; char txt[4]; for (i=0;i<20;i++) //20 = nº de amostras { i_aux = read_adc(0); i_aux = i_aux – 511; //normaliza leitura (offset) i_med = i_med + pow(i_aux,2); } i_med = i_med/20; i_rms = sqrt(i_med); **Neste ponto gostaria de implementar o código onde seria feita as médias das leituras. Já fiz com um “for” dentro do outro e deu certo mas não é o que preciso... } Desde já agradeço. Elcio.
  3. LM35_PWM_FAN.PDF Salvei o esquema do proteus em PDF. Não sei se dá para colocar aqui o arquivo .DSN. Verifiquei que o código que estou testando é o citado acima.
  4. Senhores, vamos com calma... Não penso que ficou ruim o meu primeiro questionamento (Felipe_Eletronic), apenas iniciei uma discussão que é o objetivo do fórum. Com indagações e respostas chegar a conclusão do problema citado/proposto. Também não estou cobrando nada de ninguém (LuizGBarrio), apenas fiz o comentário pois tenho interesse em resolver meu problema e como disse vi essa possibilidade aqui no fórum em função de outras pesquisas que fiz. Enfim, vamos com calma... Como solicitado para darmos prosseguimento segue o código que estou trabalhando e simulando no proteus para depois montar na prática. Estou no serviço e não tenho o esquema do proteus nem o código com as últimas alterações mas não está muito diferente deste aqui não: void pre_main(); void test_led_fan(); void read_lm35(); void led_control(); void pwm(); // Conexões LCD 2x16 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; // Final Conexões LCD 2x16 //Declaração de variáveis globais unsigned int temp; void main() { //função iniciação pre_main(); //função teste led e fan test_led_fan(); while(1) { //leitura LM35 read_lm35(); //controla led's perante temperatura led_control(); //Velocidade fan pwm(); } } void pre_main() { //Declaração de info das portas adcon1 = 0b00000100; trisa = 0XFF; // portA entrada (trisa = 1) trisb = 0; // portB saída (trisb = 0x00) trisc = 0; // portC saída trisd = 0; // portD saída PORTD = 0; // portC nível lógico 0 //Iniciar PWM PWM1_Init(1500); //PWM Start pwm1_start(); PWM1_set_Duty(0); //Iniciar adc adc_init(); //Iniciar Lcd Lcd_Init(); //Iniciar Uart1 UART1_Init(9600); Lcd_Cmd(_Lcd_CLEAR); Lcd_Cmd(_Lcd_CURSOR_OFF); } void test_led_fan() { int j=0; Lcd_Out(1, 1, "Aguarde: Teste"); Lcd_Out(2, 2, "Led's e Fan"); UART1_Write_text("Aguarde: TESTE\r"); UART1_Write_text("Led's e Fan\r"); do{ portd.f0=1; //verde portd.f1=1; //amarelo portd.f2=1; //2x vermelho delay_ms(200); portd.f0=0; portd.f1=0; portd.f2=0; delay_ms(200); j++; pwm1_set_duty(255); delay_ms(200); pwm1_set_duty(0); } while(j!=2); Lcd_Cmd(_Lcd_CLEAR); Lcd_Out(1, 1, "Aguarde"); Lcd_Out(2, 2, "Led's e Fan OK"); UART1_Write_text("Led's e Fan OK\r"); delay_ms(200); Lcd_Cmd(_Lcd_CLEAR); } void read_lm35() { char txt[15]; const unsigned short VREF = 5; unsigned int adc_rd = 0; adc_rd = ADC_Get_Sample(0); temp = (adc_rd * VREF)/(1000*240); //temp = ((unsigned long)adc_rd * VREF * 100)/1024; floatToStr(temp, txt); //com intToStr não funciona txt[4] =0; // UART1_Write_text(txt); UART1_Write_text("\r"); Lcd_Out(1, 1, "Temp || Potencia"); Lcd_Chr(2, 5, 223); Lcd_Chr(2,6,'C'); Lcd_Out(2, 1, txt); delay_ms(10); } void led_control() { //indicação dos led's perante temperatura if (temp <50) { portd.f0=1; portd.f1=0; } else if (temp >51 && temp <69) { portd.f0=1; portd.f1=1; portd.f2=0; } else if (temp >70) { portd.f0=1; portd.f1=1; portd.f2=1; } } void pwm() { int i=0; if(temp > 70) i=255; else { i=temp*3; } PWM1_set_Duty(i); }
  5. Pensei encontrar apoio mais rápido...continuo no aguardo...
  6. Sou novo por aqui e resolvi registrar pois sempre encontro ajuda em minhas pesquisas na net. Estou pretendendo fazer o controle de velocidade de uma ventoinha através da leitura de um sensor de temperatura (LM35). Alem do controle pretendo acionar alguns ledes conforme o valor da temperatura e também mostrar em um display o valor da temperatura e do duty cicle - PWM. Achei na internet um programa destes que pretendo adaptar e fazer o meu, porém fazendo alguns testes utilizando o mikroc e proteus ainda não deu certo. Embora o programa compile sem algum erro quando simulo no proteus não funciona nada. O programa é mais ou menos assim: Conexões do lcd... declaração de variáveis... void main () { informação das portas... rotina1 (); rotina2 (); laço infinito { rotina3 (); rotina4 (); }} void rotina1 () { programa da rotina1... } void rotina2 () { programa da rotina1.... } demais rotinas.... Tudo ok. Compila tudo certinho mas não funciona no proteus. Uso o mikroc 5.61 Se alguém puder ajudar.

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!