LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: AndréD. em 23 de Agosto de 2009, 16:51

Título: Como escrever em varios Pinos
Enviado por: AndréD. em 23 de Agosto de 2009, 16:51
Boas Pessoal...

Vou iniciar-me no arduino que me ade chegar na proxima semana, e surgio-me uma duvida (isto porque ja estou a tentar desenvolver o codigo para o meu Fibre Clock).

Bom entao é o seguinte, no sistema Picaxe para eu fazer aparecer o numero "2" como o ada imagem a baixo tinha que fazer uma sequencia e fazia-a da seguinte forma:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2F2.jpg&hash=852e638b9afcc4cb20eac84c8615ddeaba236017)

Código: [Seleccione]
' Numero 2
let pins = %00001101 ' Acende os Leds nas saidas (0,2,3)
pause 1
let pins = %00010101 ' Acende os Leds nas saidas (0,2,4)
pause 1
let pins = %00010101 ' Acende os Leds nas saidas (0,2,4)
pause 1
let pins = %00010101 ' Acende os Leds nas saidas (0,2,4)
pause 1
let pins = %00010110 ' Acende os Leds nas saidas (1,2,4)
pause 1
let pins = %00000000 ' Nao acende nenhum Led
pause 2

A minha duvida é como faço isto no Sistema Arduino?

Cumps
AndréD.
Título: Re:Como escrever em varios Pinos
Enviado por: tcustodio em 23 de Agosto de 2009, 17:10
tens que escrever nos Port Registers do atmega, tens 3 registos de portas no arduino:


Se usásses o registo de porta D, terias que declarar o código assim:

DDRD = B11111111;   o registo DDR, Data Direction Register, serve para declarar se os pinos são entradas ou saídas.
1 para output e 0 para input.

Depois para fazer os leds acenderem na disposição que queres, era só adaptares o código:

 ' Numero 2
PORTD = B00001101;  //Acende os Leds nas saidas (0,2,3)
delay(1);
PORTD = B00010101;  //Acende os Leds nas saidas (0,2,4)
delay(1);
PORTD = B00010101;  //Acende os Leds nas saidas (0,2,4)
delay(1);
PORTD = B00010101;  //Acende os Leds nas saidas (0,2,4)
delay(1);
PORTD = B00010110;  //Acende os Leds nas saidas (1,2,4)
delay(1);
PORTD = B00000000;  //Não acende nenhum Led
delay(2);

Dá uma olhadela nesta página:
http://arduino.cc/en/Reference/PortManipulation

;)
Título: Re:Como escrever em varios Pinos
Enviado por: Njay em 23 de Agosto de 2009, 17:16
Eu aconselho o uso do porto B, porque o D é onde estão os pinos da porta série.

Também aconselho a mexer só nos pinos que tencionamos mexer, escrevendo apenas nos respectivos bits e preservando os restante inalterados. Se fossem usados os primeiros 5 pinos do porto B (pinos digitais 8 a 12 do Arduino, que correspondem aos bits 0 a 4), para escrever "valor" fazia

PORTB = (PORTB & 0xE0) | valor;

Na inicialização também seria necessário mexer apenas nos bits que nos interessam deixando os restantes inalterados:

DDRB = (DDRB & 0xE0) | 0x1F;

0xE0 é um número em hexadecimal em que os bits 7 a 5 são "1" e os restantes "0"; 0x1F é um número em hexadecimal em que apenas os bits 0 a 4 são "1".

Assim garantimos que não interferimos com outras funcionalidades do programa (como a comunicação série com o PC).
Título: Re:Como escrever em varios Pinos
Enviado por: AndréD. em 23 de Agosto de 2009, 17:35
Boas...

Njay, percebi a razao pela qual dizes que preferes essa maneira, mas naão achas que é um pouco complicado de mais para quem se esta a iniciar?

Vou testar a maneira que o amigo tcustodio apresentou, depois quando "me sentir mais á vontade com C" experiemtno a tua maneira...

Muito obrigado aos dois pela preciosa ajuda.
Cumps
AndréD.