Olá a todos.

Bem, o motivo de ter criado esse tópico é o meu interesse em aprender a programar para AVR usando linguagem C/C++ diretamente. Já "programo" para Arduino há algum tempo, também já programei PICs e já brinquei com FPGA e VHDL. O Arduino é uma excelente ferramenta para aprendizado e iniciação no mundo dos microcontroladores isso não nego, mas é fato que ele é limitado em alguns quesitos. Sim, Arduino não é mil maravilhas. É claro que programar diretamente em C/C++ tem-se um ganho de desempenho muito superior a programar usando as bibliotecas do Arduino, pois elas são programadas visando proporcionar facilidade para o usuário final, hobbistas e programadores, que muitas das vezes, tiveram o contato mínimo com eletrônica e conhecimentos básicos de hardware. Essa facilidade em programar é boa até certo ponto, já que se perde muito desempenho com ela. Além do mais, programar diretamente em C/C++ é mais "profissional" digamos, e se tem mais controle sobre o hardware. 

Já fiz muitas coisas com arduino. Coisas que levaram 5 minutos pela facilidade de programação. Há também muitos materiais disponíveis na internet. Eu mesmo tenho muitos livros e muitas páginas web salvas no meu navegador e quando se trata  de arduino, não tenho dificuldade em encontrar o que preciso ( por qualquer coisa que seja). Por isso, nunca precisei postar nada aqui no lab. Mas, chegou a um ponto em que eu já tinha feito vários projetos grandes, com muita facilidade, e me dei conta que não sei fazer operações bit a bit, como no PIC ou na FPGA. Ora, esse tipo de programação é muito útil, ganha-se um desempenho imenso com operações deste tipo. Tenho um belo exemplo de um Quick Sort otimizado com um simples algoritmo de XOR SWAP. Então, fui atrás de aprender AVR. A maioria dos tutoriais está em inglês, o que não chega a ser um problema pois estou acostumado a ver tópicos do instructables e em comunidades do Google+. Mas me dei conta que quando se trata de arduino, existem pilhas de tutoriais, entretanto, quando se trata de programar diretamente em C/C++, bem, daí a coisa é diferente. Então, este tópico, é uma maneira desesperada de freiar isto. Arduino é bom para iniciar, mas estamos criando uma geração de hobbistas que não sabem operações de baixo nível (e eu me incluo um pouco nisto), acesso direto a memória, ou algoritmos de ordenação e estruturas de dados. Uma geração que está acostumada a pegar códigos e exemplos na internet e montar em casa, e isso já foi diferente um dia. 

Eu tenho fugido um pouco das coisas muito praticas, por acreditar que no futuro existirão tantas ferramentas, frameworks, plataformas e coisas de "alto nível" (ou o que você quiser chamar) que as coisas simples estarão destinadas a uma pequena população de engenheiros e hobbistas que decidiram seguir outro rumo. Da mesma forma, creio que essa geração que escolheu o caminho mais difícil será recompensada um dia. É a velha história da lebre e da tartaruga, onde quem toma o caminho mais rápido, acaba perdendo a corrida. Portanto deixo aqui um pedido a você garagista, hobbista, programador...brasileiro. Siga o caminho mais difícil, o mais árduo, nem que isso lhe custe um pouco.

Tenho me dedicado a aprender a mexer com Linux. Desisti de qualquer software privado faz um bom tempo, hoje com exceção da BIOS do meu computador, flash (para assistir vídeos no youtube) e minha conta Google, não uso qualquer software privado, e estes que eu citei estão com os dias contados. Descobri que existem softwares como avr-gcc e avrdude, sendo o avr-gcc criado pela FSF (Free Software Fundation), o que torna as coisas ainda mais interessantes para mim e para você hobbista, uma vez que estou acostumado a compilar programas usando o gcc e o g++  (também da FSF).

