Ir ao conteúdo

aphawk

Membro Pleno
  • Posts

    8.316
  • Cadastrado em

  • Última visita

Tudo que aphawk postou

  1. @eletron1791 , Use o próprio Arduino Uno para gravar o firmware do USBASP na versão Atmega8 . Existe um sketch que transforma o seu Arduino Uno em um gravador, basta apenas saber qual o firmware você vai gravar, e , claro, os Fuses também deverão ser gravados de acordo. Deve existir um tutorial disso na Internet com certeza .... Paulo
  2. Bem vindo, meu amigo. O pessoal daqui sempre ajuda, mas algo tem de partir de você primeiro ! Poste o código que você já fez para esse projeto, e nos diga onde que você está tendo dificuldade ok ? Paulo
  3. Sim, é essa mesmo a conclusão ! Veja, se o Zener vai manter a tensão sobre a carga de 5,1 V, isso a carga consumindo o máximo de corrente, quando a corrente da carga diminuir, a tensão sobre a carga deveria aumentar, pois o resistor RD está em série com a carga.... então o Zener vai forçar manter os 5,1 Volts, absorvendo essa corrente no lugar da carga. Por esse motivo que a corrente sobre RD vai ser exatamente a mesma .... Olhe novamente a curva corrente x tensão de um Zener, e vai entender o processo físico. Na vida real, a corrente não vai ser exatamente idêntica, vai ter uma pequena diferença entre elas porque a curva real de um zener não é tão abrupta como nos ensinam kkkkk ! Paulo
  4. @Luccas Fernando , Bom, estou no celular, então vou dar algumas idéias para você mesmo decidir... é melhor pensar sobre o que ocorre. 1 - Para que haja regulação, o Zener precisa de uma corrente mínima. 2 - A sua carga possui uma corrente máxima de 1.1A, e para que o Zener consiga regular, ele precisa de pelo menos uns 5 mA ( VIDA REAL...) , portanto a corrente máxima que vai passar por RD será de 1.105 A. 3 - Caso a corrente da carga diminua para 1A, a corrente consumida pelo Zener será de 0.105A, dentro da especificação do mesmo. Assim, de grosso modo, a corrente a ser utilizada em seu cálculo será de 1,105A. Paulo
  5. @Maria Cristina Oliveira , Obrigado por fazer duas múmias aqui, eu e a @.if... já somos velhos mas agora passei a me sentir obsoleto também .... Bons tempos de portas paralelas... os Hardlocks eram ligados nelas, e uma vez me chamaram numa Estatal para ajudar eles porque o Hardlock sumiu e o programa custava mais de US$ 10.000 , e além disso ainda queriam ver a possibilidade de usar em vários computadores ... Eu observei que quando chamavam o programa sem o Hardlock o programa entrava no modo de demonstração, totalmente funcional mas rodava por apenas 5 minutos. Fiz um programinha em Assembly que interceptava a rotina do BIOS que calculava a hora, criei uma rotina que deixava andar 2 segundos e depois retornava o tempo 2 segundos atrás, ou seja o tempo nunca avançava de verdade, mas o CAD engoliu.... e funcionava o dia inteiro . Fiz dois programinhas no final, um que fazia esse truque e mantinha a hora correta em uma variável, e outro que desfazia, voltando a hora da variável para o sistema. Total de bytes era cerca de 150 bytes.... Fiz isso em menos de um dia, e cobrei o equivalente a US$ 2.500, mas exigiram que eu entregasse também o fonte. Topei claro porque era só desassemblar mesmo e eles teriam o fonte .... Mas quando viram o fonte não queriam mais pagar esse valor, falaram que era um roubo tudo isso por um programinha de 150 bytes.... mas aí um outro técnico interviu e disse que eles haviam chamado um outro cara que que ia cobrar quase o mesmo valor e tentou por 3 dias sem sucesso, aí resolveram me pagar. Vocês podem nunca ter usado uma porta LPT, mas era 100 vezes mais fácil de usar do que essas atuais portas USB... Ah, esse seu programador... deve ser uma cópia do Ponyprog ! Paulo
  6. @Maria Cristina Oliveira , Muito legal ! Ele aproveita uma característica que poucos sabem : podemos definir 8 novos caracteres para serem usados nos displays comuns 16x2 e semelhantes. Assim conseguimos deslocar esses caracteres rapidamente pela tela, criando a ilusão do movimento. Faz algum tempo um colega de outro Fórum postou um vídeo que impressionou muita gente, veja aqui : Todos pensam usar esses adaptadores i2c para LCD torna o display muito lento, mas até que o efeito não ficou lento. Nesse que você postou o LCD usa o modo paralelo de 4 bits, bem mais rápido, e pode fazer uma movimentação em mais campos do display. Recentemente outro colega publicou uma library para o Bascom que permite usar um adaptador I2C de 16 bits para os displays tipo KS0108 (128*64) , tipo gráficos monocromáticos baratinhos, e um adaptador que custa lá fora US$ 6, olha que legal , veja que podemos usar até microcontroladores bem pequenos ! Pena que ainda ninguém vende esse adaptador aqui ... Paulo
  7. @Sérgio Lembo , O nome técnico correto é Exponential Moving Average, ou EMA. Bem simples e funcional, só depende de você ajustar o valor de alpha. Isso é experimental. Eu uso como alpha o valor 45/64 , ou 0,7031. Funcionou muito bem com os movimentos dos rotores de antena, estabilizando bem a leitura do potenciômetro interno, e facilitou muito o cálculo pois uso variáveis tipo Word, ADC de 10 bits, e rotinas de 16 bits dentro de uma interrupção a cada 20 milisegundos e que não pode demorar muito...., a formula acima complica quando gera números negativos, então tive de particularizar esse calculo, multiplico o acumulador por 45, depois multiplico a ultima leitura por 19 , somo as duas, e divido o resultado por 64, que é apenas um shift de 6 casas. Para você ter uma ideia, esse potenciômetro fica a uma distância de 35 metros da placa controladora, e os fios não são torcidos e nem blindados, subindo na vertical, o que vira uma baita antena de ruídos .... uso filtros RC para dar uma limpada. A minha sorte é que o movimento mecânico é lento, demorando cerca de 1 minuto para ir de um extremo a outro do potenciômetro. Mas preciso medir tensões de 20 milivolts com uma boa precisão e estabilidade. Como uso um Atmega a 18.432 Mhz, consigo fazer o cálculo, converter para graus ( 0 a 359 ) , e calcular a posição de até 6 antenas, sem perder o tempo de 1 byte de dados a 9600 Bauds, graças ao buffer de 1 byte existente na serial por hardware, e sobra bastante tempo. No seu caso, com centenas de leituras por segundo, uma boa opção seria usar o Adc com apenas 8 bits ( se puder claro ), facilitaria bastante os cálculos. Paulo
  8. @Diegolv , Os Atari usavam um processador 6507, uma versão "capada" do 6502, o mesmo usado pelos Apple ][ . Uma ideia fantástica foi a que esse cara aqui teve : https://hackaday.com/2015/04/08/an-apple-emulator-on-an-arduino-uno/ https://github.com/dpeckett/arduino-appleii As placas originais Arduino Uno contém dois microcontroladores : um deles é um Atmega16U2, que é programado para servir apenas como conversor serial - Usb, mas possui o conector para ser rwprogramado para fazer outras funções. Esse cara fez isso, reprogramou esse microcontrolador para ser o gerador de vídeo ! O outro microcontrolador, que é o Atmega328, fica livre para emular o 6502 e ainda rodar a linguagem Basic original do Apple ! Você pode fazer algo semelhante, repare que tudo o que o cara precisou foi um Arduino Uno e alguns resistores...., e acho que isso tudo pode servir para emular um Atari também, o que lhe daria centenas e centenas de jogos ... Existem alguns Arduino Nano que usam um Atmega32u4 em vez do Atmega16u2, o que em tese te dá o dobro de capacidade para gerar sinais de vídeo mais complexos e talvez uma resolução ainda maior. O legal é que você usa apenas o hardware do Arduino, não a IDE, e se preferir pode montar a plaquinha de sua maneira. Outro projeto legal é a emulação de um computador Sinclair Zx-81 ( o qual eu tive um original nos idos de 1982 acho), que@Diegolv fazia alguns joguinhos legais, mas em preto e branco. O microprocessador usado era um Z80, e aqui segue o emulador que usa um simples Atmega1284 para fazer o trabalho pesado : http://www.jcwolfram.de/projekte/avr/ax81b/main.php Tem muita coisa interessante para te ajudar no seu projeto. A seguir um projeto de conclusão de curso de Engenharia Eletrônica, a teoria é muito bem explicada : https://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/f2014/jn286_cy255/jn286_cy255/index.html Esse projeto é um dos meus preferidos, usando um Atmega1284 e um CI AD724 para gerar um vídeo NTSC da maneira clássica. Por último: o famoso UZEBOX : https://github.com/Uzebox/uzebox Ainda existe uma comunidade grande nesse projeto, e é bem legal. Existem até versões comerciais dele, e você usa apenas um Atmega644 e um AD725. Agora é com você ... Paulo
  9. @Diegolv , Começe vendo como gerar o sinal de vídeo..... existem alguns artigos de projetos antigos que geravam vídeo composto a partir de um PIC comum, mas a resolução é baixa. Existem alguma implementações interessantes usando um Arduino Uno, mas são microcontroladores AVR e não PIC, mas talvez a teoria te ajude. Paulo
  10. @Sérgio Lembo Pode-se também fazer o processo de amortecimento exponencial, assim não precisa ficar guardando várias leituras, apenas a média do ultimo tratamento e a partir desta nova leitura calculo uma nova média. Eu uso muito nos meus programas para estabilizar a leitura dos sensores e potenciometros acoplados mecanicamente a algum tipo de eixo... Paulo
  11. Para saber exatamente eu teria de olhar o que essa library faz.... Sobre os Atmegas, eles não tem prioridade de interrupções, assim SEMPRE que ocorre uma interrupção ele é obrigado a atender imediatamente. Quando ocorre uma interrupção, o programa pàra o que estava fazendo e vai para a rotina de interrupção. A partir daí o controle de processamento pode ser exclusivamente dessa rotina, a menos que ela habilite novamente as interrupções ( podem ser todas , ou algumas, ou apenas uma ), algo que é bem difícil de um programador não profissional continuar com o controle de tudo. Meio off-topic mas interessante : Eu particularmente habilito novamente todas as interrupções assim que ocorre uma interrupção, mas uso alguns Flags para sinalizar quando eu não posso ser interrompido ( claro que acabo sendo interrompido por alguns nanosegundos até consultar os Flags mas isso não afeta nada em 99% dos casos ). Isto já é algo um pouco mais avançado para você neste momento do seu aprendizado, mas acho bom você saber , assim um dia saberá como proceder em algum problema mais sério de programação... Voltando ao tópico : Se essa rotina de interrupção foi escrita para manter o processamento com ela, sem liberar outras interrupções, e ela resolver esperar a contagem de pulsos por 500 milissegundos, durante esse tempo nada mais vai funcionar, nem serial, nem display, nada... mas repare que isto é uma escolha do programador que escreveu essa library. A sua conclusão final sobre a lentidão pode sim ser válida, mas para ter 100% de certeza só mesmo olhando o código-fonte dessa biblioteca. Cá entre nós, gostei de ver essa sua dúvida, é a prova do que te falei antes, você continua aprendendo cada vez mais ! Infelizmente não consigo ajudar nada nesse seu programa por não saber programar nessa linguagem, então espere pelo pessoal mais habilitado nela para te dar mais informações, ok ? Paulo
  12. @Sérgio Lembo , No Arduino Uno temos um Atmega328, e ele tem Input Capture no Timer1 , de 16 bits. Pode ser feito com ele também, e fazer a conta dos ciclos de clock para calcular a frequência. Só não temos um clock muito preciso, pois é um filtro cerâmico de 16 Mhz.... mas para o que se espera neste projeto, está ótimo... Paulo
  13. @ComandateGustavo, Pelo que eu li eles usam 2 Timers, um deles configurado como contador, que faz a contagem de pulsos. O outro Timer é apenas a base de tempo , que gera uma interrupção a cada xxx milissegundos justamente para ler quantos pulsos o outro Timer contou. A outra maneira que eles usaram é configurar um dos Timers como contador de pulsos de clock, ao invés de contar os pulsos externos. Você pega um dos pinos que podem gerar interrupção, de preferência o Int0 ou Int1, programa ele para interromper na descida do sinal , assim a cada descida você pega a contagem dos pulsos de clock e após isso zera essa contagem para começar de novo. Sabendo quantos pulsos de clock houveram, e sabendo a frequência do clock, você tem o tempo total, e assim sabe a frequência na entrada. Repare que você já leu sobre essas maneiras ... o que você está tendo dificuldades é apenas porque você está aprendendo um monte de coisa ao mesmo tempo ! Mas olhe quanta coisa você aprendeu em um mês ! Paulo
  14. Olha .... acho que você não tem a noção exata do que um simples Atmega328 a 16 Mhz pode fazer .... Eu desenvolvi um sistema para controle de rotor de antenas para radioamador com ele, controla até 6 antenas com direções diferentes cada uma, inclusive do tipo bi-direcionais ( dipolos ); ele se liga a um computador via porta USB convertida para serial a 9600 bauds, e a qualquer rádio amador com interface serial ou CI-V , rodando a até 38.400 bauds, ambas funcionando ao mesmo tempo ( uma é por hardware e a outra é por software ), não posso perder 1 byte de nenhuma das duas conversas.... ainda tenho o Timer0 configurado como contador de pulsos ( recebe sinal de um outro aparelho meu, um comutador inteligente de antenas ), o Timer1 é a minha base de tempo de 20 Milisegundos aproximados, o Timer2 gera o PWM para controlar a velocidade do movimento do rotor no início e no fim para evitar trancos nas gôndolas das antenas e que acabam moendo as engrenagens do rotor .... ainda tenho um display I2C ligado nele, e dois rotary encoders que usam 4 interrupções por hardware .... ainda uso mais um pino com interrupção por hardware para me sinalizar dados na serial por software de maneira que eu nunca perca nenhum byte dela. Fora isso, tem 3 botões para controle também .... isso tudo rodando a 18,432 Mhz , e o sistema dá conta de tudo e ainda poderia fazer mais coisas. Tudo foi programado em Basic e com cerca de uns 300 bytes de rotinas em Assembly.... Tudo é software, meu amigo. Quando você achar que algo está lento ou as coisas não estão funcionando como deveriam, reveja o seu programa, use ao máximo as interrupções por hardware existentes no microcontrolador. O verdadeiro poder de um programador é saber como utilizar bem o hardware disponível. Lembre-se sempre que um Atmega 328 tem no mínimo 3 vezes mais capacidade de programa, 5 vezes mais RAM, e pelo menos 30 vezes mais velocidade de processamento que o computador que levou a Apolo 11 'a Lua ! Já pensou nisso com cuidado ? Paulo
  15. Me lembrei desse episódio do Jornada nas Estrelas ... esse era o Spock teóricamente mau ( de outra realidade ) mas que acabou cedendo à lógica e colaborou permitindo a troca dos dois capitães Kirk... estou vendo que você ficou expert em Bouncing ( ou em antí-debouncing ???? kkk ) ! Paulo....
  16. Sempre use resistor externo quando trabalhar perto de bobinas, relés, ou qualquer tipo de ruído. Esse resistor interno de pull-up tem valor muito alto , cerca de 70K se não me engano, e assim a impedância do pino fica muito alta, tornando ele muito susceptível a qualquer tipo de ruído. Paulo Off-topic : estou me divertindo vendo a luta para conseguir uma simples contagem de pulsos por hardware sem ser atrapalhada pelo programa .....
  17. @kodorna , Também pode ser feito, um pouco mais complicado mas o resultado final será o mesmo ! Paulo
  18. @.if , Tá vendo com a lenda do pisca-pisca na gaveta tinha um fundo verdadeiro ? Voltando ao tópico, acho que embora tenha alguns posts para dar uma relaxada, tem bastante coisa legal escrita ao longo de todo tópico. @ComandateGustavo, A pergunta feita sobre a linguagem de programação dos Pics , se ela é parecida com a do Arduino ... vou dar algumas rtespostas aqui : Podemos programar qualquer microcontrolador em qualquer linguagem disponível para ele ! Não tem como "portar" o código usado em um Pic para usar em um Avr, pois os hardwares internos, embora façam funções idênticas em algumas vezes, são diferentes, portanto o programa sempre tem de ser adaptado para funcionar. E temos o problema dos compiladores ....existem vários compiladores de cada linguagem, todos incompatíveis entre si.... pode considerar a plataforma Arduíno como um tipo de compilador C, originalmente projetado para alguns microcontroladores AVR como o Atmega328, mas hoje existe como baixar suporte para outras famílias, como o ESP8266 . O que importa não é a cor do gato, mas sim, que ele coma ratos.... então você pode ver algumas linguagens e procurar aquela que você mais se identifica. Quando eu fiz o meu primeiro programa de microcomputador, foi num Sinclair, em 1980, me identifiquei na hora com o Basic dele, tudo era fácil. Na faculdade, aprendi o Assembly do 8080, e claro, do Z80, e algum tempo depois comprei um livrinho que ensinava a programar em Assembly o Sinclair, acabei comprando um Sinclair e fui me divertindo, isso ainda em 1981, logo depois aprendi a usar os Apple ][ em Basic também, e logo me interessei pelo Assembly do 6502, e logo depois descobri que existia uma placa de CP/M para os Apple, com um microcontrolador Z80, fiquei imaginando como dois microcontroladores podiam existir usando o mesmo hardware periférico, como as memórias e a saída de vídeo .... e fui estudando , comprando livros importados na Litec, enfim acabei comprando o meu Apple][ quando estava no quinto ano da faculdade. Detalhe, tudo o que eu fazia era usando Basic ou/e Assembly .... Até hoje só me sinto confortável usando Basic e Assembly kkkkk não consigo entender a linguagem C, então fico muito restrito a dar apoio aqui no CDH na área de programação, mas tento ajudar no hardware pelo menos .... No seu lugar eu ainda usaria bastante a plataforma Arduino, mas depois de um tempo iria para um verdadeiro compilador C. Minha idade não me permite fazer isso, mas ainda permite saber o que deveria fazer se fosse bem mais jovem kkkk ! Paulo
  19. Sim, essa história é famosa aqui no CDH, ela criou um circuito parecido com o 2N2646 só que com uma corrente média bem baixa, e funcionava com duas baterias tipo CR2032 ! Ela deve ter montado mais de uma centena de pisca-piscas .... reparou que quase todo post de algum iniciante ela primeiro recomenda que ele faça um Led piscar ? ( agora que cutuquei a onça lá vem chumbo... ) Sobre simuladores de Arduino, eu tinha baixado um aplicativo pro IPhone que quebrava um bom galho, eu como sou usuário do Proteus já faz bastante tempo uso a simulação do Isis de uma forma bem completa, e olha, para microcontroladores é algo fantástico ! Eu desenvolvi um controle inteligente de rotor de antenas fazendo uma conexão entre o rádio e o meu projeto no Proteus usando uma porta serial virtual do Isis ligada ao rádio ( que tem uma porta USB ) e quando terminei o projeto o aparelho funcionou direitinho no mundo real ligado ao rádio. Isso me economizou algumas semanas de trabalho. Eu ouvi falar bem desse simulador do Thinkercad, vou ver como isso funciona. Paulo
  20. Faltou pouco para tirar 10 , tá vendo como já tá aprendendo a cada dia ? O clock do cristal tem valor fixo, mas cada um dos Timers tem o tal de Prescaler que eu falei acima, por exemplo o do Timer0 pode dividir o valor do clock da CPU pelos valores 1, 8, 64, 256 e 1024. Assim facilita bastante termos uma combinação que seja mais adequada às nossas necessidades. A contagem desses ciclos já divididos pelo Prescaler pode ser utilizada para gerar uma interrupção, não só quando ela ultrapassa 65535, mas também quando atingir um determinado numero , assim facilita bastante como base de tempo. Por ultimo, o pino externo de contagem do Timer não é utilizado quando se usa o clock da Cpu como base de tempo, o que permite ele ser utilizado como I/O comum. Outra coisa legal que pouca gente lembra é que quase todos os pinos dos Ports internos do Atemga328 podem gerar interrupção, e essa entrada do Timer também pode mesmo se ela for utilizada como entrada do contador ! Paulo
  21. @alexandre.mbm , Para que fosse possível fazer tal cálculo minucioso e obter o valor da malha resistiva, teria de levantar muitos parâmetros do 2n2222 utilizado fisicamente, a curva Ic/Ib de um traçador de curva, junto com o valor de Vbe no ponto de trabalho.... ainda assim é uma bela calculeira dos diabos, pois ainda depende um pouquinho do segundo 2n2222 ... Muito mais fácil colocar um Trimpot, fazer o ajuste empírico, e pronto ... Paulo
  22. @ComandateGustavo , A plataforma Arduino foi feita para que todos possam fazer coisas legais mesmo sem ter o conhecimento mais profundo sobre o funcionamento interno de todos os módulos existentes dentro de um Atmega. Repare que você fez bastante coisa sem entender nada do hardware! Mas claro que entender todo o hardware ajuda muito para que tudo funcione sem os famosos errinho.. . Sobre os Timers : O Atmega328 tem dentro 3 módulos chamados Timers, sendo dois deles de 8 bits e um deles de 16 bits. Dois deles também podem ser configurados como Counters ( contadores ) possuindo um pino de entrada para que a contagem seja feita diretamente pelo hardware, isto é, uma vez configurado para Isso, cada vez que ocorrer uma transição na entrada o contador é incrementado, sem precisar de nenhum software para Isso, o processador pode estar com as interrupções desativadas, pode estar em Halt , e ainda assim a contagem continua ! Não é um "cálculo" , é apenas um incremento em um contador existente no hardware. O que você pode fazer é ler essa contagem, ou gravar um novo valor para ela, que continuará sendo incrementado. Já quando programamos o Timer como Timer mesmo, ele usa o sinal de Clock dividido por 256 ( chama-se Prescaler e pode ter vários valores ) como entrada do contador, e assim ele segue contando até chegar no valor máximo programado ou em zero, e nesse instante ele gera uma interrupção. Claro que isso tudo é complicado para quem vê pela primeira vez, mas com o uso você vai achar isso cada vez mais fácil. Quando você tiver a experiência dinossáurica da @.if , que chegou a fazer pisca - pisca com duas válvulas triodo e duas lâmpadas de filamento de 20W , e usando Rabo Quente para gastar pouco ( kkkk ) vai saber de cor como usar tudo que tem no Atmega ! Paulo
  23. @.if , Existe um monte de sites calculadores de valores de Timers e até do Baud Rate , pois se usarmos apenas o datasheet, é um baita saco fazer aquelas contas ..... eu baixei calculadores disso tudo também, tá doido ficar fazendo na unha .... Bom, para ajudar eu posso fazer a configuração do Timer0 e do Timer1 ( na função de Counter claro ) no Basic, e passo os valores a serem colocados nos Registradores , ou posso passar direto as instruções em Assembly , eu sei que elas podem ser colocadas diretamente na IDE do Arduino..., claro para facilitar o nosso colega , que embora deva estar sofrendo bastante, deve também estar aprendendo bastante ! Paulo
  24. @ComandateGustavo , Eu desconfiava disso sim kkkkkkk ! De noite vou pesquisar se tem alguma coisa feita nessa linguagem e te passo se achar. Realmente a parte de inicializar o hardware é um pouco chatinha mas é só escrever a coisa certa em uma meia dúzia de registradores ..... Achei isto aqui que usa o Timer1 como eu te falei, já é um excelente ponto de partida : http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/index.html Boa diversão ! Paulo
  25. Legal você ein kkkkkkk ! Vai deixar a bucha para o autor do tópico.... Vou ajudar no valor do Preload para gerar a interrupção de 4 milisegundos : Se quiserem eu posto a inicialização do Hardware em Basic kkkkk Paulo

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!