collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


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

Autor Tópico: dor de cabeça com o pino 13  (Lida 5315 vezes)

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

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
dor de cabeça com o pino 13
« em: 07 de Julho de 2009, 23:54 »
pessoal, estou aqui com uma dúvida,
ando a brincar com midi e meti um interruptor em todos os pinos (pino 2 ... 13), e de seguida meti-os como Input e liguei as resistências de Pull-up. Assim é fácil fazer um "teclado" pra tocar notas, mas o problema, é que enquanto que todos os pinos agem como espero, ou seja, quando fecho o interruptor, o arduino detecta aquele pino como Low, o pino 13 não. vejo o led do pino 13 brilhar um pouco, e quando fecho o seu interruptor, ele apaga-se, mas o arduino não detecta nada.
Não estou a conseguir compreender, parece que não conheço o arduino bem como deve ser...

alguém me dá algumas luzes?
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:dor de cabeça com o pino 13
« Responder #1 em: 08 de Julho de 2009, 02:45 »
Estive a tentar se a maneira como têm o led ligado poderia influenciar isso mas não me parece.



Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:dor de cabeça com o pino 13
« Responder #2 em: 08 de Julho de 2009, 03:14 »
Como tens o pull-up ligado, está sempre a circular uma corrente através da resistência de pull-up, da resistência do LED e do LED (o que acende o LED). Como essa resistência é alta, a corrente faz com que haja uma queda de tensão tal que o AVR já não lê o pino como sendo "1". Quando carregas no botão estás a ligar o pino 13 à massa e portanto deixa de circular corrente através do LED e ele apaga.
É o que me parece que tá a acontecer. O teu problema não é tares sempre a ler zero do botão? Experimenta por exemplo medir a tensão no pino 13 com um multimetro (com o botão solto) a ver se não dá um valor "baixo".

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:dor de cabeça com o pino 13
« Responder #3 em: 08 de Julho de 2009, 15:32 »
com o interruptor aberto leio cerca de 1v no pino 13... quando fecho, lê 0v, mas o arduino não reage...

bem, mas se isto deve-se mesmo por causa do led e da sua resistência, não é crítico, pró projecto que tenho em mente vou usar mesmo um atmega168 integrado no circuito que irei fazer, aí já não deverá haver este problema...

para resolver isto temporariamente, levantam-se outras dúvidas em mim:

 - posso usar o pino 0 (tx) para leituras digitais enquanto uso o pino 1 (rx) para enviar dados pla porta de série? (duvido, mas prefiro perguntar na mesma).

 - sei que também posso usar os pinos dos conversores adc como digitais, mas posso usar um destes pinos como conversor adc enquanto os outros são apenas digitais?


PS: _metRo, onde arranjaste esses esquemas do circuito do arduino? estou curioso, dava pra eu matar a curiosidade quanto a alguns componentes :P
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.064
  • El RoboSapiens
Re:dor de cabeça com o pino 13
« Responder #4 em: 08 de Julho de 2009, 15:34 »
no site do arduino tens os esquemas dele :)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:dor de cabeça com o pino 13
« Responder #5 em: 08 de Julho de 2009, 18:00 »
Tal como o Fifas disse, aliás eu era para ter dito quando postei a imagem, tens o esquema nesta página: http://arduino.cc/en/Main/ArduinoBoardDuemilanove

Esquema Arduino

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:dor de cabeça com o pino 13
« Responder #6 em: 08 de Julho de 2009, 19:54 »
com o interruptor aberto leio cerca de 1v no pino 13... quando fecho, lê 0v, mas o arduino não reage...
Lá está, com o botão solto tens apenas 1V quando devias ter cerca de 5V. 1V para o arduino já é um zero. Portanto lês sempre a mesma coisa desse pino: zero.

- posso usar o pino 0 (tx) para leituras digitais enquanto uso o pino 1 (rx) para enviar dados pla porta de série? (duvido, mas prefiro perguntar na mesma).
Terás que "cavar" na datasheet do mega168, na secção que fala sobre a UART. Mas eu diria que não consegues fazer isso (o contrário já credito que sim, ler cenas do RX e estar a usar o TX para transmissão série).

- sei que também posso usar os pinos dos conversores adc como digitais, mas posso usar um destes pinos como conversor adc enquanto os outros são apenas digitais?
Alguns pinos são apenas digitais. Outros são digitais ou ADC. Abres a datasheet do mega168 e vês logo na 2ª página quais são os pinos que são digitais e ADC (os que têm "ADCx"). Todos os pinos podem ser configurados individualmente para funções diferentes (excepto quando se trata de perféricos como a UART, o SPI, etc).

