DIY 3 renkli LED matrisi. Kendin yap LED matrisi

Bazen, bilgileri görüntülemek için dinamik gösterge kullanılırken, birkaç yedi bölümlü göstergenin veya bir LED matrisinin mikrodenetleyiciye bağlanması gerekir. Dinamik göstergenin özü, göstergelerdeki bilgilerin art arda görüntülenmesidir. Aşağıdaki şema, birkaç yedi bölümlü göstergeyi bağlamanın bir örneğini göstermektedir (örneğin, ortak katot) dinamik göstergeyi uygulamak için, genel olarak nokta dikkate alınarak 8 segment elde edilir, ancak eski moda şekilde bu şekilde adlandırılırlar. Aynı ada sahip segmentlerin tüm sonuçları (anotlar), mikrodenetleyiciye dirençler aracılığıyla bağlanan toplam 8 hat için birbirine bağlanır. Her göstergenin ortak katodu, bir transistör aracılığıyla mikrodenetleyiciye bağlanır.


Gösterge algoritması şu şekildedir: ilk olarak, ilk göstergede (soldan sağa gösterge) hangi segmentlerin açılması gerektiğine bağlı olarak, yüksek mantıksal seviyenin açılması, düşükten segmenti kapatın. Daha sonra, transistör VT1'in tabanına yüksek bir mantık seviyesi uyguluyoruz, böylece ilk göstergenin ortak katodu ortak kabloya bağlı, şu anda anotlarında mantıksal bir birim bulunan bu bölümler yanıyor. Belirli bir süre (bekleme) sonra transistörün tabanına düşük bir mantık seviyesi uygulayarak indikatörü kapatıyoruz, ardından ikinci indikatöre yönelik çıkış bilgisine göre hatlar üzerindeki lojik seviyelerini tekrar değiştirip bir sinyal gönderiyoruz. transistör VT2'ye açma sinyali. Böylece dairesel bir döngüde sırayla tüm göstergeleri değiştiririz, bu tüm dinamik göstergedir.

Titreşimsiz sağlam bir görüntü elde etmek için anahtarlama yüksek hızda yapılmalı, LED'lerin titremesini önlemek için yenileme hızı 70 Hz veya daha fazla ayarlanmalı, ben genellikle 100 Hz olarak ayarlıyorum. Yukarıdaki yapı için duraklama şu şekilde hesaplanır: 100 Hz frekans için süre 10 ms'dir, sırasıyla yalnızca 4 gösterge vardır, her göstergenin parlama süresi 10/4 = 2,5 ms olarak ayarlanmıştır. Bir mahfazada çok haneli yedi segmentli göstergeler vardır, aynı isimli segmentlerin mahfazanın içinde birbirine bağlandığı, elbette bunları kullanmak için dinamik gösterge kullanmak gerekir.

Dinamik göstergeyi uygulamak için, zamanlayıcılardan birinin taşmasında kesintilerin kullanılması gerekir. TMR0 zamanlayıcısını kullanan kod aşağıdadır:

4 adet yedi segmentli gösterge için dinamik gösterim uygulaması ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; swapf DURUM,W ; clrf DURUMU; movwf STATUS_TEMP ; ; bcf ind1 ;1. göstergeyi kapat bcf ind2 ;2. göstergeyi kapat bcf ind3 ;3. göstergeyi kapat bcf ind4 ;4. göstergeyi kapat; incf shet,F ;artan yazmaç shet movlw .5 ;kayıt içeriğini kontrol et xorwf shet,W ;5 btfss STATUS,Z değerine eşit olup olmadığını kontrol edin; goto met1 ;shet register'daki sayı 5'e eşit değildir movlw .1 ;shet register'daki sayı 5'tir: 1 movwf shet'i shet register'a yazın; met1 movlw .1 ; kayıt içeriğini kontrol et shet xorwf shet,W ; 1 sayısına eşittir btfss STATUS,Z ; goto met2 ;shet register'daki sayı 1'e eşit değildir: met2'ye atla movf datind1,W ;shet register'daki sayı 1'e eşittir: movwf PORTB'yi kopyala ;datind1 içeriğini PORTB register'ına kaydet bsf ind1 ;1. gösterge met2'yi aç movlw .2 ;xorwf shet,W yazmacının içeriğini kontrol et 2 btfss STATUS,Z'ye eşittir; goto met3 ;shet register'daki sayı 2'ye eşit değil: met3'e atla movf datind2,W ;shet register'daki sayı 2: movwf PORTB'yi kopyala ;datind2'nin içeriği PORTB register'ına kayıt bsf ind2 ;2. göstergeyi aç çıkışa git ;atla etiket çıkış met3 movlw .3 ; kayıt içeriğini kontrol et shet xorwf shet,W ; eşittir 3 btfss STATUS,Z ; goto met4 ;shet register'daki sayı 3'e eşit değil: met4'e atla movf datind3,W ;shet register'daki sayı 3: movwf PORTB'yi kopyala ;datind3'ün içeriği PORTB register'ına kayıt bsf ind3 ;3. göstergeyi aç çıkışa git ;atla etiket çıkış met4 movf datind4,W ;datind3 kaydı movwf PORTB'nin içeriğini PORTB kaydı bsf ind4'e kopyalayın ;4. göstergeyi açın; movlw .100 ;zamanlayıcı yazmacı TMR0'a 156 yaz movwf TMR0 ; ; movwf DURUMU; takas W_TEMP,F ; takas W_TEMP,W ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Ana program ................ movlw b"11010011" ; OPTION_REG, böylece dahili ayarı ; ön ölçekleyici oranını 1:16 olarak ayarlama ; clrf shet ; kayıt sayfasını sıfırlama, başlamadan önce, TMR0 taşmasında kesintiler gerçekleştirildi; clrf datind1 ;clrf datind2 ;göstergelerine bilgi çıkışı için kayıtların temizlenmesi, ortak bir clrf datind4 ;katod; bcf INTCON,T0IF ; TMR0 taşma kesme işaretini temizle bsf INTCON,T0IE ; TMR0 taşma kesmelerini etkinleştir bsf INTCON,GIE ; genel kesmeleri etkinleştir; movlw b"00000110" ;13.52 çıktı örneği movwf datind1 ; mov b"11001111" ; movwf tarihli2 ; mov b"01101101" ; movwf tarihli3 ; movlwb"01011011" ; movwf tarihli4 ; ; . ................; ................; ................; ; end ; tüm programın sonu;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;4 adet yedi segmentli gösterge için dinamik gösterge uygulaması

;Örnek saat frekansı 4 MHz, makine döngüsü 1 µs

org 0000h ; program yürütmeyi 0000h adresinde başlat

Başlat'a git; Başlat etiketine git

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Kesme rutini

org 0004h ; 0004h adresinde alt program yürütmeyi başlat

movwf W_TEMP ;anahtar kayıt değerlerini kaydet

swapf DURUM,W ;

movwf STATUS_TEMP ;

bcf ind1 ;1. göstergeyi kapat

bcf ind2 ;2. göstergeyi kapat

bcf ind3 ;3. göstergeyi kapat

bcf ind4 ;4. göstergeyi kapat

incf shet,F ;kayıt defterini artırma

movlw .5 ; kayıt sayfasının içeriğini kontrol edin

xorwf levha,W ; 5'e eşit

btfss DURUM,Z ;

goto met1 ;kayıt sayfasındaki sayı 5'e eşit değil

movlw .1 ;shet kaydındaki sayı 5: 1 sayısını yaz

movwf shet; shet'i kaydetmek için

met1 movlw .1 ; shet kaydının içeriğini kontrol edin

xorwf shet,W ; 1 sayısına eşittir

btfss DURUM,Z ;

met2'ye git; shet kaydındaki sayı 1'e eşit değil: met2'ye atla

movf datind1,W ;shet kaydındaki sayı 1'dir: kopyala

movwf PORTB ; datind1 kaydının içeriği PORTB kaydına

bsf ind1 ;1. göstergeyi aç

çıkışa git; etiket çıkışına git

met2 movlw .2 ; shet kaydının içeriğini kontrol edin

xorwf shet,W ; 2 sayısına eşittir

btfss DURUM,Z ;

met3'e git ;shet kaydındaki sayı 2'ye eşit değil: met3'e atla

movf datind2,W ;shet kaydındaki sayı 2'dir: kopyala

movwf PORTB ; datind2 kaydının içeriği PORTB kaydına

bsf ind2 ;2. göstergeyi aç

çıkışa git; etiket çıkışına git

met3 movlw .3 ; shet kaydının içeriğini kontrol edin

xorwf shet,W ; 3 sayısına eşittir

btfss DURUM,Z ;

met4'e git ;şet kaydındaki sayı 3'e eşit değil: met4'e atla

movf datind3,W ;shet kaydındaki sayı 3'tür: kopyala

movwf PORTB ; datind3 kaydının içeriği PORTB kaydına

bsf ind3 ;3. göstergeyi aç

çıkışa git; etiket çıkışına git

met4 movf datind4,W ; datind3 kaydının içeriğini kopyala

movwf PORTB ;PORTB kaydına

bsf ind4 ;4. göstergeyi aç

çıkış bcf INTCON,T0IF; TMR0 taşma kesme bayrağını sıfırla

movlw .100 ; 156 sayısını TMR0 zamanlayıcı kaydına yaz

swapf STATUS_TEMP,W ; anahtar kayıtlarının içeriğini geri yükle

takas W_TEMP,F ;

takas W_TEMP,W ;

retfie ;exit interrupt rutini

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Ana program

Başlat ................. ;kayıtların ilk ayarı

................. ;özel amaç

.................

bsf STATUS,RP0 ;kayıt olmak için ikili sayı 11010011'i yazın

movlw b"11010011" ;OPTION_REG, böylece dahili

movwf OPTION_REG; TMR0 için saat kaynağı

bcf STATUS,RP0 ;TMR0'dan önce ön ölçekleyiciyi etkinleştir

;Ön ölçekleyici oranını 1:16 olarak ayarlayın

