İçindekiler:

Minidot 2 - Holoclock: 6 Adım
Minidot 2 - Holoclock: 6 Adım

Video: Minidot 2 - Holoclock: 6 Adım

Video: Minidot 2 - Holoclock: 6 Adım
Video: Primary Arms PLx Compact 1-8 2024, Temmuz
Anonim
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock
Minidot 2 - Holoclock

Belki holoclock biraz yanlıştır….biraz derinlik vermek için ön tarafta holografik dağılım filmi kullanır. Temelde bu talimat, burada bulunan önceki Minidot'um için bir güncellemedir:https://www.instructables.com/id /EEGLXQCSKIEP2876EE/ve şurada bulunan Microdot'umdaki birçok kod ve devreyi yeniden kullanma:https://www.instructables.com/id/EWM2OIT78OERWHR38Z/EagleCAD dosyaları ve Sourceboost kodu ekli zip dosyalarında yer alıyor. Neden? Önceki Minidot aşırı karmaşıktı, Microdot'tan sadece 32.768 kristal kullanarak bir PIC üzerinde RTC yapmayı öğrendim ve özel bir RTC çipi kullanmaya gerek duymadım. Ayrıca önceki Minidot'taki ekran çiplerinden kurtulmak istedim. Şimdi sadece bir güç regülatör çipi ve bir PIC16F88….sadece iki çip var. Bir güncellemenin diğer nedenleri, Minidot'umun ayrı anahtar kartı nedeniyle biraz güvenilmez hale gelmesi ve nokta desenleri arasında yumuşak bir solma istedim. ayrıca geceleri ekranı karartmak için bir tür ortam ışığı sensörü. Diğer Minidot ise sabit parlaklıktı ve geceleri bir odayı aydınlatıyordu. Cihaz, EagleCad yazılım paketi ve Sourceboost derleyicisi yardımıyla yapılmıştır. Bu projeye başlamak için elektronik ve programlama PIC denetleyicileri konusunda biraz deneyime sahip olmanız gerekir. Lütfen bunun elektronik veya PIC programlama ile ilgili bir talimat olmadığını unutmayın, bu nedenle lütfen Miniclock tasarımıyla ilgili soruları saklayın. EagleCad'i kullanma veya PIC'leri programlama konusunda tavsiye için yukarıdaki talimatlara veya bu sitedeki diğer birçok talimata bakın. İşte burada….. Minidot 2, The Holoclock……veya Minidot The Next Generation………….

Adım 1: Devre

Devre
Devre
Devre
Devre
Devre
Devre

Bu devre Microdot'a çok benzer. Charlieplex dizisinin hemen hemen aynı olduğuna dikkat edin… sadece birkaç pin taşındı.

PIC'yi çok daha hızlı saatlemek için Microdot devresine 20 Mhz'lik bir kristal eklendi, bu dizinin daha hızlı taranmasına ve bir karartma algoritmasının uygulanmasına olanak tanıyor. Karartma algoritması, çapraz desen solma ve ortam ışığı işlevinin çalışması için çok önemliydi. Bazı tarama döngülerinin karartma için harcanması gerektiğinden, daha yavaş saat hızı nedeniyle bu, Microdot ile imkansız olurdu. Karartma işlevinin açıklaması için sonraki bölüme bakın. Dikkat edilmesi gereken diğer şeyler, şu anda en sevdiğim çip olan 5V'yi beslemek için bir MCP1252 şarj pompası regülatörünün kullanılmasıdır. Devreyi değiştirdiyseniz, eski bir 7805'i kullanabilirsiniz…… Bu kullanışlı çiplerden birkaçı etrafta asılı duruyor. Şimdi anahtarları öne taşıdım, zamanı sıfırlamak için elektrik kesintilerinden sonra saatin gerisinde uğraşmaktan kurtuldum ve şimdi her şey sadece bir PCB….kablo sorunu yok. Ayrıca bir LDR'nin dahil edilmesi de dikkat çekicidir. Bu, PIC üzerindeki A/D pini tarafından algılanan bir voltaj bölücüde kullanılır. PIC, ortam ışık seviyesinin düşük olduğunu algıladığında (yani gece vakti), karartma algoritması, charlieplex dizisini, ışık seviyesi yüksek olduğunda olduğundan daha fazla döngü boyunca karanlık tutar. Eaglecad kütüphanesinde bir LDR sembolü bulamadım, bu yüzden sadece bir LED sembolü kullandım….. Aldanmayın bu bir LDR. Aşağıdaki PCB'nin gerçek resmine bakın. Bir charliplex dizisinde çok renkli LED'ler kullanırken dikkat edilmesi gereken bir nokta. LED'lerin ileri voltajının aşağı yukarı aynı olduğundan emin olmanız gerekir. Değilse, kaçak akım yolları oluşabilir ve birden fazla LED yanacaktır. Bu nedenle, bu konfigürasyon için 5 mm veya daha yüksek güçlü LED'lerin kullanılması, genellikle yeşil/mavi LED'ler ile kırmızı/sarı LED'ler arasında oldukça fark olduğundan çalışmayacaktır. Bu durumda özellikle 1206 SMD led ve yüksek verimli yeşil/mavi LED kullandım. İleri voltajlar burada bir sorun değildi. Bir charlieplex dizisinde yeşil/mavi ve kırmızı/sarı daha yüksek güçlü LED'lerin bir karışımını kullanmak istiyorsanız, farklı renkleri iki charliplex dizisine ayırmanız gerekir. Google'da aratılabilen çok sayıda charlieplexing açıklaması var……Burada ayrıntılara girmeyeceğim. Biraz araştırma yapmayı size bırakıyorum. (Daha büyük halini görmek için aşağıdaki resmin köşesindeki küçük 'i' simgesine basın)

Adım 2: Karartma Algoritması - Charliplexed Darbe Genişliği Modülasyonu

Karartma Algoritması - Charliplexed Darbe Genişliği Modülasyonu
Karartma Algoritması - Charliplexed Darbe Genişliği Modülasyonu

Daha önce de belirtildiği gibi, bir desenden diğerine sarsılmak yerine, zaman için farklı nokta desenlerinin yumuşak bir şekilde solmasını istedim. Bir gösteri için videoya bakın. Ortada yeni Minidot saati, sağda eski Minidot var. Yenisinin ne kadar güzel olduğuna dikkat edin. (Bilgiye, arka plandaki diğer ekranlar benim Minicray süper bilgisayar durumu ekranım ve Minicray'e antimadde manyetik hapsetme alanında güç sağlayan yakalanmış Nebulon parçacığımdır. Bir gösteri için buraya bakın:https://www.youtube.com/embed/bRupDulR4ME nebulon hapsi odası)Koda bakarsanız, display.c dosyasını açın. Herhangi bir belirli diziyi aydınlatmak için tris/port değerlerini eşleştirmek için dört dizi ve herhangi bir belirli LED modeli için hangi LED'lerin aydınlatılması gerektiğini tanımlamak için iki dizi (Microdot kodundan bir tane daha) olduğuna dikkat edin.

// 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];Örneğin LED1'i yakmak için, TRISA:B = 0xef:0xfd TRIS kayıtlarını ve PORTA:B=0x10:0x00 vb. PORT kayıtlarını ayarlamanız gerekir. Tris değerlerini ikili olarak yazarsanız, herhangi bir anda yalnızca iki çıkışın etkinleştirildiğini fark edeceksiniz. Diğerlerinin tümü Tri-state'e ayarlanmıştır (dolayısıyla TRIS kaydı). Bu, charlieplexing'in merkezidir. Ayrıca bir çıkışın her zaman mantıksal bir '1' ve diğerinin her zaman mantıksal bir '0' olduğunu not edeceksiniz….yönü, bu iki çıkış hattı arasında hangi LED'in yanıyorsa yanar. Port/tris'teki son değer arrays, hiçbir LED'i yakmamak için boş bir değerdir. Microdot'ta update_display işlevi, o belirli LED'in aydınlatılıp aydınlatılmayacağını görmek için sürekli olarak başka bir dizi (nLeds) arasında geçiş yaptı. Eğer öyleyse, ilgili tris/port değerleri ayarlandı ve LED bir süre yandı. Aksi takdirde boş değer PIC'lerin TRIS/PORT kayıtlarına gönderildi ve bir süre boyunca hiçbir LED yanmadı. Yeterince hızlı yapıldığında bu bir model verdi. Programın geri kalanı periyodik olarak RTC değerlerini okuyacak ve bu dizide güzel bir rastgele model oluşturacaktı….ve böylece ekran değişti. Bir karartma işlevi yapmak için bu, 30 LED'in yanmasından sonra (veya değil) o zaman ekran karartılırsa boş değerler göndermek için fazladan süreler harcanır…..tam parlaklık için fazladan süreler harcanmaz. Yanan LED'lerde çok sayıda boş nokta varsa tekrarlandığında, ekran kararır. Aslında bu, çoğullanmış darbe genişlik modülasyonudur…..veya donanım bir charlieplex düzeninde yapılandırıldığından, daha sonra charlieplexed darbe genişlik modülasyonu. Aşağıdaki ikinci diyagram bunun için temel kurulumu gösterir. Ben buna tarama çerçevesi diyorum. Çerçevenin ilk 30 periyodu LED'lerden geçmek için kullanılır…..ve değişken sayıda ekstra periyot ekranın ne kadar loş olacağını tanımlar. Bu döngü tekrar eder. Daha fazla boş dönem, bir LED'in çerçeve başına daha az yanması anlamına gelir (çünkü dönem sayısı artar). Dikey eksenin voltaj seviyesi anlamına gelmediğini unutmayın. LED'lere giden pinlerin gerçek durumu, charlieplex dizisindeki konumuna bağlı olarak değişir…..şemada sadece açık veya kapalı anlamına gelir. Bu, aynı zamanda, çerçevenin toplam uzunluğunun da zaman içinde arttığı, dolayısıyla yenilemenin azaldığı anlamına gelir. oran. LED'ler kısıldıkça, başka bir deyişle titremeye başlayacaklardı. Dolayısıyla bu yöntem yalnızca bir dereceye kadar yararlıdır. Saat için sorun yoktu. PIC üzerindeki A/D dönüştürücüyü okuyan ve bu parlaklık seviyesini ayarlayan bir fonksiyon aralıklı olarak çağrılır. Kodu okursanız, ayrıca LDR'ye en yakın LED'in açık olup olmadığını kontrol eder ve eğer öyleyse herhangi bir seviye ayarı yapmaz, bu, desen değiştiğinde ekranın beklenmedik bir şekilde parlamasını durdurur. Ardından çapraz solma işlevi.

3. Adım: Karartma Algoritması - Çapraz Solma Etkisi ve Çift Arabelleğe Alma

Karartma Algoritması - Çapraz Solma Etkisi ve Çift Arabelleğe Alma
Karartma Algoritması - Çapraz Solma Etkisi ve Çift Arabelleğe Alma

Bir model ile bir sonraki arasındaki geçiş daha önce anında gerçekleşti. Bu saat için, parlaklıkta kademeli olarak azalan bir model ve kademeli olarak artan bir sonraki modelde, yani çapraz solmada göstermek istedim.

Çapraz solma yapmak için ayrı parlaklık seviyelerinde kontrol edilecek ayrı LED'lere ihtiyacım yoktu. Sadece ilk desene bir parlaklıkta ve ikincisine düşük bir parlaklıkta ihtiyaç vardı. Sonra kısa bir süre içinde ilkinin parlaklığını biraz azaltırdım ve ikinciyi arttırırdım….. bu tam olarak ikinci desene kadar devam ederdi. Ardından saat, bir sonraki modelin gösterilmesine kadar bekleyecek ve başka bir geçiş olacaktı. Bu yüzden iki desen saklamam gerekiyordu. Şu anda görüntülenmekte olan ve görüntülenmek üzere olan ikinci model. Bunlar nLedsA ve nLedsB dizilerindedir. (bu durumda bağlantı noktalarıyla ilgisi olmadığını unutmayın). Bu çift tampondur. update_display() işlevi, sekiz kare arasında geçiş yapacak ve önce bir diziden sonra diğerinden bir dizi kare gösterecek şekilde değiştirildi. Sekiz döngü boyunca her ara belleğe tahsis edilen çerçeve sayısının değiştirilmesi, her bir desenin ne kadar parlak olacağını tanımladı. Arabellekler arasında geçiş yapmayı bitirdiğimizde, 'ekran' ve 'sonraki görüntü' arabelleklerini değiştirdik, böylece kalıp oluşturma işlevi yalnızca 'sonraki görüntü' arabelleğine yazacaktı. Aşağıdaki diyagram bunu umutla göstermektedir. Geçişin 64 tarama çerçevesi alacağını görebilmeniz gerekir. Resimde, küçük ek, önceki sayfadan ustaca küçültülmüş tarama çerçevesi diyagramını göstermektedir. Yeniden tazeleme oranı hakkında bir kelime. Bütün bunların çok hızlı bir şekilde yapılması gerekiyor. Artık iki ekstra hesaplama düzeyine sahibiz, biri ortam ekranının kararması için ve diğeri iki arabellek arasında geçiş yapmak için harcanan sekiz çerçeve döngüsü için. Bu nedenle bu kod derlemede yazılmalıydı, ancak 'C'de yeterince iyi.

Adım 4: İnşaat - PCB

İnşaat - PCB
İnşaat - PCB
İnşaat - PCB
İnşaat - PCB

Bu oldukça basit. Üstte bazı SMD bileşenleri olan çift taraflı bir PCB. Açık delikli biriyseniz üzgünüm, ancak SMD projeleri yapmak çok daha kolay… delmek için daha az delik. İşleri kolaylaştırmak için sabit bir eliniz, sıcaklık kontrollü bir lehim istasyonu ve bol miktarda ışık ve büyütmeye sahip olmalısınız.

PCB'nin yapımında dikkat edilmesi gereken tek şey, PIC'yi programlamak için bir konektörün dahil edilmesidir. Bu, PIC üzerindeki ICSP pinlerine bağlanır ve bir ICSP programlayıcısına ihtiyacınız olacaktır. Yine önemsiz kutusu konektörüm için kullanışlı bir alet kullandım. Bunu atlayabilir ve isterseniz telleri pedlere lehimleyebilirsiniz. Alternatif olarak, yalnızca soketli bir programlayıcınız varsa, soketinize takılan bir başlık yapabilir ve ardından bunu ICSP pedlerine lehimleyebilirsiniz. Bunu yaparsanız, Rx bağlantısını kesin ve yalnızca sıfır ohm bağlantıları olan Ry'yi bağlayın (sadece bir lehim bloğu kullanıyorum). Bu, devre gücünün geri kalanını PIC'den kesecek ve böylece programlamaya müdahale etmeyecektir. Soketli bir programcı, bir ICSP programcısı gibi sadece ICSP pinlerini kullanır, gerçekten işin içinde sihir yoktur. Bunu, yanlışlıkla RTC başlamadan önce koda bir gecikme koymayı unuttuysanız da yapmanız gerekir. 16F88 için ICSP programlama pinleri, RTC için kullanılan 32.768kHz kristal için ihtiyaç duyulan pinlerle aynıdır……T1 harici osilatör (yani RTC) ICSP çalışmaya başlamadan önce çalışıyorsa, programlama başarısız olur. Normalde MCLR pininde bir reset varsa ve bir gecikme varsa bu pinlere ICSP verisi gönderilebilir ve programlama düzgün bir şekilde başlayabilir. Bununla birlikte, ICSP programcısı (veya bir başlığı olan soketli programcı), PIC'ye giden gücü izole ederek, cihaza giden gücü kontrol edebilir ve bir programı zorlayabilir. Dikkat edilmesi gereken diğer şeyler, PCB üzerindeki kristal pedlerin orijinal olarak SMD kristalleri için tasarlanmış olmasıdır. Bazılarının teslim edilmesini bekleyemedim, bu yüzden 32.768kHz saat kristali gösterildiği gibi üste lehimlendi ve 20MHz kristal, pedlerde birkaç delik delinerek, kristali alttan içeri sokarak ve üzerine lehimleyerek takıldı. Tepe. PIC16F88'in hemen sağında pinleri görebilirsiniz.

Adım 5: Holografik Film ve Muhafaza

Holografik Film ve Konut
Holografik Film ve Konut
Holografik Film ve Konut
Holografik Film ve Konut
Holografik Film ve Konut
Holografik Film ve Konut

Son yapı, PCB'yi kasaya yerleştirmek ve programladıktan sonra bir miktar sıcak tutkalla yapıştırmaktır. Üç delik, önden mikro anahtarlara erişim sağlar.

Bu saatin dikkate değer kısmı, holografik bir difüzör filminin kullanılmasıdır. Bu, cihaza güzel bir derinlik sağlayan, etrafta yattığım özel bir film. Düz izleme kağıdını (PCB'yi öne yaklaştıracağım) veya floresan aydınlatma armatürlerinde kullanılanlar gibi başka bir difüzör kullanabilirsiniz. Deneyin, yapması gereken tek şey, yanan LED'lerin sayısı arasında ayrım yapmanıza izin vermektir, yoksa zamanı söylemek için noktaları saymak zor olacaktır. 30 derecelik dairesel dağılıma sahip Physical Optics Coorporation'dan (www.poc.com) holografik dağılım malzemesi kullandım, talimatta başka bir yerde gösterilen süper bilgisayar durumu ekranı 15x60 derece eliptik dağılıma sahip bir film kullandı. Daha gizemli bir görünüm elde etmek için gündüzleri parlak iç kısımları gizlemek için bir karartma bandı kullanabilirsiniz. Hatta ekranı açık bırakabilir ve insanların benim yaptığım gibi iç organlarını görmelerine izin verebilirsiniz. Stand, bükülmeye izin vermek için altta biraz kesilmiş iki parça alüminyum 'L' çubuktu. Bu resimlerde ekran kapaklarını vs. görebilmeniz için ekstra aydınlatma eklenmiştir. Normal salon aydınlatmasında LED'ler gün ışığında bile daha belirgindir.

Adım 6: Yazılım ve Kullanıcı Arayüzü

Cihazın çalışması çok basit, özel desen modları veya gösterişli şeyler yok. Yaptığı tek şey zamanı göstermek.

Saati ayarlamak için önce SW1'e basın. Cihaz, tüm LED'leri birkaç kez yanıp sönecek ve ardından 10s saatlik LED'ler grubu SW3, seçilen grup SW2'yi artıracak ve her seferinde gruptaki tüm LED'leri kısaca yanıp sönerek bir sonraki LED grubuna geçecektir. Kod, Sourceboost 'C' derleyici sürüm 6.70 için yazılmıştır. RTC kodu t1rtc.c/h dosyalarındadır ve PIC'nin T1 zamanlayıcısında bir kesme işlevi vardır. T1 zamanlayıcısı her 1 saniyede bir kesintiye ayarlanmıştır. Her saniyede, zaman değişkeni artırılır. Ayrıca, zamanla birlikte her saniye bir onay zamanlayıcısı geri sayılır. Bu, ekranın ne zaman geçileceğini belirlemek için kullanılır. Kesinti işlevi ayrıca, ekranı yenilemek için T0 zamanlayıcı kesmesini kullanır ve display.c'de bir işlevi çağırır. Display.h/display.c dosyaları, ekranı güncelleme ve zamanı gösterme işlevlerini içerir. Control.c/h dosyaları şunları içerir: zamanı ayarlama ve anahtarları okuma işlevleri holoclock.c/h dosyaları ana döngüler ve başlatmadır.

Önerilen: