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
-
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)
' 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.
-
tens que escrever nos Port Registers do atmega, tens 3 registos de portas no arduino:
- B (pinos 8 ao 13)
- C (pinos analógicos, também podem ser usados como digitais)
- D (pinos 0 ao 7)
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
;)
-
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).
-
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.