Use todos los pines como E / S digital

11

Aumentar el número de pines digitales.

Hay muchas publicaciones que explican cómo usar más que solo los pines estándar en los diversos arduinos, pero ninguno explica las limitaciones y los problemas correctamente.

ingrese la descripción de la imagen aquí

Arduino Uno:

1.Puedes usar los pines 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.No puede usar SDA, SCL y A4, A5, ya que son básicamente lo mismo (18,19).

3.También puedes usar el TX / RX.

"No lo hagas, rompes la comunicación serial ..."

"Nunca use los pines 0 y 1"

"no puedes usar los pines TX / Rx"

Puedes ... pero debes tomar precauciones. ¿Cuáles?

Debería tener software serial sobre USB, ¿verdad?

¿O rompo la serie USB?

¿Hay problemas internos de chip si uso TX / RX?

¿Como uso esos pines TX / RX en el código que probablemente no debería usar Serial.print()?

¿Qué sucede si olvido eliminar Serial.print()después de cargar el código que usa los pines 0,1?

¿Cómo reiniciar el hardware del arduino / bootloader si algo sale mal?

Como hay varios otros Arduino's que usan chips diferentes, ¿es válido lo anterior para todos los chips Atmel?

Entonces, ¿qué debo saber antes de usar esos TX / RX o quizás también los otros pines analógicos?

Hay shiftregisters baratos, controladores pwm, controladores led, spi, i2c y más ic para expandir su E / S


Pero si no hay grandes problemas, significa que el arduino tiene 20 pines de E / S ...

Teóricamente podrías controlar:

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

Corrígeme si estoy equivocado. Eso significa que puedes controlar 380 "Lo que sea" usando diodos y un arduino.

coco
fuente

Respuestas:

8

El problema principal es con los pines 0 y 1.

Muchos pines tienen múltiples funciones asignadas, como A4 y A5 también son los pines I2C, los pines 10/11/12/13 son también los pines SPI, etc. Pero los pines 0 y 1 son los únicos pines multifunción que realmente tener algo adjunto a ellos en el tablero.

Todos los otros pines, aunque son multifunción, tienen su función definida básicamente por lo que les adjuntas. Dado que los pines 0 y 1 ya están conectados en la placa al chip de interfaz USB, sus posibilidades de uso son algo más limitadas.

  • Tan pronto como habilite Serie en su boceto ( Serial.begin()), esos dos pines ya no se pueden usar de manera confiable para E / S digital.

Eso significa que usted puede o bien utilizar el puerto serie del hardware o se pueden utilizar los pasadores para IO digital, pero no ambos.

  • Los dispositivos conectados a los pines 0 y 1 pueden interferir con la conexión en serie

Eso incluye subir bocetos. Tiene datos en serie provenientes de la PC mientras los mismos pines se ven afectados por otras cosas conectadas a ellos. El más común es cosas como módulos GPS que se conectan a esos pines y envían constantemente datos en serie. Esos datos en serie entrarán en conflicto con los datos en serie de la PC y ninguno llegará correctamente.

  • ¿Cómo sube bocetos si su boceto interfiere en la serie? ¿Cómo se "restablece" el tablero?

Usted no No es su bosquejo lo que interfiere con la serie, es lo que está físicamente conectado a esos dos pines IO que interfieren. Simplemente desconecte esos dos pines de lo que esté conectado y podrá cargar bocetos nuevamente. Muchos escudos ahora están comenzando a agregar un pequeño interruptor para desconectar esos pines para que pueda cargar bocetos sin desconectar el escudo. También puede usar el mismo truco con otros dispositivos que conecte a esos pines: agregue un tiro de doble polo o un tiro de doble polo (y no use una posición) para aislar fácilmente ambos pines del resto de su hardware cuando lo necesite.

  • ¿Esto afecta a todas las placas Arduino?

No, solo aquellos que usan un chip de puente USB a serie, eso es algo como Uno, Due, Mega, etc. Las placas que tienen una conexión USB directa no usan los pines TX y RX para cargar bocetos; usan el USB dedicado D + y D- pines. Esos son los tableros como el Leonardo, algunos de los más pequeños (mini? Micro? Olvidé cuáles) tableros, etc.

Majenko
fuente
"Muchos escudos ahora están comenzando a agregar un pequeño interruptor" genial. Micro tiene "USB a chip de puente serie"? ¿Eso significa que puedo usar los pines 0,1 en uno pero no en micro?
cocco
Puede usarlos en cualquiera que no tenga un puente USB a serie. El Uno tiene uno, el Mega tiene uno, el Mini no tiene uno, sin embargo, necesita conectar uno externamente a los pines TX / RX para programarlo. Todos esos están fuera. El Micro y el Leonardo no tienen uno, por lo que puedes usarlos.
Majenko
¿De eso está hablando @Nick Gammon? Uno y los otros que escribió tienen resistencias pullup que no le permiten usar correctamente los pines 0 y 1, pero el Micro no tiene resistencia pullup, por lo que los pines 0 y 1 funcionan correctamente y también el usb para cargar nuevos bocetos.
cocco
Por una vez, Nick se equivoca en ese punto. No hay resistencias pullup. Lo que hay es un par de resistencias en línea pequeñas para evitar problemas si la MCU principal y el chip USB intentan conducir la misma línea a niveles opuestos al mismo tiempo. Puede verlos en el esquema Uno como RN4A y RN4B.
Majenko
Si el chip USB intenta conducir el pin RX (tiene el puerto USB enchufado y abre la conexión en serie [o tal vez solo está enchufado, no estoy seguro]), entonces puede afectar el voltaje en el pin RX independientemente de lo que sea que está haciendo en su boceto, por lo que puede que no sea seguro usar ese pin para cosas como charlieplexing.
Majenko
1

No puedo comentar debido a la reputación insuficiente, pero quiero señalar que el pinout OP tiene al menos un pin incorrecto.

PB6 debe ser PB5

Pasé mucho tiempo tratando de entender por qué no podía ver SCK en el alcance (bus SPI). Estaba trabajando bajo nivel, no con el IDE.

Como esta es la primera imagen que aparece cuando busco en Google, quería evitar el mismo problema a los demás ...

Petrus
fuente
0

20x (20-1) = 380 leds (charlieplexing, alto bajo); Corrígeme si estoy equivocado. Eso significa que puedes controlar 380 "Lo que sea" usando diodos y un Arduino.

Primero, la cifra de 380 es correcta para 20 pines (20 2 - 20), sin embargo, los pines 0 y 1 están conectados a resistencias pull-up en el Atmega16U2, por lo que nunca están realmente a 0V. Si carga un boceto en blanco, medirá 5 V en los pines 0 y 1.

En segundo lugar, no puede manejar 380 "lo que sea", puede manejar 380 LED a través de Charlieplexing. La propiedad del LED, que la corriente solo fluye en una dirección, es importante para la forma en que funciona.

Pregunta relacionada ¿Hay alguna manera de tener más de 14 pines de salida en arduino?

Nick Gammon
fuente
Primero: ¿qué sucede si pongo 2 leds invertidos (con resistencias) en el pin 0 y 1, establezco el pin 0 alto pin 1 bajo retardo 1 segundo y configuro el pin 0 bajo y el pin 1 alto retardo 1 segundo?
cocco
Segundo: por "lo que sea" me refiero a interruptores ... interruptores de clic, interruptores de láminas, sensores o todo tipo de combinación de entradas y salidas que admitan alto bajo. electronicdesign.com/site-files/electronicdesign.com/files/… hecho con diodos.
cocco
Bueno en realidad no. Charlieplexing es una forma de multiplexación, por lo que a menos que desee que sus interruptores hagan clic como locos, realmente no funcionará para ellos. Y es una situación de salida, por lo que no estará haciendo entradas, como parece pensar. Te sugiero que leas los otros enlaces. Los registros de desplazamiento, o expansores de puertos, son más prácticos que Charlieplexing aquí.
Nick Gammon