Bem, criei um grupo AVR  que já foi aprovado pela moderação. O que eu tinha a dizer é isto. Gostaria muito que aparecessem os garagistas com conhecimento e/ou interesse nesta área para que pudéssemos ajudar uns aos outros (inclusive a mim). Deve ser duro para eles aturar constantes tópicos de arduino e ver uma geração de  "verdadeiros programadores" sumir no tempo.  Não tenho conhecimento na área de AVRs, mas possuo conhecimento em lógica de programação, estruturas de dados, orientação a objetos, linguagens C/C++ e Java, e uma pouca experiência em microcontroladores e eletrônica digital. Gostaria muito que esse tipo de discussão se tornasse frequente aqui no lab. Um dos meus objetivos é que as postagens sobre AVRs, PICs, FPGAs  se tornem mais frequentes que as de Arduino. Estou também disposto a ajudar com o conhecimento que tenho em outras áreas. 

Aguardo a opinião e a colaboração de todos.

Exibições: 5526

Responder esta

Respostas a este tópico

Muito Obrigado

Caro Avelinux,

Para eu dar os primeiros passos necessito de respostas bem sucintas, pois meu gráu de conhecimentos está aquem dos de meus colegas, e, estou meio perdidão com tantas informações.

-Já baixei o AVR Studio 6;

-Pedi um gravador USBASP;

-Possuo Arduino, microcontroladores (vários, inclusive Atmegas) além de vasta parnafenália ao fim em tela.

Pergunto: Para eu iniciar os primeiros testes tipo "Alo Mundo!!" vou precisar de que mais?

 

-

Não sei se vem ao caso mas estou desenvolvendo uma ferramenta para fugir do editor do Arduíno mas por enquanto vem utilizando a mesma estrutura a unica diferença é que já gero o meu sketch sem precisar daquela ide, e depois posso compilar e fazer upload o código através de um Makefile ficou bacana, quem quiser da uma olhada ele esta publicado na Python Packge (toda distribuição linux tem Python) para instalar é bem simples

https://pypi.python.org/pypi/sketchduino

Olá, 

É uma bela iniciativa, gostaria de parabenizar pelo projeto, principalmente por estar usando uma Apache 2.0. Espero que você continue desenvolvendo e posteriormente faça uma interface gráfica, para que tenhamos mais uma IDE brasileira para Arduino.

Então, nós estamos interessados em programar diretamente em C/C++, como seu programa faz upload para Arduino, presumo que você tenha feito aquelas configurações nas boards para que o bootloader receba o código. Presumo também que seu programa deve usar o avrdude, o avr-gcc e/ou avr-libc por debaixo dos panos. Por hora estou usando a IDE do Arduino para fazer upload dos meus códigos para o Atmega328, entretanto, quando meus gravadores ISP chegarem, vou usar o avr-gcc e o avrdude. Visto que, como dito nas respostas mais acima, o Atmel Studio para Linux parou no tempo. Pensando nisto, seria interessante se houvesse uma IDE alternativa ao Atmel Studio. Andei pesquisando e não encontrei nenhum programa com interface gráfica que substitua-o. Existem vários programas em linha de comando que fazem upload para microcontroladores, alguns até simulam a entrada, saída e memoria dos µC, mas nada com um editor de texto, corretor de código e opções para mexer nos fusíveis de maneira amigável (pelo menos eu não conheço nenhum outro programa que faça isto). Sei que é pedir demais (você teria que implementar um compilador para fazer o corretor de código), mas se houvesse uma IDE que gravasse AVR com essas características que citei sem dúvida ela seria um grande sucesso. Acho que seu programa só precisaria de algumas adaptações para que ele ficasse assim, visto que você já tem a "base" (compilador e gravador) toda pronta. 

na verdade a minha ferramenta apenas monta o projeto, quem compila é o GNU/GCC for AVR com AVR libc e quem faz o upload é o Averdude, nesta primeira fase do aplicativo estou usando a base do arduino pois nele já temos o main.c escrito de forma completa, não sei se valeria a pena reinventar a roda uma vez que é bem escrito. O que eu fiz foi estudar este main para intender o que ele faz, quanto aos fusebits não sei se seria uma coisa simples como você pensa uma vez que é bem complexa a configuração dos fuses e varia de MCU para MCU, mas vou deixar uma dica sobre os fusebits (http://www.engbedded.com/fusecalc/) neste site é simples calcular os fusebits.

Quanto a escrever uma IDE veja bem, profissionalmente trabalho com python e utilizo basicamente editores de texto e acabei me acostumando com isto, no futuro pretendo escrever um plugin para o SublimeText e para o VI mas fica aberto para quem quiser adaptar as IDEs principamente ao Eclipse e ao Netbeans uma vez que eles trabalham com os Makefiles.

Caro Avelinux,

Eu andei dando uma pesquisada sobre o assunto e descobri bastante coisa, isso desde o ano passado, época em que eu não imaginava chegar perto de microcontroladores tão cedo, nem tão pouco tê-lo em minha posse. Eu ganhei conhecimentos em lógica de programação, estrutura de dados, C/C++,  Java veio junto com o C. Eu ainda sou estudante e agora pretendo expandir meus conhecimentos para AVR, PIC, FPGA e qualquer outro que eu encontrar.

Encontrei uma luz quando vi o Arduino, me tornando rapidamente um hobbista, mas encontrei uma grande barreira quando decidi implementar o arduino com outros hardwares. Durante nossa conversa eu percebi que o arduino é só o começo de minha "jornada",  e através de outras pesquisa descobri que é mais em conta utilizar o C/C++ diretamente.

Já comecei as minhas pesquisas e não me importaria e até ficaria feliz em ter alguém que eu possa ajudar e que me ajude.

Obrigado

Olá Leandro,

Bem, de fato o Arduino se tornou bastante popular. O preço acessível, a comunidade e o alto nível da linguagem contribuíram para isto. Porém, como já dito acima, ele não é indicado para uma aplicação comercial/industrial.

Segundo os criadores do Projeto Arduino, ele foi desenvolvido para ensinar conceitos de eletrônica básica para estudantes, visto que hoje em dia, os alunos de computação possuem muito conhecimento em linguagens de alto nível e pouco conhecimento na parte de hardware e em linguagens baixo nível, diferente dos que acontecia nos anos 70~90. 

Você pode conferir mais sobre isso que eu disse neste documentário:

http://www.youtube.com/watch?v=PYJSZg7h3-E

Eu também sou estudante, estou no 6º período de Engenharia de Computação. Eu pude notar que os acadêmicos costumam fugir quando o assunto é baixo nível. Eu gosto da área, mas é muito difícil encontrar materiais, eu sei que eles existem, mas o grande número de materiais para Arduino e linguagens alto nível meio que "ofusca" os assuntos baixo nível, então encontrá-los usando mecanismos de busca é uma tarefa difícil. Eu gosto do LabDeGaragem porque ele nos permite essa comunicação com pessoas que possuem as mesmas ideias.

Sobre usar Arduino com outros hardwares, sim! Eu também tenho essa dificuldade, a linguagem do Arduino não é tão maleável e é meio restritiva, diferente de C/C++ em que você "faz tudo".

Já falando sobre PIC e FPGAs, minha opinião é que o PIC está meio defasado, ele meio que "parou no tempo" (essa é uma opinião pessoal, não quero causar discussões, gosto é gosto). Já as FPGAs, bem, gosto muito delas, principalmente porque ela é a coisa mais baixo nível e alto nível (Ao mesmo tempo) inventada. Ela permite uma maleabilidade muito grande, tem processos concorrentes e você pode fazer circuitos complexos de 8,16,32,64 bits (o que você quiser). Os comandos como "When" são uma verdadeira revolução para mim. Pena que elas são um pouco caras, a mais barata que encontrei custa 60 reais, mas podem chegar a casa dos R$ 1000,00 facilmente. Elas são mais restritas ao Mestrado e Doutorado, embora eu já tenha feito uns circuitinhos simples como um somador (O Livro Sistemas Digitais do Ronald Tocci é muito bom e todo o conteúdo do livro possui exemplos em HDL). Eu acredito que quando o preço delas for mais acessível, provavelmente ela vai engolir as outras tecnologias. Hardware reconfigurável é o futuro. A ideia de "baixar um processador" (sim isso será possível!) e reconfigurar seu hardware de acordo com a aplicação que você vai rodar (uma que exija mais memória ou mais núcleos de processamento) é fantástica. Eu vou me dedicar aos AVRs justamente porque eles possuem várias características marcantes bastante distribuídas. São baratos, permitem maleabilidade, controle sobre o hardware e existem ferramentas livres para isto.

Vou deixar um link para uma matéria interessante sobre FPGAs: 

http://www.tecmundo.com.br/7272-processador-de-mil-nucleos-pode-dei...

Gostaria de reforçar que aqui todos somos aprendizes e professores, se todos nós se ajudarmos, todo mundo aprende e a comunidade evoluí. A intenção deste post foi justamente juntar as pessoas interessadas em aprender AVR e compartilhar conhecimento. Sei que cada um é bom numa coisa e essa troca de experiências e conhecimento é que vai fazer as coisas andarem.

Até a próxima.

Pessoal,

Após minha iniciação neste tópico cheguei  a conclusão que necessito, para dar os primeiros passos em AVR, do seguinte:

 

- Aplicativo AVR Studio vers 6 ou outro;

 

- Gravador – pode ser o Pololu USB AVR  Programmer  ou AVR programmer Shield;

 

- Microcontroladores , etc.

 

O Proteus faz parte do etc. É um aplicativo “porreta”. Com ele tenho fugido – por enquanto - do ferro-de-solda e aprendido, sem traumas, um bocado de coisas.

 

O Rodrigo Pinheiro tem uma ideia bastante interessante e o Leandro de Oliveira, captou meu pensamento: também tenho no Arduino um grande aliado ao meu aprendizado.

 

Quanto a você, caro Avelinux tem um grande trabalho pela frente. Estamos na expectativa. Hoje é domingo 7, são 17:00 hs; acho que deve estar queimando as pestanas para nos atender. Não se apoquente, tudo vai dar certo.

 

Mais algumas orientações e farei as encomendas necessárias ao fim em tela... Vamos ouvir outras opiniões.

Bem, eu tentei usar o ArduinoISP com a IDE 1.0.1 mas sem sucesso. No início pensei que tinha dado certo, já que vi o LED piscando, mas depois de desconectar os fios de comunicação entre o Arduino e o Atmega328p o LED apagou, então vi que era a porta 13 do Arduino estava conectada a 19 do Atmega (que estava ligada com um LED), portanto eu gravei o Arduino, não o Atmega328p na protoboard.

Mas, consegui compilar o código via avr-gcc e fazer upload para o Arduino usando avrdude. Usei este exemplo, e se você quiser pode fazê-lo colocando esse exemplo na IDE do Arduino.

Depois deste fiasco com o ArduinoISP, o que me resta é esperar os meus gravadores chegarem. Por enquanto vou programar usando o Arduino fazendo acesso direto aos registradores.


Seguinte Avelinux os microcontroladores tem alguns compiladores:

Basic

Pascal

uC veja o uzinho ai, isto ai significa que ele tem um compilador de micro C, tem boa parte da funcionalidade do C e do C++ mas não todas até porque o C++ tem funcionalidades que aumenta o tamanho do código compilado que pode rapidamente superar os 8k ou 256k que temos disponível nestes MCUs.

Assembly esta linguagem é que vai te oferecer todo o poder, mas com um custo de manutenção muito mais caro que se utilizar algumas destas outras linguagens mais alto nível. Principalmente o uC por que ela te oferece o poder de transitar em Assembly tb.

Prezados

Lembrem que é possível programar em C utilizando o próprio Arduino, esse é o caminho que considero mais prático e rápido, pois dispensa montar o uC e a necessidade do programador.

 Mais alguns links interessantes

Desempenho e consumo de memória:

http://www.carlosdelfino.eti.br/eletronica/item/118-dicas-para-prog...

Programming a Target AVR using Arduino Uno board loaded with ArduinoISP

http://pdp11.byethost12.com/AVR/ArduinoAsProgrammer.htm

How to start using AvrStudio, C code and Arduino

http://hekilledmywire.wordpress.com/2010/12/04/22/#more-22

uC == C

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço