Use todos os pinos Como E / S digital


11

Aumentar o número de pinos digitais

Existem muitos posts que explicam como usar mais do que apenas os pinos padrão nos vários arduinos, mas nenhum deles explica as limitações e os proplems corretamente.

insira a descrição da imagem aqui

Arduino Uno:

1.Você pode usar os pinos analógicos

Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

digitalWrite(14,HIGH);
or
digitalWrite(A0,HIGH);

2.Você não pode usar SDA, SCL e A4, A5, pois eles são basicamente os mesmos (18,19).

3.Você também pode usar o TX / RX.

"Não faça isso, você interrompe a comunicação serial ..."

"Nunca use os pinos 0 e 1"

"você não pode usar os pinos TX / Rx"

Você pode ... mas precisa tomar precauções. Quais?

Deveria ter software serial via USB, certo?

Ou eu quebro o serial USB?

Existem problemas internos de chip se eu usar o TX / RX?

Como eu uso os pinos TX / RX no código, provavelmente não devo usar Serial.print()?

O que acontece se eu esquecer de remover Serial.print()depois de enviar o código que usa os pinos 0,1?

Como redefinir o hardware do arduino / bootloader se algo der errado?

Como existem vários outros Arduino que usam chips diferentes, o acima é válido para todos os chips Atmel?

Então, o que devo saber antes de usar os TX / RX ou também os outros pinos analógicos?

Existem shiftregisters baratos, drivers pwm, drivers led, spi, i2c e mais ics para expandir sua E / S


Mas se não houver grandes problemas, significa que o arduino possui 20 pinos de E / S ...

Você poderia controlar teoricamente:

17x3 = 51 = 17 RGB leds (multiplexing, pwm sourcing&sinking);
14x6 = 84 leds (multiplexing, pwm on 6 rows/colums );
10x10 = 100 leds (multiplexing, high low);
20x(20-1) = 380 leds (charlieplexing, high low);
// yes it would flicker

Corrija-me se eu estiver errado. Isso significa que você é capaz de controlar 380 "Whatever" usando diodos e um arduino.

Respostas:


8

O principal problema é com os pinos 0 e 1.

Muitos pinos têm várias funções atribuídas a eles, como A4 e A5 também são os pinos I2C, pinos 10/11/12/13 também são os pinos SPI etc. etc. Mas os pinos 0 e 1 são os únicos pinos multifuncionais que realmente tem algo anexado a eles no quadro.

Todos os outros pinos, embora sejam multifuncionais, têm sua função definida basicamente pelo que você anexa a eles. Como os pinos 0 e 1 já estão conectados à placa no chip da interface USB, suas possibilidades de uso são um pouco mais limitadas.

  • Assim que você ativar Serial em seu sketch ( Serial.begin()), esses dois pinos não poderão mais ser usados ​​com segurança para E / S digital.

Isso significa que você pode tanto usar a porta serial hardware ou você pode usar os pinos de IO digital, mas não ambos.

  • Os dispositivos conectados aos pinos 0 e 1 podem interferir na conexão serial

Isso inclui o upload de esboços. Você recebe dados seriais do PC enquanto os mesmos pinos estão sendo afetados por outras coisas conectadas a eles. O mais comum são coisas como módulos de GPS que se conectam a esses pinos e enviam constantemente dados seriais. Esses dados seriais entrarão em conflito com os dados seriais do PC e nem chegarão corretamente.

  • Como você envia esboços se a série está sendo interferida pelo seu esboço? Como você "redefine" o quadro?

Você não Não é o seu desenho que está interferindo na série, é o que está fisicamente conectado aos dois pinos de entrada / saída que estão interferindo. Apenas desconecte esses dois pinos do que estiver conectado e você poderá enviar os esboços novamente. Muitos escudos agora estão começando a adicionar um pequeno interruptor neles para desconectar esses pinos, para que você possa carregar esboços sem desconectar o escudo. Você também pode usar o mesmo truque com outros dispositivos conectados a esses pinos - adicione um lance duplo de pólo único ou duplo lance duplo (e não use uma posição) para isolar facilmente os dois pinos do restante seu hardware quando você precisar.

  • Isso afeta todas as placas do Arduino?

