Ir ao conteúdo
  • Cadastre-se

ViniciusKruz

Membro Pleno
  • Posts

    724
  • Cadastrado em

  • Última visita

  1. @Renato.88 matou a pau, valeu, muito obrigado mesmo.
  2. @Renato.88 a ideia é só fazer funcionar mesmo, depois eu levo lá pra oficina e alinho a frequência no osciloscopio, lógico, com a plaquinha montada e tudo mais adicionado 31 minutos depois @Isadora Ferraz minina você até leu o artigo no site só pra me ajudar, mocionei... Eu entendi que a fórmula é em farads, porém como eu disse antes, o resultado foi muito aquém do esperado ( provavelmente erro meu na matemática elementar ) agora vou tentar me explicar, eu refiz o circuito substituindo o resistor por um de 4,7k e dois capacitores em paralelo, um de 47n e outro de 22n, total de 69n, logo na formula ficou assim: f=1/1453xRtxCt f=1/1453x4700x0,000000069 f=1/0,4712079 f=2,12 Viu só? A frequência no circuito fisico, com esse novo arranjo está na casa de 1khz, sei disso pelo ruído do trafo, porém na fórmula está dando 2hz. Risca o fosque do seu conhecimento na maconha das minhas duvidas e me mostra meu erro na interpretacao da formula pelo amorrrrr...
  3. @Isadora Ferraz entendi, eu fiquei em dúvida na fórmula pois colocando desta forma como você sugeriu(10^-6) porém havia dado um valor muito abaixo de 1hz, daí eu coloquei o capacitor como vem na nomenclatura 102(eu coloquei 1000 na formula), deu um valor em 60hz. Pode ter sido vacilo meu no uso da calculadora rsrsrs, vou refazer aqui. Obrigado
  4. @Renato.88 segue o esquema... Estou usando o CI IRS2453 com um trafo comum. Esse integrado foi projetado para trabalhar com 50/60hz embora eu percebi por dedução que ele pode gerar frequências bastante altas, o site que peguei as informações foi este: https://makingcircuits.com/blog/h-bridge-inverter-circuit-using-ic/
  5. Boa tarde pessoal, estou com uma dúvida para calcular uma frequência cuja fórmula é: 1/1453 x Rt x Ct Rt=resistor (ohms) Ct=capacitor (farads) Preciso de uma frequência de 60hz, com base nesta fórmula cheguei ao resistor com 88R e o capacitor com 1uf(102 ceramico), por se tratar de um inversor de 12v p/127v, a frequência é bem crítica e pior que que não tenho um osciloscopio pra confirmar a frequência, de ouvido mesmo da pra perceber pelo chiado no trafo, que a frequência está na casa de alguns quilohertz, o que faz com que o trafo não consiga fazer a inversão. Usando um trafo bem menor, até que deu inversao, porém com tensão abaixo do esperado no secundário. Qualquer ajuda é bem vinda, obrigado.
  6. Já tentou fazer assim: if (millis() - previousTime < 3000 ) A única coisa de diferente que percebi foram os parênteses.
  7. @alexandro umbert O trecho do seu código que recebe os dados é este: #INT_RDA void Serial_isr(void) { char temp; temp = RCREG; TpS = 5; RxBuf[VetorPos] = temp; VetorPos++; if(VetorPos>1000){ TpS = 0; TemPacote = 1; return; } } Como pode-se observar, ele fica aguardando 1000 caracteres para fechar o pacote, como eu te disse, se eu entendi corretamente, o seu gps manda em torno de 60 caracteres, não entendi esse buffer gigantesco desse jeito. Proponho alterar esse buffer para 100 bytes: #define Buffer_Size 100 char RxBuf[Buffer_Size]; float latitude,longitude,latReal; char latCompleto[11];//memória para receber a latitude char longCompleto[12];//memória para receber a longitude void LimpRxBuf (void){ int16 i; for(i=0;i<100;i++){ RxBuf[i] = 0; } } int recebendoPacote=0; int pacoteCompleto=0; #INT_RDA void Serial_isr(void) { char temp; temp = RCREG; if(temp=="$"){//se for início de pacote... LimpRxBuf();//limpa o buffer recebendoPacote=1;//sinaliza que tem pacote sendo recebido } RxBuf[VetorPos] = temp;//guarda no buffer o caractere recebido VetorPos++; if(temp==0x0D){//Final de pacote <LF> VetorPos=0; pacoteCompleto=1;//recebeu um pacote completo } if(VetorPos>=100){//se for mais de 100 caracterees considera erro e zera o buffer de recepção LimpRxBuf();//limpa o buffer de recepção recebendoPacote=0;//reseta as flags de recepção pacoteCompleto=0; } } Esse código acima seria para a sua recepção do pacote, agora nesse seu laço for() ficaria assim: //formato dos dados recebidos: //$GPGLL,4717.11634,N,00833.91297,E,124923.00,A,A*6E //antes de pegar um novo valor, salva o valor antigo latReal= atof(latCompleto); if(pacoteCompleto == 1){ int virgula=0; for(k=0;k<100;k++){//filtra o pacote recebido pegando a latitude e longitude //como os dados são separados por vírgula, filtramos com base nela if(RxBuf[k]=="," && virgula==0){//pega a latitude int L; for(L=0;L<=11;L++){ latCompleto[L]=RxBuf[k+L+1]; } virgula++; } if(RxBuf[k]=="," && virgula==2){//pega a longitude int L; for(L=0;L<=12;L++){ longCompleto[L]=RxBuf[k+L+1]; } virgula++; } } //agora faz as conversões: latitude = atof(latCompleto); longitude = atof(longCompleto); lcd_gotoxy(1,1); lcd_putc("Lat "); printf(LCD_PUTC,"\f%1.5f ",latitude); lcd_gotoxy(1,2); lcd_putc("Lon "); printf(LCD_PUTC,"\f%1.5f ",longitude); if (latitude < latReal){ output_low(PIN_B0); } else{ output_high(PIN_B0); } O que estou sugerindo aqui é uma mudança significativa no seu código que pode fazer toda a diferença na velocidade do processamento. Na parte acima em que os valores são filtrados, é possível que seja necessário fazer alguns ajustes, até que seja pêgo o campo correto, pela lógica expressa no documento desse seu GPS, as informações chegam da seguinte forma: $GPGLL,4717.11634,N,00833.91297,E,124923.00,A,A*6E e o que eu fiz foi pegar 11 campos após a primeira virgula(latitude) e depois pegar mais 12 campos após a terceira vírgula(longitude), desta forma você pode fazer o mesmo para pegar qualquer informação baseada no separador(virgula). Testa aí e me fala o que deu. Seria interessante se você utilizasse um terminal serial para capturar o pacote enviado pelo gps, dar um print na tela e me mostrar para trabalhar melhor a filtragem. adicionado 6 minutos depois Material muito bom sobre seu GPS: https://www.u-blox.com/sites/default/files/products/documents/u-blox6_ReceiverDescrProtSpec_(GPS.G6-SW-10018)_Public.pdf?utm_source=en%2Fimages%2Fdownloads%2FProduct_Docs%2Fu-blox6_ReceiverDescriptionProtocolSpec_(GPS.G6-SW-10018).pdf
  8. @alexandro umbert Tem que ter alguma biblioteca de comunicação, ou no mínimo alguma função que inicializa o GPS e também funções de escrita e leitura nele, por exemplo esta variável: RxBuf[], tem alguma função que povoa ela para que você possa filtrar os dados desejados, onde estão estas funções? De qualquer maneira já consegui alguns materiais referentes ao seu GPS e pelo que pude verificar, o retorno dele é bem simples, algo tipo assim: $GPGLL,4717.11634,N,00833.91297,E,124923.00,A,A*6E Ou seja, 50 caracteres, só aí já daria uma enoooorme enxugada no seu código. Verifica aí e me passa a função que recebe esses dados para que eu possa te ajudar a melhorar a recepção.
  9. @alexandro umbert Você tem a biblioteca de comunicação desse GPS?
  10. @alexandro umbert Na documentação do seu GPS deve explicar melhor esse retorno, você tem esta documentação? Caso não tenha, informe o nome/modelo pra eu verificar.
  11. Na verdade seu problema de lentidão, acredito com quase 100% de certeza que está nesse trecho(já te alertei antes sobre esse problema): for(k=0;k<1000;k++){ Este laço está gigantesco, seu processador vai perder muito tempo percorrendo este trecho, pra resolver isso, tenta mudar esse tamanho, verifica se realmente seu GPS retorna uma variável de 1KB porque é isso o que você está processando, toda vez que seu GPS retorna os valores, seu processador vai precorrer 1KB para localizar as informações.
  12. Se for o ESP12 ele tem 4MB de memoria onde 1MB é para o programa e os outros 3MB são para dados, o Esp não possui eeprom fisica logo ele usa os 3MB para simular uma. Por exemplo, se definir a eeprom com 512, você terá 512 Bytes de 8 bits cada, ou seja, daria para armazenar uma frase com 512 caracteres. Para gravar/ler as informações nas eepron seja simulada ou fisica, tem que acessar endereço por endereço. Por exemplo, para gravar a palavra "senha" você envia cada caractere para uma posição espacífica da memória tipo assim: eeprom (0,"s") eeprom (1,"e") eeprom (2,"n") eeprom (3,"h") eeprom (4,"a") Depois para ler, pega de um po um: String pass; pas [0]=eeprom (0) pass [1]=eeprom (1) pass [2]=eeprom (2) pass[3]=eeprom (3) pass [4]=eeprom (4) Ignorem a sintaxe!
  13. @alexandro umbert Cara, se tá certo não sei, tem que testar. Olhando somente um trecho do código assim fica meio difícil de dizer. Uma coisa é certa, já observei que se você quiser ler a latitude usa assim: latCompleto [j]=RxBuf [k+7+j] e se você quiser pegar a longitude faça assim: longCompleto [j]=RxBuf [k+21+j] Observe esses detalhes q vai dar certo.

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