collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: GPIOs explicados - e aplicados ao AVR em C  (Lida 12708 vezes)

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

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
GPIOs explicados - e aplicados ao AVR em C
« em: 05 de Julho de 2009, 13:10 »
Acabei de escrever uma nova parte do micro-tutorial de AVR. É sobre as entradas/saídas digitais, que é uma coisa básica, mas explica de um modo geral como funcionam os tipos de configuração que se pode fazer num pino GPIO. Um GPIO é um conceito, e logo aplicável a qualquer microcontrolador. Atirem comentários, sugestões, críticas, tomates podres virtuais, estejam à vontade :)

GPIO - General Purpose Input/Output (actualizado! obrigado pela dica _metRo!)

Actualização: Fica aqui um link para uma versão em PDF das 2 partes do tutorial, porque faltam algumas imagens no original e já não tenho mais paciência para andar atrás dos tipos do imageshack para corrigirem os problemas:
Micro Tutorial AVR - Njay
« Última modificação: 03 de Julho de 2010, 01:09 por Njay »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #1 em: 05 de Julho de 2009, 15:06 »
1)
Citar
Um pino entra no 4ª modo quando o respectivo periférico é activado, pelo que não vamos debruçar-nos aqui sobre isso.

4º em vez de 4ª.

2)
Citar
PORTB |= _BV(PB1) é um "OU" (OR) do registo PORTB com o valor _BV(PB1); isto tem o efeito de colocar a 1 apenas o bit 1 de DDRB.

Não percebi porque é que usas-te um OU em vez de um AND

3)
Utilizando a linguagem do Arduino seria:

Citar
pinMode(1, INPUT);    
digitalWrite(1, HIGH);


O tutorial está excelente, já li tudo e para além disto não tenho mais anda a apontar, explicas-te tudo muito bem.
Vou começar a seguir os teus tutoriais e ler os que já fizes-te.
Parabéns e Obrigado :)

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #2 em: 05 de Julho de 2009, 15:18 »
1)
Citar
Um pino entra no 4ª modo quando o respectivo periférico é activado, pelo que não vamos debruçar-nos aqui sobre isso.

4º em vez de 4ª.
Ok, corrigido!

2)
Citar
PORTB |= _BV(PB1) é um "OU" (OR) do registo PORTB com o valor _BV(PB1); isto tem o efeito de colocar a 1 apenas o bit 1 de DDRB.

Não percebi porque é que usas-te um OU em vez de um AND
Porque é suposto pôr o bit a 1 e não a 0.

3) Utilizando a linguagem do Arduino seria:

Citar
pinMode(1, INPUT);    
digitalWrite(1, HIGH);
Sim, mas o tutorial não é sobre Arduino.

O tutorial está excelente, já li tudo e para além disto não tenho mais anda a apontar, explicas-te tudo muito bem.
Vou começar a seguir os teus tutoriais e ler os que já fizes-te.
Parabéns e Obrigado :)

Obrigado eu :)

p.s. Escreve-se "usaste", "explicaste" e "fizeste".

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #3 em: 05 de Julho de 2009, 15:22 »
obrigado pelas correcções  :-\

Eu sei que não era sobre Arduino. Exacto já percebi o OU, se fosse AND e lá estivesse um 0 ia dar 0.

Offline msr

  • Mini Robot
  • *
  • Mensagens: 798
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #4 em: 05 de Julho de 2009, 15:27 »
Aqui vai mais uma pecuinhísse :P
Citar
GPIOs na architectura AVR

Esta teve piada! eheh

Ainda ontem estive a ler qq coisa a este respeito mas em relação aos PICs. Por agora nao tenho tempo de ler com a atenção que gostaria, mas mais tarde o farei de certeza, até para perceber eventuais diferenças entre os PICs e AVR.
Obrigado Njay!

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #5 em: 05 de Julho de 2009, 15:32 »
Aqui vai mais uma pecuinhísse :P
Citar
GPIOs na architectura AVR

Esta teve piada! eheh

Pois... sabes o que é não sabes? Hábito de escrever em inglês  :-\. Obrigado, vou já alterar.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #6 em: 05 de Julho de 2009, 17:28 »
Muito bom njay, só li na diagonal mas gostei... vou meter nos favoritos para depois ler mais atentamente!

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #7 em: 05 de Julho de 2009, 20:39 »
Grande NJAY, é sempre bom ver esse excelente trabalho!
Continua, está óptimo!

