collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[22 de Abril de 2024, 14:14]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: Programar Arduino/AVR -- low level.  (Lida 19997 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Programar Arduino/AVR -- low level.
« Responder #15 em: 12 de Setembro de 2010, 11:00 »
Estranho que nos testes que fiz calhou sempre de dar direito, mas pode ter sido de já ser muito tarde e tava cheio de sono :D

Como disse no outro post facilmente se altera o true para 1... o que aliás é como o tenho definido agora para teste :)

Isso do '==' bem visto pois sempre tive na ideia que dava 0 ou 1 hmm logo vou fazer umas pesquisas xD

Neste caso sim como disse antes era um XOR mas pode nem sempre ser possível, depende... imagina que estavas a conduzir um transístor na gate, ora o valor alto que iria ter seria 0,7 que é visto pelo uC como 0 também, então já precisas de lógica.
E quanto ao '!', estamos a falar de C standard +-, julgo que haverá uma norma a seguir, mas é questão de investigar :)


De facto torna-se mesmo interessante debater estes e outros assuntos, é pena mais ninguém participar... mas olha aprendemos nós nunca pior :p


Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: Programar Arduino/AVR -- low level.
« Responder #16 em: 12 de Setembro de 2010, 11:18 »
desculpem a minha falta de compreensão, mas este tópico destina-se a ensinar a programar AVR comparando com arduino e não Arduino correcto?!

p.s.  os parabéns pela dedicação que toma para com a partilha de conhecimentos!!! ^^
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: Programar Arduino/AVR -- low level.
« Responder #17 em: 12 de Setembro de 2010, 13:33 »
desculpem a minha falta de compreensão, mas este tópico destina-se a ensinar a programar AVR comparando com arduino e não Arduino correcto?!

p.s.  os parabéns pela dedicação que toma para com a partilha de conhecimentos!!! ^^

O objectivo deste tópico é ensinar a programar em AVRs, mas em todos os exemplos, assumo que o contacto que o leitor tem com AVRs é no arduino, logo estou a fazer código destinado ao mesmo (e os comentários usam o nome dos pinos de acordo com a norma do arduino, e o código para transferir o programa no primeiro post espera o bootloader do arduino). De qualquer forma, os mesmos conceitos aplicam-se para qualquer AVR, e as diferenças que se podem encontrar estão nos números de pinos, nome de registers e pouco mais :P
E ainda bem que temos mais um a comentar! :)

Citar
Estranho que nos testes que fiz calhou sempre de dar direito, mas pode ter sido de já ser muito tarde e tava cheio de sono

Como disse no outro post facilmente se altera o true para 1... o que aliás é como o tenho definido agora para teste

Isso do '==' bem visto pois sempre tive na ideia que dava 0 ou 1 hmm logo vou fazer umas pesquisas xD

Neste caso sim como disse antes era um XOR mas pode nem sempre ser possível, depende... imagina que estavas a conduzir um transístor na gate, ora o valor alto que iria ter seria 0,7 que é visto pelo uC como 0 também, então já precisas de lógica.
E quanto ao '!', estamos a falar de C standard +-, julgo que haverá uma norma a seguir, mas é questão de investigar


De facto torna-se mesmo interessante debater estes e outros assuntos, é pena mais ninguém participar... mas olha aprendemos nós nunca pior :p

Não percebi bem o exemplo do transístor na gate :/ xD
O '!', realmente é C standard, mas de todas as referências que li, a única coisa que podemos esperar do '!' é que transforme um valor diferente de 0 em 0, e o 0 num valor diferente de 0, sem nunca definir que valor é esse.
Atenção que posso estar a dizer disparates aqui xD e já terem definido um standard em que esses valores estão todos definidos ... apenas me estou a basear nas referências que tenho. Nunca fiz muitas experiências no sentido de testar isto a sério (com vários compiladores e diferentes níveis de optimização), mas pelo que percebi, não é um comportamento definido.
Acredito que tenha dado sempre certo, pois a implementação usada é capaz de funcionar.
Quanto a usar para o true o 1, depende do que vai fazer com o valor do bool ... se só usar para testes lógico, 1 e !false vão dar ao mesmo, mas outros tipos de testes, podem dar comportamentos indefinidos (por exemplo, o '==').