clrf shet ; başlamadan önce shet kaydını sıfırlayın

;taşma kesintisi TMR0, gerçekleştirildi

;güç açıldıktan sonra bir kez

clrf datind1 ; bilgilerin çıktısı için kayıtları temizle

clrf datind2 ;göstergeler, kapalıya eşdeğer

clrf datind3 ;göstergeler, çünkü ortak bir göstergeye sahip göstergeler

clrf datind4 ; katot

bcf INTCON,T0IF ;TMR0 taşma kesme bayrağını sıfırla

bsf INTCON,T0IE; TMR0 taşma kesintilerini etkinleştir

bsf INTCON,GIE ; genel kesintileri etkinleştir

movlw b"00000110"; 13.52 çıktı örneği

mov b"11001111" ;

mov b"01101101" ;

movlwb"01011011" ;

................. ;

................. ;

................. ;

end; tüm programın sonu

Ana programda, önce OPTION_REG kaydını kullanarak bir zamanlayıcı kurduk, daha önce . Ardından, her gösterge için 1'den 4'e kadar bir sayı girmek için tasarlanan sayfa kaydını temizliyoruz. Bu kayıt, kesme servis rutininde artırılır ve orada ayarlanır (1'den 4'e kadar sayar), böylece bu temizleme, güç verildikten sonra bir kez gerçekleştirilir. Bu kayda dayanarak, hangi göstergenin dahil edileceğini belirleyeceğiz ve buna karşılık gelen verileri yayınlayacağız. Bir sonraki adım, bilgi depolama kayıtlarını, dört göstergeye karşılık gelen dört dataind1,2,3,4 kaydını temizlemektir. Kesme servis rutininde bu kayıtların içeriği, gösterge anotlarının bağlı olduğu PORTB kaydına aktarıldığından, temizleme, göstergeleri kapatmaya eşdeğerdir. Bu, kesintiler etkinleştirildikten sonra göstergelerde herhangi bir çöp görüntülenmemesi için gereklidir, prensip olarak, çıktı için doğru bilgi hemen yazılırsa bu yapılamaz. Ardından, zamanlayıcı taşma kesme bayrağını sıfırlayın, TMR0 taşma kesmelerini etkinleştirin ve son olarak genel kesmeleri etkinleştirin.

Kesme rutininde öncelikle tüm indikatörleri (transistörlerin tabanlarına düşük mantık seviyeleri uygulayarak) kapatıyoruz çünkü hangisinin açık olduğu bilinmiyor. Shet kaydını artırıyoruz, 5 sayısına eşitliği kontrol ediyoruz, böyle bir eşleşme varsa, 1'den 4'e kadar saymak gerektiğinden 1 sayısını sicile yazıyoruz. Ardından, shet'te hangi sayının olduğunu kontrol ediyoruz. ilgili gösterge için PORTB'den PORTB bilgi depolama kayıtlarına (dataind) veri yüklediğimiz ve açtığımız kayıt. Daha sonra TMR0 overflow interrupt bayrağını resetliyoruz, timer'a 100 sayısını yazıyoruz (bu değerin hesabı aşağıda verilmiştir), bir zaman gecikmesi için ve interrupt handler'dan çıkıyoruz. İlk kesintide birinci gösterge yanar, ikinci kesintide ikinci gösterge yanar ve dairesel bir döngüde böyle devam eder. Ana programda, yalnızca her gösterge için bilgi depolama kayıtlarına veri yüklemek kalır. Kesme alt yordamında, anahtar kayıtlarının değerlerini kaydetmeyi ve geri yüklemeyi unutmayın, bununla ilgili bir makalede yazdım.

Sayıların çıktısını almak için veri tablosu biçiminde bir karakter üreteci kullanmak daha iyidir. Örneğin, göstergelerde 3456 sayısını görüntülemek için, basamaklara bölünmesi gerekirken, basamak sayılarını (0'dan 9'a kadar) saklamak için ayrı kayıtlar kullanmak daha iyidir, ardından bu kayıtları karakter üreteci aracılığıyla çalıştırın, böylece ilgili segmentleri ateşlemek için (dataind kayıtlarına yüklenen) doğru baytların elde edilmesi.

Saat üretecinin frekansını 4 MHz olarak alacağız, makine çevrimi 1 μs'dir. Her göstergenin yenileme hızı sırasıyla 100 Hz (periyot T = 10 ms) olsun, gerekli gecikme süresi 10/4 = 2,5 ms olsun. TMR0 için ön ölçekleyici faktörü 1:16 olarak ayarlanmıştır, mümkün olan maksimum gecikme ise 256x16 = 4096 µs'dir ve 2,5 ms'lik bir duraklamaya ihtiyacımız vardır. TMR0'a yazılacak sayıyı hesaplayalım: 256-((256x2,5)/4,096) = 256-156,25 = 99,75. Yuvarlama işleminden sonra 100 sayısını elde ederiz.

Aşağıda, PIC16F628A mikrodenetleyici kullanılarak ortak katotlu 4 basamaklı bir göstergede dinamik göstergenin uygulanmasıyla Proteus programı, ürün yazılımı ve kaynak kodu için bir model indirebilirsiniz. Örneğin, göstergede 0000 sayıları görüntülenir; 0001; 0002; 13.52; 9764.

Şimdi 8x8 piksel (LED) çözünürlüğe sahip bir matris bağlamayı düşünün. Bir matrisin yapısı genellikle satırlar ve sütunlar cinsinden ele alınır. Aşağıdaki resimde, her sütunda tüm LED'lerin katotları ve her sırada anotlar bağlanmıştır. Dizeler (8 hat, LED anotlar) dirençler aracılığıyla mikrodenetleyiciye bağlanır. Her sütun (LED katotları) 8 transistör aracılığıyla mikrodenetleyiciye bağlanır. Gösterge algoritması aynıdır, önce sütunda hangi LED'lerin yanması gerektiğine göre satırlarda gerekli mantıksal seviyeleri ayarlarız, ardından ilk sütunu (gösterge soldan sağa) bağlarız. Belirli bir duraklamadan sonra sütunu kapatıyoruz ve satırlardaki mantıksal seviyeleri ikinci sütunu gösterecek şekilde değiştiriyoruz, ardından ikinci sütunu birleştiriyoruz. Ve böylece dönüşümlü olarak tüm sütunları değiştirin. Aşağıda, matrisi mikrodenetleyiciye bağlamanın bir şeması bulunmaktadır.


Toplamda, böyle bir matrisi bağlamak için 16 mikrodenetleyici pimi gerekir ki bu oldukça fazladır, bu nedenle kontrol hatlarını azaltmak için seri kaydırma yazmaçları kullanmak daha iyidir.

En yaygın seri kayıt, veri yüklemek için bir kaydırma yazmacı ve verilerin çıkış hatlarına aktarıldığı bir tutma yazmacı içeren 74HC595 mikro devresidir. İçine veri yüklemek basittir, SH_CP saat girişinde mantıksal 0'ı ayarlayın, ardından DS veri girişinde gerekli mantık seviyesini ayarlayın, ardından seviye değerini kaydederken (DS girişinde) saat girişini 1'e çeviriyoruz. vardiya kaydının içinde. Aynı zamanda, veriler bir bit kaydırılır. SH_CP çıkışını tekrar 0'a resetleyin, DS girişinde gerekli seviyeyi ayarlayın ve SH_CP'yi 1'e yükseltin. Shift register tamamen yüklendikten (8 bit) sonra, ST_CP çıkışını 1'e ayarlayın, bu anda veri depolama kaydı ve Q0 ... Q7 çıkış hatlarına beslenir, ardından ST_CP'nin çıkışını sıfırlarız. Sıralı yükleme sırasında, veriler Q0'dan Q7'ye kaydırılır. Pin Q7', kaydırma yazmacının son bitine bağlanır, bu pin ikinci mikro devrenin girişine bağlanabilir, böylece aynı anda iki veya daha fazla mikro devreye veri yükleyebilirsiniz. OE pimi, kendisine bir mantık 1 uygulandığında çıkış hatlarını üçüncü (yüksek dirençli) duruma değiştirir.MR pimi, kaydırma kaydını sıfırlamak, yani kayıt tetikleyicilerinin çıkışlarında düşük mantık seviyeleri ayarlamak için tasarlanmıştır. , sekiz sıfır yüklemeye eşdeğerdir. Aşağıda, başlangıçta sıfır olması koşuluyla, Q0 ... Q7 çıkış hatlarında 11010001 değerini ayarlayarak 74NS595 mikro devresine veri yüklemenin bir diyagramı bulunmaktadır:


İki 74HC595 kaydırma yazmacı kullanarak bir PIC16F628A mikrodenetleyiciye 8×8 matris bağlamayı düşünün, şema aşağıda gösterilmiştir:


