Daftar Isi:

Minidot 2 - Holoclock: 6 Langkah
Minidot 2 - Holoclock: 6 Langkah

Video: Minidot 2 - Holoclock: 6 Langkah

Video: Minidot 2 - Holoclock: 6 Langkah
Video: laser module#shorts#shortvideo#m4tek#powergear 2024, Juli
Anonim
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock

Yah mungkin holoclock sedikit tidak akurat….itu menggunakan film dispersi holografik di bagian depan untuk memberikan sedikit kedalaman. Pada dasarnya instruksi ini adalah pembaruan untuk Minidot saya sebelumnya yang terletak di sini: https://www.instructables.com/id /EEGLXQCSKIEP2876EE/dan menggunakan kembali banyak kode dan sirkuit dari Microdot saya yang terletak di sini:https://www.instructables.com/id/EWM2OIT78OERWHR38Z/File EagleCAD dan kode Sourceboost disertakan dalam file zip terlampir. Mengapa? Minidot sebelumnya terlalu rumit, dari Microdot saya belajar cara melakukan RTC pada PIC hanya menggunakan kristal 32,768 dan tidak perlu menggunakan chip RTC khusus. Saya juga ingin menyingkirkan chip tampilan dari Minidot sebelumnya. Jadi sekarang hanya ada chip pengatur daya dan PIC16F88 …. hanya dua chip. Alasan lain untuk pembaruan adalah Minidot saya menjadi sedikit tidak dapat diandalkan karena papan sakelar terpisah dan saya ingin memudar lembut antara pola titik sebagai serta semacam sensor cahaya sekitar untuk meredupkan tampilan di malam hari. Minidot lainnya memiliki kecerahan tetap, dan menerangi ruangan di malam hari. Perangkat ini dibangun dengan bantuan paket perangkat lunak EagleCad dan kompiler Sourceboost. Anda harus memiliki pengalaman dengan elektronik dan pengontrol PIC pemrograman untuk memulai proyek ini. Harap dicatat ini bukan instruksi baik pada elektronik atau pemrograman PIC, jadi harap simpan pertanyaan yang relevan dengan desain Miniclock. Lihat instruksi di atas atau banyak instruksi lain di situs ini untuk saran tentang penggunaan EagleCad atau PIC pemrograman. Jadi ini dia….. Minidot 2, The Holoclock……atau Minidot The Next Generation………….

Langkah 1: Sirkuit

Sirkuit
Sirkuit
Sirkuit
Sirkuit
Sirkuit
Sirkuit

Sirkuit ini sangat mirip dengan Microdot. Perhatikan bahwa array charlieplex hampir identik … hanya beberapa pin yang telah dipindahkan.

Kristal 20Mhz telah ditambahkan ke sirkuit Microdot untuk mencatat PIC lebih cepat, ini memungkinkan array dipindai lebih cepat dan memungkinkan penerapan algoritma peredupan. Algoritme peredupan sangat penting untuk membuat pola silang memudar dan fungsi cahaya sekitar berfungsi. Ini tidak mungkin dilakukan dengan Microdot, karena kecepatan clock yang lebih lambat karena beberapa siklus pemindaian perlu dihabiskan untuk peredupan. Lihat bagian berikutnya untuk deskripsi fungsi Peredupan. Hal lain yang perlu diperhatikan adalah penggunaan regulator pompa pengisian MCP1252 untuk memasok 5V, chip favorit saya saat ini. Jika Anda memodifikasi sirkuitnya, Anda bisa menggunakan 7805 tua biasa……Saya hanya memiliki beberapa chip praktis yang berkeliaran. Saya sekarang telah memindahkan sakelar ke depan, menghemat mengutak-atik bagian belakang jam setelah listrik padam untuk mengatur ulang waktu dan sekarang semuanya hanya satu PCB …. tidak ada masalah pemasangan kabel. Yang juga perlu diperhatikan adalah dimasukkannya LDR. Ini digunakan dalam pembagi tegangan yang dirasakan oleh pin A/D pada PIC. Ketika PIC merasakan tingkat cahaya sekitar rendah (yaitu waktu malam) algoritme peredupan membuat array charlieplex gelap untuk lebih banyak siklus daripada saat tingkat cahaya tinggi. Saya tidak menemukan simbol LDR di perpustakaan Eaglecad, jadi saya hanya menggunakan simbol LED…..jangan tertipu itu LDR. Lihat gambar sebenarnya dari PCB di bawah ini. Satu hal yang perlu diperhatikan saat menggunakan LED multi-warna dalam array charliplex. Anda perlu memastikan tegangan maju LED kurang lebih sama. Jika tidak, maka jalur arus yang menyimpang dapat terjadi dan beberapa LED akan menyala. Jadi menggunakan LED daya 5mm atau lebih tinggi untuk konfigurasi ini tidak akan berfungsi karena biasanya ada perbedaan yang cukup besar antara LED hijau/biru dan LED merah/kuning. Dalam hal ini saya menggunakan 1206 SMD leds dan efisiensi tinggi LED hijau/biru pada khususnya. Tegangan maju tidak menjadi masalah di sini. Jika Anda ingin menggunakan campuran LED daya tinggi hijau/biru dan merah/kuning dalam rangkaian charlieplex, Anda harus memisahkan warna yang berbeda menjadi dua rangkaian charliplex. Ada banyak penjelasan tentang charlieplexing yang bisa di googling…..tidak akan saya jelaskan lebih detail disini. Saya akan menyerahkannya kepada Anda untuk melakukan penelitian. (Tekan ikon 'i' kecil di sudut gambar di bawah ini untuk melihat versi yang lebih besar)

Langkah 2: Algoritma Peredupan - Modulasi Lebar Pulsa Charliplexed

Algoritma Peredupan - Modulasi Lebar Pulsa Charliplexed
Algoritma Peredupan - Modulasi Lebar Pulsa Charliplexed

Seperti disebutkan sebelumnya, saya ingin memiliki pola titik yang berbeda untuk waktu yang memudar dengan mulus daripada menyentak dari satu pola ke pola lainnya. Lihat video untuk demonstrasi. Di tengah adalah jam Minidot baru, di sebelah kanan adalah Minidot lama. Perhatikan betapa lebih bagusnya yang baru. (FYI tampilan lain di latar belakang adalah tampilan status superkomputer Minicray saya dan partikel Nebulon yang saya tangkap yang menggerakkan Minicray dalam medan kurungan magnet antimateri. Lihat di sini:https://www.youtube.com/embed/bRupDulR4MEuntuk demonstrasi ruang kurungan nebulon) Jika Anda melihat kode, buka file display.c. Perhatikan bahwa ada empat larik untuk memetakan nilai tris/port untuk menerangi larik tertentu dan dua larik (satu lebih banyak dari kode Microdot) untuk menentukan LED mana yang harus menyala untuk pola tertentu dari LED.

// LED1 LED2 LED3 …unsigned char LEDS_PORTA[31] = { 0x10, 0x00, 0x00, …unsigned char LEDS_TRISA[31] = { 0xef, 0xff, 0xff, …unsigned char LEDS_PORTB[31] = { 0x00, 0x02, 0x04, …unsigned char LEDS_TRISB[31] = { 0xfd, 0xf9, 0xf9, …unsigned char nLedsA[30];unsigned char nLedsB[30];Untuk menyalakan LED1 misalnya, Anda perlu mengatur register TRIS TRISA:B = 0xef:0xfd dan register PORT PORTA:B=0x10:0x00 dan seterusnya. Jika Anda menuliskan nilai tris dalam biner, Anda akan mencatat bahwa pada satu waktu, hanya ada dua output yang diaktifkan. Yang lain semua diatur ke Tri-state (karenanya register TRIS). Ini adalah inti dari charlieplexing. Anda juga akan mencatat bahwa satu output selalu logika '1' dan yang lainnya selalu logika '0'….arah yang menyala LED mana pun yang berada di antara dua jalur output ini. Nilai terakhir di port/tris array adalah nilai nol untuk tidak menyalakan LED sama sekali. Di Microdot, fungsi update_display berputar terus menerus melalui array lain (nLeds) untuk melihat apakah LED tertentu akan menyala. Jika ya, maka nilai tris/port yang sesuai ditetapkan dan LED menyala untuk jangka waktu tertentu. Jika tidak, nilai null dikirim ke register PICs TRIS/PORT dan tidak ada LED yang menyala selama jangka waktu tertentu. Ketika dilakukan cukup cepat ini memberi pola. Sisa program akan secara berkala membaca nilai RTC dan membuat pola acak yang bagus dalam larik itu….dan tampilan berubah. Untuk membuat fungsi peredupan, ini sedikit diperpanjang sehingga setelah 30 LED menyala (atau tidak) maka periode tambahan akan dihabiskan untuk mengirim nilai nol jika tampilan akan diredupkan…..untuk kecerahan penuh maka tidak ada periode tambahan yang akan dihabiskan. Ketika diulang jika ada banyak periode nol pada LED yang menyala, tampilan akan redup. Akibatnya, ini adalah modulasi lebar pulsa multipleks…..atau karena perangkat keras dikonfigurasi dalam pengaturan charlieplex, maka modulasi lebar pulsa charlieplexed. Diagram kedua di bawah ini menunjukkan pengaturan dasar untuk ini. Saya menyebutnya bingkai pemindaian. 30 periode pertama ke bingkai digunakan untuk melewati LED…..dan sejumlah variabel periode tambahan menentukan seberapa redup tampilannya. Siklus ini berulang. Lebih banyak periode nol berarti lebih sedikit waktu untuk LED menyala per bingkai (karena jumlah periode meningkat). Perhatikan sumbu vertikal tidak berarti level tegangan. Status sebenarnya dari pin yang menuju ke LED bervariasi tergantung pada posisinya di array charlieplex…..dalam diagram itu hanya berarti hidup atau mati. Ini juga berarti panjang total bingkai dalam waktu juga meningkat, sehingga mengurangi penyegaran kecepatan. Saat LED meredup, mereka akan mulai berkedip dengan kata lain. Jadi metode ini hanya berguna sampai batas tertentu. Untuk jam, itu OK. A fungsi disebut intermittantly yang membaca A/D converter pada PIC dan set tingkat kecerahan ini. Jika Anda membaca kode, itu juga memeriksa untuk melihat apakah LED terdekat LDR menyala, dan tidak melakukan pengaturan level jika demikian, ini menghentikan tampilan yang tiba-tiba cerah ketika polanya berubah. Berikutnya fungsi cross fade.

Langkah 3: Algoritma Peredupan - Efek Cross Fade dan Penyangga Ganda

Algoritma Peredupan - Efek Pudar Silang dan Penyangga Ganda
Algoritma Peredupan - Efek Pudar Silang dan Penyangga Ganda

Transisi antara satu pola dan pola berikutnya sebelumnya langsung terjadi. Untuk jam ini saya ingin menunjukkan satu pola yang secara bertahap berkurang kecerahannya dan pola berikutnya secara bertahap meningkat…yaitu cross fade.

Saya tidak perlu memiliki LED individu untuk dikontrol pada tingkat kecerahan terpisah untuk melakukan cross fade. Hanya membutuhkan pola pertama pada satu kecerahan dan yang kedua pada kecerahan rendah. Kemudian dalam waktu singkat saya akan mengurangi kecerahan yang pertama sedikit, dan meningkatkan yang kedua…..ini akan terus berlanjut sampai pola kedua seperti penuh. Kemudian jam akan menunggu sampai pola berikutnya muncul dan akan ada transisi lain. Jadi saya perlu menyimpan dua pola. Yang saat ini sedang ditampilkan dan pola kedua yang akan ditampilkan. Ini ada dalam array nLedsA dan nLedsB. (perhatikan tidak ada hubungannya dengan port dalam kasus ini). Ini adalah penyangga ganda. Fungsi update_display() telah dimodifikasi untuk menggilir delapan bingkai dan menampilkan sejumlah bingkai dari larik pertama, lalu larik lainnya. Mengubah jumlah bingkai yang dialokasikan untuk setiap buffer selama delapan siklus menentukan seberapa terang setiap pola. Ketika kami selesai bersepeda di antara buffer, kami mengganti buffer 'tampilan' dan 'tampilan berikutnya', sehingga fungsi penghasil pola kemudian hanya akan menulis ke buffer 'tampilan berikutnya'. Diagram di bawah ini menunjukkan harapan ini. Anda seharusnya dapat melihat bahwa transisi akan membutuhkan 64 frame pemindaian. Dalam gambar, sisipan kecil menunjukkan diagram bingkai pindaian dari halaman sebelumnya yang diperkecil dengan rapi. Sepatah kata tentang re-fresh rate. Semua ini perlu dilakukan dengan sangat cepat. Kami sekarang memiliki dua tingkat perhitungan ekstra, satu untuk tampilan redup sekitar dan satu untuk delapan siklus bingkai yang dihabiskan untuk melakukan transisi antara dua buffer. Jadi kode ini harus ditulis dalam perakitan, tetapi cukup baik dalam 'C'.

Langkah 4: Konstruksi - PCB

Konstruksi - PCB
Konstruksi - PCB
Konstruksi - PCB
Konstruksi - PCB

Ini cukup mudah. Hanya PCB dua sisi dengan beberapa komponen SMD di atasnya. Maaf jika Anda adalah orang yang suka lubang, tapi jauh lebih mudah untuk membuat proyek SMD…. lebih sedikit lubang untuk dibor. Anda harus memiliki tangan yang stabil, stasiun solder yang dikontrol suhu, dan banyak cahaya dan pembesaran untuk membuat segalanya lebih mudah.

Satu-satunya hal yang perlu diperhatikan dalam konstruksi PCB adalah dimasukkannya konektor untuk memprogram PIC. Ini menghubungkan ke pin ICSP pada PIC dan Anda akan memerlukan programmer ICSP. Sekali lagi saya menggunakan konektor berguna untuk kotak sampah saya. Anda dapat menghilangkan ini dan hanya menyolder kabel ke bantalan jika Anda mau. Atau jika Anda hanya memiliki programmer yang memiliki soket, Anda dapat membuat header yang dicolokkan ke soket Anda dan kemudian menyoldernya ke bantalan ICSP. Jika Anda melakukan ini, lepaskan Rx dan sambungkan Ry yang hanya tautan nol ohm (saya hanya menggunakan gumpalan solder). Ini akan memutuskan sisa daya rangkaian dari PIC sehingga tidak mengganggu pemrograman. Seorang programmer socketed hanya menggunakan pin ICSP seperti programmer ICSP, tidak ada keajaiban yang terlibat benar-benar. Anda juga perlu melakukan ini jika secara tidak sengaja Anda lupa untuk menunda kode sebelum RTC dimulai. Untuk 16F88 pin pemrograman ICSP sama dengan pin yang dibutuhkan untuk kristal 32.768kHz yang digunakan untuk RTC……jika osilator eksternal T1 (yaitu RTC) berjalan sebelum ICSP dapat mulai bekerja, maka pemrograman akan gagal. Biasanya jika terjadi reset pada pin MCLR dan terjadi delay, maka data ICSP dapat dikirimkan ke pin tersebut dan pemrograman dapat dimulai dengan baik. Namun dengan mengisolasi daya ke PIC, programmer ICSP (atau programmer yang terhubung dengan header) dapat mengontrol daya ke perangkat dan memaksa program. Hal lain yang perlu diperhatikan adalah bahwa bantalan kristal pada PCB pada awalnya dirancang untuk kristal SMD. Saya tidak sabar menunggu beberapa untuk dikirim sehingga kristal arloji 32,768kHz disolder ke atas seperti yang ditunjukkan, dan kristal 20MHz dipasang dengan mengebor beberapa lubang di bantalan, menusuk kristal melalui bagian bawah dan menyolder ke atas. Anda dapat melihat pin di sebelah kanan PIC16F88.

Langkah 5: Film Holografik dan Perumahan

Film Holografik dan Perumahan
Film Holografik dan Perumahan
Film Holografik dan Perumahan
Film Holografik dan Perumahan
Film Holografik dan Perumahan
Film Holografik dan Perumahan

Konstruksi akhir hanya menempatkan PCB ke dalam kasus dan setelah pemrograman membubuhkannya dengan sedikit lem panas. Tiga lubang memungkinkan akses ke microswitch dari depan.

Bagian penting dari jam ini adalah penggunaan film diffuser holografik. Ini adalah film khusus yang saya miliki yang memberikan kedalaman yang bagus untuk perangkat. Anda bisa menggunakan kertas kalkir biasa (di mana saya akan memindahkan PCB lebih dekat ke depan), atau diffuser lain seperti yang digunakan pada lampu fluorescent. Eksperimen tentang, satu-satunya hal yang perlu dilakukan adalah memungkinkan Anda untuk membedakan antara jumlah LED yang menyala, atau menghitung titik untuk memberi tahu waktu akan sulit. Saya menggunakan bahan dispersi holografik dari Physical Optics Coorporation (www.poc.com) dengan dispersi melingkar 30 derajat, tampilan status superkomputer yang ditampilkan di tempat lain dalam instruksi menggunakan film dengan dispersi elips 15x60 derajat. Anda bisa menggunakan selotip untuk menyembunyikan bagian dalam yang mengkilap di siang hari untuk mendapatkan tampilan yang lebih misterius. Anda bahkan dapat membiarkan tampilannya tetap bersih dan membiarkan orang melihat bagian dalamnya seperti yang saya lakukan. Dudukannya adalah dua batang aluminium 'L' dengan sedikit potongan di bagian bawah untuk memungkinkan tikungan. Perhatikan dalam gambar ini pencahayaan tambahan ditambahkan sehingga Anda dapat melihat penutup layar dll. Dalam pencahayaan ruang tamu normal, LED lebih menonjol, bahkan di siang hari.

Langkah 6: Perangkat Lunak dan Antarmuka Pengguna

Pengoperasian perangkat ini sangat sederhana, tidak ada mode pola khusus atau hal-hal mencolok. Satu-satunya hal yang dilakukannya adalah menampilkan waktu.

Untuk mengatur waktu pertama tekan SW1. Perangkat akan mem-flash semua LED beberapa kali dan kemudian grup LED 10s jam SW3 akan menambah grup yang dipilih SW2 akan pindah ke grup LED berikutnya, setiap kali mem-flash semua LED dalam grup secara singkat. Kode ini ditulis untuk kompiler Sourceboost 'C' versi 6.70. Kode RTC ada di file t1rtc.c/h, dan memiliki fungsi interupsi pada timer T1 dari PIC. Timer T1 diatur untuk menginterupsi setiap 1 detik. Pada setiap detik, variabel untuk waktu bertambah. Juga timer tick dihitung mundur setiap detik bersama dengan waktu. Ini digunakan untuk menentukan kapan harus mentransisikan tampilan. Fungsi interupsi juga menggunakan interupsi timer T0 untuk menyegarkan tampilan, memanggil fungsi di display.c File display.h/display.c berisi fungsi untuk memperbarui tampilan dan menunjukkan waktu File control.c/h berisi berfungsi untuk mengatur waktu dan membaca sakelar File holoclock.c/h adalah loop utama dan inisialisasi.

Direkomendasikan: