collapse

* Posts Recentes

TV Risco Horizontal por SerraCabo
[Ontem às 22:53]


Recuperação de um AGC por SerraCabo
[Ontem às 21:58]


Placa BMS Desliga por almamater
[Ontem às 14:16]


Potênciometro 4.7 ou 5 KOhm com switch por Hugu
[Ontem às 00:02]


é preciso ter cuidado com ESD? por Hugu
[17 de Dezembro de 2018, 18:50]


Valores de alcance de ponta de prova por vasco
[17 de Dezembro de 2018, 14:28]


Como reproteger as pontas de cobre do ferros de soldar? por vasco
[16 de Dezembro de 2018, 18:53]


Bibliotecas para arduino e drivers de stepper - o problema da 'distracção' por SerraCabo
[14 de Dezembro de 2018, 12:12]


Zener BZW04-105? por brunus
[11 de Dezembro de 2018, 17:34]


Artigo 11, 13 e os restantes por jm_araujo
[10 de Dezembro de 2018, 11:05]

Autor Tópico: Como escrever em varios Pinos  (Lida 2110 vezes)

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

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Como escrever em varios Pinos
« 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:



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.

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:Como escrever em varios Pinos
« Responder #1 em: 23 de Agosto de 2009, 17:10 »
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

;)
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.396
    • Tróniquices
Re:Como escrever em varios Pinos
« Responder #2 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).

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Re:Como escrever em varios Pinos
« Responder #3 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.