Ir ao conteúdo

MatheusLPS

Membro Pleno
  • Posts

    2.891
  • Cadastrado em

  • Última visita

Tudo que MatheusLPS postou

  1. Lá na 1ª página, no post nº 2 tem tem um link para download com os arquivos necessaários. Inclusive o driver. Essa parte: fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless,"Felipe "); // Vou enviar isso ao recptor e ele vai procurar por Felipe como sendo a senha, se for correta, manda os dados Está no lugar errado. você deve colocar aqui: if (param1 == 0) { fputc('P',Wireless); //Parâmetro Para delay_ms(20); } Aí logo depois do Felipe, você manda o P. O código do receptor deverá ser modificado de acordo! Falou
  2. Além disso que você disse, que eu ligo e desligo o transmissor envio também isso: fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless,"Dave "); // Vou enviar isso ao recptor e ele vai procurar por Dave como sendo a senha, se for correta, manda os dados Essa primeira parte aí é um lixo que você envia para o receptor "captar a presença" do transmissor e focar nele. Depois envio uma senha para verificar que os dados q estão chegando são verdadeiros. você quando terminar de enviar os dados deve deligar o transmissor, ou então ele vai ficar interferindo n receptor e o mesmo fica doido. Demorei p descobrir isso! Só funcionou comigo depois disso! Falou
  3. Teste com outro LM35. Mas essa posição que você disse depende de como você olha p ele. O LM35 tem um dos lados achatados. você olhando para esse lado, o Vdd é o pino 1. o Vout é o do meio e o Vss é o pino 3. Assim: Se você inverteu e demorou p desligar, ele queimou... Falou
  4. você fez quase correto mesmo. Deixe do jeito que está que ele gera o VID e o PID automático. Para cristal de 8Mhz utilize PLL2. Não retire nenhum fuse! No meu projeto utilizei extamente como você está afzedno no transmissor que tinha USB também. No entanto, só funcionou dessa forma utilziando cabo no TX e no RX. Com RF não! Para o RF funcionar, você deve utilizar o código de exemplo que postei. você q você não está usando. Falou
  5. Se o LM35 esquenta sozinho é porq você ligou ele ao contrário. Ele não pode esquentar por conta própria. Falou
  6. Uai.. eu quero enviar os dados a cada 5 segundos. Então, dessa form, nada melho que o timer para calcular o tempo pra mim né? ERRORS, STREAM=Wireless é o nome "padrão" de toda conunicação serial. Sendo o errors obrigatório e o wireless o nome da conexão. Dessa forma posso ter mais uma conexão em um mesmo PIC. Apenas devo colocar nomes diferentes. Falou
  7. Para o pessoal nao ficar perdido, postarei o código do transmissor e explicarei: Código transmissor: //Código de exemplo para transmissão de temperatura por RF //Feito por MatheusLPS - matheuslps@yahoo.com.br #include <18f4550.h> #define WireTX PIN_C6 #define WireRX PIN_C7 #FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT #use delay (clock = 12000000) #use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless) int8 i, flag=0; int16 q; int8 envio[7]={1,2,3,4,5,6,0x00}; #int_TIMER1 //Interrupção do Timer1 void temp1s(void) //Funcão. O que deverá ser feiro a cada interrupão. { q++; //Variável q incrementada a cada estouro do Timer1 if (q == 30) { flag=1; q=0; } set_timer1 (3036); //Preload do Timer1 } void main() { setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configuração do Timer1 para clock interno = 1E6 dividido por 8 set_timer1 (3036); //Preload do Timer1 enable_interrupts(INT_TIMER1); //Habilita interrupção timer1 enable_interrupts(global); //habilita interrupcão global while(1) { if(flag == 1) //Só enviar quando o botão for precionado. { output_high (PIN_C2); //Ligo o transmissor (IMPORTANTE) delay_ms (50); fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless,"Dave "); // Vou enviar isso ao recptor e ele vai procurar por Dave como sendo a senha, se for correta, manda os dados for (i=0;i<8;i++) { fprintf(Wireless,"%d",envio[i]); } output_low (PIN_C2); //Desligo o tnsmissor (MAIS IMPORTANTE AINDA) flag = 0; } } } Explicação: #include <18f4550.h> #define WireTX PIN_C6 #define WireRX PIN_C7 #FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT #use delay (clock = 12000000) #use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless) Bem, começamos dizendo qual PIC estamos utilizando, definindo uma variável para os pinos C6 e C7 . Sendo os mesmos, os pinos de comunicação serial. Dessa forma essa comunicação não é por software, é por hardware! int8 i, flag=0; int16 q; int8 envio[7]={1,2,3,4,5,6,0x00}; #int_TIMER1 //Interrupção do Timer1 void temp1s(void) //Funcão. O que deverá ser feiro a cada interrupão. { q++; //Variável q incrementada a cada estouro do Timer1 if (q == 30) { flag=1; q=0; } set_timer1 (3036); //Preload do Timer1 } Nessa parte, crio umas variáveis e logo em seguida cria uma interrupção de tempo com o TIMER1. Como estou utilizando um cristal de 12Mhz, essa interrupção está gerando um tempo de 5 segundos. Ou seja, minha variável chamada flag recebe o vaor 1 a cada 5 segundos. void main() { setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configuração do Timer1 para clock interno = 1E6 dividido por 8 set_timer1 (3036); //Preload do Timer1 enable_interrupts(INT_TIMER1); //Habilita interrupção timer1 enable_interrupts(global); //habilita interrupcão global Configurações básicas do TIMER1. Apenas isso na rotina principal. while(1) { if(flag == 1) //Só enviar quando o botão for precionado. { output_high (PIN_C2); //Ligo o transmissor (IMPORTANTE) delay_ms (50); fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless,"Dave "); // Vou enviar isso ao recptor e ele vai procurar por Dave como sendo a senha, se for correta, manda os dados for (i=0;i<8;i++) { fprintf(Wireless,"%d",envio[i]); } output_low (PIN_C2); //Desligo o tnsmissor (MAIS IMPORTANTE AINDA) flag = 0; } } } Bem, funciona assim: Meu códifo começa com a variável flag em 0, ou seja, o que está dentro do loop nao será executado. Passados os 5 segundos, a flag recebe 1 e deixa o loop fluir. Dentro do loop tenho um comando para colocar o PINO C2 em nível alto. Isso serve para ligar meu transmissor. Logo em seguida, espero um pouquinho com o delay. Logo em seguida vem vários printf's que servem para enviarem dados "lixo" para o receptor. Isso fará com que o receptor foque no transmissor. Em seguida, mandamos nossa senha, nesse caso a senha é "Dave ". É interessante enviar sempre uma senha ou antes de enviar os dados para certificar que estamos enviando dados corretos e nao lixo. Logo depois da senha, enviamos os dados que queremos. Nesse exemplo, enviamos a variável envio que é um vetor que foi declarado lá no início com dígitos aleatórios. Logo depois disso desligamos o trasnsmissor. Muito importante. E em seguida colocamos a falag em 0 novamente e o ciclo recomeça. Bem, é isso! O reeptor é bem mais chatinho! hauhauhaahua Falou
  8. Bem, o código para USB está na 1ª página. Sobre o RF, p código é meio chato. Não funciona se você simplesmente escrever na serial. Um exemplo funcional de um link RF você escontra aqui: Link RF de exemplo Ai depende de você "juntar" os dois. Acredito que irá funcionar sem problemas. Falou
  9. Minhas temperaturas. Comentem! Over de 4.114Ghz só p estabilizar mais pois 4.2 tava dando zebra vez ou outra. Idle: 1 hora e meia de Prime 95: Tá legal né. Comprei um CPU cooler melhor: Comprei um Thermaltake Frío! Ele simplesmente esmagou o desempenho do meu antigo Thermaltake V1 AX! No mais, uma fotos: Falou
  10. Boa colega chacalgbi!!! Fico muito feliz que tenha dado certo aí. É que o código que postei é bem genérico. Ele não só atraca um relé como pode ser enviado dados como temperatura, strings e tal. Falou
  11. Modifiquei e funcinou na simulação. Espero que funcione na prática também. Veja se declarei os pinos corretamnte: Cristal interno de 4Mhz. Botão do transmissor no PINO B5. Alimentação do Transmissor no PINO B0. Pino TX do transmissor é o padrão, PINO B2. No receptor: Pino RX padrão, PINO B1. Pino para piscar um led, PINO B0. SS da simulação: .hex: http://www.4shared.com/file/Mws58seL/Codigos.html Espero que funcione. Todos para 16F628A. SE não der certo, vou fazer para o 2550. Falou
  12. Vou tentar retirar umas variáveis.... Mas não garanto que vá funcionar com essa simplificação. DEixa eu fazer aqui. Falou
  13. Compilo sim. Mas o código que tenho não cabe no 16F628A. Para o receptor, você teria outro pic com mais ram? Falou
  14. Antena tanto no emissor quando no receptor viu, esqueci de comentar. Nos meus testes, se não me fallha a memória, até uns 5m o receptor nao precisa de antena, mas o transmissor precisa sim. Falou
  15. Esse seu código é para o CCS? Está tão parecido e ao mesmo tempo muito diferentes. Seguinte, experimenta ligar tanto o transmissor e o recptor sem resistor algum no PIC. OUtra coisa de suma importancia.: Vejo que você liga o pino B2 no transmissor: PORTA.B2 = 1; // Liga Transmisso Experimenta colocar um delay pequeno logo depois desse comando. Uma outra coisa que não vi nas suas imagens são as ANTENAS. Quando fiz o meu, sem antena ele não funciona de jeito nenhum. Pega um fio de cobre comum meio rígido e descasca ele, uns 15~20cm é suficiente. Testa aí. Falou
  16. Segue os esquemas: Meu recptor é esse: Ligo ele parecido com isso, sem esse CI aí debaixo. Apenas ele e o PIC. Nesse caso, pino 2, digital.: Meu transmissor é igual a esse: Ligo ele assim, mais uma vez, sem o CI debaixo, apenas ele e o PIC. A Alimentação é VCC mas coloco em um pino qualquer do PIC para poder ligar e desligar. Falou
  17. Exatamente. Uso a RS232 como comunicação serial. O pino de DATA do transmissor vai no pino TX do PIC e o de alimentação do transmisssor vai no pino C2. O grande lance que descobri é q você envia os dados e logo em seguida você desliga o transmissor. Pode colocar um botao p teste. Aperta um botao ele envia... e pisca um led do outro lado. Falou
  18. Uso o CCS pois comecei a estudar ele. Aí com o tempo aprendi mais sobre ele que sobre os outros. Ta aí: Transmissor: //Código de exemplo para transmissão de IDs por RF //Feito por MatheusLPS - matheuslps@yahoo.com.br #include <18f4550.h> #include <STRING.H> #include <STDIO.H> #include <STDLIB.H> #define WireTX PIN_C6 #define WireRX PIN_C7 #FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT #use delay (clock = 12000000) #use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless) int8 i; void main() { while(1) { if(!input(PIN_D2)) //Só enviar quando o botão for precionado. { output_high (PIN_C2); //Ligo o transmissor (IMPORTANTE) delay_ms (50); fprintf(Wireless, "%c", 0xBA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xBE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xFA); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless, "%c", 0xCE); // LAM - algo para que o RX's USART "lock onto", algo do tipo, olhe receptor, estoua qui fprintf(Wireless,"Dave "); // Vou enviar isso ao recptor e ele vai procurar por Dave como sendo a senha, se for correta, ele interpreta a variável temp_1 output_low (PIN_C2); //Desligo o tnsmissor (MAIS IMPORTANTE AINDA) output_high (PIN_D1); //Ligo um LED para ver que voi enviado os dados delay_ms(1000); output_low (PIN_D1); //desligo o led delay_ms(1000); } } } Receptor: #include <18f4550.h> #define WireTX PIN_C6 #define WireRX PIN_C7 #FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT #use delay(clock = 12000000) #use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=Wireless) #define RX_BUFFER_SIZE 80 #define TX_BUFFER_SIZE 80 int8 x; int8 temperatura[7]; float temp; int8 rx_wr_index = 0, tx_rd_index = 0, tx_wr_index = 0, tx_counter = 0, received = 0; int8 lock_state = 0, rxd, i, valid_data_count; unsigned int8 rx_buffer[RX_BUFFER_SIZE + 1], tx_buffer[TX_BUFFER_SIZE + 1]; int1 data_avail = FALSE, got_id = FALSE; #int_RDA void RDA_isr(void) { rx_buffer[rx_wr_index] = getc(); rxd = rx_buffer[rx_wr_index]; rx_wr_index++; if (rx_wr_index > RX_BUFFER_SIZE) { rx_wr_index = 0; } // now look for unique ID: "Dave " if (rxd == 'D' && lock_state == 0) { lock_state++; } else if (rxd == 'a' && lock_state == 1) { lock_state++; } else if (rxd == 'v' && lock_state == 2) { lock_state++; } else if (rxd == 'e' && lock_state == 3) { lock_state++; } else if (rxd == ' ' && lock_state == 4) { // got the entire string "Dave ", in that order lock_state = 0; // reset our "combination lock" got_id = TRUE; valid_data_count = 0xff; // get ready to count the number of data bytes - we know we have to expect 5 (Rocks) // also going to reset the buffer write index back to 0, so that I know where my valid data will be rx_wr_index = 0; } else { // we didn't receive "Dave ", so reset the lock back to the beginning lock_state = 0; } if (got_id && ++valid_data_count == 7) { data_avail = TRUE; got_id = FALSE; } } #int_TBE void TBE_isr(void) { if (tx_counter != 0) { putc(tx_buffer[tx_rd_index]); if (++tx_rd_index > TX_BUFFER_SIZE) { tx_rd_index = 0; } tx_counter--; if (tx_counter == 0) { disable_interrupts(INT_TBE); } } } void bputc(int c) { int restart = 0; while (tx_counter > (TX_BUFFER_SIZE - 1)); if (tx_counter == 0) { restart = 1; } tx_buffer[tx_wr_index++] = c; if (tx_wr_index > TX_BUFFER_SIZE) { tx_wr_index = 0; } tx_counter++; if (restart == 1) { enable_interrupts(INT_TBE); } } void main() { enable_interrupts(INT_RDA); enable_interrupts(global); while (TRUE) { restart_wdt(); if (data_avail) { data_avail = FALSE; output_high (PIN_c2); delay_ms (1000); output_low (PIN_C2); } } } NO transmissor, a alimentação do módulo vai no PIC, no pino C2. Falou
  19. Tenho um código pronto e funcionando para o CCS. Serve? Falou
  20. Meu vídeo. Mas não tem temperatura pois quando fiz não botei. Falou
  21. Eu tenho um vídeo aqui do meu projeto. Depois posto aqui. Falou
  22. A foto não está clara. Mas repare q esse capacitor tem UMA LISTRA BRANCA na lateral. Assim: A perna do capacitor q tem essa listra branca vai no -(ground). A perna que NÃO tem listra branca vai no +(+5V). Falou
  23. Isso mesmo, sendo que a faixa branca do diodo fica orientada para o PINO e a outra perna do diodo vai no +5V. Certo, nesse caso, você faz os ajustes pelo PIC e envia para o RTC. O pic nesse caso serve para acessar o RTC pegando os valores do tempo e colocando no LCD. A vantagem de usar o RTC é que se a alimentação do PIC for cortada, você nao precisa configurar o relógio........ Tenho um código e circuito pronto aqui..... Falou
  24. Obrigado colega pit.du, você está correto! Mude o que foi dito acima! Falou
  25. Para usar os numeros antes do .(ponto) mude a seguinte linha: printf(lcd_putc,"\fFreq = %fHz\nDuty = %2.2f%%", freq,d); Para: printf(lcd_putc,"\fFreq = %3.0fHz\nDuty = %3.0f%%", freq,d); Para mudar o clock, mude essa linha: #use delay(clock=12000000) //Meu clock Para: #use delay(clock=4000000) //Meu clock Mas para medir frequencia é bom que o clock seja o mais alto possível!. Para simular, altere o clock do PIC no proteus também. Falou

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!