collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • 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.733
  • 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.598
    • 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.733
  • 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