LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: senso 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?
-
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
-
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:
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);
}
-
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:
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
-
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
-
Só faltam aí uns bits, micro.
void setup (void) {
DDRB = 0xff;
}
void loop (void) {
PORTB++;
delay (1000);
}
-
Obrigado :D