Hoje ou amanhã, já temos a primeira parte do tutorial sobre timers hehe (vou dividir em duas partes: Modos normal e CTC, e modos com PWM).
« Última modificação: 12 de Setembro de 2010, 13:41 por Cynary »

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Programar Arduino/AVR -- low level.
« Responder #18 em: 12 de Setembro de 2010, 17:49 »
Foi só para tentar explicar que o xor pode nem sempre resultar pois o valor lido pelo pino pode não ser alto o suficiente para ser considerado um high (1), então tens de usar flags para controlares.

Bem apenas vi que em C false é 0 e true é diferente de 0, não consegui encontrar efectivamente o que faz o ! Vou ter de procurar num livrito que tenha talvez hmm

Mas para superar essa questão, em vez de brincar com o true pode-se sempre brincar com o false, por exemplo, != false, aí já não falha :)

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: Programar Arduino/AVR -- low level.
« Responder #19 em: 12 de Setembro de 2010, 19:19 »
Foi só para tentar explicar que o xor pode nem sempre resultar pois o valor lido pelo pino pode não ser alto o suficiente para ser considerado um high (1), então tens de usar flags para controlares.

Bem apenas vi que em C false é 0 e true é diferente de 0, não consegui encontrar efectivamente o que faz o ! Vou ter de procurar num livrito que tenha talvez hmm

Mas para superar essa questão, em vez de brincar com o true pode-se sempre brincar com o false, por exemplo, != false, aí já não falha :)

Ah ok xD
A ideia que estava a dar para o xor, seria por exemplo:
Código: (c) [Seleccione]
PORTB ^= (1<<BIT);com o pino posto em output. Aí, não interessa o valor lido pelo pino, mas sim se está ligado ou desligado, e que queremos alterar isso (tinha a ideia que esta instrução poderia alterar os outros pinos pois pensava que 0^0 = 1, mas estava enganado).
O != false funciona, mas aconselho a que, em vez de usares o == ou != quando estás a trabalhar com valores em que interessa apenas o seu valor lógico, uses operadores lógicos (substituir o && por ==, etc. pois aí retiras o problema de comportamentos indefinidos.

EDIT: Oops, alterei o XOR xD estava distraído quando fiz :P Senão nunca fazia o toggle, ficava sempre desligado.
« Última modificação: 12 de Setembro de 2010, 20:13 por Cynary »

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Programar Arduino/AVR -- low level.
« Responder #20 em: 12 de Setembro de 2010, 19:41 »
Basta fazeres: PORTB ^= (1<<BIT);

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: Programar Arduino/AVR -- low level.
« Responder #21 em: 21 de Setembro de 2010, 09:43 »
Todos os tutoriais foram compilados numa ordem mais lógica num PDF!
Esse PDF encontra-se anexo ao post inicial.
Para manter o tópico mais limpo, os comentários servirão para comentar os tutoriais e outras discussões, enquanto os tutoriais estarão exclusivamente no PDF.
Para isso, eliminei os tutoriais que estavam em posts separados.

Comentários, críticas e sugestões são bem vindos :)
Obrigado ao Njay por me ter deixado usar o seu micro-tutorial.

Quando ocorrerem actualizações, avisarei num post.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Programar Arduino/AVR -- low level.
« Responder #22 em: 21 de Setembro de 2010, 19:16 »
Acho que devias ter mantido aqui os tutoriais todos, assim era menos um download e o pdf pode sempre desaparecer em actualizações ao forum.
Avr fanboy

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: Programar Arduino/AVR -- low level.
« Responder #23 em: 21 de Setembro de 2010, 20:23 »
Acho que devias ter mantido aqui os tutoriais todos, assim era menos um download e o pdf pode sempre desaparecer em actualizações ao forum.

Quanto ao PDF desaparecer, estou a ver se o movo para um host permanente (ou pelo menos que tenha confiança que vá durar muito tempo xD), para evitar isso.
Mas isto estava a ficar um pouco desorganizado :S
Os tutoriais e a discussão acerca do funcionamento de C estavam a ficar um pouco misturados demais lol.
Quanto a mais um download, posso sempre separar os vários tutoriais em diferentes ficheiros, assim podem ler o que for mais conveniente, mas penso que não é uma urgência grande.
No entanto, posso sempre repostar tudo. Mas gostaria primeiro de saber a opinião de mais pessoas.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Programar Arduino/AVR -- low level.
« Responder #24 em: 21 de Setembro de 2010, 23:38 »
O mais um download é que no forum era só abrir o forum e ler, assim tens de sacar e passar para o pdf e tal, mas isso é coisas minimas.
Tenho uma sugestão ou duas quanto ao pdf em si, eu não usaria espaçamento de linha e meia em todo o pdf e procurava uma fonte mono-espaçada e outra cor de texto para o código, e dava uma revisão em termos de espaçamentos e isso que alguns estão meio estranhos.
Avr fanboy

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: Programar Arduino/AVR -- low level.
« Responder #25 em: 26 de Setembro de 2010, 19:57 »
Documento alterado no primeiro post.
Adicionei um tutorial sobre ADC.
Peço desculpa pela demora.
Para o próximo fim-de-semana, em princípio coloco um tutorial sobre comunicação em serial.
Se tiver tempo, ainda experimento comunicação entre dois micro-controladores, e será o exemplo usado ;).
Quanto às mudanças de formatação, tive em conta a vossa opinião, e fiz algumas alterações. Penso que ficou mais apresentável.

senso: Mantive o espaçamento de 1,5, penso que é mais legível assim. No entanto, tinhas razão quanto a espaçamentos esquisitos. Estavam a acontecer pois estava a editar o documento total e os tutoriais separados em documentos separados. Os tutoriais não tinham rodapé, logo quando copiava para o principal com rodapé, as imagens por vezes chateavam um pouco, mas resolvi tirando o rodapé do principal. Também não fazia nada a mais do que a capa já fazia :P. Quanto ao código, alterei a fonte, tens razão, fica melhor. No entanto, testei com várias cores, e não pensei que ficasse muito bem, acho que já fica bastante destacado do resto do texto com o espaçamento e fonte diferentes e o itálico. Tens alguma ideia para uma cor?

Uma questão: Para destacar o código do texto, ponho-o em itálico. Acham que fica bem, ou está destacado o suficiente sem isso?

Se quiserem, posso colocar também os tutoriais individuais em PDF, em vez de estar tudo junto. Se pelo menos uma pessoa achar uma boa ideia, coloco.

Um pedido: Se alguém tiver tempo e disponibilidade, agradecia que pegassem nas imagens desenhadas à mão, e tentassem fazer uma versão digital mais bonita xD. Para edição de imagens não tenho muito jeito :S
Assim que tiver tempo, vou ver se uso o eagle para fazer os circuitos mais bonitos. Os gráficos é que não sei bem que programa usar para os fazer.

EDIT: Quando postei isto originalmente, tinha-me esquecido de um tópico sobre o ADC -- o termómetro interno. Além disso, estava em falta uma pequena descrição da diferença entre sinal digital e analógico. Já actualizei o documento com essas informações que estavam em falta.
« Última modificação: 26 de Setembro de 2010, 20:25 por Cynary »

Offline Capeleiro

  • Mini Robot
  • *
  • Mensagens: 127
Re: Programar Arduino/AVR -- low level.
« Responder #26 em: 27 de Setembro de 2010, 20:22 »
Eu tenho uma dúvida:
Como é que a biblioteca Servo.h consegue controlar servos em tantos pins do ATMega?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Programar Arduino/AVR -- low level.
« Responder #27 em: 27 de Setembro de 2010, 20:47 »
Funciona por interrupção e cria sinais pwm por software em vez de recorrer só a timers.
Avr fanboy

Offline Capeleiro

  • Mini Robot
  • *
  • Mensagens: 127
Re: Programar Arduino/AVR -- low level.
« Responder #28 em: 27 de Setembro de 2010, 20:53 »
Funciona por interrupção e cria sinais pwm por software em vez de recorrer só a timers.
Bem me parecia... Obrigado.

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: Programar Arduino/AVR -- low level.
« Responder #29 em: 03 de Outubro de 2010, 20:02 »
Esta semana não irá haver tutorial.
Estava a pensar fazer um sobre comunicação serial, mas visto que o senso já fez um excelente, tornou-se desnecessário xD
Depois pensei fazer um sobre I2C, mas ainda não tive tempo para estudar esse protocolo a 100%, e visto que estou à espera de alguns dispositivos que usam I2C, vou deixar o tutorial para a semana, de forma a ter mais exemplos :P