Update: datasheet do ATmega168
« Última modificação: 08 de Julho de 2009, 19:55 por Njay »

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:dor de cabeça com o pino 13
« Responder #7 em: 08 de Julho de 2009, 20:34 »
enganei-me ali em cima no que pretendia ca porta série, pretendo mandar normalmente plo TX, mas usar o RX para ler o estado de um interruptor.

compreendo o que dizes, mas fiz o código de maneira a que ele reaja caso encontre um zero:

no setup tenho:
DDRB = B000000;
PORTB = B111111;
Para meter os pinos 8-13 como inputs e com os pull-ups ligados
Código: [Seleccione]
for (int b = 0; b <= 6; b++){
    if ((bitRead(PINB, b) == 0) && (bitRead(estado_B, b) == 0)){
// se o pino estiver LOW, e se estiver registado que estava desligado:
      noteOn(0, oitava + notas_B[b], 127);
      bitSet(estado_B, b);                // regista no byte "estado_B" que o bit "b" foi ligado, para depois saber como reagir numa alteração
    } else if ((bitRead(PINB, b) == 1) && (bitRead(estado_B, b) == 1)){
// se o pino estiver HIGH, e se estiver registado que estava ligado, então é porque já tirei o dedo do botão:
      noteOff(0, oitava + notas_B[b]);
      bitClear(estado_B, b);              // regista que já foi desligado
    }

desde que o ligo, ele nunca reage ao pino 13, nem uma única vez... mas aos outros sim, sem problemas

bem, para a aplicação que quero eu não vou usar um arduino, vou usar um atmega168 que aqui tenho a mais, por isso, isto deve funcionar.
Já experimentei fazer digitalRead e analogRead do mesmo pino de x em x milisegundos, e funciona perfeitamente, por isso vou usar os analógicos para me safar por agora.
Na versão final o código nem vai ter ciclos for, vai ter todas as funções tim-tim por tim-tim.

O que é o meu projecto por agora não vou dizer, primeiro quero ter a certeza que o posso fazer, para não andar a desiludir as pessoas  :P

A ajuda que me deram já foi útil para compreender mais umas coisas  :D



PS: alguém tem alguma ideia de como construir um pedal de volume tipo as pedaleiras de guitarra? queria evitar ter que usar um potenciómetro no eixo do pedal...
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:dor de cabeça com o pino 13
« Responder #8 em: 08 de Julho de 2009, 20:38 »
Parece-me que estás só a registar as "mudanças", mas como o bit é sempre zero, nunca muda, e logo nada é detectado.

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:dor de cabeça com o pino 13
« Responder #9 em: 08 de Julho de 2009, 21:11 »
mas sendo assim ele não devia detectar logo no início da execução um zero no pino 13?  :-\
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re:dor de cabeça com o pino 13
« Responder #10 em: 08 de Julho de 2009, 21:54 »
Não sei, diz-me tu, o código é teu :)
Acho que depende do valor inicial de estado_B

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:dor de cabeça com o pino 13
« Responder #11 em: 08 de Julho de 2009, 22:24 »
Não sei, diz-me tu, o código é teu :)
Acho que depende do valor inicial de estado_B
Código: [Seleccione]
byte estado_B = B000000;
começa tudo a zero, por isso devia reagir plo menos uma vez... :-\

já fiz testes de tar sempre a fazer print na porta série do valor do pino 13, e de facto dá sempre 0
depois tentei meter resistências entre o pino 13 e a linha de 5v, tentei até um potenciómetro, e encontrei o limiar entre ler 0 e 1, mas pareceu-me ser um valor alto, pouco mais de 5kohms... mas mesmo com a resistência já nem o botão fazia efeito para ficar a zero.
Preciso de 13 digitais e um analógico para um "teclado" midi (com volume).

Se quiserem ver o código apitem.
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re:dor de cabeça com o pino 13
« Responder #12 em: 08 de Julho de 2009, 23:58 »
O pino 13 não é do porto D? E tu estás a ler aí do B...

Mas supondo que é isso, nesse ciclo for não estás a ir ao 7...

cumpzz

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:dor de cabeça com o pino 13
« Responder #13 em: 09 de Julho de 2009, 00:26 »
O pino 13 não é do porto D? E tu estás a ler aí do B...

Mas supondo que é isso, nesse ciclo for não estás a ir ao 7...

cumpzz

o porto D é dos pinos 0 ao 7
o pino 13 é o 6º do porto B, o 7º e 8º acho que estão ligados ao cristal
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.