um abraço, Sena



Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #8 em: 05 de Julho de 2009, 21:55 »
parabens pelo o excelente trabalho, pois está muito bom na apesentação e conteudo

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #9 em: 05 de Julho de 2009, 22:07 »
Muito bom ;)

Já agora na parte do _BV( x) podias dar a macro mesmo: #define _BV(bit) (1 << (bit))
Eu até gosto mais de usar (1 << x) lol

E já agora também que se escrever 1's nos PIN faz o toggle ao PORT

cumpzz e continuação de bom trabalho :)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: GPIOs explicados - e aplicados ao AVR em C
« Responder #10 em: 25 de Outubro de 2009, 00:27 »
Njay podes actualizar o link?

StarRider

  • Visitante
Re:GPIOs explicados - e aplicados ao AVR em C
« Responder #11 em: 27 de Novembro de 2009, 13:38 »
Citação de: metRo_

Citar
PORTB |= _BV(PB1) é um "OU" (OR) do registo PORTB com o valor _BV(PB1); isto tem o efeito de colocar a 1 apenas o bit 1 de DDRB.

Utilizando a linguagem do Arduino seria:

pinMode(1, INPUT);     
digitalWrite(1, HIGH);


A diferença é que:
PORTB |= 0x80
resulta num máximo de 2 ciclos do clock e 2 bytes de código

Enquanto que:
pinMode(1, INPUT);     
digitalWrite(1, HIGH);
resulta em pelo menos uns 40 ciclos do clock e outros uns 40 bytes de código (ou lá perto).

Agora junta muitos exemplos destes e vais ver que no final usar a tal "linguagem do Arduino"  só leva a
mais código e menor performance do AVR.

A "linguagem do Arduino" , sendo não mais que um conjunto de funções de alto nível , serve somente
para abstrair o utilizador do hardware, de resto não tem qualquer outra vantagem.

O mais interessante é que com um qualquer outro  compilador de C e com o hardware do Arduino é
possível fazer realizar exactamente as mesmas tarefas muito mais rápido e com muito menos código.

Abraços
Paulo A.
« Última modificação: 27 de Novembro de 2009, 14:48 por StarRider »

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: GPIOs explicados - e aplicados ao AVR em C
« Responder #12 em: 27 de Novembro de 2009, 15:08 »
Exacto StarRider estás correcto em relação ao facto da "linguagem" promovida pela comunidade Arduino tirar pouco rendimento da arquitectura AVR e levar a mais bytes de código e menos eficiência.

Contudo o objectivo da comunidade Arduino é introduzir a electrónica e programação a pessoas que nunca tenham tocado nesta área, isto é, cativar mais "mentes" para estas áreas (Electrónica, programação, robotica). O Arduino sendo uma plataforma para iniciados, justifica-se o facto de eles terem feito estas bibliotecas que facilitam o uso de todos os periféricos, GPIOs, etc. do microcontrolador AVR.

Na minha opinião, para um iniciante não há nada melhor do que ja ter a "papinha toda feita" em funções destas :P. Até para alguém com experiência, para testar alguma coisa rapidamente estas funções são bastante úteis!
Quando já estamos bem "ambientados" com a plataforma, concordo perfeitamente que se comece a estudar e fazer os possíveis para descer um pouco de nível e começar a programar usando  estes "pequenos truques".

Relembro mais uma vez que este tutorial não é sobre Arduino (embora aplicável) mas sim sobre a arquitectura AVR. ;)
« Última modificação: 27 de Novembro de 2009, 15:16 por tr3s »
Tr3s
Daniel Gonçalves

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.531
Re: GPIOs explicados - e aplicados ao AVR em C
« Responder #13 em: 30 de Julho de 2010, 17:23 »

Tendo em conta o tutorial do Njay, estava a tentar programar em AVR, com a placa que asena me vendeu: http://lusorobotica.com/index.php?topic=2586.0

Mas não tou a conseguir :/ instalei o ISP que vem na disquete e o stk300 application builder... instalei tmbem o winAVR.. acho que não tou a configurar bem o application builder.. alguem já trabalhou com esta placa ou que perceba disto?
 (njay deves ser o mais indicado...:p)
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: GPIOs explicados - e aplicados ao AVR em C
« Responder #14 em: 30 de Julho de 2010, 23:28 »
Nunca trabalhei com essa placa nem com esse tal de "application builder". Mas isso não trás manual? Se não trouxer encontras na net, acho que está disponível para download. Se é uma placa de programação por porta paralela não deves poder usar cabos maiores que uns 40-50cm (já contando com possíveis cabos extensores).