Menggambar pada matriks LED 8x32 dengan 74HC154

8

Bagaimana cara mengirim pola ke matriks LED 8x32? Saya menggunakan mikrokontroler AT89S52 dengan decoder baris 74HC154 4-16, pemrograman dalam C dengan IDE Keil. Saya sudah melakukan pemindaian vertikal, tetapi bingung pada langkah selanjutnya. Saya akan memasukkan skema jika diperlukan. Rangkaiannya sama dengan yang saya sertakan di bawah ini saja saya tidak menggunakan 74HC138, matriks anoda umum dan saya menggunakan UN2803 sebagai driver, saya tidak menggunakan memori

Port 1 adalah kolom, port 2 adalah baris ... kode:

 row = 0xFF;
     //for (j=0x01; j< 0x08; j<<=1)  {   /* scan left to right */
     for (j=0x00; j<=0x0F; j++)
     {
          E1=0;
          E2=0;
          P1 = j;
          P2 = row;
                                   /* Output to LED Port */
          for (i = 0; i < 100; i++) 
           {  /* Delay for 100 ms */
              delay ();                       /* call delay function */

           }

masukkan deskripsi gambar di sini

Rick Ant
sumber

Jawaban:

3

Pola normal untuk menggerakkan tampilan LED multipleks MxN adalah menetapkan satu arah sebagai "baris" dan yang lainnya sebagai "kolom", tidak tergantung pada tata letak fisik pada layar, sehingga sistem akan memberi energi "baris" kabel satu per satu dan, sementara setiap baris diurutkan, sistem akan memberi energi pada kabel "kolom" untuk semua LEDS pada baris yang harus dinyalakan.

Setiap kawat kolom harus menyertakan perangkat untuk mengatur arus saat diaktifkan (resistor dapat bekerja di sini), dan setiap kawat baris harus memiliki driver yang dapat memasok arus yang cukup untuk memberi makan semua kolom sekaligus. Perangkat keras tidak harus memungkinkan lebih dari satu baris didorong pada satu waktu, tetapi harus memungkinkan kombinasi kolom mana pun untuk didorong.

Chip 74HC154 mungkin bekerja dengan baik dalam logika pemilihan baris, tetapi karena hanya satu output yang dapat aktif pada satu waktu, mereka tidak cocok untuk mengendalikan kolom. Jika Anda ingin memindai "sideways" Anda, sehingga secara logis diakses sebagai 32 baris dan 8 kolom, maka 74HC154 mungkin cocok untuk memilih baris, tetapi kemudian Anda harus menambahkan perangkat keras tambahan untuk memungkinkan setiap baris untuk memasok cukup saat ini untuk menggerakkan delapan LED, dan Anda juga harus menambahkan sesuatu ke setiap output UN2803 untuk membatasi arus.

Lebih mungkin apa yang ingin Anda lakukan adalah mengganti 74HC154 dengan sekelompok 74HC595 chip (register geser) dan resistor, atau satu atau lebih chip driver LED yang memiliki batasan saat ini built in (misalnya empat Texas Instruments TLC5916 , tersedia dari Digi-Key). Hubungkan chip-chip itu ke port SPI dari controller Anda, dan geser setiap baris data secara serial. Jika Anda menggunakan chip driver sisi rendah (seperti TLC5916 yang disebutkan di atas) Anda harus mengubah driver baris Anda untuk sumber arus daripada menenggelamkannya. Cara paling sederhana untuk melakukannya adalah dengan menggunakan delapan transistor NPN, masing-masing dengan kolektor terikat pada rel positif (Anda dapat menggunakan pasokan yang tidak diatur jika Anda mau), pangkalan terikat pada output controller atau chip decoder, dan emitor diikat ke baris LED.

supercat
sumber
jadi saya harus membalikkan logikanya? P2 = colum; P1 = Baris? ".... maka 74HC154 mungkin cocok untuk memilih satu baris ..." Saya akan segera mencoba logika ini dalam perangkat lunak ...
Rick Ant
Jika Anda ingin memiliki 32 "baris" vertikal, Anda dapat menggunakan 74HC154 untuk memilihnya, tetapi 74HC154 tidak mampu menghasilkan banyak arus (tidak juga banyak tenggelam dalam hal ini) dan mengemudi dengan siklus tugas 1/8 hampir tentu lebih baik daripada mengemudi dengan siklus tugas 1/16. Anda tidak menunjukkan apakah LED dihubungkan dengan arah horizontal sebagai anoda atau katoda, tetapi saya akan merekomendasikan Anda menggunakan driver yang kuat (mungkin transistor diskrit) untuk baris dan driver yang membatasi arus untuk kolom (terlepas dari apakah baris akhirnya menjadi horizontal atau vertikal).
supercat
Jika Anda ingin tampilan Anda menjadi cerah, kemungkinan akan perlu memiliki arus drive untuk setiap kawat kolom lebih tinggi dari arus maksimum yang dapat dipertahankan LED dengan aman. Untuk mencegah LED rusak jika kode berhenti berjalan, Anda mungkin harus merancang driver baris Anda sehingga tidak akan mendorong baris untuk jangka waktu yang lama bahkan jika prosesor tidak berfungsi. Ada berbagai cara yang bisa dilakukan. Jika seseorang menggunakan transistor diskrit untuk driver baris, orang dapat menambahkan resistor dan tutup masing-masing untuk membatasi siklus tugas maksimum.
supercat
Sebagai alternatif, jika seseorang menggunakan penghitung untuk mengontrol baris, seseorang dapat menggunakan sirkuit pengaturan waktu untuk mendeteksi apakah waktu yang berlebihan berlalu di antara penghitungan dan mengosongkan tampilan atau menghasilkan pulsa penghitungan "otomatis".
supercat
apakah Anda memiliki contoh kode untuk itu? Misalnya saya ingin menampilkan karakter AAAA?
Rick Ant