Usa tutti i pin come I / O digitali


11

Aumenta il numero di pin digitali

Ci sono molti post che spiegano come usare più dei pin standard sui vari arduinos, ma nessuno di essi spiega correttamente i limiti e i suggerimenti.

inserisci qui la descrizione dell'immagine

Arduino Uno:

1.È possibile utilizzare i pin analogici

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.Non è possibile utilizzare sia SDA, SCL e A4, A5 poiché sono sostanzialmente gli stessi (18,19).

3.È inoltre possibile utilizzare TX / RX.

"Non farlo, interrompi la comunicazione seriale ..."

"Non utilizzare mai i pin 0 e 1"

"non puoi usare i pin TX / Rx"

Puoi ... ma devi prendere precauzioni. Quale?

Dovrebbe avere un software seriale su USB, giusto?

O rompo il seriale USB?

Ci sono problemi con i chip interni se uso TX / RX?

Come uso quei pin TX / RX nel codice probabilmente non dovrei usare Serial.print()?

Cosa succede se dimentico di rimuovere Serial.print()dopo aver caricato il codice che utilizza i pin 0,1?

Come ripristinare l'hardware di Arduino / Bootloader se qualcosa va storto?

Dato che ci sono molti altri Arduino che usano chip diversi, quanto sopra è valido per tutti i chip Atmel?

Quindi, cosa devo sapere prima di usare quei TX / RX o forse anche gli altri pin analogici?

Ci sono registri a scorrimento economici, driver pwm, driver led, spi, i2c e altri ic per espandere il tuo I / O


Ma se non ci sono grossi problemi significa che l'arduino ha 20 pin I / O ...

Potresti teoricamente controllare:

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

Correggimi se sbaglio. Ciò significa che sei in grado di controllare 380 "qualunque" utilizzando diodi e un arduino.

Risposte:


8

Il problema principale riguarda i pin 0 e 1.

A molti pin sono assegnate più funzioni, come A4 e A5 sono anche i pin I2C, i pin 10/11/12/13 sono anche i pin SPI, ecc. Ma i pin 0 e 1 sono gli unici pin multifunzione che in realtà avere qualcosa attaccato alla lavagna.

Tutti gli altri pin, pur essendo multi-funzione, hanno la loro funzione definita fondamentalmente da ciò che si collega a loro. Poiché i pin 0 e 1 sono già collegati sulla scheda al chip di interfaccia USB, le loro possibilità di utilizzo sono leggermente più limitate.

  • Non appena abiliti Serial nel tuo sketch ( Serial.begin()) quei due pin non possono più essere utilizzati in modo affidabile per l'IO digitale.

Ciò significa che è possibile sia utilizzare la porta seriale di hardware o è possibile utilizzare i piedini per IO digitale, ma non entrambi.

  • I dispositivi collegati ai pin 0 e 1 possono interferire con la connessione seriale

Ciò include il caricamento di schizzi. Hai dati seriali in arrivo dal PC mentre gli stessi pin sono influenzati da altre cose ad essi collegate. Il più comune sono cose come i moduli GPS che si collegano a quei pin e inviano costantemente dati seriali. I dati seriali saranno in conflitto con i dati seriali del PC e nessuno dei due arriverà correttamente.

  • Come si caricano gli schizzi se il tuo schizzo interferisce con il seriale? Come si "resetta" la scheda?

Non Non è il tuo schizzo che interferisce con il seriale, è ciò che è fisicamente collegato a quei due pin IO che interferiscono. Basta scollegare quei due pin da qualunque cosa sia connessa e sarai in grado di caricare nuovamente gli schizzi. Molti scudi ora stanno iniziando ad aggiungere un piccolo interruttore su di essi per disconnettere quei pin in modo da poter caricare schizzi senza scollegare lo scudo. Puoi anche usare lo stesso trucco con altri dispositivi collegati a quei pin: aggiungi un doppio bipolare o un doppio bipolare (e non utilizzare una posizione) per isolare facilmente entrambi i pin dal resto del il tuo hardware quando è necessario.

  • Questo influisce su tutte le schede Arduino?

No, solo quelli che usano un chip bridge da USB a seriale - sono cose come Uno, Due, Mega, ecc. Le schede che hanno una connessione USB diretta non usano i pin TX e RX per caricare gli schizzi - usano l'USB dedicato Perni D + e D-. Sono schede come Leonardo, alcune delle schede più piccole (mini? Micro? Dimentico quale), ecc.


"Molti scudi ora stanno iniziando ad aggiungere un piccolo interruttore" cool. Micro ha "USB a chip bridge seriale"? Significa che posso usare i pin 0,1 su uno ma non su micro?
cocco,

Puoi usarli su tutti quelli che non dispongono di un bridge da USB a seriale. Uno ha uno, Mega ne ha uno, Mini non ne ha uno, tuttavia è necessario collegarne uno esternamente ai pin TX / RX per programmarlo. Tutti quelli sono fuori. Il Micro e il Leonardo non ne hanno uno, quindi puoi usarli.
Majenko

Di cosa sta parlando @Nick Gammon? Uno e gli altri che hai scritto hanno resistori pullup che non ti consentono di usare correttamente i pin 0 e 1 ma il Micro non ha una resistenza pullup e quindi i pin 0 e 1 funzionano correttamente e anche l'USB per caricare nuovi schizzi?
cocco,

Per una volta Nick si sbaglia su questo punto. Non ci sono resistori pullup. C'è una coppia di piccoli resistori in linea per prevenire problemi se l'MCU principale e il chip USB provano entrambi a portare la stessa linea a livelli opposti contemporaneamente. Puoi vederli sullo schema Uno come RN4A e RN4B.
Majenko

Se il chip USB prova a guidare il pin RX (hai la porta USB collegata e apri la connessione seriale [o forse è appena collegata, non sono sicuro]) allora può influenzare la tensione sul pin RX indipendentemente da qualunque cosa stai facendo nel tuo schizzo, quindi potrebbe non essere sicuro usare quel pin per cose come il charlieplexing.
Majenko

1

Non posso commentare a causa della reputazione insufficiente, ma voglio sottolineare che la piedinatura dell'OP ha almeno un pin sbagliato!

PB6 dovrebbe essere PB5

Ho trascorso parecchio tempo cercando di capire perché non riuscivo a vedere SCK su scope (bus SPI). Lavoravo a basso livello, non con l'IDE.

Dato che questa è la prima immagine che appare quando googling ho voluto evitare lo stesso problema agli altri ...


0

20x (20-1) = 380 led (charlieplexing, high low); Correggimi se sbaglio. Ciò significa che sei in grado di controllare 380 "qualunque" utilizzando diodi e un Arduino.

Innanzitutto, la cifra di 380 è corretta per 20 pin (20 2 - 20), tuttavia i pin 0 e 1 sono collegati ai resistori di pull-up su Atmega16U2, quindi non sono mai realmente a 0V. Se carichi uno schizzo vuoto, misurerai 5 V sui pin 0 e 1.

In secondo luogo, non è possibile pilotare 380 "whatevers", è possibile pilotare 380 LED tramite Charlieplexing. La proprietà del LED, che la corrente scorre solo attraverso di essa, è importante per il modo in cui funziona.

Domanda correlata Esiste un modo per avere più di 14 pin di output su arduino?


Primo: cosa succede se inserisco 2 led invertiti (con resistori) sui pin 0 e 1, imposta pin 0 alto pin 1 ritardo basso 1 secondo e imposta pin 0 basso e pin 1 alto ritardo 1 sec?
cocco,

Secondo: per "whatevers" intendo interruttori ... interruttori a scatto, interruttori reed, sensori o ogni tipo di combinazione di uscite di input che supportano alti bassi. electronicdesign.com/site-files/electronicdesign.com/files/… fatto con diodi.
cocco,

Beh, non proprio. Il charlieplexing è una forma di multiplexing, quindi a meno che tu non voglia che i tuoi interruttori scattino come matti, non funzionerà davvero per loro. Ed è una situazione di output, quindi non farai input, come sembra pensare. Ti suggerisco di leggere gli altri link. I registri a scorrimento o gli espansori delle porte sono più pratici del charlieplexing qui.
Nick Gammon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.