Ir ao conteúdo
  • Cadastre-se

Tutorial de programação Basic para AVR's


Posts recomendados

Pessoal, segue um novo tutorial, baseado na linguagem BASIC do Bascom, e no uso de programadores ICSP, para quem quiser usar os processadores AVR's em seus projetos.

Como é a primeira versão, podem existir erros de escrita, ou até mesmo algum conceito que eu tenha entendido de uma maneira pode estar errado, mas basta me avisarem, que eu corrijo o tutorial, ok ?

Os programas e circuitos do tutorial foram todos montados e testados.

E gostaria de enviar um agradecimento ao nosso amigo SOSCHIP, pois ele, mais do que todos os outros deste Fórum, é quem mais batalhou para incentivar o uso dos AVR's, e até mesmo foi por indicação dele que eu iniciei a usar o programa Bascom em meus projetos.

SOSCHIP, obrigado, meu amigo !

Segue o link para o tutorial :

http://www.4shared.com/file/251546552/110b26b/INTRODUO_AO_USO_DE_AVR_-_PARTE.html

Paulo

Link para o comentário
Compartilhar em outros sites

Felipe e Cácio,

Obrigado a vocês, meus amigos, a área dos AVR's também é bem nova para mim, e peço a ajuda de vocês, como sempre, para qualquer dúvida dos usuários iniciantes !

Aliás, gostaria que vocês dessem uma boa olhada no tutorial, como eu escreví ele a toque de caixa, podem existir alguns erros que eu não tenha revisto.

Estou começando amanhã a escrever a segunda parte, espero terminar logo !

Um abraço a vocês, amigos !

Paulo

Ótimo, para começar a brincar com esse cara no AVRSI.

Opa -> Felipe, se voce quis dizer o AVR Simulator Ide, os programas que eu gerei no Bascom, que utilizam o Timer0, não conseguí fazer a simulação..... mas os que não envolveram interrupções do Timer, funcionaram direitinho !

Link para o comentário
Compartilhar em outros sites

Opa -> Felipe, se voce quis dizer o AVR Simulator Ide, os programas que eu gerei no Bascom, que utilizam o Timer0, não conseguí fazer a simulação..... mas os que não envolveram interrupções do Timer, funcionaram direitinho !

Ok Paulão, vou averiguar isso e qqr coisa dou um retorno! Apesar de ainda estar me deliciando com o assembly dos AVR vou me aventurar no basic até pra ajudar o pessoal aqui quando você nao estiver, e pra usar todo o poder do AVRSI.

Abs.

Link para o comentário
Compartilhar em outros sites

Só para manter o tópico atualizado ...

Achei um bug do Bascom ..... declarei uma variável do tipo WORD ( pode ir de 0 até 65535 ), e fiz um loop usando o FOR - NEXT com ela, indo de 0 até 9999 , e o loop abortava quando o valor da variável chegava a 236 .... não conseguí achar o motivo, e só resolveu o problema quando eu declarei a variável como Long .

Aliás, esse bug foi justamente no exemplo do tutorial sobre um contador de 0 até 9999 com 4 displays de 7 segmentos. Repare que eu tive de declarar ela como Long !

Fica aqui o aviso, pois é um daqueles bugs difíceis de se achar, pois tive de ficar acompanhando a contagem para perceber o bug !

Paulo

Link para o comentário
Compartilhar em outros sites

Opa, bons usos , test man, espero que ache ele legal, aliás, fica aqui um pedido que faço a todos que estejam lendo, se gostarem do tutorial, por favor, dêem uma nota a este tópico..... no tutorial que eu fiz de PIC, tem centenas de acessos, mas ninguém deu uma única nota para ele ....... heheheh po o ego agradece muito !!!!!!

Abraços a todos !

Paulo

Link para o comentário
Compartilhar em outros sites

Oia nós aqui também.heheheh

Amigo Paulo.....mais uma vez meus parabens - também estou nessa apesar de ainda não ter recebido meu canudo do PIC basic hehehe

Um grande abraço e pode contar comigo tambem aqui azucrinando a sua paciência.

IAS

Link para o comentário
Compartilhar em outros sites

Opa, IAS, valeu meu amigo, o que importa é que voce já tem experiência do BASIC com PIC´s, fica muito mais fácil usar os AVR´s com o Bascom !

E voce vai perceber que o BASCOM é o sonho de qualquer programador, possui funções de strings super-completas, trabalha com números reais e fracionários, tem funções matemáticas de tudo o que você precisar, enfim, eu que me acostumei com o Basic do PSI, que é bem limitado, me sinto no paraíso quando uso o Bascom !

Manda bala e depois me fala ok ?

Um abraço.

Paulo

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Fiz um relógio digital com alarme, com 4 dígitos LED e um AVR, sem usar nenhum RTC separado, usei o próprio RTC do Counter2 do AVR. Ficou legal, porque é um projeto que usa 2 timers diferentes com suas interrupções, um para fazer os displays multiplexados, e o outro gera a base de tempo com um único cristal de 32768 Khz. Tudo programado só com Bascom, vou incluir no tutorial este fim de semana.

Quem já fez o download, faça um download novo a partir de segunda-feira, ok ?

Paulo

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

Pessoal, já está atualizado o tutorial sobre programação de AVR em Basic. com um projeto de relógio despertador usando um AVR, ficando muito simples e barato.

Segue o esquema do relógio, que ficou muito simples, podendo servir como um excelente relógio a ser montado por iniciantes e até mesmo para trabalhos de TCC. Quem se interessar basta fazer o download.

Para facilitar a sua montagem, segue o arquivo .HEX para ser gravado no AVR :

http://www.4shared.com/zip/_-8SGqI0/relogio.html

projeto5AVR.html

Bons usos.

Paulo

post-464954-13884955587572_thumb.jpg

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Acabei de ver um LED RGB de alta potência ( 5 Watts !!! ) que já vem com dissipador de metal, angulo de visão de 140 graus a um custo de cerca de R$ 50,00 .

Isto permite fazer um velho sonho que eu sempre tive, que é trocar o sistema de lanternas da minha moto ( as 4, duas na frente e duas atrás ) por um sistema inteligente com AVR, que vai fazer as lanternas acenderem em Branco quando estiver acesa em situação normal, amarela quando ligarmos a seta, e vermelha quando estiver com freio acionada, inclusive vou tentar fazer o vermelho do freio tipo Flash para chamar mais a atencão.

E, claro, vou incluir um sistema de pisca-alerta, onde todas as 4 lanternas ficam piscando, trocando as cores ao mesmo tempo.

É um bom exemplo do uso de PWM em Basic, e vai servir como um exemplo real de ligação no ambiente da moto, que possui ruidos de ignição que normalmente atrapalham alguns projetistas.

Se alguém tiver alguma sugestão, poste que irei analisar, ok ?

Assim que o protótipo ficar pronto eu incluo no Tutorial.

Paulo

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

aphawk dei uma lida rapida aqui (estou sem tempo, vou ter que ler e aprender de verdade nas ferias), o tutorial esta otimo, muito fácil de entender. Muito obrigado por esse tutorial, muito legal da sua parte compartilhar seu conhecimento assim :lol:, bacana mesmo. Vai ter parte 2?

E uma duvida, o link que esta no primeiro post tem o tutorial do PIC, ou eu estou enganado?

(desculpe pela falta de acentos, teclado estragado)

Link para o comentário
Compartilhar em outros sites

Valeu Test Man,

Estou tentando fazer o mesmo trabalho que fiz com o tutorial sobre PIC's, felizmente eu escolhi usar o BASCOM, que não tem um simulador poderoso igual ao ASI ( AVR Simulator -> é idêntico ao PSI, só que usando processadores AVR ), mas tem tanta coisa a mais que dá um poder quase ilimitado, fora que existem bibliotecas prontas para quase tudo o que voce imaginar. Existe até um DOS para usar em pen-drives e cartões de memória !

Quanto à parte 2 , em vez disso, vou atualizando o tutorial conforme tenho novas idéias em meus hobbies.

Se, um dia (...) , eu achar que ele está pronto, pelo menos o básico, eu concluo ele e começarei OFICIALMENTE a parte 2. Mas isto deve demorar, pois ainda tenho de mostrar algumas coisas, como comunicação IR, RF, Pots digitais, etc .....

Agora, voce falou algo sobre o link no início do Tópico .... tem razão, eu cliquei e veio o tutorial do PSI !!!!!

Eu mesmo fiz besteira na quinta-feira, quando atualizei o tutorial do PSI.

Obrigado pelo aviso, já consertei o link, pode baixar ele novamente, ok ?

Sabe que tem uma coisa interessante ? Muita gente pediu para eu fazer sobre os AVR's em vez dos PIC's, agora que eu fiz, e estou incrementando ele conforme tenho idéias novas, ninguém está se interessando !

Mas uma coisa eu posso dizer, estou fazendo coisas com os AVR's em BASCOM que são totalmente impossíveis de serem feitas com os PIC's em qualquer tipo de linguagem Basic, fora as vantagens do hardware do AVR em termos de preço versus o que se obtém !

Por exemplo, estou fazendo um circuito para a minha moto meio maluco, vou te adiantar para voce imaginar :

Tenho 2 lanternas dianteiras e duas traseiras, estou trocando elas por LED's RGB de 5 Watts, e estou implementando até um microfone ( !!! ) no circuito, quando a moto estiver desligada, posso transformar as lanternas em uma luz rítmica, assim se tiver alguma música tocando alta nos carros perto dela, ela vai fazer o maior show de luzes ! Vai ter motoqueiro de queixo caído heheheh !

Fora que agora vou ter um PISCA-ALERTA, e um aviso quando a moto sai do neutro e engato a primeira ( tipo um flash de luz verde nas lanternas traseiras ), as 4 lanternas acendendo em branco quando estiver em situação normal, etc.

No ano passado, tentei fazer isto com um PIC, mas não deu para escrever todo o código, pois precisava de uma memória RAM maior. ( 256 bytes é muito pouco ! )

Agora, usando o ATMEGA32, tenho 2K de RAM, e 32K de Flash, por um custo abaixo de R$ 35,00 !!!!

Isso que está me incentivando a prosseguir, uma hora o pessoal vai perceber que só terão vantagens migrando para os AVR's .

Qualquer dúvida, pode postar, e obrigado por me avisar, ok ?

Um abraço.

Paulo

Link para o comentário
Compartilhar em outros sites

ola paulo, acabei de ler o tutorial sobre o avr e fiquei fascinado com um mundo de possibilidades, obrigado por compartilhar com todos, o seu conhecimento.

e o que vem a ser o AVR32?? é o mesmo que ATMEGA168.

comprei pela net um ATMEGA168 20PU por R$15,00 estou esperando chegar para comecar a brincar com ele, tenho muitas ideias, algumas malucas, enquanto isso vou montando um gravador ICSP pra ele pela serial do pc.

ate mais

mauro

Link para o comentário
Compartilhar em outros sites

domafero e testman,

Fico contente que esteja sendo útil para vocês !

Usar um gravador ICSP realmente ajuda bastante, pois pode-se usar um protoboard para todos os testes, sem ter o incomodo de retirar o chip para gravar e depois recolocar no protoboard, e sempre tem umas "pecinhas" que acabam soltando e fazem a gente perder um tempão !

Existem circuitos baratos para usar via serial ou via paralela, mas eu recomendo usar um via USB, é bem mais versátil, pois pode ser ligado em notebooks também.

Eu baseei o tutorial no ATMEGA168, mas nada impede de usar qualquer um dos ATMEGAS, desde que tenha pelo menos 4K de flash.

Eu sugiro mesmo o ATMEGA168, pois é um baita produto pelo custo dele .... 512 de RAM e 16K de flash é uma maravilha para quem trabalhava com os PICs ....

Quanto ao AVR32 ( desculpe, eu havia pensado ATMEGA32 mas sei lá o motivo digitei AVR32 ... ), o modelo correto é ATMEGA32 , tem 40 pinos, ( bastante portas de I/O !!!! ), 32K de flash, 2K de RAM, e olhe que até agora o máximo que usei dele foi 700 bytes de RAM e 5K de flash ....

Só para terem uma ideia, implementei em Basic um sistema de controle de luminosidade de LED´s via PWM, com 12 canais , por software, e ele por sí só ocupou menos de 1K de flash e menos de 50 bytes de RAM.

Como podem ver, dá para fazer muiiita coisa com ele !

Quanto a modelos de AVR´s, eu sugiro sempre pensar no ATMEGA8, ATMEGA168 e ATMEGA32, pois são baratos e fáceis de encontrar.

Existe um modelo especial do ATMEGA168, se não me engano é o ATMEGA168V, que trabalha a partir de 1.8 Volts !!!!! Esse é fantástico para quem quiser montar projetos alimentados por pilhas ou baterias !

Eu comprei eles no Mercado Livre baratinho, acho que foi uns R$ 5,00 mais caro que o normal.

A única desvantagem, em relação ao ATMEGA168 normal, é que ele trabalha no máximo a 10 Mhz, mas como geralmente usamos o clock interno que é sempre 8 Mhz no máximo, isso não me causou nenhum problema até agora.

Bons usos, e se tiverem alguma sugestão, é só falar, ok ?

Um abraço.

Paulo

Link para o comentário
Compartilhar em outros sites

Quanto ao AVR32, o modelo correto é o ATMEGA32 , tem 40 pinos, ( bastante portas de I/O !!!! ), 32K de flash, 2K de RAM, e olhe que até agora o máximo que usei dele foi 700 bytes de RAM e 5K de flash ....

Grande mestre Paulo, so uma pequena correção se me permite:

O ATMEGA32 é pertencente a familia AVR de 8bits de uso geral como você mesmo acabou de demonstrar citando seus periféricos.

A familia AVR32 é uma familia de microcontroladores AVR RISC de 32bits de alta pérformance possuindo ou não núcleo ARM (em especial os cortex m3 e m0), ja é mais usada em aplicações mais complexas.

Procurem pelas familia AT91 - SAM e que vão achar muito material de encher os olhos.

Abs.

Link para o comentário
Compartilhar em outros sites

Opa, valeu pela informação, Felipe !!!!

Ué, e desde quando você precisa de permissão minha ?????

Afinal, voce é o nosso Grande Mestre em Assembly, entre tantas outras áreas de hardware, e sempre ajuda a todos nós como o seu conhecimento e experiência, e aqui, como em tantos outros tópicos, tem todo o direito de se pronunciar, e inclusive criticar quando necessário ! Conto com você para me corrigir sempre que necessário !

Na verdade, eu havia digitado AVR32 quando eu queria dizer ATMEGA32 hehehe, nem sabia que existe uma família AVR32 ! Foi uma grata surpresa.

Errei e tentei consertar depois, mas não havia deixado claro o meu erro :(:(:( ! Agora consertei até no meu tópico original , para não haver dúvidas .

Mas , agora que voce informou sobre essa nova família, vou dar uma olhada nela agora mesmo !!!! Pena que o BASCOM ainda não roda com ela ....

E você, meu amigo, já está brincando com os AVR´s em Assembly ?

Um abraço !

Paulo

Link para o comentário
Compartilhar em outros sites

Se estou brincando com os AVR?

Ja migrei boa parte dos meus projetos com PIC e freescale (8bits) para os AVR...a linguagem? vixe esse dai ja nem me interessa mais, prefiro dizer que uso a mais adequada para cada situação, mas ultimamente ando trabalhando com reprodução de áudio com os AVR, usando um algoritmo em ADPCM.

Uma das coisas que estou "amando" nos AVR é a velocidade suficientemente alta para trabalhar com processamento de sinais...ja consegui implementar filtros digitais, e até fazer FFT, alem do amplificador classe D que esta na bancada aqui (estou ouvindo mettalica nele) consegui 25W com distorção de 1% em carga de 4Ohms (excelente para um aplificador dessa classe).

No que precisar de ajuda estamos ai!

PS.: gostei dessa familia AVR32, inclusive meu AVR Studio ja suporta alguns dispositivos, so que infelizmente pra testar...so comprando la fora...

ABs.

Link para o comentário
Compartilhar em outros sites

Muito legal, Felipe, o amplificador classe D é muito interessante, existem muitos truques para abaixar a distorção, você leu a documentação da TRIPATH sobre os CI´s deles para amplificadores classe D e T ? Se não me falha a memória, eles explicam alguns algoritmos sobre como conseguiram distorção abaixo de 0.1 % em mais de 200 Watts.

Ah, voce falou duas coisas que me interessam bastante : filtros digitais e FFT ( dft ) .

Eu preciso ver alguns algoritmos sobre isso !

Lembra que eu te falei que tinha um velho sonho, fazer um analizador de espectro de áudio ?

Eu queria conseguir decompor um sinal de áudio em 10 frequências ( 32,64, 128,256,512,1024,2048,4096,9102, 16384 ), e obter as amplitudes relativas dele, a fase não interessa.

Como eu não estudei e nem trabalhei com isso, voce pode me passar pelo menos um algoritmo, eu vou tentar fazer a implementação em Basic ? Como eu ví um cara fazer algo semelhante em Assembler, usando um PIC de 1998, acredito que consiga fazer isso hoje em Basic, com um AVR a 20 Mhz.

E uma outra coisa que estou fazendo hoje, eu preciso fazer um filtro para obter as amplitudes dos sinais de graves, médios e agudos, o que eu fiz foi usar um ampop quádruplo, fazer um filtro passa-baixas, um passa faixa, e um passa altas, e retificar a saida deles para medir no ADC; mas sei que é possível fazer isso por software... se voce tiver um algoritmo para isso, e puder me passar, ajudaria bastante ! É bem difícil achar algo prático na Internet, achei teoria de monte, mas não consegui entender como fazer o programa.

Não sei se ajudaria, mas eu tive uma ideia meio maluca, em vez de fazer apenas um dos ADC ficar sampleando o sinal, fazer 3 ADC´s obtendo o sampling do mesmo sinal de áudio, sendo um para os graves, um para os médios, e o outro para os agudos, não simplifica o software, devido a podermos diferenciar a taxa de sampling ? Lembro que novamente só preciso das amplitudes relativas, as fases não me interessam.

Qualquer ajuda será muito útil !

Um abraço !

Paulo

Link para o comentário
Compartilhar em outros sites

Salve Paulo,

Então a FFT posso passar o algoritmo sim, embora ela ainda nao esteja funcando daquele jeito...ja da pra brincar, irei apenas terminar de comentar o código, e posto por aqui, fiz o teste fazendo a bagaça com 15 pontos o resultado foi razoavel.

Agora quanto aos filtros , uma maneira interessante de se fazer isso que queres é fazer tres tabelas de coeficientes dos filtros diferentes e por hora você chamar o filtro passa baixa, e outra hora chamar o passa altas e o passa -faixas, pelo menos e uma das maneiras que acho que o AVR vai aguentar sem problemas,

O filtro ideal para fazer a brincadeira ai é o de resposta a impulso infinita , o famoso IIR ja que o processamento dele é menor, dependendo da ordem e do numero de amostras que você vai usar o AVR vai rodar folgado, o problema seria verificar os parametros de instabilidade do filtro pra ver se ele atende.

Para te dar uma mão Paulo vou passar um treco bem legal quee eu e o amigo sink estamos discutindo em outro topico, esse software da microchupa gera o codigo em C ou assembly de um filtro digital e a tabela de coeficientes.

http://www.4shared.com/file/bHtW6DSA/DSPIC_FD_LITE.html

o codigo em C nem interessa muito, o legal aqui é usar a tabela de coeficiente, com isso nao perdemos tempo com calculos malucos tipo transformada Z ou bilinear (aaaai!!),

essa tabela pode ser convertida pra INT, de resto o filtro é muito simples, um agoritmo de um filtro fir por exemplo pode ser calculado assim:



Y(n) = X[n]*a0+X[n-1]*a1+X[n-2]*a2+X[n-3]*a3....+X[n-m]*am

onde:

Y sera a saida do sinal filtrado.
X(n) = é a amostra do sinal
X(n-m) = amostra do sinal anterior
a0 a am = coeficientes do filtro (gerado pelo SW que passei)
m = ordem do filtro.

então faça o seguinte:

Use um buffer cujo o tamanho vai depender do tamanho da RAM e da ordem do filtro
nomeie - o como buffer de entrada buffer_X por exemplo aqui você vai preencher o buffer com as amostras do ADC.

enchido o buffer você deve elaborar uma rotina MAC (multiplica e acumula) para calcular a serie que ta ai em cima.

cujo o numero de execuções sera igual o numero de coeficientes do filtro

detalhe fazer uma MAC no AVR é fácil que doi.

em seguida na saida da MAC pegue o resultado e salve - o em outro buffer com um nome de y_buffer por exemplo , aqui vai ficar a saida do seu filtro para ser jogado diretamente em um PWM ,


espero que o mini - algoritmo ajude-o, para calcular o IIR o processo é quase identico o que muda é a serie de recorrencia que é mais chatinha mas de resto e batata.

No que precisar ai Paulo vai perguntado ok?

Abs.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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