Gunakan semua pin Sebagai I / O digital

11

Tambah jumlah pin digital

Ada banyak posting yang menjelaskan cara menggunakan lebih dari sekedar pin standar pada berbagai arduinos tetapi tidak satupun dari mereka yang menjelaskan batasan dan proplem dengan benar.

masukkan deskripsi gambar di sini

Arduino Uno:

1. Anda dapat menggunakan pin analog

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. Anda tidak dapat menggunakan SDA, SCL & A4, A5 karena keduanya pada dasarnya sama (18,19).

3. Anda juga dapat menggunakan TX / RX.

"Jangan lakukan itu, kamu hancurkan komunikasi serial ..."

"Jangan pernah gunakan pin 0 dan 1"

"Anda tidak dapat menggunakan Pin TX / Rx"

Anda bisa ... tetapi Anda harus mengambil tindakan pencegahan. Yang mana

Seharusnya memiliki perangkat lunak serial melalui USB, kan?

Atau apakah saya merusak serial USB?

Apakah ada masalah Chip internal jika saya menggunakan TX / RX?

Ketika saya menggunakan pin TX / RX dalam kode saya mungkin tidak boleh menggunakan Serial.print()?

Apa yang terjadi jika saya lupa menghapus Serial.print()setelah mengunggah kode yang menggunakan pin 0,1?

Bagaimana cara me-reset arduino / bootloader jika terjadi kesalahan?

Karena ada berbagai Arduino lain yang menggunakan chip yang berbeda, apakah hal di atas berlaku untuk semua chip Atmel?

Jadi, apa yang saya tahu sebelum menggunakan TX / RX atau mungkin juga pin analog lainnya?

Ada shiftregisters murah, driver PWM, driver yang dipimpin, SPI, i2c dan lebih banyak ic untuk memperluas I / O Anda


Tetapi jika tidak ada masalah besar itu berarti arduino memiliki 20 I / O pin ...

Secara teoritis Anda dapat mengontrol:

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

Koreksi saya jika saya salah. Itu berarti Anda dapat mengontrol 380 "Apapun" menggunakan dioda dan satu Arduino.

cocco
sumber

Jawaban:

8

Masalah utama adalah dengan pin 0 dan 1.

Banyak pin yang memiliki banyak fungsi, seperti A4 dan A5 juga pin I2C, pin 10/11/12/13 juga pin SPI, dll. Tetapi pin 0 dan 1 adalah satu-satunya pin multi-fungsi yang sebenarnya memiliki sesuatu yang melekat padanya di papan tulis.

Semua pin lainnya, sementara multi-fungsi, memiliki fungsi mereka pada dasarnya ditentukan oleh apa yang Anda lampirkan. Karena pin 0 dan 1 sudah terpasang di papan ke chip antarmuka USB, kemungkinan penggunaannya agak lebih terbatas.

  • Segera setelah Anda mengaktifkan Serial di sketsa Anda ( Serial.begin()) kedua pin tidak lagi dapat diandalkan untuk IO digital.

Itu berarti bahwa Anda dapat baik menggunakan port serial hardware atau Anda dapat menggunakan pin untuk digital IO, tapi tidak keduanya.

  • Perangkat yang terhubung ke pin 0 dan 1 dapat mengganggu koneksi serial

Itu termasuk mengunggah sketsa. Anda memiliki data serial yang masuk dari PC sementara pin yang sama sedang dipengaruhi oleh hal-hal lain yang terhubung dengannya. Yang paling umum adalah hal-hal seperti modul GPS yang terhubung ke pin tersebut dan secara konstan mengirim data serial. Data serial itu akan bertentangan dengan data serial PC dan tidak ada yang akan tiba dengan benar.

  • Bagaimana Anda mengunggah sketsa jika serialnya diganggu oleh sketsa Anda? Bagaimana Anda "mengatur ulang" papan?

Kamu tidak. Bukan sketsa Anda yang mengganggu serial, melainkan apa yang secara fisik terhubung ke dua pin IO yang mengganggu. Putuskan saja kedua pin tersebut dari apa pun yang terhubung dan Anda akan dapat mengunggah sketsa lagi. Banyak perisai sekarang mulai menambahkan sakelar kecil pada mereka untuk melepaskan pin sehingga Anda dapat mengunggah sketsa tanpa mencabut perisai. Anda juga dapat menggunakan trik yang sama dengan perangkat lain yang Anda pasang ke pin - tambahkan double-pole-single-throw atau double-pole-double-throw (dan tidak menggunakan satu posisi) untuk dengan mudah mengisolasi kedua pin dari sisa perangkat keras Anda saat Anda perlu.

  • Apakah ini mempengaruhi semua papan Arduino?

Tidak, hanya mereka yang menggunakan chip USB to Serial bridge - itu hal-hal seperti Uno, Due, Mega, dll. Papan yang memiliki koneksi USB langsung tidak menggunakan pin TX dan RX untuk mengunggah sketsa - mereka menggunakan USB khusus D + dan pin D. Itu papan seperti Leonardo, beberapa papan yang lebih kecil (mini? Mikro? Saya lupa yang), dll.

Majenko
sumber
"Banyak perisai sekarang mulai menambahkan saklar kecil" keren. Micro memiliki "USB to Serial bridge chip"? Apakah itu berarti saya dapat menggunakan pin 0,1 pada uno tetapi tidak pada mikro?
cocco
Anda dapat menggunakannya pada apa pun yang tidak memiliki USB ke Serial bridge. Uno memiliki satu, Mega memiliki satu, Mini tidak memilikinya, namun Anda harus menyambungkannya secara eksternal ke pin TX / RX untuk memprogramnya. Semuanya keluar. Mikro, dan Leonardo tidak memilikinya, sehingga Anda dapat menggunakannya.
Majenko
Itulah yang dibicarakan @Nick Gammon? Uno dan yang lainnya yang Anda tulis memiliki resistor pullup yang tidak memungkinkan Anda untuk menggunakan pin 0 dan 1 dengan benar tetapi Micro tidak memiliki resistor pullup dan karenanya pin 0 dan 1 berfungsi dengan benar dan juga usb untuk mengunggah sketsa baru?
cocco
Sekali ini Nick salah dalam hal itu. Tidak ada resistor pullup. Apa yang ada sepasang resistor inline kecil untuk mencegah masalah jika MCU utama dan chip USB keduanya mencoba mengendarai jalur yang sama ke level yang berlawanan pada saat yang sama. Anda dapat melihatnya di skema Uno sebagai RN4A dan RN4B.
Majenko
Jika chip USB kebetulan mencoba mengemudi pin RX (Anda memiliki port USB terpasang dan Anda membuka koneksi serial [atau mungkin itu hanya terhubung, tidak yakin]) maka itu dapat mempengaruhi tegangan pada pin RX terlepas dari apa pun Anda melakukannya di sketsa Anda, jadi mungkin tidak aman untuk menggunakan pin itu untuk hal-hal seperti pencetakan charlieplexing.
Majenko
1

Saya tidak dapat berkomentar karena reputasi yang tidak memadai tetapi saya ingin menunjukkan bahwa pinout OP memiliki setidaknya satu pin salah!

PB6 haruslah PB5

Saya menghabiskan cukup banyak waktu untuk mencari tahu mengapa saya tidak bisa melihat SCK pada lingkup (bus SPI). Saya bekerja tingkat rendah, bukan dengan IDE.

Karena ini adalah gambar pertama yang muncul ketika googling saya ingin menghindari masalah yang sama kepada orang lain ...

Petrus
sumber
0

20x (20-1) = 380 led (charlieplexing, high low); Koreksi saya jika saya salah. Itu berarti Anda dapat mengontrol 380 "Apapun" menggunakan dioda dan satu Arduino.

Pertama, angka 380 benar untuk 20 pin (20 2 - 20) namun pin 0 dan 1 terhubung ke pull-up resistor pada Atmega16U2, sehingga mereka tidak pernah benar-benar pada 0V. Jika Anda memuat sketsa kosong, Anda akan mengukur 5 V pada pin 0 dan 1.

Kedua, Anda tidak bisa mengendarai 380 "apa pun" Anda bisa mengendarai 380 LED melalui Charlieplexing. Properti LED, yang saat ini hanya mengalir satu jalan melaluinya, penting untuk cara kerjanya.

Pertanyaan terkait Apakah ada cara untuk memiliki lebih dari 14 pin Output pada arduino?

Nick Gammon
sumber
Pertama: apa yang terjadi jika saya meletakkan 2 led terbalik (dengan resistor) pada pin 0 dan 1, mengatur pin 0 pin tinggi 1 penundaan rendah 1 detik dan mengatur pin 0 rendah dan pin 1 penundaan 1sec tinggi?
cocco
Kedua: Dengan "apa pun" yang saya maksudkan saklar ... klik sakelar, sakelar buluh, sensor, atau setiap jenis kombinasi input keluaran yang mendukung rendah tinggi. electronicdesign.com/site-files/electronicdesign.com/files/… dilakukan dengan dioda.
cocco
Yah, tidak juga. Charlieplexing adalah bentuk multiplexing, jadi kecuali jika Anda ingin switch Anda mengklik gila, itu tidak akan bekerja untuk mereka. Dan ini adalah situasi keluaran, jadi Anda tidak akan melakukan input, seperti yang tampaknya Anda pikirkan. Saya sarankan Anda membaca tautan lainnya. Register geser, atau ekspansi port, lebih praktis daripada Charlieplexing di sini.
Nick Gammon