LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: tcustodio em 07 de Julho de 2009, 23:54

Título: dor de cabeça com o pino 13
Enviado por: tcustodio 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?
Título: Re:dor de cabeça com o pino 13
Enviado por: metRo_ 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.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Flh3.ggpht.com%2F_i2teYMYP9C0%2FSlP50gj1VxI%2FAAAAAAAAAiw%2FYoDDI0ViG5c%2Fs400%2FCaptura%2520de%2520ecr%25C3%25A3%2520total%252008-07-2009%2520024302.jpg&hash=73979efc6d0811b443783cac60cf6a00f886e792) (http://picasaweb.google.com/josescxavier/LusoroboticaComCoisas#5355899062362396434)
Título: Re:dor de cabeça com o pino 13
Enviado por: Njay 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".
Título: Re:dor de cabeça com o pino 13
Enviado por: tcustodio 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
Título: Re:dor de cabeça com o pino 13
Enviado por: Fifas em 08 de Julho de 2009, 15:34
no site do arduino tens os esquemas dele :)
Título: Re:dor de cabeça com o pino 13
Enviado por: metRo_ 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 (http://arduino.cc/en/Main/ArduinoBoardDuemilanove)

Esquema Arduino (http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf)
Título: Re:dor de cabeça com o pino 13
Enviado por: Njay 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 (http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf)
Título: Re:dor de cabeça com o pino 13
Enviado por: tcustodio 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...
Título: Re:dor de cabeça com o pino 13
Enviado por: Njay 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.
Título: Re:dor de cabeça com o pino 13
Enviado por: tcustodio 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?  :-\
Título: Re:dor de cabeça com o pino 13
Enviado por: Njay 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
Título: Re:dor de cabeça com o pino 13
Enviado por: tcustodio 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.
Título: Re:dor de cabeça com o pino 13
Enviado por: Tyran 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
Título: Re:dor de cabeça com o pino 13
Enviado por: tcustodio 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