Não, apenas aqueles que usam um chip de ponte USB para serial - são coisas como Uno, Due, Mega, etc. As placas que possuem uma conexão USB direta não usam os pinos TX e RX para fazer upload de esboços - eles usam o USB dedicado Pinos D + e D-. São pranchas como a Leonardo, algumas das menores (mini? Micro? Eu esqueço quais), etc.


"Muitos escudos agora estão começando a adicionar um pequeno interruptor" legal. Micro tem "USB para chip de ponte serial"? Isso significa que posso usar pinos 0,1 em uno, mas não em micro?
Cocco

Você pode usá-los em qualquer que não tenha uma ponte USB para serial. O Uno possui um, o Mega possui um, o Mini não possui um, no entanto, é necessário conectar um externamente aos pinos TX / RX para programá-lo. Todos esses estão fora. O Micro e o Leonardo não têm um, então você pode usá-los.
Majenko

É disso que Nick Gammon está falando? Uno e os outros que você anotou têm resistores pullup que não permitem o uso adequado dos pinos 0 e 1, mas o Micro não possui resistores pullup e, portanto, os pinos 0 e 1 funcionam corretamente e também o usb para carregar novos esboços?
Cocco

Pela primeira vez Nick está enganado nesse ponto. Não há resistores de pullup. Existe um par de resistores em linha pequenos para evitar problemas se o MCU principal e o chip USB tentarem conduzir a mesma linha para níveis opostos ao mesmo tempo. Você pode vê-los no esquema Uno como RN4A e RN4B.
Majenko

Se o chip USB tentar acionar o pino RX (você tem a porta USB conectada e você abre a conexão serial (ou talvez esteja apenas conectada, não tenho certeza])), isso pode afetar a voltagem no pino RX, independentemente do que seja você está fazendo no seu esboço, portanto, pode não ser seguro usar esse pino para coisas como charlieplexing.
Majenko

1

Não posso comentar devido à reputação insuficiente, mas quero ressaltar que a pinagem do OP tem pelo menos um pin errado!

PB6 deve ser PB5

Passei bastante tempo tentando descobrir por que não conseguia ver o SCK no escopo (barramento SPI). Eu estava trabalhando em um nível baixo, não com o IDE.

Como esta é a primeira foto que aparece ao pesquisar no Google, eu queria evitar o mesmo problema para os outros ...


0

20x (20-1) = 380 leds (charlieplexing, alto baixo); Corrija-me se eu estiver errado. Isso significa que você é capaz de controlar 380 "Whatever" usando diodos e um Arduino.

Primeiro, a figura 380 está correta para 20 pinos (20 2 - 20), no entanto, os pinos 0 e 1 são conectados aos resistores pull-up no Atmega16U2, portanto nunca estão realmente em 0V. Se você carregar um esboço em branco, medirá 5 V nos pinos 0 e 1.

Segundo, você não pode dirigir 380 "em qualquer lugar", você pode dirigir 380 LEDs via Charlieplexing. A propriedade do LED, que a corrente flui apenas de uma maneira, é importante para a maneira como funciona.

Pergunta relacionada Existe uma maneira de ter mais de 14 pinos de saída no arduino?


Primeiro: o que acontece se eu colocar 2 leds invertidos (com resistores) nos pinos 0 e 1, definir o pino 0 pino alto 1 atraso baixo 1 segundo e definir o pino 0 baixo e o pino 1 atraso alto 1seg?
Cocco

Segundo: Por "whatevers", quero dizer interruptores ... clique em interruptores, interruptores de palheta, sensores ou todo tipo de combinação de entradas e saídas que suportam alto baixo. electronicdesign.com/site-files/electronicdesign.com/files/… feito com diodos.
Cocco

Bem, na verdade não. O Charlieplexing é uma forma de multiplexação; portanto, a menos que você queira que seus comutadores cliquem como loucos, isso realmente não funcionará para eles. E é uma situação de saída, para que você não faça entradas, como parece pensar. Eu sugiro que você leia os outros links. Registros de turno, ou expansores de porta, são mais práticos do que o Charlieplexing aqui.
Nick Gammon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.