Veriler DD2 çipine yüklenir (satırlarda mantık seviyesi kontrolü, LED anotlar), ardından Q7 pimi üzerinden sırasıyla DD3'e (sütun kontrolü) aktarılır, önce sütunu etkinleştirmek için baytı, ardından baytı yükleriz. satırlardaki mantıksal düzeylerle. Transistör anahtarlama matris sütunları (LED katotlar) DD3'ün çıkış hatlarına bağlanır. Bir matris üzerinde görüntü görüntülemek için program kodu aşağıdadır:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;8x8 çözünürlüğe sahip bir matris için dinamik göstergenin uygulanması ;Saat üretecinin frekansı, örneğin 4 MHz, makine döngüsü 1 µs org 0000h ;program yürütmeyi 0000h adresinden başlat Başlat'a git ;Başlat etiketine atla ;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;0004h rutin org kesintisi ;0004h movwf W_TEMP adresinden alt rutin yürütmeyi başlat ;anahtar kayıt değerlerini kaydet swapf STATUS,W ; clrf DURUMU; movwf STATUS_TEMP ; ; movwf FSR_osn ;FSR_osn kaydına movf FSR_prer,W ;FSR kaydının daha önce kaydedilen movwf FSR değerini FSR_prer kaydından geri yükleme ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;stolb yazmacının içeriğini çip movf stolb,W'ye yükleyin ;stolb yazmacı movwf var'ın içeriğini var met2 yazmacına kopyalayın btfsc var,0 ;ds çıkışını btfss var,0'a göre ayarlayın; bcf ds; bcf sh_cp ; rrf var,F ;Shift register var sağa hazırlanmak için;sonraki bit met2'ye git ;scetbit sıfıra eşit değil: met2 etiketine atla ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;; ;INDF yazmacının içeriğini çipe yükleyin;74HC595 (seri kaydırma yazmacı) movf INDF,W ;INDF yazmacının içeriğini kopyalayın movwf var ;var yazmacına movlw .8 ;ssetbit yazmacına 8 sayısını yazın, movwf scetbit'i saymak için ;aktarılan bitler met1 btfsc var ,7 ;çıktı ds'yi bsf ds'ye göre ayarlayın ;kayıtçının 7. bitinin değeri var btfss var,7 ; bcf ds; bsf sh_cp ;saat sh_cp veriyi mandallamak için çıktı bcf sh_cp ; rlf var,F ;Shift register var sola hazırlanmak için;sonraki bit decfsz scetbit,F ;kayıt koşulu scetbit ile azaltma met1'e git ;scetbit sıfıra eşit değil: met1 etiketine atla; bsf st_cp;yüklenen bcf st_cp baytlarını 74HC595 yongalarının çıkış hatlarına aktarmak için st_cp çıkışını saatleyin; bcf STATUS,C ;kaydırmadan önce yazmaç durumunun C bitini sıfırlar rrf stolb,F ;sola kaydırma yazmacı stolb ; incf FSR,F ;FSR kaydını artırın, sonrakini hazırlayın ;74HC595'e veri göndermek için kaydolun decfsz shet,F ;Çıkışa gitmek için kayıt koşuluyla azaltın ;Shet kaydı 0'a eşit değil: movlw data1 çıkışına atla ;Shet kaydı 0'a eşit: Önce adresi yaz movwf FSR ;FSR register movlw .8'de bilgi depolamak için kayıt olun ;Mowwf shet'i korumak için shet register'a 8 sayısını yazmak ;Sütunları saymak ; exxit bcf INTCON,T0IF ;taşma kesme işaretini sıfırla TMR0 movlw . 124 ;124 sayısını timer register TMR0 movwf TMR0'a yaz; ; movf FSR,W ;FSR'nin mevcut değerini kaydedin movwf FSR_prer ;FSR_prer'e movf FSR_osn ,W ;Önceden kaydedilen movwf FSR ;FSR değerini FSR_osn'dan geri yükleyin; swapf STATUS_TEMP,W ;anahtar kayıtlarının içeriğini geri yükle movwf STATUS ; takas W_TEMP,F ; takas W_TEMP,W ; ; retfie ;kesme alt programından çıkış;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Ana program Başlatma ................ ;Kayıtların başlangıç ​​ayarı ................. ;Özel amaçlı..... ............ bsf STATUS,RP0 ;11010011 ikili sayısını movlw b"11010010" ;OPTION_REG kaydına yazın, böylece dahili movwf OPTION_REG ;TMR0 için saat kaynağını ayarlayın bcf STATUS,RP0 ;önceden ölçekleyiciyi etkinleştirin TMR0, ön ölçekleyici oranını 1:8 olarak ayarlayın; movlw .8 ;movwf shet'i başlatmadan önce shet kaydına 8 sayısını yaz ;tmr0 taşma kesintileri, yürütülür;güç açıldıktan sonra bir kez movlw b"10000000" ;10000000 ikili sayısını movwf stolb'a yaz ;stolb kaydı, 1. sütunu etkinleştirmek için; gücü açtıktan sonra bir kez yapılır; movlw data1 ;İlk kaydın adresini (depolama kayıtları movwf FSR_prer ;bilgisi) FSR_prer kaydına yazın, güç açıldıktan sonra bir kez gerçekleştirilir; movlw .8 ;movwf tmp ;matrix'e 8 bilgi çıktısı yazmacının temizlenmesi, movlw data1 ;matrix movwf FSR'nin kapatılmasına eşdeğerdir; met3 clrf INDF; FSR,F dahil; decfsz tmp,F ; met3'e git; ; bcf INTCON,T0IF ; TMR0 taşma kesme işaretini temizle bsf INTCON,T0IE ; TMR0 taşma kesmelerini etkinleştir bsf INTCON,GIE ; genel kesmeleri etkinleştir; m1 movlw data1;R çıkış örneği movwf FSR; movlw b"00000000" ; movwf INDF; FSR,F dahil; movlw b"01111111" ; movwf INDF; FSR,F dahil; movlwb"00001001" ; movwf INDF; FSR,F dahil; movlwb"00011001" ; movwf INDF; FSR,F dahil; movlwb"00101001" ; movwf INDF; FSR,F dahil; mov b"01000110" ; movwf INDF; FSR,F dahil; movlw b"00000000" ; movwf INDF; FSR,F dahil; movlw b"00000000" ; movwf INDF; ; ................; ................; ................; ; end ; tüm programın sonu;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;8x8 çözünürlüğe sahip bir matris için dinamik göstergenin uygulanması

;Örnek saat frekansı 4 MHz, makine döngüsü 1 µs

org 0000h ; program yürütmeyi 0000h adresinde başlat

Başlat'a git; Başlat etiketine git

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Kesme rutini

org 0004h ; 0004h adresinde alt program yürütmeyi başlat

movwf W_TEMP ;anahtar kayıt değerlerini kaydet

swapf DURUM,W ;

movwf STATUS_TEMP ;

movf FSR,W ;FSR kaydının mevcut değerini kaydedin

movwf FSR_osn ;FSR_osn kaydına

movf FSR_prer,W ; önceden kaydedilmiş değeri geri yükle

movwf FSR ;FSR_prer'den FSR

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (seri kaydırma yazmacı)

movf stolb,W ; stolb kaydının içeriğini kopyala

movwf var ; var'ı kaydetmek için

movlw .8 ;8 sayısını saymak için scetbit yazmacına yaz

movwf scetbit; aktarılan bitler

met2 btfsc var,0 ;ds çıkışını şuna göre ayarla:

bsf ds ; yazmacın 7. bit değeri var

bsf sh_cp ;clock sh_cp çıktısı verileri kilitlemek için

rrf var,F ; vardiya yazmacı var hazırlama hakkı

;sonraki bit

decfsz scetbit,F ;ssetbit kayıt koşulu ile azalma

met2'ye git;scetbit sıfıra eşit değil: met2 etiketine atla

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;74HC595 (seri kaydırma yazmacı)

movf INDF,W ; INDF yazmacının içeriğini kopyala

movwf var ; var'ı kaydetmek için

movlw .8 ;8 sayısını saymak için scetbit yazmacına yaz

movwf scetbit; aktarılan bitler

met1 btfsc var,7 ;ds çıkışını şuna göre ayarla:

bsf ds ; yazmacın 7. bit değeri var

bsf sh_cp ;clock sh_cp çıktısı verileri kilitlemek için

rlf var,F ;sola kaydırma var hazırlamak için

;sonraki bit

decfsz scetbit,F ;ssetbit kayıt koşulu ile azalma

met1'e git ;scetbit sıfıra eşit değil: met1 etiketine atla

bsf st_cp ;st_cp'nin çıkışını yüklenmiş olarak aktarmak için saatleyin

bcf st_cp 74HC595 çıkış satırı başına bayt

bcf STATUS,C ; kaydırmadan önce durum kaydının C bitini temizle

rrf stolb,F ;sola kaydırma yazmacı stolb

incf FSR,F ;FSR kaydını arttır, sonrakini hazırla

; 74HC595'e veri göndermek için kaydolun

decfsz shet,F ;kayıt koşulu shet ile azalma

çıkışa git; sayfa kaydı 0'a eşit değil: çıkışa atla

movlw data1 ;shet register 0: ilkinin adresini yaz

movwf FSR ;FSR'de bilgi depolamak için kaydolun

movlw .8 ;referans için 8 sayısını sayfa kaydına yaz

movwf sayfası; sütun sayıları

movlw b"10000000" ; 10000000 ikili sayısını içine yaz

movwf stolb ;stolb'u kaydedin, 1. sütunu dahil etmek için

çıkış bcf INTCON,T0IF; TMR0 taşma kesme bayrağını sıfırla

movlw .124 ; 124 sayısını TMR0 zamanlayıcı kaydına yaz

movf FSR,W ;FSR kaydının mevcut değerini kaydedin

movwf FSR_prer; FSR_prer kaydına

movf FSR_osn ,W ; önceden kaydedilmiş değeri geri yükle

movwf FSR ;FSR_osn'dan FSR

swapf STATUS_TEMP,W ; anahtar kayıtlarının içeriğini geri yükle

takas W_TEMP,F ;

takas W_TEMP,W ;

retfie ;exit interrupt rutini

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Ana program

Başlat ................. ;kayıtların ilk ayarı

................. ;özel amaç

.................

bsf STATUS,RP0 ;kayıt olmak için ikili sayı 11010011'i yazın

movlw b"11010010" ;OPTION_REG, böylece dahili

movwf OPTION_REG; TMR0 için saat kaynağı

bcf STATUS,RP0 ;TMR0'dan önce ön ölçekleyiciyi etkinleştir

;Ön ölçekleyici oranını 1:8 olarak ayarlayın

movlw .8 ;8 sayısını çalıştırmadan önce shet register'a yaz

movwf shet ; TMR0 taşma kesintileri, çalışıyor

;güç açıldıktan sonra bir kez

movlw b"10000000" ; 10000000 ikili sayısını içine yaz

movwf stolb ;stolb'u kaydedin, 1. sütunu dahil etmek için

