collapse

* Links de Robótica

* Posts Recentes

Ideias para construir um quadrúpede simples por Njay
[Hoje às 03:04]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]


Power_OK Enermax por edeweld
[12 de Novembro de 2017, 17:15]


Driver motor por beirao
[11 de Novembro de 2017, 17:40]


Preciso de uma fonte de corrente constante ? por samc
[09 de Novembro de 2017, 14:18]


Pressoestato 0-10V por artur36
[07 de Novembro de 2017, 23:22]

Autor Tópico: Utilizar porto de saida em vez de pino a pino  (Lida 2043 vezes)

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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.400
  • Helpdesk do sitio
Utilizar porto de saida em vez de pino a pino
« em: 10 de Março de 2010, 16:53 »
Olá a todos, bem sei que o nome do tópico não é o mais claro, mas como comprei agora um arduino quero brincar com aquilo e ao usar a linguagem de programação do mesmo deparei-me com uma duvida que gostava de resolver, aqui vai:
Tenho 8 led's ligados no arduino, por exemplo do digital 2 até ao digital 9 e queria basicamente meter o arduino a contar até 255 em binário, mas não estou a ver como fazer isso, quer dizer sem ser PORTC |= count, penso que seja assim usando os registos.
Alguém pode ajudar?
Avr fanboy

Offline p0wd3r

  • Mini Robot
  • *
  • Mensagens: 74
Re: Utilizar porto de saida em vez de pino a pino
« Responder #1 em: 10 de Março de 2010, 19:00 »
Que confusão aí vai ãh  ???

Primeiro falas em portos, depois em contagens! Pelo que percebi tens 8 LED's ligados a um porto e queres contar até 255 para depois fazer alguma coisa. Para fazeres isso podes recorrer ao timer/counter do microcontrolador. Facilmente vais perceber isso se leres um bocadinho  :P

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Utilizar porto de saida em vez de pino a pino
« Responder #2 em: 10 de Março de 2010, 19:12 »
Que confusão aí vai ãh  ???

Primeiro falas em portos, depois em contagens! Pelo que percebi tens 8 LED's ligados a um porto e queres contar até 255 para depois fazer alguma coisa. Para fazeres isso podes recorrer ao timer/counter do microcontrolador. Facilmente vais perceber isso se leres um bocadinho  :P
Não vai confusão nenhuma. Quer fazer uma contagem em binário com 8 LEDs.

Vê lá se consegues fazer alguma coisa com este exemplo que encontrei:
Código: [Seleccione]
unsigned char count;

void setup (void) {
  pinMode (8, OUTPUT);
  pinMode (9, OUTPUT);
  pinMode (10, OUTPUT);
  pinMode (11, OUTPUT);
  pinMode (12, OUTPUT);
}

void loop (void) {
  PORTB = count++;
  delay (500);
}

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.400
  • Helpdesk do sitio
Re: Utilizar porto de saida em vez de pino a pino
« Responder #3 em: 10 de Março de 2010, 19:34 »
Ainda ontem fiz precisamente isso numa aula prática de uma cadeira minha, mas usando um 80186(bem antigo eheh), e em asm é bem simples, este programa começa em 00000000 e vai incrementando o valor de 1 em 1 bit e sempre que um bit está a um o led referente fica ligado, é uma coisa muito simples e básica mesmo:
Código: [Seleccione]
start:
mov ax, cs
mov ds, ax
nop
call main
int 0x10                        ;Código de inicialização e coloca ds=cs
;
ADDR EQU 0x7800 ;Endereço da minha placa usa o IO7
Dig1 EQU 0x7F
;

main:
mov dx,ADDR
mov al, Dig1
L1: out dx, al                        ;Loop L2 faz a escrita sucessiva do valor de al
mov cx, 20000
L2: dec cx                             ;Loop L2 implementa um delay para que se possa ver os led's a mudar de estado
jnz L2
jmp L1
ret

Sei que usando c para avr teria de configurar o registo DDR referente a um porto á minha escolha, mas como já me disseram, só o porto D é que está completamente acessível e mesmo assim o bit 0 e o bit 1 do porto estão "reservados" para os sinais Rx e Tx, logo quanto muito fazia um contador com 6 led's.
Mas poderia haver algo para simplificar a escrita num porto inteiro já que os digitalWrites são criados a partir de bitmasking em cada porto, mas parece que só mesmo programando os registos directamente
Avr fanboy

Offline p0wd3r

  • Mini Robot
  • *
  • Mensagens: 74
Re: Utilizar porto de saida em vez de pino a pino
« Responder #4 em: 10 de Março de 2010, 22:51 »
Não vai confusão nenhuma. Quer fazer uma contagem em binário com 8 LEDs.

xiii então não tem nada a ver com aquilo que percebi  :o Agr sim, entendi o que ele quer  ;D

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.136
    • Tróniquices
Re: Utilizar porto de saida em vez de pino a pino
« Responder #5 em: 11 de Março de 2010, 00:09 »
Só faltam aí uns bits, micro.

Código: [Seleccione]
void setup (void) {
    DDRB = 0xff;
}

void loop (void) {
    PORTB++;
    delay (1000);
}

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.400
  • Helpdesk do sitio
Re: Utilizar porto de saida em vez de pino a pino
« Responder #6 em: 11 de Março de 2010, 19:44 »
Obrigado :D
Avr fanboy