Ir ao conteúdo
  • Cadastre-se

Felipe Electronic

Membro Pleno
  • Posts

    3.311
  • Cadastrado em

  • Última visita

posts postados por Felipe Electronic

  1. @aphawk

     

     

    Mas discordo de voce no conceito de "padrão". O padrão não é o C , e sim o C Ansi

    Então você vai concordar comigo de novo, hahahaha! Sempre que me refiro a C me refiro a norma padrão ANSI, no caso a mais atual revisão que é o C11.

    Veja entendo sua posição não de ser contra C, mas sim contra implementações "estranhas" de C, esse é o mesmo motivo pelo qual abomino o CCS e até mesmo o mikroC, possuem implementações a sua maneira, com tudo que interessa sendo abstraído do usuário...Nem mesmo do Arduino eu gosto nesse ponto embora o padrão C++ dele esteja muito bom.

     

     

     

     

    Quando olho um programa escrito em C, não consigo entender o que deve ser feito, porque infelizmente não existe uma só maneira de se fazer, foram criadas tantas "sintaxes" diferentes que fica muito complicado para um leigo entender. Talvez pela minha idade, mas até o momento eu vejo algo que me parece uma regra com bem poucas exceções : quem aprendeu primeiro ASM e usou bastante, tem muita dificuldade de entender como funciona o C.

    Aqui eu já discordo em partes, veja que os formas diferentes de fazer as coisas eu defendo no ponto de implementação do usuário, e é isso que torna a linguagem C tão poderosa, é o fato dela te dar certo controle da tua máquina, e possuir várias formas de resolver um mesmo problema, posso acessar vetores por exemplo atraves de ponteiros, ou usando indexação.... A parte de estruturas de dados muito desprezados até por quem nao deveria (leigos e entusiastas) é facilmente implementavel em C, inclusive tópicos de orientação a objeto, pra que apenas desenvolver programa procedural para resolver um problema se posso trabalhar com objetos mais próximos a minha linguagem natural humana, ou mesmo trabalhar em modo multitarefa...veja que uma lista de tarefas de um sistema operacional como o Linux por exemplo nada mais é que uma estrutura hyper básica conhecida por lista ligada, onde em C é simples de fazer e intuitiva... Diante de tanta coisa bem feita que já vi em C eu não consigo concordar que C é difícil ou mesmo complicado, acho que como toda e qualquer ferramente tem uma curva de aprendizado que pode ser maior ou menor em função de quem quer aprender.

    Veja que no caso do ASM, tambem tenho certeza que os comentarios (adequados) ao código te ajudaram e muito a compreender o que estava a fazer sem ler a instrução antes. Como toda e qualquer linguagem, codigo bem escrito, limpo e comentado na medida ajuda e muito na hora da manutenção e na hora de entregar seu projeto a um terceiro, mais um motivo pra discordar a dificuldade.

     

     

    Sobre a duvida do autor do tópico, fico com o Matheus, reformula a pergunta ai...hahaha.

    Abs.

     

    • Curtir 1
  2. @Matheus_LPS,

    Vou desmistificar mais uma coisa pra voce:

     

     

    Só complementando a responta. Vi um detalhe pequeno no código:

     

    Essa parte do código:

    if(input(PIN_B5)==1)

     

    Não é reduntante, inclusive é mais seguro, do que depender o valor "true" assumido pela LibC do CCS, além disso, profissionalmente eu faria assim:

     

    if(1 == input(PIN_B5)

     

    Porque? Por ser ainda mais seguro, pois alem da constante estar explicita se eu por um acaso errar e escrever = em vez de == o programa vai me gerar um erro de compilação, o que não ocorre no caso contrario em que o codigo compilaria e eu so iria descobrir o problema na hroa de testar o codigo, ja imaginou se fosse o if de um ABS por exemplo?

    Ou seja a recomendação é use sempre a constante explicita, nao custa mais código,  e é sempre mais seguro.

     

     

     

     

    !input(PIN_XX) --> Nível baixo

    Isso é perigoso por exemplo, se o nivel de true ou false forem respectivamente 0xFF ou 0x00, não haverao problemas, agora se for o contrario, vale lembrar que o '!' funciona como negação, ira inverter o que não deveria ser invertido. Eu não arriscaria ficar na mão da LibC do CCS nem de compilador nenhum.

     

     

     

    Porisso que eu nunca vou entender essa linguagem..... Tem muita maneira de se fazer a mesma coisa kkkk !

    @aphawk, por isso que C/C++ (Python também) é padrão da industria e da comunidade open source e Basic não é, pois existem dezenas de formas de se fazer a mesma coisa e com qualidade...a criatividade do projetista é que manda.

    • Curtir 3
  3. Usando um pouquinho de técnicas digitais, voce pode transformar seu sistema de botão numa maquinha de estados com duas sitações possiveis : Estado LIgado e Estado Desligado, a transição de um estado para o outro é feita no pressionamento do botao, veja;

     

    #INCLUDE <16f628A.h>#FUSES NOWDT#FUSES XT#FUSES NOPUT#FUSES NOLVP#FUSES NOCPD#FUSES NOMCLR#FUSES PROTECT#USE DELAY(clock=4000000)#USE FAST_IO(#define ESTADO_LIGADO 0x01#define ESTADO_DESLIGADO 0x02/*************************Todos os contadores**********************************//******************************************************************************/int32 cont_1;int32 cont_2;int32 cont_3;INT32 CONT_4;int8  bEstado = DESLIGADO;/****************************interrupção******************************//******************************************************************************/#INT_TIMER1VOID frequencias(void)   {      set_timer1(65500-get_timer1());      cont_1++;      cont_2++;      cont_3++;   }VOID main(){      cont_1=0;      cont_2=0;      cont_3=0;      set_tris_b(0b00100000);      output_low(PIN_B3);      setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);      set_timer1(65500);      enable_interrupts(GLOBAL);      disable_interrupts(INT_TIMER1);      WHILE (true)      {           if(input(PIN_B5)==1)           {               //checa estado atual:               if(bEstado == ESTADO_LIGADO) bEstado = ESTADO_DESLIGADO;               else bEstado = ESTADO_LIGADO;           }           //nesse switch voce processa o estado:           switch(bEstado)           {               case ESTADO_LIGADO: //faz alguma coisa               break;                             case ESTADO_DESLIGADO: //faz outra coisa               break;               default: //trata valores errados               break;            }      }      }

    Veja se compreendeu bem a ideia.

    Abs.

  4. @vtrx,

     

     

     

    Felipe,não seria 65535 pois será de 0 a 65535 = 16 bits(0xFFFF),65536 seria 17 bits(0x10000)?

     

    Em termos de representação de endereços você está certissimo, não posso representar 65536 em 16bits, porém veja que na resolução eu me refiro em quantidade de endereços, veja que nao posso representar 65536 em 16bits mas em 16bits posso representar 65536 valores diferentes (lembrese que o valor 0x0000 tambem entra na conta). Portanto a quantidade de endereços que possuo será esse valor, que multiplicado pela quantidade de bytes que consigo armazenar em cada posição irá me fornecer o valor da capacidade total em bytes.\

     

    Espero ter esclarecido.

    Abs,

    Felipe

    • Curtir 1
  5. Wow, vamos com calma:

    Capacidade em bytes:  Tamanho da palavra * Numero de Enderecos
     

     

    Tamanho da palavra de memoria: 5 algarismos hexadecimais, ou seja 5 nibbles, 2.5 bytes por endereços!

     

    Lembrando que 1byte = 2 nibbles.

    Numero de endereços:  Maior valor 0xFFFF, 65535 , menor endereço = 0 .`. 65536 endereços,

     

    logo : 65536 * 2.5 = 163840 bytes, portanto 160KB,  alternativa C (questao 31).


    A questao 32 está mal elaborada, o correto seria perguntar o numero máximo de estados corretos que esse decodificador poderia representara que são 64, assim a alternativa correta é  a B.

    • Curtir 1
  6. Quando voce diz isso:

     

     

     

     

    Agora,se querem me ajudar,teve um amigo que falou dos diodos,mesmo que eu use uma bateria que já é CC eu teria que por os diodos?Vejo que poderia por no meu circuito um  "Diodo Rápido" pra comutar a frequência,estou certo?

     

     

    Se refere a isso?

     

     

     

    Pelo jeito que você disse e como disse, acho que você nem sabe o funcionamento certo dos componentes (você falou que acha que não precisaria de diodos retificador porque a fonte ja é cc???) só por você ter dito isso acho que você está Anos luz longe do que você quer fazer sem copiar e projetar sozinho!

     

     

    Se sim, a colocação do amigo é correta, veja que não é porque você trabalha apenas com sinais em regime DC que o diodo retificador (e mais alguns tipos de outros diodos) perdem sua função, quero dizer que diodo retificador ou qualquer outro não tem apenas uma função, em muitos casos a função de um componente ou conjunto deles fica a cargo da criatividade do projetista, ja pensou por exemplo em usar um diodo como sensor de temperatura?.

     

    Mas mais uma vez, se quer alguma ajuda com propriedade, diga pelo menos o que quer transmitir, diga sobre seu circuito de radio como ele deve operar, enfim essas coisas.

    Abs.

  7. Vamos com calma gente, eu mesmo já tive a empolgação do autor do tópico de querer sair projetando quando fiz meu primeiro amplificador de áudio funcionar.

    Só não concordo com esse tipo de coisa:

     

     

     

    Podem me dizer se estou mais ou menos no caminho certo,não quero dicas pois quero ter o máximo de mérito possivel mas dando uma olhada noq falei,faz sentido?

     

    O máximo de mérito possível pra quê? Se pretende realmente ficar rico projetando um circuito transceptor de rádio, sugiro começar primeiro deixando o ego de lado, e estudar, e muito, circuitos elétricos mas a nível teórico mesmo, saber o que tudo faz, e depois pensar em alguma inovação bombástica com envio de informação via ar, alem dos já complexos campos como Down e UpConverters, LNAs, Mixers, antenas, propagação de sinais, algoritmos de demodulação sejam em hardware ou em software. 

    Bem agora passados os problemas com seus supostos direitos autorais, não há nada de errado em buscar referências para projetar seus circuitos, sendo seu projeto independente ou não, sabia que antes mesmo de Newton desenvolver toda a teoria de cálculo diferencial e integral, Arquimedes ja sabia calcular as equações básicas centenas de anos antes?

    Que tal agora você nos passa detalhes do que pretende fazer, pelo menos um diagrama de blocos, a banda que que voce quer transmitir, com que potência e o que tem em mente, com isso poderemos lhe ajudar e muito para construir um circuitinho de rádio bem supimpa :D

    Abs.

    • Curtir 1
  8. Explique melhor @cpexpert. Você quer captar como o comando de IR?

    Retransmitir ele é possível, até áudio digital por IR é possível desde que ninguém passe na frente do feixe, senão corrompe o pacote.

    Abs.

    Felipe

  9. Nem precisei responder hahahahah! Mas o amigo autor do tópico ja percebeu que os inconvenientes são multiplos.

    Eu sei que vai parecer também um desincentivo, mas qual o mal de derivar a alimentação do seu sistema de catraca da alimentação do onibus (a famosa linha 30)? Ou mesmo utilizar outras formas de captação de energia elétrica (como uma fotocélula colocada do lado de fora do onibus, esta sim carregando uma bateria para manter teu sistema funcionando)?

    Abs.

    Felipe.

  10. Hummmm, trabalho pesado hein...preciso tirar umas dúvidas, primeira de todas...como você sabe o alternador irá girar uma ou duas vezes em MÉDIA gerando dois ciclos senoidais e depois vai ficar parado, checou se a quantidade de energia gerada é o bastante para carregar o banco de baterias ou mesmo, manter o sistema ativo mesmo que em modo de baixo consumo? Apesar dos pesares catraca é um sistema de missão crítica e não pode falhar durante o trajeto do ônibus.

    Sobre o bilhete o trabalho é mais uma boa leitura sobre o protocolo Mifare, utilizado neles, em vez de você fazer um decodificador, e por o Arduino pra descriptografar o conteúdo do cartão, talves seja melhor você criar seu próprio protocolo de gravação e leitura de créditos num bilhete desses para fins de demonstração...dependendo da cripto usada você poderá levar semanas pra entender como funciona, mais algumas semanas para implementar num Arduino (acredite cripto consome memória de programa pra ca*ete!), então de sugestão opte pelo simples.

    Teria algum eesquema ou diagrama de blocos pra gente ver o que tá feito? 

    Abs. (PS.: Excelente ideia de trabalho)

     

  11. Ahahah, que beleza, bons tempos mesmo :)

    Falando ainda em bouncing, ultimamente tenho consumido uma entrada analógica do microcontrolador e implementado um teclado baseado em divisores resistivos, o resultado de pressionamento e feedback da tecla escolhida tem sido bem mais agradável uma vez que outras formas de filtragem sem uso de delays (eca!) podem ser usadas como o cálculo da média móvel do valor lido pelo A/D.

    Vejam ai se não ajuda:

    http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00004024.pdf

    Ahh ST, sempre caprichando nos documentos (e nos microcontroladores também hahahah!).

    Abs.

    • Curtir 1
  12.  

     

    Olha que uso o proteus tem uns 7 anos já. Peguei vários macetes para evitar simulação em tempo real. Uso mais gráficos com o auxílio de Voltages Probes e Current probes.

    Matou a pau, a simulação SPICE do Proteus é muito boa, acho que a simulação em tempo real é muito útil para sinais de largura de banda pequena, ou para simulação de waveforms que servirão de dado bruto para o sistema em teste.

    @aphawk, quanto custou a licença do Proteus? (visto que desde que entrei para a filosofia open source, estou evitando cada vez mais o uso de software hackeado, até minhas atuais IDE são livres ou paguei pela licença).

    Abs.

    Felipe.

  13. Deixa eu dar meu pitaco,

     

     

     

    Se voce não tem nenhuma experiência com programação, pode usar algum Basic para Pics

    Écati! (hahahahahah!). Antes mesmo de pensar na linguagem que vai programar, o primeiro passo que costumo recomendar é conhecer um pouco da sua máquina, no caso seu PIC12 de uma lida, mesmo que pouco entenda de eletronica, no datasheet e no set de instruções pra ver o que ele pode executar (e Não, não estou falando para ele programar em Assembly). A partir daí é legal pensar o que usar para desenvolver com ele, se vai usar o MPLAB por exemplo, se vai programar em C,Basic, Assembly ou C++,quanto a isso nao me limito em dizer o que é melhor ou mais fácil, existe ótimo material aqui no forum escrito pelos colegas incluindo o saudoso @aphawk.

     

     

     

     Mas para isso esses seus Pics tem de ser tipo PIC12F, ou não funcionam neste ambiente.

    Em alternativa ao Simulator IDE, use o Proteus para ver a execução do seu código ou mesmo o debugger do ambiente de programação (e aqui vai uma crítica, pessoal mais velho, vamos incentivar o uso do debug da ferramenta, é mais dolorido o caminho, mas ensina muito mais do que usar somente o proteus ou o "zoiometro" para achar erros no projeto).

     

     

     

    Outra coisa, esses Pic12 são muito limitados, tem bem pouca memória, seria interessante voce comprar um Pic maiorzinho,

    Concordo e discordo, isso vai depender da sua demanda de aprendizado, talvez com um PIC12 você consiga absorver mais conhecimento de microcontroladores tendo que fazer muito com pouco, do que partir para um "true RISC" como o AVR, a arquitetura dele é um pouco mais complexa, mas como ja disse depende mais da sua evolução.

     

     

     

     Arduínos. 

    Sou fã da família Arduino, mas como dica de aprendizado, evite esses caras por enquanto, eles lhe vão lhe dar muito mais recursos que real aprendizado, diferente de pegar um micro e escrever o codigo de inicialização e operação sozinho... sou entusiasta do tipo: "primeiro morda o traseiro do boi, depois compre boi ralado".

    Boa sorte e se precisar estamos aqui.

    Abs.

    Felipe

  14. @Projetos_afg, ta ficando bom esse tutorial hein :)

    Alguns comentários,

     

     

     

    Como a maioria dos microcontroladores RISC, a linha Cortex-M só executa instruções de forma alinhada na memória de programa. O que isso significa? Que cada instrução deverá estar alinhada conforme o seu tamanho em bytes.

    Isso é uma coisa que acho ruim nos ARM, e em outros RISC com arquitetura Harvard, na verdade ai está a razão para compiladores C fazerem estripulias para manter uma boa relação densidade de código x velocidade de execução, como o ARM so possui dois tamanhos de instruções e alinhada a memória o compilador tem que se virar com isso. Essa é uma característica que falta a ele mas presente em outros micros de 32bits como o PIC32 (MIPS M4K) e RX600 que possuem VLE (Variable Code Length) em que uma instrução pode ter diferentes comprimentos, melhorando muito a densidade de código sem descuidar da velocidade.

     

     

     

    O que é a tabela de vetores? É uma tabela que contém os endereços (vetores de 32 bits) para todas asexceptions (Reset, Hard Fault, Bus Fault, Supervisor Call, etc), com exceção do primeiro vetor (endereço 0) que aponta o fim da pilha (Stack Pointer).

     

    Outra grande coisa chata, que me faz sentir saudades até do lerdão ARM7TDMI, são essas interrupções vetoradas, o NVIC não, ele é sensacional, os vetores ficam estaticos, com uma tabela definida em um local, e cada ferramenta implementa essa tabela de uma forma diferente e vai la no linker e acerta as seções de memória como bem entende... o que dificulta por exemplo escrever um RTOS portável entre micros ARM - CortexM de diferentes fabricantes. Em micros como o dsPIC, os C2000 da TI e o ARM7TDMI a tabela ja era mapeada em memória bastando passar  um ponteiro de função para o registrador correspondente o que facilitava e muito na hora de configurar uma interrupção.

    PS.: o NVIC é legal, só é chatinho de configurar no começo.

    Que venham as próximas partes :)

    Abs.

    Felipe

  15. @EJO, sem desviar muito o foco da discussão,

     

     

     

    Não penso que ficou ruim o meu primeiro questionamento

    Não disse que ele ficou ruim, mas a qualidade da informação realmente não ficou boa, não adianta expor um problema sem expor o cenário do problema.

     

     

     

    Também não estou cobrando nada de ninguém

    Releia o post #2 dessa discussão, mas como se fosse você alguém que quisesse ajudar.

    Agora vamos ao seu problema, como disse antes nem tudo em sistemas microcontrolados é software, existem outros pontos que devem ser observados por isso pedi o esquema elétrico do que estás a fazer. Apesar de tudo ainda continuamos no escuro para poder lhe ajudar. 

    Aqui vão algumas sugestões populares:

    - Alimentação do microcontrolador;
    - Cheque a fonte de clock, se for interno configure no software, mas se for externo, coloque o cristal ligado a ele no esquema elétrico;

    - Observe se o canal analógico que estás a medir é correspondente ao que o LM35 está ligado ao PIC;
    - Cheque no seu PWM, se habilitou antes de tudo o timer2, esse timer é usado como base de tempo para a geração do PWM;
     

    - Respeite os tempos de inicialização e operação do LCD (tipico entre 1 e 10ms para cada comando);


    Ficamos no aguardo do esquema elétrico e de preferência o código completo que estas a usar para também testarmos em nossa máquina.

    :)

  16.  

    "\fAD:%04ld"

     

    aprendi aqui que o "\f" limpa o display, 

    também que o 04 é digamos a quantidade de digitos mas o que é o ld?

     

    Uma boa opção é entender o que faz a função printf, bem como os tipos de formatação. Como já citado acima o "ld" é um código de como sua variável será formatada.

    Só lembrando que o padrão C o tipo long é de 32bits inteiiro e não 16bits como o CCS usa.

     

     

     

     

    Outra coisa, como posso tentar estabilizar um pouco mais a conversão de forma a deixar """mais preciso""".

    Cuidado para não confundir os conceitos, precisão está associada a exatidão da sua medida ou da porcentagem de correspondência entre o valor que você mede e o valor real de uma determinada grandeza (idealmente ela é 100% apenas durante algum tempo, pois condições de temperatura, por exemplo, variam e muito).

    Para elevar a precisão de uma medida, vários fatores devem ser considerados, a resolução, menor valor que seu conversor A/D consegue capturar, filtragem anti-aliasing já citada, correto condicionamento do sinal, eliminação de ruído em modo comum enfim existe varias formas de melhorar a exatidão do resultado.

    Minha sugestão INICIALl para melhoria nesse ponto, seria o uso de um conversor A/D de maior resolução (algo ente 16 e 24bits).

    Agora so que queres fazer é estabilizar o valor da medida, a história é outra, na verdade o que você deve fazer antes de tudo é determinar qual a informação final que será apresentada ao usuário no LCD (essa realmente nao pode ficar variando, o que justificaria o uso de um filtro de média móvel citado no meu post anterior, volte la e o releia porque).

    Quando tiver isso na mão ai pensamos em como estabilizar a medida.

    :)

    Abs.

    Felipe.

  17. O amigo @Matheus_LPS está correto, e a observação do @rodrigocirilo também é pertinente.

    Uma outra abordagem pra validar se a conversão A/D está correta, seria transmitir diretamente a variável "valor" pela porta serial e exibir em um terminal num PC e observar se o valor que chega é condizente com a posição do potenciômetro, com isso elimina - se de vez a desconfiança do canal A/D.

    Boa sorte.

    Felipe.

  18. "A qualidade da resposta é diretamente proporcional a qualidade da pergunta feita."

    @EJO,

    Você começou bem descrevendo o seu problema e o que queres, mas ainda falta informação, apenas um fluxograma não irá ajudar na resolução do seu problema.

    Como ja citado, coloque o código que você pegou da internet e adaptou a sua aplicação, juntamente com o esquema elétrico do que foi implementado no Proteus, vale lembrar que no mundo dos microcontroladores, nem tudo é problema de software, existe hardware ai no meio que se mal operado não responde corretamete :)

    Ficamos no aguardo das informações para lhe ajudar melhor.

    Abs.

    Felipe

    • Curtir 1
  19. Uma pergunta besta que eu gostaria de fazer:

    "Checou se o potenciometro ou acelerometro estão ligados na entrada analógica correspondente ao canal que esta a ler?"

    Por exemplo na função:
     

     

    set_adc_channel(0);

    Nessa função você irá configurar o MUX interno do A/D para ler o canal analógico zero, que corresponde ao terminal do PIC chamado de AN0, comumente nos PIC16 de 40 terminais o AN0 está no mesmo terminal chamado de RA0.

    Estou desconfiando que voce esta a ler um canal analógico mas que o trimpot está em outro terminal do PIC e resulta nessa leitura estranha (como se o terminal nao estivesse ligado em nada).

    No código do @Matheus_LPS a conversão deveria funcionar perfeitamente SE e somente SE o potenciometro estiver ligado no terminal RA0/AN0, que se bem me lembro no 877A deve ser o pino 2.

    Boa sorte, :)

    Felipe

  20. @vtrx

     

     

     

    Creio eu que um 'filtro digital' é mais confiável que um filtro analogico

    Sem se distanciar muito do foco do tópico, ambos os tipos de filtros tem vantagens mas tem seus males dado a suas naturezas de implementação, o que as vezes me incomoda é o fato que devido ao advento de processadores, com unidades DSP internas, ou mesmo os DSCs com seu elevado desempenho numérico combinado a ferramentas de design, filtro digital ante a um analógico hoje virou uma frase feita, e que os circuitos analógicos baseados em opamps ou mesmo malhas LC ficaram obsoletos. É valido lembrar que filtros digitais são imunes a muita coisa, mas ainda sofrem de dois males que podem mandar sua 'confiabilidade' para o espaço que são quantização e largura de banda bem limitada, e como todo bom filtro pode virar um belo oscilador digital se mal projetado (transformadas Z podem ser mapeadas em funções em S). Acho que existem aplicações bem definidas para cada um deles. O que está se fazendo hoje é a combinação de técnicas analógicas e digitais para projetos de filtros e outros circuitos comuns do domínio analógico.

    Dê uma pesquisada por circuitos com capacitores chaveados (ou switching capacitors). 

     

    E antes que esqueça, ainda não é possivel filtragem digital de sinais em banda de RF :)

    De fato para aplicações profissionais ou não, ser bem feito deve ocorrer em ambos os casos(principalmente no segundo, onde o intuito é aprender), senão compensa comprar pronto... :)

    Abs.

    Felipe

  21.  

     

    Pode sim,mas é boa pratica fazer a leitura pela media.

    Nem sempre, isso depende muito do modelo do sinal a ser tratado, para sensores com função de transferência de baixa largura de banda, a utilização de um filtro como a popular média móvel pode vir a ser útil para deixar "vivo" no resultado do A/D apenas a banda de interesse, porém se a detecção de sinais for por meio de diferenciação (exemplo cáculo da aceleração a partir da derivada de velocidade) usar um filtro de média móvel pode causar um "damp" (amortecimento) excessivo das variações de valores do sinal eliminando inclusive a banda da interesse, e te entregando qualquer coisa no resultado da conversão, menos o valor desejado. Para conversão de dados de um domínio para outro (Analógico -> Digital) ainda uma das  melhores soluções consiste em conhecer o modelo do sinal de entrada, a banda de interesse e se possível um pouco do modelo estatístico dele, e projetar um bom filtro anti-aliasing na entrada para limitar a banda do sinal, e escolher adequadamente, a taxa de amostragem do conversor A/D. Da mais trabalho? Claro que dá, mas o que custa queimar um pouco mais os neurônios no projeto e em caso de bug retirar a conversão do sinal como suspeito de falha. 

    Só lembrando, não sou contra o uso de média móvel, só não concordo com a generalização, e que a mesma é adequada para ALGUNS casos bem definidos (sinais quase que estáticos, pouco variam no tempo).

     

    @Ivan (eletronic),

     

    A minha pergunta se trata em saber qual o modelo do seu acelerômetro, eu suspeito da familia ADXL  que possui algumas particularidades antes de ligar sua saída na entrada do A/D.

    Só para fins de debug, experimente conectar um potenciometro ou trimpot na entrada o A/D e o varie lentamente, veja se os valores são condizentes a posição do trimpot, isso pode ajudar a identificar o problema :)

    Ah, antes que esqueça, qual a aplicação do acelerômetro(O que deseja calcular/ fazer com ele)?

    Abs.

    Felipe

  22. Primeira pergunta, de qual accel estamos falando? ADXL3x? 


    Você tem debug disponível ai? (simulador serve) Proteus? Ou um hard debugger como o PICKIT2? Se sim, uma sugestão é que você cheque o resultado da leitura da variavel valor logo após a conversão antes de enviar ao LCD para ver se a leitura e configuração do A/D está correta.


    Aos conhecedores do CCS alguém poderia colocar o protótipo da função printf(); usada no nessa IDE, queria checar uma coisa e no momento estou sem acesso ao site.

    Por enquanto é isso :)

    Abs.

    Felipe

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!