Her sütunun satırları için mantıksal düzeylere sahip bilgiler, üzerinden erişilen 8 bilgi depolama kaydında saklanır. İlk yazmacın adresi data1 olarak adlandırılır. Shet ve stolb registerlerinin ilk yazılmasına ek olarak, FSR_prer registerına ilk bilgi depolama registerının adresinin yazılması gerekmektedir ( register data1 dir, FSR_prer de giriş bir kez yapılır daha sonra içerisinde ayarlanır. işleyici), yalnızca bundan sonra TMR0 taşma kesintilerine izin verir.

Kesintileri etkinleştirmeden önce, bilgi depolama kayıtlarının temizlenmesi istenir, bu işlem ek tmp kaydı (bir sayaç olarak) ve dolaylı adresleme kullanılarak gerçekleştirilir, temizleme, matrisi kapatmaya eşdeğerdir.

Kesme işleme rutininde, stolb kaydının içeriğini DD2 çipine yüklüyoruz (kesmelere izin verdikten sonra işleyiciye ilk girdiğinizde, yukarıda bahsedildiği gibi kayıt 10000000 sayısını içerir). Yükleme, yüklendikçe Q0'dan Q7'ye (DD2 çipinin içinde) yönde kayan stolb kaydının düşük bitinden başlar, yükleme algoritması yukarıda tartışıldı, bu yüzden kodu anlamak zor olmayacağını düşünüyorum . Ardından, INDF kaydının içeriğini DD2'ye yüklüyoruz, bu, adresi FSR'de bulunan bilgi depolama kayıtlarından biridir (kesintileri etkinleştirdikten sonra işleyiciye ilk girdiğinizde, FSR ilkinin adresini içerir) bilgi depolama kaydı data1 olarak adlandırılır). Yükleme, INDF kaydının yüksek bitinden başlar. Ele alınan 2 baytı yükledikten sonra st_cp çıkışını saatliyoruz, böylece indirilen veriler DD2, DD3 mikro devrelerinin çıkış hatlarına iletiliyor. Böylece işleyiciye ilk girişte, data1 kaydının ( ilk bilgi depolama kaydı).

Daha sonra, kesme işleyicisine bir sonraki girişte geçiş yapmak için matrisin ikinci sütununu hazırlamak üzere stolb kaydını bir bit sağa kaydırıyoruz. STATUS kaydının C bayrağı, kaydırma bu bayrak aracılığıyla gerçekleştiğinden ve kayma anında durumu bilinmediğinden, kaydırmadan önce silinmelidir. Vardiyadan sonra, ikinci sütun için mantıksal satır düzeyleriyle bir sonraki depolama kaydını (data1 kaydından sonra) hazırlayarak FSR kaydını artırırız. Ardından, shet kaydını koşulla birlikte azaltırız ve sıfıra eşit değilse, TMR0 taşma kesme bayrağını sıfırlayın, sayıyı zamanlayıcıya yazın ve kesme işleyicisinden çıkın.

İşleyiciye bir sonraki girişinizde, matrisin ikinci sütunu etkinleştirilir ve bu böyle devam eder. Shet kaydı sıfırlandığında (8. sütunu değiştirdikten sonra), bir sonraki anahtarlama sütunları döngüsü için ona 8 sayısı yazılır, ayrıca stolb kaydının değeri düzeltilir, ilk bilgi depolama kaydının adresi ( data1) FSR kaydına yazılır.

TMR0 timer için zaman gecikmesini hesaplayalım, saat frekansı 4 MHz, makine çevrimi 1 µs. LED'lerin titremesini önlemek için her kolonun yenileme hızını 100Hz (periyod T=10ms) olarak alalım, zaman gecikmesi 10/8=1.25ms olsun. Olası maksimum gecikme 256x8 = 2048 µs iken ön ölçekleyici oranı TMR0'ı 1:8 olarak ayarladık. 1,25 ms'lik bir duraklama için zamanlayıcı (256x1,25) / 2,048 = 156,25 kez saymalıdır, yuvarlama 156 sayı alırız. Buna göre timer içine 256-156=100 sayısını yazmak gerekiyor ama bu tam olarak doğru bir değer değil çünkü interrupt rutinini çalıştırmak biraz zaman alıyor bu durumda yaklaşık 190 µs alıyor, yeniden hesaplanarak ön ölçekleyici katsayısını hesaba katarsak, 190/8 = 23.75 veya 24 sayı elde ederiz. TMR0'a yazılacak doğru değer: 100+24=124.

Ana programda, matriste görüntülemek istediğimize göre 8 adet bilgi depolama kaydı yazıyoruz. Aşağıda, yukarıdaki kod için matrise bilgi çıktısını açıklayan bir diyagram bulunmaktadır.


Vardiya kayıtlarına ek olarak, yedi bölümlü göstergeler ve LED matrisleri hakkında bilgi görüntülemek için özel sürücüler vardır, bu durumda sürücünün kendisi dinamik gösterge uygular, geriye kalan tek şey görüntüleme için ona veri göndermektir. Bu popüler sürücülerden birini hakkında bir makalede inceledim.

Bağlantının altında, iki 74HC595 kaydırma yazmacı kullanılarak 8x8 matris üzerinde dinamik göstergenin uygulanmasıyla PIC16F628A mikrodenetleyici için ürün yazılımını ve kaynak kodunu indirebilirsiniz, bağlantı şeması yukarıda tartışılmıştır. R, L harfleri, 46 sayısı, bir gülen surat ve sadece haç şeklinde bir desen dönüşümlü olarak matriste görüntülenir, bu animasyon aşağıdaki videoda gösterilmektedir.

etiketli , . Okumak .

LED'ler aydınlatma kaynakları arasında giderek daha fazla yer almaktadır.
Düşük güç tüketimi, parlaklık, LED'lerin geleneksel akkor lambaların yerini almasına ve enerji tasarruflu lambalarla güvenle rekabet etmesine izin verdi.
Genel eğilime teslim olarak, kendi ellerimle hissetmeye ve herhangi bir ayrı sürücü gerektirmeyen ancak doğrudan 220 volt ağa bağlanan LED matrisine kendi gözlerimle bakmaya karar verdim. Bu konuyla ilgilenenler, lütfen kedinin altına.
Sonuç olarak, aşağıdaki örneği seçtim:

Sayfadaki açıklamadan şu anlaşılıyor: verilen kaynak Sveta:
- LED COB teknolojisi kullanılarak üretilmiştir;
- besleme voltajı 220 volt;
- güç tüketimi 30 watt;
- renk sıcaklığı 2500-3200K;
- substrat (taban) alüminyum malzemesi;
- genel boyutlar 40*60mm;

Paket seyahat ederken teoriyi inceledim.
LED COB teknolojisi nedir?

Yaklaşık 2009 yılına kadar, LED ürünlerinin tek bir gelişme yönü vardı - LED'in veya Power LED'in gücünü artırmak. Bu teknolojinin geliştirilmesi, bir LED'in gücünün 10 watt seviyesinde elde edilmesini mümkün kılmıştır.
Anlaşıldığı üzere, ayrı bir yüksek güçlü LED üretmenin yüksek maliyeti nedeniyle güçte daha fazla bir artış mantıklı değil. Farklı bir geliştirme yolu arayışında önemli bir rol, LED'in bir nokta ışık kaynağı olması ve yüksek güç kullanarak geniş bir yüzey alanını aydınlatmanın kolay olmadığı ve çok ucuz olmadığı ortaya çıktı. LED'ler. Az ya da çok kabul edilebilir sonuçlar elde etmek için, ışığı dağıtmak için optik sistemlerin kullanılması gerekiyordu.
Bir sonraki adım, kabul edilebilir dağınık ışık kaynakları oluşturmak için SMD LED'leri kullanmaktı - çok sayıda LED bir panoya lehimlendi. Dezavantajları, sürecin genel emek yoğunluğudur - bireysel LED'lerin üretimi (her biri kendi seramik substratı + kişisel fosfor tabakası, vb.). Ek olarak, yöntemin dezavantajları, tek tek LED'lerin düşük güvenilirliği ve bunlardan en az birinin arızalanması durumunda onarım ihtiyacıydı.
Sonuç olarak, mühendisler, kişisel nitelikler olmadan LED'ler üretme ve bunları aynı panoya yerleştirme ihtiyacı fikrini ortaya attılar. kısa mesafe ortak bir fosfor tabakası altında birbirinden, yani LED COB teknolojisi. Sonuçta bu, bir bütün olarak ışık kaynağının maliyetini düşürmeyi ve tek tek LED'lerin arızalanması durumunda tüm modülü (matris) değiştirmeyi mümkün kıldı.

Paket, içinde balonlu naylon olan sarı bir zarf içinde geldi. Matrisin kendisi orantılı bir plastik torba içine alınır.





Gördüğünüz gibi, gerçekten de LED'ler birbirine yakın yerleştirilmiş, ortak bir fosfor tabakası ile kaplanmış ve plastik yapıştırıcıya benzeyen bir kütle ile korunmuştur.
Matrisin çevresindeki beyaz madde ve sürücünün koruyucu devresi, katı, elastik bir kütle değil, kauçuk veya sıcak tutkal gibi görünür. Bu, onu en belirgin durumlardan çıkarmayı ve bunlardan birinin maksimum sabit ters voltajı 1000 volt ve maksimum ileri akımı 0,5 amper olan bir MB10S diyot köprüsü olduğunu belirlemeyi mümkün kıldı.
Veri Sayfası:

Boyutlar, açıklamada belirtilenlere karşılık gelir.



Alt tabakanın kalınlığı 1 mm ve matrisin ağırlığı 8 gram kadardır.

Yüksek güçlü LED'lerde olduğu gibi, matrislerin de bir soğutucuya ihtiyacı olduğunu söylemeye gerek yok. Hal böyle olunca işlemciden bir soğutucu seçildi.


Matris, KPT-8 termal macun aracılığıyla kendinden kılavuzlu vidalarla radyatöre sabitlendi.
Bu eylem dizisinde bir hata yapıldı - tel, matris radyatöre bağlanmadan önce lehimlenmiş olmalıydı - havyadan gelen ısı ısı emiciye gitti. Lehimleme sonucu fotoğrafta görülebilir. Ancak teller güvenli bir şekilde tutuldu ve matrisi çıkarmaya başlamadım.


İlk katılım silinmez bir izlenim bıraktı - "parlak" demek, hiçbir şey söylememek. Matris düzlemine hafif bir açıyla uzaktan bakıldığında bile "tavşan" sağlanır. Mevcut 2800K enerji tasarruflu lambalarla karşılaştırıldığında ışık beyazdır ve çoktur.

14 metrekarelik oda metre iyi aydınlatılmış.







20 dakika sonra sıcaklık 85 dereceye yükseldi. Ayrıca, matrisi güç açısından test etmedim, ancak kontrol çipleri akımı güçlü ısıtma ile LED'ler aracılığıyla kontrol edebilir.

Bu radyatörden standart bir soğutucu ve bir fan hızı kontrol panosu ile zorlamalı soğutma kullanılarak başka testler yapıldı. Sonuncusunu eski PC güç kaynağından çıkardım.





Sıcaklık bir buçuk saat boyunca 31.5 derecenin üzerine çıkmadı ve fan hızlanmadan düşük devirlerde çalıştı.



Bundan sonra fan hızı kontrol kartı tasarımdan çıkarıldı ve güç kaynağı 9 voltluk bir güç kaynağı ile değiştirildi.

Ağdaki voltajdaki artış, beyan edilen güç tüketiminin doğru olduğundan emin olmayı mümkün kıldı.



Beklendiği gibi, kamera matrisin titremesine 100 Hertz frekansla tepki verdi. Video çekmedim ama aşağıdakileri yakalayabildim

Diyot köprüsüne bir kondansatör lehimleyerek dalgalanmaların üstesinden gelmek mümkün olacaktır. Bu, voltajın 220 * 1,41 = 310,2 volt'a yükselmesine neden olur ve BP5132H sınırlayıcı dirençlerle oynamak gerekirdi, ancak başlangıçta bu ışık kaynağının yaşam alanları için olmadığının farkında olduğum için bu mücadeleyi başlatmadım.
Matrisin kapsamı genel sokak aydınlatması, yardımcı odalar vb.'dir ve bu nedenle titreşimler ihmal edilebilir.
LATR'nin yardımıyla, matrisin hala yayıldığı alt eşiği belirlemek mümkün oldu (deney işte yapıldı ve “Neden?” Sorularına cevap vermemek için fotoğraf çekilmedi). ışık 130 küsur volttur. 250 volttan fazla beslemedim, ancak bu durumda kaynakçının maskesi müdahale etmeyecektir).
Bu ışık kaynağının yüksek bir güce sahip olması ve tabiri caizse artan bir ışık yoğunluğu olması nedeniyle, matrisin önündeki bir yayılma perdesi hiç de gereksiz olmayacaktır.

Sonuç olarak, dezavantajlar şunları içerir:
- artan ısı dağılımı (tasarım değil, teknoloji maliyetleri) ve bir ısı emici kullanma ihtiyacı (tercihen aktif soğutma);
- oldukça yüksek maliyet.

Bununla birlikte, bu dezavantajlar, bu matrisin parlaklığı, geniş bir alanı aydınlatma yeteneği ve beyan edilen özelliklere uygunluk ile fazlasıyla dengelenir.
Matrisin uygulama alanı KONUT DEĞİLDİR, çünkü titreme olumsuz özelliklere atfedilemez.
Ayrı olarak, "18. maddeden nefret edenler" emrinin taraftarlarına da dönmek istiyorum). Arkadaşlar, özellikle derlemek, sistematik hale getirmek ve sunmak oldukça fazla çaba ve zaman aldığından, incelemede sunulan bilgileri değerlendirirken objektif olmanızı rica ediyorum.

Ürün, mağaza tarafından yorum yazılması için sağlanmıştır. İnceleme, Site Kuralları'nın 18. maddesine uygun olarak yayınlanır.

+44 almayı planlıyorum Favorilere ekle incelemeyi beğendim +60 +111

Zaman fark edilmeden geçiyor ve görünüşe göre yakın zamanda satın alınan ekipman zaten arızalı. Böylece, 10.000 saatlerini çalıştırdıktan sonra, monitörümün (AOC 2216Sa) lambaları uzun süre yaşamayı emretti. İlk başta, arka ışık ilk kez açılmadı (monitörü açtıktan sonra arka ışık birkaç saniye sonra kapandı), bu durum monitörün tekrar açılıp / kapatılmasıyla çözüldü, zamanla monitörün açılması gerekiyordu zaten 3 kez kapalı / kapalı, sonra 5, sonra 10 ve bir noktada, açma girişimlerinin sayısına bakılmaksızın arka ışığı açamadı. Tanrı'nın ışığına çıkarılan lambaların kenarları kararmış olduğu ortaya çıktı ve yasal olarak hurdaya gitti. Yedek lambaları takma girişimi (uygun boyutta yeni lambalar satın alındı) başarısız oldu (monitör arka ışığı birkaç kez açabildi, ancak hızlı bir şekilde açma-kapama moduna geri döndü) ve ne olabileceğinin nedenlerini bulma zaten monitör elektroniğindeki sorun, beni kendi monitör arka ışığınızı LED'lere monte etmenin, CCFL lambaları için mevcut invertör devresini onarmaktan daha kolay olacağı fikrine götürdü, özellikle de ağda halihazırda makaleler olduğundan böyle bir yer değiştirmenin temel olasılığı.

Monitörü söküyoruz

Monitörü demonte etme konusunda zaten birçok makale yazıldı, tüm monitörler birbirine çok benziyor, kısacası:
1. Monitör beslemesinin montajını ve kasanın arka duvarını tutan alttaki tek cıvatayı söküyoruz


2. Kasanın altında, kasanın önü ve arkası arasında iki yuva vardır, bunlardan birine düz bir tornavida koyarız ve monitörün tüm çevresindeki mandallardan kapağı çıkarmaya başlarız (sadece yavaşça tornavidayı kendi ekseni etrafında döndürerek ve kasa kapağını kaldırarak). Aşırı çaba sarf etmek gerekli değildir, ancak kasayı yalnızca ilk seferde mandallardan çıkarmak zordur (tamir sırasında birçok kez açtım, bu nedenle zamanla mandallar çok daha kolay çıkarılmaya başlandı).
3. İç metal çerçevenin kasanın önüne montajına ilişkin bir görüntümüz var:


Kartı mandallardan düğmelerle çıkarıyoruz, (benim durumumda) hoparlör konektörünü çıkarıyoruz ve alttaki iki mandalı açarak iç metal kasayı çıkarıyoruz.
4. Solda, arka ışıkları bağlamak için 4 kablo görebilirsiniz. Hafifçe sıkarak çıkarıyoruz çünkü. düşmeyi önlemek için konektör küçük bir mandal şeklinde yapılır. Ayrıca matrise giden (monitörün üst kısmında) geniş bir kablo çıkarıyoruz, konektörünü yanlardan sıkıyoruz (çünkü konektörde yan mandallar var, ancak bu konektöre ilk bakışta açık olmasa da):


5. Şimdi matrisin kendisini ve arka ışığı içeren "sandviçi" sökmeniz gerekiyor:


Çevre boyunca, aynı düz tornavidayla hafif bir merakla açılan mandallar vardır. İlk olarak, matrisi tutan metal çerçeve çıkarılır, ardından üç küçük cıvatayı sökebilirsiniz (minyatür boyutlarından dolayı normal bir yıldız tornavida çalışmaz, özellikle küçük bir taneye ihtiyacınız olacak) matris kontrol kartı ve matris çıkarılabilir (en iyisi monitörü kumaş matrisle kaplı bir masa gibi sert bir yüzeye koymak, kontrol kartını çevirerek çıkarmak, masanın üzerine koymak ve uçtan sonuna kadar açmak en iyisidir) arkadan aydınlatmalı kasayı izleyin ve dikey olarak kaldırarak kaldırın ve matris masanın üzerinde yatmaya devam edecektir. Ters sipariş- yani masanın üzerinde yatan matrisi monte edilmiş arkadan aydınlatmalı kasa ile örtün, kabloyu uçtan kontrol panosuna sarın ve kontrol panosunu vidalayarak monte edilmiş birimi dikkatlice kaldırın).
Matrisi ayrı ayrı ortaya çıkıyor:


Ve arkadan aydınlatmalı blok ayrı ayrı:


Arkadan aydınlatmalı blok benzer şekilde demonte edilir, yalnızca metal bir çerçeve yerine arka ışık, arka ışığın ışığını dağıtmak için kullanılan pleksiglası aynı anda konumlandıran plastik bir çerçeve tarafından tutulur. Mandalların çoğu yanlardadır ve matrisin metal çerçevesini tutanlara benzer (düz bir tornavidayla kaldırarak açın), ancak yanlarda "içe doğru" açılan birkaç mandal vardır (basmanız gerekir) mandallar kasanın içine girecek şekilde bir tornavidayla bastırın).
İlk başta çıkarılacak tüm parçaların konumunu ezberledim ama sonra onları "yanlış" bir araya getirmenin mümkün olmayacağı ve parçalar kesinlikle simetrik görünse bile farklı taraflardaki mandallar arasındaki mesafeler ortaya çıktı. metal çerçevenin ve arka ışığı tutan plastik çerçevenin yan taraflarındaki sabitleme çıkıntılarının “yanlış” monte edilmesine izin vermeyecektir.
Aslında hepsi bu - monitörü söktük.

LED şerit aydınlatma

İlk başta, arka ışığın metre başına 3528 - 120 LED beyaz LED'li bir LED şeritten yapılmasına karar verildi. Ortaya çıkan ilk şey, bandın genişliğinin 9 mm ve arka ışıkların genişliğinin (ve bant yuvasının) 7 mm olduğuydu (aslında, iki standart arka ışık var - 9 mm ve 7 mm , ama benim durumumda 7 mm idi). Bu nedenle bant incelendikten sonra bandın her bir kenarından 1 mm kesilmesine karar verildi çünkü. bu, bandın önündeki iletken raylara dokunmadı (ve arkada, tüm bant boyunca, arka ışıkta özelliklerinde 1 mm azalma nedeniyle özelliklerini kaybetmeyecek iki geniş güç kablosu var. 475 mm uzunluk, çünkü akım küçük olacaktır). Daha erken olmaz dedi ve bitirdi:


sadece temiz LED Şerit Işık tüm uzunluk boyunca kırpılmış (fotoğraf, kırpılmadan önce ve kırpıldıktan sonra olanların bir örneğini göstermektedir).
İki şerit 475 mm banta ihtiyacımız olacak (şerit başına 3 LED'den oluşan 19 bölüm).
Monitör arka ışığının normal olanla aynı şekilde çalışmasını (yani monitör denetleyicisi tarafından açılıp kapanmasını) istedim, ancak eski CRT monitörlerde olduğu gibi parlaklığı "manuel olarak" ayarlamak istedim çünkü bu sık kullanılan bir fonksiyon ve birkaç tuşa her bastığımda ekran menüsüne tırmanmaktan yoruldum (monitörümde sağ-sol tuşlar monitör modlarını değil, yerleşik hoparlörlerin sesini ayarlar) , bu nedenle modların her seferinde menü aracılığıyla değiştirilmesi gerekiyordu). Bunun için ağda monitörüm için bir kılavuz bulundu (kimin için yararlı - makalenin sonuna eklenmiştir) ve şemaya göre Güç Kartı ile sayfada + 12V, Açık, Dim ve GND bulundu , ilgilendiğimiz.


Açık - arka ışığı açmak için kontrol kartından gelen sinyal (+ 5V)
Dim - PWM arka ışık parlaklık kontrolü
+ 12V'nin 12'den uzak olduğu ortaya çıktı, ancak arka ışık yükü olmadan 16V civarında ve yük altında 13.67V civarında bir yerde
Ayrıca herhangi bir PWM arka ışık parlaklığı ayarı yapılmamasına, ancak arka ışığın doğru akımla çalıştırılmasına karar verildi (aynı zamanda, bazı monitörlerde arka ışık PWM'sinin çok iyi çalışmaması nedeniyle sorun çözülüyor). yüksek frekans ve bazı insanlar bundan biraz sıkılır.) Monitörümde "yerel" PWM'nin frekansı 240 Hz idi.
Panoda ayrıca, On sinyalinin uygulandığı (kırmızı ile işaretlenmiş) ve inverter ünitesine + 12V (inverter ünitesinin enerjisini kesmek için lehimlenmesi gereken jumper yeşil ile işaretlenmiştir) uygulanan kontaklar bulundu. (fotoğraf notları görmek için büyütülebilir):


LM2941 lineer regülatör, kontrol devresinin temeli olarak alındı, çünkü 1A'ya kadar olan bir akımda, Açık sinyaliyle arka ışığı açıp kapamayı kontrol etmek için kullanılması gereken ayrı bir Açık / Kapalı kontrol pimine sahipti. monitör kontrol kartından. Doğru, LM2941'de bu sinyal ters çevrilmiştir (yani, Açma / Kapama girişi sıfır potansiyel olduğunda çıkışta voltaj vardır), bu nedenle kontrol kartından gelen doğrudan Açık sinyaliyle eşleşmesi için bir transistöre bir invertör monte etmem gerekiyordu. ve ters LM2941 girişi. Şema başka fazlalıklar içermiyor:


LM2941 için çıkış voltajının hesaplanması aşağıdaki formüle göre yapılır:

Vout = Vref * (R1+R2)/R1

Vref = 1.275V olduğunda, formüldeki R1, devredeki R1'e karşılık gelir ve formüldeki R2, devredeki bir çift direnç RV1 + RV2'ye karşılık gelir (daha yumuşak parlaklık kontrolü ve düzenlenen voltaj aralığını azaltmak için iki direnç eklenir) değişken direnç RV1 ile).
R1 olarak 1 kOhm aldım ve R2 seçimi aşağıdaki formüle göre yapıldı:

R2=R1*(Vout/Vref-1)

Bant için ihtiyacımız olan maksimum voltaj 13V'dur (Parlaklığı kaybetmemek için nominal 12V'den birkaç tane daha fazla aldım ve bant bu kadar hafif bir aşırı voltaja dayanacak). Şunlar. maksimum değer R2 = 1000*(13/1.275-1) = 9.91kΩ. Bandın hala bir şekilde parladığı minimum voltaj yaklaşık 7 volttur, yani. minimum değer R2 = 1000*(7/1.275-1) = 4,49kΩ. R2'miz, değişken dirençli bir RV1 ve çok dönüşlü bir düzeltici RV2'den oluşur. RV1 9.91kOhm - 4.49kOhm = 5.42kOhm direncini alıyoruz (en yakın RV1 - 5.1kOhm değerini seçiyoruz) ve RV2'yi yaklaşık 9.91-5.1 = 4.81kOhm olarak ayarlıyoruz (aslında, önce devreyi monte etmek en iyisidir, RV1'in maksimum direncini ayarlayın ve LM2941 çıkışındaki voltajı ölçün, RV2 direncini çıkış istenen değere sahip olacak şekilde ayarlayın maksimum voltaj(bizim durumumuzda yaklaşık 13V).

LED şeridin montajı

Bandı 1 mm kestikten sonra güç kabloları bandın uçlarında açığa çıktığı için kasanın üzerine bandın yapıştırılacağı yere (maalesef mavi değil siyah) elektrik bandı yapıştırdım. Üzerine bir bant yapıştırılmıştır (yüzeyi bir saç kurutma makinesi ile ısıtmak iyidir, çünkü yapışkan bant sıcak bir yüzeye çok daha iyi yapışır):


Ardından pleksiglas üzerine serilen arka film, pleksiglas ve ışık filtreleri monte edilir. Kenarlar boyunca bandı silgi parçalarıyla destekledim (böylece banttaki kenarlar çıkmaz):


Bundan sonra, arka ışık ünitesi ters sırada monte edilir, matris kurulur, arka ışık telleri çıkarılır.
Devre bir devre tahtası üzerine monte edildi (basitlik nedeniyle tahtayı çoğaltmamaya karar verdim), monitörün metal kasasının arka duvarındaki deliklerden cıvatalandı:




Güç ve kontrol sinyali Açık, güç kaynağı kartından başlatıldı:


LM2941'e tahsis edilen tahmini güç, aşağıdaki formülle hesaplanır:

Pd = (Vin-Vout)*Iout +Vin*Ignd

Benim durumum için, Pd = (13.6-13) * 0.7 + 13.6 * 0.006 = 0.5 Watt'tır, bu nedenle LM2941 için en küçük radyatörle yetinmeye karar verildi (dielektrik contadan geçirildi çünkü izole edilmedi) LM2941'de topraklayın).
Nihai montaj, tasarımın oldukça iyi bir performansını gösterdi:


Avantajlardan:

  • Standart LED şerit kullanır
  • Basit kontrol panosu
Eksikliklerden:
  • Parlak gün ışığında yetersiz arka ışık parlaklığı (pencerenin önündeki monitör)
  • Şeritteki LED'ler, monitörün üst ve alt kenarlarına yakın her bir LED'den gelen küçük ışık konilerini gösterecek kadar sık ​​aralıklarla yerleştirilmemiştir.
  • Beyaz dengesi biraz bozuk ve biraz yeşilimsi oluyor (büyük olasılıkla monitörün kendisinin veya video kartının beyaz dengesini ayarlayarak çözülüyor)
Arka ışığı onarmak için oldukça iyi, basit ve bütçeye uygun bir seçenek. Film izlemek veya monitörü mutfak TV olarak kullanmak oldukça rahat ama muhtemelen günlük işler için uygun değil.

PWM ile parlaklık kontrolü

Benden farklı olarak eski CRT monitörlerdeki analog parlaklık ve kontrast kontrollerini nostaljiyle hatırlamayan bilgisayar korsanları için, dışarıdan herhangi bir ek kontrol çıkarmadan (delik açmadan) monitör kontrol kartı tarafından üretilen standart PWM'den kontrol yapabilirsiniz. monitör kasası). Bunu yapmak için, Açma / Kapama kontrol cihazının girişindeki iki transistöre bir AND-NOT devresi monte etmek ve çıkıştaki parlaklık kontrolünü kaldırmak (çıkış voltajını sabit bir 12-13V olarak ayarlayın) yeterlidir. Değiştirilmiş şema:


Düzeltici direnç RV2'nin 13V'luk bir voltaj için direnci yaklaşık 9,9 kOhm olmalıdır (ancak bunu tam olarak regülatör açıkken ayarlamak daha iyidir)

Daha yoğun LED arka ışığı

Arka ışığın yetersiz parlaklığı (ve aynı zamanda tekdüzeliği) sorununu çözmek için, daha fazla ve daha sık LED takılmasına karar verildi. LED'leri tek tek satın almanın, 1,5 metrelik bant satın alıp oradan lehimlemekten daha pahalı olduğu ortaya çıktığından, daha ekonomik bir seçenek seçildi (LED'leri bir banttan lehimlemek).
3528 LED'lerin kendileri, 6 mm genişliğinde ve 238 mm uzunluğunda 4 şeride yerleştirildi, 3 LED, 4 şeridin her birinde 15 paralel düzenek halinde seri halde (LED'lerin kabloları eklenmiştir). LED'leri ve telleri lehimledikten sonra aşağıdakiler elde edilir:




Şeritler, kablolar merkezdeki bir bağlantı noktasında monitörün kenarına gelecek şekilde üstte ve altta olmak üzere ikişer adet yerleştirilir:




LED'ler arasındaki nominal voltaj 3,5 V'tur (aralık 3,2 ila 3,8 V), bu nedenle seri olarak 3 LED'den oluşan bir düzeneğe yaklaşık 10,5 V güç verilmelidir. Bu nedenle, denetleyici parametrelerinin yeniden hesaplanması gerekir:


Bant için ihtiyacımız olan maksimum voltaj 10,5 V'tur. Şunlar. maksimum değer R2 = 1000*(10,5/1,275-1) = 7,23kΩ. LED montajının hala bir şekilde parladığı minimum voltaj yaklaşık 4,5 volttur, yani. minimum değer R2 = 1000*(4,5/1,275-1) = 2,53kΩ. R2'miz, değişken dirençli bir RV1 ve çok dönüşlü bir düzeltici RV2'den oluşur. RV1 7.23kOhm - 2.53kOhm = 4.7kOhm direncini alıyoruz ve RV2'yi yaklaşık 7.23-4.7 = 2.53kOhm'a ayarlıyoruz ve maksimum direnç RV1'de LM2941'in çıkışında 10.5V elde etmek için monte edilmiş devrede ayarlıyoruz.
Bir buçuk kat daha fazla LED 1,2A akım tüketir (nominal olarak), bu nedenle LM2941'deki güç kaybı Pd = (13,6-10,5) * 1,2 + 13,6 * 0,006 = 3,8 watt'a eşit olacaktır, bu zaten daha katı bir güç gerektirir ısıyı gidermek için soğutucu:


Topluyoruz, bağlanıyoruz, çok daha iyi oluyoruz:


Avantajlar:
  • Yeterince yüksek parlaklık (muhtemelen karşılaştırılabilir ve hatta eski CCTL arka ışığının parlaklığından bile üstün)
  • Monitörün kenarlarında ayrı LED'lerden gelen ışık konilerinin olmaması (LED'ler oldukça sık yerleştirilmiştir ve arka ışık tek tiptir)
  • Hala basit ve ucuz bir kontrol panosu
Kusurlar:
  • Yeşilimsi tonlarda kalan beyaz dengesi ile ilgili sorun hiçbir şekilde çözülmedi.
  • LM2941, büyük bir soğutucuya sahip olmasına rağmen ısıtılır ve kasanın içindeki her şeyi ısıtır

Düşürücü regülatöre dayalı kontrol panosu

Isıtma problemini ortadan kaldırmak için, bir Düşürme voltaj regülatörüne dayalı bir dimmer monte etmeye karar verildi (benim durumumda, 3A'ya kadar akımla LM2576 seçildi). Aynı zamanda ters çevrilmiş bir Açma / Kapama kontrol girişi vardır, bu nedenle eşleştirme için bir transistördeki aynı invertör mevcuttur:


Bobin L1, dönüştürücünün verimini etkiler ve yaklaşık 1,2-3A'lık bir yük akımı için 100-220 μH olmalıdır. Çıkış voltajı aşağıdaki formülle hesaplanır:

Vout=Vref*(1+R2/R1)

Burada Vref = 1.23V. R1 verildiğinde, aşağıdaki formülü kullanarak R2'yi elde edebilirsiniz:

R2=R1*(Vout/Vref-1)

Hesaplamalarda devrede R1, R4'e, R2 ise devrede RV1+RV2'ye eşdeğerdir. Bizim durumumuzda, voltajı 7,25V ila 10,5V aralığında ayarlamak için, R4 = 1,8kOhm, değişken direnç RV1 = 4,7kOhm ve başlangıç ​​değeri 8,8kOhm olan bir 10kOhm düzeltme direnci RV2 alıyoruz (devreyi monte ettikten sonra, LM2576'nın çıkışındaki voltajı maksimum RV1 direncinde ölçerek tam değerini ayarlamak en iyisidir).
Bu denetleyici için bir pano yapmaya karar verdim (boyutlar önemli değildi, çünkü monitörde büyük bir panoyu bile monte etmek için yeterli alan var):


Kontrol panosu montajı:


Monitöre monte ettikten sonra:


Herkes burada:


Montajdan sonra her şey çalışıyor gibi görünüyor:


Son varyant:


Avantajlar:

  • yeterli parlaklık
  • Düşürme denetleyicisi ısınmıyor ve monitörü ısıtmıyor
  • PWM yok, yani herhangi bir frekansta hiçbir şey yanıp sönmez
  • Analog (manuel) parlaklık kontrolü
  • Minimum parlaklık sınırı yok (gece çalışmayı sevenler için)
Kusurlar:
  • Beyaz dengesi biraz yeşil tonlara kaydırıldı (ama çok fazla değil)
  • Düşük parlaklıkta (çok düşük), parametrelerin yayılması nedeniyle farklı düzeneklerin LED'lerinin parlamasında eşitsizlik görülebilir

Yükseltme seçenekleri:

  • Beyaz dengesi hem monitör ayarlarında hem de hemen hemen her video kartının ayarlarında ayarlanabilir
  • Beyaz dengesini fark edilir şekilde düşürmeyecek başka LED'ler koymayı deneyebilirsiniz.
  • Düşük parlaklıkta LED'lerin eşit olmayan şekilde yanmasını önlemek için şunları kullanabilirsiniz: a) PWM (her zaman anma gerilimini sağlayan PWM'yi kullanarak parlaklığı ayarlayın) veya b) tüm LED'leri seri olarak bağlayın ve ayarlanabilir bir akım kaynağıyla besleyin (eğer siz 180 LED'in tümünü seri olarak bağlayın, 630V ve 20mA'ya ihtiyacınız olacak), ardından aynı akım tüm LED'lerden geçmelidir ve her birinin kendi voltaj düşüşü olacaktır, parlaklık voltajı değil akımı değiştirerek düzenlenir.
  • LM2576 için PWM tabanlı bir devre yapmak istiyorsanız bu Step-down regülatörün On/Off girişindeki NAND devresini kullanabilirsiniz (LM2941 için yukarıdaki devreye benzer) ama dimmer koymak daha iyi olur mantık seviyesi mosfet aracılığıyla LED'lerin negatif telinin boşluğunda

Bağlantıdan indirebilirsiniz:

  • AOC2216Sa Servis Kılavuzu
  • LM2941 ve LM2576 veri sayfaları
  • Proteus 7 ve PDF Formatında LM2941 Regülatör Şemaları
  • Sprint Layout 5.0 formatındaki LED'ler için kart düzeni
  • Proteus 7 ve PDF formatında LM2576'daki regülatör kartının şeması ve kablolaması

Matris bağlantı türleriyle başlayalım, bunlardan sadece ikisi var: seri ve paralel, + birleşik güç seçeneği. Artıları ve eksileri şekilde gösterilmiştir, büyük matrisler için paralel tip kullanılması tercih edilir, bu nedenle güç çok daha iyi organize edilir. Ancak güç kablolarının dallarını tamir etmeniz gerekiyor. Bir modül çelenkinden bir matris yaparsanız, doğal olarak onu zikzak yapmak daha kolaydır. Ancak farklı parlaklıklarda kontrol ettiğinizden ve uzaktaki LED'ler için yeterli akım olduğundan emin olun (voltaj düştüğünde, ayarlanan beyaz renk sarıya (küçük düşüş) veya kırmızıya (güçlü voltaj düşüşü) döner). Bu durumda, güç her bir bant parçasına (matrisin her satırı için) kalın tellerle çoğaltılması gerekecektir.

Matris Arduino'ya göre bağlanır, sonra ondan bir sıkma olur. Önemli noktalar:

  • Pime bağlı Arduino'nun mantık pimi din nominal değeri 220 Ohm olan bir direnç aracılığıyla bantlar (matrisler) (100 Ohm - 1 kOhm aralığında herhangi birini alabilirsiniz). Arduino pimini aşırı yükten korumak için gerekli, yani devredeki akımı sınırlayın (bkz. Ohm yasası);

  • GND (toprak, eksi) bandı mutlaka ayrı olarak güç verildiğinde bile Arduino'nun GND pinine bağlanır;

  • Renkleri değiştirirken bandın oluşturduğu ani voltaj düşüşlerini filtrelemek için Arduino'ya güç sağlamak için bir elektrolitik kapasitör gereklidir. Kondansatörün voltajı 6,3V'tan (konder ne kadar büyükse, o kadar büyük ve daha pahalıdır), kapasitans yaklaşık 470 uF'dir, daha fazlası mümkündür, daha azı önerilmez. Onsuz da mümkündür, ancak işin istikrarını bozma riski vardır!

  • Matrisin parlaklığında ani değişikliklerle güç kaynağının çalışmasını kolaylaştırmak için bir teyp güç kondansatörüne ihtiyaç vardır. Bir kez daha onsuz yapabilirsiniz, ancak işin istikrarını bozma riski vardır!

  • Güç kaynağının gücü (ve maksimum çıkış akımı), matrisin boyutuna ve çalışacağı modlara göre seçilir. İşareti gör ve hatırla Çin amfileri, yani güç kaynağı %10-20'lik bir akım marjı ile alınmalıdır! Tablo değerleri gösterir bandın mevcut tüketimi.

  • Donanım yazılımında GyverMatrixOS sürüm 1.2 ve üzeri, sistem akım sınırı yapılandırılır. Nasıl çalışır: çizim ayarlarında bir parametre vardır CURRENT_LIMIT, hangi ayarlar maksimum akım miliamper cinsinden matris tüketimi. Arduino, özellikle “yeme” modlarında akım sınırının ayarlanan akım sınırını aşmasını önlemek için LED'lerin renklerine ve parlaklığına göre bir hesaplama yapacak ve tüm matrisin parlaklığını otomatik olarak azaltacaktır. Bu çok güzel bir özellik!

GÖVDE VE DİFÜZÖRÜN MONTAJI

YAZILIM VE AYARLAR

İlk adım, eskizde ayarlamaktır matris boyutları, bağlantı noktası ve ilk segmentin yönüşeritler. Aşağıda ipucu.

Bu tür matris başlatma, herhangi bir konfigürasyondaki bir matrisi, matrisin başlangıcının herhangi bir konumu ile bağlamanıza izin verir. Bu, kasanın veya tel döşemenin bazı özellikleri olduğunda, yalnızca "bükülebilen" satın alınan matrisler ve ev yapımı matrisler için uygundur. Yani, matrisi nasıl yaparsanız ve konumlandırırsanız konumlandırın, yine de orijinin doğru konumu ile çalışacaktır. Bu arada, herhangi bir nedenle aniden ihtiyacınız olursa, matrisi yatay veya dikey olarak çok kolay bir şekilde "yansıtabilirsiniz": sadece bağlantıyı istenen eksen boyunca "karşıt" olarak değiştirin. Örneğin bağlantı tipini (1, 0) dikey olarak yansıtmak istiyoruz. (2, 2) olarak ayarladık - yukarıdaki resme bakın. (3, 1) tipini dikey olarak yansıtmak istiyoruz - (2, 3) olarak ayarladık. (3, 2) yatay olarak yazın? Lütfen (2, 2) şeklinde yazınız. Umarım mantık açıktır.

Arduino ile ilk kez çalışıyorsanız, durun ve çalışın. Sürücüleri ve kitaplıkları kurduktan sonra, platform ürün yazılımına geçebilirsiniz. Oyunlar ve efektler içeren bitmiş bir projem var, ayrıntılara ve donanım yazılımına gidin. Ayrıca geliştiriciler için, yani matris için kendi başlarına bir şeyler yazmak isteyenler için bilgiler olacak!

Ürün yazılımının en başında, matris tipi ve bağlantısı için ayarlar vardır, bağlantı tipi, matrise bakacak şekilde belirlenir. Matris bağlantı ayarlarını (açı ve yön) basitleştirmek için yukarıdaki ipucunu kullanın =)

// ***************** MATRİS AYARLARI **************** #define LED_PIN 6 // şerit pin #define PARLAKLIK 60 // varsayılan maksimum parlaklık (0-255) #define WIDTH 16 // matris genişliği #define HEIGHT 16 // matris yüksekliği #define MATRIX_TYPE 0 // matris tipi: 0 - zigzag, 1 - sıralı #define CONNECTION_ANGLE 0 // bağlantı açısı: 0 - sol alt, 1 - sol üst, 2 - sağ üst, 3 - sağ alt #define STRIP_DIRECTION 0 // köşeden şerit yönü: 0 - sağ, 1 - yukarı, 2 - sol, 3 - aşağı

Ürün yazılımı ayrıca bir sekme içerir yardımcı program_funx, matrisle çalışmak için tüm işlevlerin oturduğu yer:

Void loadImage(bitmap dizi adı); // "dizi adı" dizisinden bir resim göster. Aşağıda okunan resimlerden void drawDigit3x5(byte digit, byte X, byte Y, uint32_t color); // bir sayı çiz (rakam, X-koordinatı, Y-koordinatı, renk) geçersiz çizim Noktaları(bayt X, bayt Y, uint32_t renk); // saat noktaları çiz (x-koordinatı, y-koordinatı, renk) void drawClock(bayt saat, bayt dakika, boolean noktalar, bayt X, bayt Y, uint32_t renk1, uint32_t renk2); // çizim saatleri (saat, dakika, noktalar açık/kapalı, x-koordinatı, y-koordinatı, renk1, renk2) statik uint32_t ExpandColor(uint16_t color); // rengi 16 bitten 24 bit'e dönüştür uint32_t gammaCorrection(uint32_t color); // gama düzeltmesi (rengi daha doğal bir renge dönüştürür) void fillAll(uint32_t color); // tüm matrisi color void ile doldurdrawPixelXY(byte x, byte y, uint32_t color); // X Y koordinatlarına göre nokta çizme işlevi (X koordinatı, Y koordinatı, renk) uint32_t getPixColor(int thisPixel); // bir pikselin rengini sayısına göre alma işlevi uint32_t getPixColorXY(bayt x, bayt y); // matristeki bir pikselin rengini koordinatlarına (x-koordinatı, y-koordinatı) göre alma işlevi uint16_t getPixelNumber(byte x, byte y); // beslemedeki piksel sayısını koordinatlara göre al (x koordinatı, y koordinatı, renk)

Matris koordinatlarının orijini sol alt köşedir, sıfır koordinatı vardır!

Bu işlevleri kullanarak, klasik oyunların yanı sıra değişen karmaşıklık derecelerinde çeşitli efektler oluşturabilirsiniz!

LED'lerin avantajları yadsınamaz, bugün saatler dahil her yerdeler. LED matrislerdeki saatler nelerdir, makaledeki artıları ve eksileri analiz edeceğiz. Makalenin sonunda, kendi ellerinizle bir cihaz yapmak için adım adım ayrıntılı bir kılavuz sunulmaktadır.

Ne olduğunu

Bir LED matris saati, görüntüleme için birden fazla LED matrisi kullanan bir elektronik saattir. Farklı türdeki göstergelerin kullanılması, tek farklarıdır.

Bir matris, tek bir anot veya katot ile bir ızgarada bir araya getirilmiş bir dizi LED'dir. Kural olarak, bu tür göstergelerin çözünürlüğü - dikey ve yatay nokta sayısı - 8×8'dir.

Bu tür saatler neden popülerlik kazanıyor, avantajlar:

  1. Fiyat. LED matrisleri, benzer boyutlardaki yedi bölümlü göstergelerden daha ucuzdur.
  2. Parlaklık. LED'ler 7 segmentli ekranlardan daha parlaktır ve güneşli yerlerde görülmesi daha kolaydır. Birçok üretici ayrıca diyotun güneşe maruz kalmasına karşı yapıcı koruma sağlar.
  3. işlevsellik. Bir LED matrisi kullanarak, yalnızca sayıları değil, aynı zamanda çeşitli harfleri, noktalama işaretlerini, sembolleri de görüntüleyebilirsiniz. Bir dizi LED matrisi kullanarak, bazı bilgileri sürünen bir çizgi şeklinde görüntüleyebilirsiniz.

LED matrislerinin dezavantajları da vardır:

  • Artan kontrol karmaşıklığı. Çok sayıda öğe nedeniyle (standart matriste 64 tane vardır), matris göstergelerini kontrol etmek yedi bölümlü olanlardan daha kolaydır. Bunun için mikrodenetleyiciler, dinamik gösterge ve kaydırma yazmaçları kullanılır.
  • Görüş açısı. LED'lerin özelliği, ışığı bir yönde odaklamalarıdır. Bu, LED matrisindeki görüntünün yalnızca belirli bir açıda iyi görülebilmesine yol açar.
  • Yüksek sıcaklıklara karşı toleranssızlık. Isı, LED'lerin verimliliğini azaltır ve ömürlerini kısaltır.
  • Ayrı LED'lerin yanması, "kırık piksel" etkisine ve görüntü kalitesinde bozulmaya yol açacaktır.

LED matrislerde ev yapımı saatler

LED matrislerdeki saatlerin büyük popülaritesine rağmen, Runet'te bağımsız üretimleri için çok fazla plan yok. En popüler olanı düşünelim.

Cihazı monte etmek için gerekli beceriler:

  • baskılı devre kartlarının üretimi;
  • lehimleme elemanları: şema, SMD uygulamasını varsayar; bu, elemanların doğrudan kartın yüzeyine kurulacağı anlamına gelir;
  • mikrodenetleyicilerin sabit yazılımı: devrede MK ATMega16A kullanılır;
  • MK programlama: Bu cihaz için kontrolör ürün yazılımı zaten mevcut olduğundan bu gerekli değildir. Bu beceri, saatin çalışma modunu değiştirmek veya örneğin sıcaklık veya nem sensörleri gibi ek öğeler ekleyerek işlevselliğini genişletmek istediğinizde kullanışlı olacaktır.

İhtiyacınız olacak araçlardan:

  • tahta yapmak için bir set;
  • MK programcısı;
  • havya.

Cihaz şemasına daha yakından bakalım. Ana kontrol elemanı MK ATMega16A'dır, cihazın aşağıdaki özelliklerini sağlar:

  1. Geri sayım ve takvim. Güç kapatıldığında bile çalışır.
  2. Alarm. Burada 9 tane var, onları haftanın günleri çalışacak şekilde programlayabilirsiniz.
  3. Sıcaklık ölçümü. Saatin tasarımı, odada ve sokakta ölçüm yapmak için iki sıcaklık sensörü kurmanıza olanak tanır.
  4. Koşu hattı modu. Şu bilgileri verir: haftanın günü, ay, yıl, sıcaklık.
  5. Saat düzeltmesi.

İşlevlerin çoğu, devreyi olabildiğince boşaltmanıza ve minimum sayıda eleman kullanmanıza izin veren mikrodenetleyiciye atanmıştır.

Cihaz yalnızca iki mikro devre kullanır: bir mikrodenetleyici ve bir TPIC6B595 kaydırma yazmacı, ayrıca iki DS18B20 sıcaklık sensörünü bağlayabilirsiniz - biri dış mekan ve ikincisi iç mekan.

Gösterge için üç adet 8×8 LED matrisi kullanılır. D1 diyotu olarak bir Schottky diyot kullanmak daha iyidir. Devredeki diyot acil güce geçişi sağlar ve Schottky diyotu en düşük voltaj düşüşüne ve yüksek anahtarlama hızına sahiptir.

Üretim süreci:


ATMega 16A ile bir LED matrisine saat monte ederken bazı özellikler aşağıdaki videoda mevcuttur.

LED matrislerdeki saatlerin, farklı gösterge tipine sahip cihazlara göre birçok avantajı vardır: daha ucuzdurlar, güneş tarafından aydınlatılmazlar, daha fazla bilgi görüntülemek için kullanılabilirler. Led matrislerde çok sayıda saat modeli vardır ve herkes gerekli işlevselliğe sahip bir cihaz bulacaktır. Ayrıca, bu tür saatleri, aşağıda gördüğünüz gibi, kendi başınıza yapmak kolaydır. izlenecek yol yukarıda, özel araçlar veya özel beceriler gerektirmez.