Kontrolli i ndriçimit LCD. Kontrolli i ndriçimit të dritës së prapme të ekranit Nextion në FLProg. Çfarë na duhet

Shpjegime për diagramin

R2 është një rezistencë e ndryshueshme me një vlerë nominale prej 10K. Terminali qendror i rezistencës është i lidhur përmes një filtri me kalim të ulët në kanalin zero të ADC. Tensioni në të gjithë rezistencën shndërrohet në një kod dixhital, i cili shkruhet në regjistrin e krahasimit të kohëmatësit T0. Kështu, duke përdorur një rezistencë, rregullohet cikli i detyrës së sinjalit PWM.

Led1 është një LED i fuqishëm i bardhë. Rënia e tensionit në të është rreth 4 volt. Rryma maksimale LED vendoset nga rezistenca R5 dhe është e barabartë me 100 mA.

(Upit – Uled)/R5 = (5 - 4)/10 = 100 mA

IRLU024N - Transistor me efekt në terren me kanal N. Në vend të kësaj, ju mund të përdorni çdo transistor me efekt në terren të serisë IRL (L - kjo do të thotë se ata kontrollohen nga një nivel logjik)

R3 është një rezistencë kufizuese e rrymës për çdo rast. R4 - rezistenca tërheqëse. Porta e një transistori me efekt në terren nuk mund të lihet "e varur në ajër".

Programi

//************************************************************
// Kurs trajnimi. Programimi i mikrokontrolluesve AVR në C
// Kontrolloni ngarkesën duke përdorur
// modulimi i gjerësisë së pulsit (PWM, PWM)

#përfshi
#përfshi

ndër kryesore( i pavlefshëm)
{
//inicializoj portet
PORTB = 0;
DDRB = 0xff;

//inicializimi i kohëmatësit T0
TIMSK = 0;
//drejt. - pwm i shpejtë, dalje OC0 - jo e përmbysur. shim, klk/64
TCCR0 = (1<TCNT0 = 0;
OCR0 = 0;

//inicializoni ADC-në
//jon - tensioni i furnizimit, shtrirja e majtë, kanali zero

ADMUX = (0<//on ADC, regji. të vazhdueshme konvertim., res. ndërprerjet, frekuenca e konvertuesit = FCPU/128
ADCSRA = (1<//modaliteti i konvertimit të vazhdueshëm
SFIOR = 0;

__aktivizoj_ndërprerjen ();
derisa (1);
kthimi 0;
}

//********************************
//Ndërprerje ADC
#pragma vector=ADC_vect
__ndërpreji pavlefshëm adc_my( i pavlefshëm)
{

//lexoni regjistrin e lartë të ADC dhe

//shkruaj për të krahasuar regjistrin

Shpjegime për kodin

Logjika e operacionit

Inicializimi i pajisjeve periferike - timer T0, moduli ADC. Aktivizo ndërprerjet. Cikli i pafund. Në ndërprerjen ADC, tensioni i lexuar nga rezistenca e ndryshueshme shkruhet në regjistrin e krahasimit OCR0. Në mikrokontrolluesin AVR, për këtë regjistër organizohet një tampon dhe në fakt, shkrimi ndodh së pari në të. Nga buferi, vlera rishkruhet në OCR0 vetëm kur regjistri i numëruesit TCNT0 tejmbushet. Paralelisht me qarkun while dhe modulin ADC, kohëmatësi T0 funksionon dhe gjeneron një sinjal PWM në pinin OC0(PB2). Kur regjistri i numërimit TCNT0 derdhet, OC0 vendoset në 1, kur vlera e regjistrit të numërimit përputhet me regjistrin e krahasimit OCR0, dalja vendoset në 0.

Inicializimi i kohëmatësit

Ndërprerjet e kohëmatësit nuk përdoren, kështu që regjistri TIMSK = 0.

Regjistri i konfigurimit TCCR0 është përgjegjës për vendosjen e kohëmatësit T0.

Bitet WGM01, WHM00 përcaktojnë mënyrën e funksionimit. 11 - Modaliteti i shpejtë PWM.

Bitet CS02, CS01, CS00 - vendosni koeficientin e parashkallëzuesit të kohëmatësit. 011 - korrespondon me parashkallëzuesin 64. Frekuenca e orës së kohëmatësit/matësit do të jetë Fcpu/64

Bitet COM01, COM00 përcaktojnë sjelljen e pinit OC0. 10 - korrespondon me një sinjal PWM jo të përmbysur. 1 - kur TCNT0 derdhet, 0 - kur TCNT0 përkon me OCR0.

Inicializimi i ADC

Shembulli nr. 2. Gjenerimi i një valë sinusi duke përdorur PWM

Shpjegimi i diagramit

Thjesht harrova të heq rezistorin R2 nga qarku. Integrator R3 dhe C8.

Programi

//************************************************************

// Gjeneroni sinus duke përdorur

// modulimi i gjerësisë së pulsit (PWM, PWM)

//************************************************************

#përfshi
#përfshi
#include "TableSin.h"

ndër kryesore( i pavlefshëm )
{
//inicializoj portet
PORTB = 0;
DDRB = 0xff;

//inicializimi i kohëmatësit T0
TIMSK = (1<//drejt. - pwm i shpejtë, dalje OC0 - jo e përmbysur. shim, parashkallëzues - me 8
TCCR0 = (1<//rivendos regjistrin e numërimit dhe regjistrin e krahasimit
TCNT0 = 0;
OCR0 = 0;

__aktivizoj_ndërprerjen ();
derisa (1);
kthimi 0;
}

//**********************************************************

//Kohëmatësi/counter i ndërprerjes T0

Vektori #pragma = TIMER0_COMP_vect

__ndërpreji pavlefshëm Timer0CompVect( i pavlefshëm)

Dhe përsëri ne do të marrim sensorin e dritës BH1750. Këtë herë unë propozoj jo vetëm marrjen e të dhënave për nivelin e ndriçimit, por edhe rregullimin e shkëlqimit të çdo pajisjeje ndriçimi bazuar në këto të dhëna. Ngjashëm me rregullimin e shkëlqimit të ekranit të një tableti ose smartphone - sa më e ndritshme të jetë drita e ambientit, aq më pak shkëlqim kërkohet ndriçimi dhe anasjelltas, sa më i errët të jetë, aq më e ndritshme do të digjet LED, llambat ose çdo gjë tjetër. Po, e gjithë kjo mund të organizohet në bazë të një fotodiode ose fotorezistori, por pajisje të tilla duhet të konfigurohen, kalibrohen etj. Në rastin e përdorimit të sensorit dixhital të dritës BH1750, nuk ka nevojë të kryhen këto veprime, pasi gjithçka tashmë është kalibruar para nesh; të dhënat e gatshme transmetohen përmes autobusit I2C, i cili duhet vetëm të krahasohet me gjendjen. . Me fjalë të thjeshta, e ndeza dhe gjithçka filloi të funksiononte menjëherë pa lëvizje të panevojshme. Nëse jeni të interesuar për idenë, atëherë vazhdoni më tej.

Ne do ta ndërtojmë pajisjen sipas skemës së mëposhtme:

Skema rezultoi të ishte mikrobi i një ideje, pasi mund dhe duhet të modernizohet për raste të ndryshme përdorimi, por më shumë për këtë më vonë.

Gjithçka këtu është tashmë e njohur për ne. Atmega8a përdoret si mikrokontrollues si mikrokontrolluesi më i gjithanshëm dhe më popullor. Ju mund të përdorni një mikrokontrollues në çdo paketë - nuk ka asnjë ndryshim, përveç renditjes së kunjave në kuti. Ekrani kryhet në një ekran LCD të bazuar në HD44780. Në rastin tim, unë përdor një ekran me 4 rreshta me nga 20 karaktere secila, por mund të përdorni edhe madhësinë 1602 - nuk shfaqet shumë informacion në ekran, kështu që gjithçka përshtatet. Rezistenca e ndryshueshme R2 është e nevojshme për të rregulluar kontrastin e karaktereve në ekran. Duke rrotulluar rrëshqitësin e kësaj rezistence ne arrijmë leximet më të qarta në ekran për ne. Drita e prapme e ekranit LCD organizohet përmes kunjave "A" dhe "K" në tabelën e ekranit. Drita e prapme ndizet përmes një rezistence kufizuese të rrymës - R1. Sa më e lartë të jetë vlera, aq më e zbehtë do të jetë ekrani me dritë prapa. Megjithatë, kjo rezistencë nuk duhet të neglizhohet për të shmangur dëmtimin e dritës së prapme. Vetë ekrani është i lidhur me mikrokontrolluesin duke përdorur një qark 4-bit. Rezistenca R3 është e nevojshme për të parandaluar rindezjen spontane të mikrokontrolluesit në rast të zhurmës së rastësishme në pinin PC6. Rezistenca R3 tërheq fuqinë plus në këtë kunj, duke krijuar në mënyrë të besueshme një potencial përtej tij. Rezistenca R4 tërheq këmbën e sensorit në tokë, e cila është përgjegjëse për adresën e mikrocirkut për ndërfaqen I2C; ju mund t'i shihni të gjithë këta numra në kodin burimor, i cili ndodhet në fund të artikullit. Për funksionimin e duhur të ndërfaqes I2C, kërkohen rezistorët R7 dhe R8. Me ndihmën e tyre, një njësi logjike formohet në linja për faktin se ato janë tërhequr deri në fuqinë pozitive. Kur gjenerohet një zero logjike, linjat shtypen në tokë nga një master ose skllav (mikrokontrollues ose sensor).

Furnizimi kryesor me energji elektrike për qarkun është 3.3 volt, i cili përcaktohet nga parametrat elektrikë të sensorit të dritës BH1750. 5 volt nevojiten vetëm për të fuqizuar ekranin; nëse përdorni, për shembull, një ekran nga Nokia 5110, i cili gjithashtu kërkon 3.3 volt për ta fuqizuar atë, atëherë mund të hiqni rregullatorin e tensionit 5 volt nga qarku. Stabilizuesit e tensionit për 5 volt dhe 3.3 volt mund të përdoren absolutisht çdo për tensione të ngjashme; mund të përdorni stabilizues linearë dhe pulsorë.

Tani në lidhje me modernizimin e qarkut. Baza do të jetë gjithmonë vetë sensori dhe mikrokontrolluesi, si dhe qarku i energjisë. Ekrani LCD, me këtë funksionalitet, është i nevojshëm vetëm për korrigjimin e gabimeve. Mund të përjashtohet nga qarku kur përdoret në mënyrë autonome. Kjo është e para. E dyta është dalja e qarkut, domethënë HL1 LED - një LED nuk mund të ndriçojë një hapësirë ​​të madhe dhe ju duhet të përdorni diçka më masive - LED të fuqishëm, llamba inkandeshente ose diçka tjetër. Pra, pajisjet e tilla ndriçuese me konsum relativisht të lartë të rrymës dhe tensionit nuk mund të lidhen lehtësisht me mikrokontrolluesin, përndryshe thjesht do ta djegim mikrokontrolluesin. Për ta bërë këtë, duhet të përdorni drejtues ose qarqe të tjera. Nëse llambat inkandeshente përdorin tension të alternuar, duhet të përdorni një bashkues optosimistor dhe një triac të fuqishëm për të kontrolluar ndriçimin e llambës së dritës (ju duhet vetëm të rregulloni firmuerin për të kontrolluar optosimistorin). Për llambat LED, PWM mund të aplikohet në portën e një transistori me efekt në terren dhe të ndizni LED-të përmes tij (duke mos harruar kufizimin ose stabilizimin e rrymës), ose të përdorni drejtues të kontrolluar për to. Në përgjithësi, ka shumë opsione - për secilin rast ka një. Qarku i paraqitur do të jetë ai origjinal me funksionalitetin bazë të përcaktuar. Këtu është ideja.

Qarku i mëposhtëm u montua dhe u korrigjua në një tabelë korrigjimi në lidhje me modulin BH1750:

Logjika e funksionimit nuk është e ndërlikuar - ne lexojmë vlerën e ndriçimit nga sensori dhe e shndërrojmë këtë vlerë në një sinjal PWM. Thjesht duhet të zgjidhni raportin e sinjalit PWM dhe nivelin e dritës.

Për të korrigjuar punën, u përdor një elektrik dore xhepi për të ndryshuar ndriçimin.

Gjithashtu, nëse papritmas shfaqet një burim drite (mund të jetë aksidental), LED do të ndizet befas, gjë që nuk është shumë e rehatshme, kështu që zbatohet kontrolli i qetë i nivelit PWM. Kjo do të thotë, për shembull, kishte ndriçim të ulët - LED ishte ndezur, një puls i shkurtër drite goditi aksidentalisht sensorin, të themi, nga fenerët e një makine, LED do të ishte fikur befas dhe papritmas do të ndizej përsëri, nëse jo për rregullim të qetë. Kjo do të thotë, me një ndryshim të mprehtë në ndriçim, PWM nuk ndryshon befas, por tenton të arrijë vlerën e llogaritur, duke u rritur ose ulur me vetëm një njësi me një vonesë të vogël. Dhe kaq shumë herë rritja ose ulja ndodh derisa të arrihet vlera e kërkuar. Kodi burim në gjuhën C mund të shihet në fund të artikullit.

Përveç kësaj, për të programuar mikrokontrolluesin në këtë version, duhet të dini konfigurimin e pjesëve të siguresave:

Dhe artikulli vjen me firmware për mikrokontrolluesin sipas diagramit të paraqitur, kodin burimor në programin AVR Studio dhe një video demonstruese (ndryshim i qetë në ndriçimin LED në varësi të nivelit të dritës, i cili rregullohet me një elektrik dore).

Lista e radioelementeve

Emërtimi Lloji Emërtimi sasi shënimDyqanblloku im i shënimeve
IC1 MK AVR 8-bit

ATmega8A

1 Në bllokun e shënimeve
IC2 Sensori i dritësBH1750FVI-E1 Në bllokun e shënimeve
VR1 Rregullator linear

L7805AB

1 Në bllokun e shënimeve
VR2 Rregullator linear

AMS1117-3.3

1 Në bllokun e shënimeve
C1, C3, C5, C7 Kondensator100 nF4 Në bllokun e shënimeve
C2 470 µF1 Në bllokun e shënimeve
C4 Kondensator elektrolitik220 µF1 Në bllokun e shënimeve
C6 Kondensator elektrolitik10 µF1 Në bllokun e shënimeve
R1 Rezistencë

22 Ohm

1 Në bllokun e shënimeve
R2 Rezistencë prerëse10 kOhm1 Në bllokun e shënimeve
R3 Rezistencë

10 kOhm

1 Në bllokun e shënimeve
R4, R7, R8 Rezistencë

4.7 kOhm

3 Në bllokun e shënimeve
R5 Rezistencë

Me iPhone X, Apple përdori për herë të parë një panel ekrani të bazuar në teknologjinë OLED. Dhe nëse avantazhet e ekraneve OLED janë të dukshme, për disavantazhet e tyre shkruhet rrallë. Një nga këto disavantazhe është dridhja e ekranit në nivele të ulëta ndriçimi për shkak të përdorimit të modulimit të gjerësisë së pulsit për të kontrolluar shkëlqimin e LED-ve në nivele të ulëta ndriçimi. Në gjuhën e përdoruesit mesatar, ekrani dridhet në errësirë.

Prodhuesit zgjedhin frekuencën e dridhjes së ekranit në atë mënyrë që shumica e përdoruesve të mos e vërejnë atë. Frekuenca më e përdorur është 240 Hz. Edhe nëse përjashtojmë një grup të konsiderueshëm njerëzish që vërejnë një dridhje të tillë, mbeten nga ata që nuk e vërejnë dridhjen, por përjetojnë lodhje të shtuar, lot, inflamacion dhe skuqje të syve, madje edhe migrenë. Nuk janë aq pak njerëz të tillë: në varësi të studimit dhe metodologjisë së përdorur, numri i tyre varion nga 20 deri në 30% të të gjithë përdoruesve.

Në pajisjet Android, dridhja OLED shpesh mund të zgjidhet duke instaluar një aplikacion që shfaq një filtër zbehjeje; madje mund të ruani kontrollin automatik të ndriçimit nëse përdorni aplikacionin Lux Dash për këtë (ne do të shkruajmë se si ta konfigurojmë siç duhet për të fikur dridhjen e ekranit në një nga artikujt e mëposhtëm).

Siç rezulton, iOS ka një mekanizëm të integruar që ju lejon të arrini një efekt të ngjashëm dhe të shpëtoni plotësisht nga dridhjet e ekranit në errësirë. Le të shohim hapat e kërkuar për këtë, por së pari do t'i përgjigjemi pyetjes se pse ekranet OLED kanë nevojë për dridhje.

Pse dridhje OLED: Kontrolli i ndriçimit PWM

Dridhja në ekranet OLED është rezultat i drejtpërdrejtë i mekanizmit të përdorur për të kontrolluar ndriçimin e paneleve të tillë. Për të ndryshuar ndriçimin e ekranit (si LCD konvencional, në të cilin bazohen matricat IPS, ashtu edhe OLED), mund të ulni tensionin e furnizuar me LED-të e dritës së prapme (ose LED individuale në rastin e OLED-ve), ose të përdorni të ashtuquajturat modulimi i gjerësisë së pulsit.

Modulimi i gjerësisë së pulsit kontrollon ndriçimin e imazhit duke ndezur dhe fikur LED-të. Sa më e shkurtër të jetë periudha për të cilën ndizet drita e prapme dhe sa më e gjatë të jetë pauza midis ndezjeve, aq më i ulët është shkëlqimi i perceptuar nga syri i njeriut. Kështu duket:

Është dridhja, dhe jo komponenti i dëmshëm blu i ngjyrës ose ngjyrat e tepërta të OLED-ve, që shkakton lodhje të shtuar dhe migrenë. Fliceri shkakton tendosjen më të madhe të syve në errësirë, kur bebëza është e zgjeruar maksimalisht dhe ndezjet e ndritshme bombardojnë fjalë për fjalë retinën.

OLED pa dridhje: mit apo realitet?

A është e mundur të montoni një ekran OLED pa dridhje? Po, kjo është mjaft e mundur, por në praktikë përdoret rrallë. Një nga shembujt e paktë të ekraneve të tillë është matrica P-OLED, e cila u instalua në telefonat inteligjentë LG G Flex 2. Ana negative e ekraneve të tillë ishin efektet e mëposhtme, të cilat u shfaqën me ndriçimin minimal:

Do të ishte gabim të besohej se LG e bëri matricën shumë më keq se konkurrentët e saj. Matricat e Samsung në ato ditë kishin cilësi të ngjashme - me një ndryshim të madh. Panelet OLED që instalon Samsung në të gjithë modelet e tij flasin në të gjitha nivelet e ndriçimit - madje edhe në 100%. Pse imazhi në një matricë dridhje duket shumë më i pastër sesa në një OLED pa dridhje?

Efekti shoqërohet me përhapjen e parametrave midis LED-ve ngjitur. Shpërndarja është e pranishme në matricat nga të gjithë prodhuesit, por manifestohet në një masë më të madhe kur aplikohet tension i ulët në LED. Efekti është disi i ngjashëm me zhurmën dixhitale kur fotografoni në kushte të errëta me një shpejtësi të shkurtër qepeni. Sa më pak fotone të godasin elementët e ndjeshëm ndaj dritës të matricës - dhe sa më pak fotone të emetuara nga dioda OLED - aq më e madhe është gjasat e një gabimi, "zhurmë dixhitale në të kundërt".

Samsung e zgjidhi problemin duke furnizuar gjithmonë tensionin maksimal në LED dhe duke rregulluar ndriçimin duke përdorur ciklin e punës së impulseve. Por dridhjet e vazhdueshme të ekranit nuk janë për shijen e të gjithëve dhe një numër prodhuesish kanë zgjedhur një qasje hibride: deri në një vlerë të caktuar, ndriçimi rregullohet duke ulur tensionin e LED-ve; Pas kalimit të një niveli minimal të specifikuar (zakonisht 15-50%), zvogëlimi i mëtejshëm i shkëlqimit arrihet duke përdorur PWM.

Nëse flasim posaçërisht për iPhone X, shkëlqimi në të rregullohet si më poshtë (sipas iXBT):

Deri në nivelin 50% nuk ​​ka dridhje; zvogëlimi i mëtejshëm i shkëlqimit arrihet duke dridhur në një frekuencë prej 240 Hz. Kjo u demonstrua bindshëm nga recensentët gjermanë nga faqja Notebookcheck.net:

Si të kontrolloni dridhjen e ekranit

A dridhet ekrani i telefonit tuaj? Edhe nëse sytë tuaj nuk vërejnë ndonjë dridhje, prania ose mungesa e tij mund të kontrollohet lehtësisht në shtëpi pa ndonjë pajisje speciale. Mjafton të hapni një faqe me sfond të bardhë në smartphone tuaj (për shembull, rreth:bosh në shfletuesin Safari ose Chrome), ta vendosni telefonin në një dhomë të errët, të zvogëloni ndriçimin në minimum dhe të drejtoni kamerën e një smartphone tjetër në ekrani. Nëse shohim diçka të ngjashme me atë që tregohet në videon më poshtë, dridhjet e ekranit janë të pranishme:

Për të përcaktuar se në çfarë niveli ndriçimi ekrani ndalon të dridhet, hapni qendrën e kontrollit dhe lëvizni pa probleme rrëshqitësin e shkëlqimit. Zhdukja e vijave diagonale do të thotë se nuk ka PWM në një nivel të caktuar ndriçimi.

Është vërtetuar eksperimentalisht se iPhone X ka një nivel minimal ndriçimi pa dridhje prej 50%. Por nëse e mbani ndriçimin në këtë nivel, atëherë në kushte të errëta pajisja do të jetë e pakëndshme për t'u përdorur. Qëllimi është të zvogëloni nivelin efektiv të ndriçimit të ekranit, por shmangni dridhjet.

Siç rezulton, kjo është mjaft e mundur. Për ta bërë këtë, ekziston një modalitet i veçantë në cilësimet e iOS, i cili mund të gjendet në cilësimet Accessibility > Display Accomodations.

Në këtë modalitet, ekrani errësohet nga një filtër softuerësh. Për të aktivizuar këtë modalitet, duhet të shkoni te Display Accomodations dhe të aktivizoni rrëshqitësin. Tani ju duhet të klikoni mbi mbishkrimin Display Accomodations dhe të aktivizoni rrëshqitësin Reduce White Point (shih pamjen e ekranit). Provoni të filloni me një vlerë midis 85 dhe 100% dhe rregullojeni në një nivel që është i rehatshëm për sytë tuaj (shkëlqimi i ekranit në qendrën e kontrollit duhet të jetë në 50%).

Çaktivizo PWM me tre klikime

Pra, ne ishim në gjendje të aktivizonim një filtër softuerësh që çaktivizon dridhjen e ekranit në nivele të ulëta ndriçimi. Megjithatë, përdorimi i një telefoni me filtrin gjithmonë të ndezur është i papërshtatshëm: në dritë të ndritshme ekrani do të jetë gjithmonë i zbehtë.

Në iPhone X, ndezja dhe fikja e filtrit mund të bëhet duke shtypur tre herë butonin anësor, i cili në gjeneratat e mëparshme të pajisjeve kryente funksionet e ndezjes dhe fikjes së telefonit. Për ta bërë këtë, duhet të gjeni opsionin "Shkurtorja e aksesueshmërisë" në cilësimet dhe ta caktoni atë për të aktivizuar ose çaktivizuar funksionin Reduktimi i pikës së bardhë (shih pamjet e ekranit).

Kjo eshte e gjitha. Pas aktivizimit të kësaj veçorie, kemi marrë iPhone X, dridhja e ekranit të të cilit mund të ndizet dhe fiket shpejt duke shtypur butonin anësor tre herë. Tani mund ta përdorni pajisjen në errësirë ​​pa u lodhur dhe mund ta fikni shpejt filtrin e errët duke shtypur tri herë butonin anësor.

informacion shtese

Aktualisht jam duke punuar në një projekt Arduino duke përdorur një ekran TFT. Kohët e fundit doja të shtoja një funksion në dukje të thjeshtë - një funksion kontrolli të ndriçimit. E gjeta metodën e kërkuar në dokumentacionin për bibliotekën për të punuar me një ekran TFT (Biblioteka UTFT): setBrightness(br);

Çfarë na duhet?

  • Si bazë, kam përdorur Frearduino ADK v.2.2 bazuar në procesorin ATmega2560
  • TFT LCD Mega Shield v.2.2
  • Vetë ekrani është 7" TFT LCD SSD1963 ()
  • Biblioteka UTFT - një bibliotekë universale për të punuar me ekranet TFT (Mund të gjeni vetë bibliotekën, si dhe dokumentacionin)
  • Makine per ngjitjen e metalit

Le të merremi me harduerin

Pasi të keni hapur qarkun e ekranit, mund të shihni se konverteri mp3032 ka tre hyrje: LED-A, PWM, 5V. Fillimisht, PWM është joaktiv. Ky hyrje nuk përdoret fare. Drita e pasme kontrollohet nga LED-A.


Nëse shikoni në pjesën e pasme të ekranit, do të gjeni një zonë të etiketuar "Kontrolli i dritës së prapme". Këtu do të gjejmë pikërisht këto hyrje. Për të kontrolluar dritën e prapme duke përdorur metodën PWM, duhet të siguroheni që gjithçka është e kundërta: LED-A është joaktive, PWM është aktive. Për ta bërë këtë, ju duhet të rilidhni bluzën. Ja një foto se si duhet të duket:

Pjesa e softuerit

Meqenëse biblioteka jonë nuk mund të sigurojë atë që na nevojitet, ne do ta shkruajmë vetë funksionin e nevojshëm. Për ta bërë këtë, hapni dokumentacionin për kontrolluesin që kontrollon ekranin (SSD1963). SSD1963 kontrollohet duke përdorur komanda speciale që transmetohen nga Arduino përmes daljeve speciale, të cilat përshkruhen në dokumentacion:

Kontrolli kryhet si më poshtë: Arduino del nëpërmjet RS (D/C në tabelë) 0 nëse do të transmetojmë një komandë, 1 nëse do të transmetojmë të dhëna. Pas transmetimit të komandës, RS kalon në 1, dhe më pas transmetohen parametrat e nevojshëm. Të gjitha komandat dhe parametrat transmetohen përmes daljeve D0-D7. Nëse keni një ATmega2560, atëherë të tetë këto dalje kombinohen në portin C.

Pra, së pari, le të shkruajmë një funksion për transmetimin e të dhënave përmes autobusit. Për lehtësinë e përdorimit, unë do të shkruaj direkt në UTFT.h:

Void Lcd_Writ_Bus(uint8_t bla) ( digitalWrite(WR,LOW); //Konfiguro SSD1963 për të lexuar digitalWrite(CS, LOW); PORTC = bla; //Transfero të dhënat në autobus në formën e një bajt dixhitalWrite(CS,HIGH) ; Shkrimi dixhital (WR, LARTË);

Vlen gjithashtu t'i kushtohet vëmendje emrave të metodave, pasi biblioteka tashmë mund të përmbajë funksione me të njëjtët emra.
Le të shtojmë dy funksione në komandat dhe të dhënat e daljes:

Void Lcd_Write_Com(uint8_t të dhëna) ( digitalWrite(RS,LOW); //Kaloni RS në modalitetin e leximit të komandës, domethënë 0 Lcd_Writ_Bus(data); ) void Lcd_Write_Data(uint8_t të dhëna) (DixhitalWrite(RS,HIGH); // RS në modalitetin e leximit të të dhënave, domethënë 1 Lcd_Writ_Bus(data);

Tani vetë cilësimi i dritës së prapme. Për të zbuluar se si t'i bëni të gjitha këto, hapni dokumentacionin dhe kërkoni komandën për të konfiguruar PWM.

Shënim:
PWM mund të kontrollohet duke përdorur DBC - një sistem dinamik i kontrollit të ndriçimit, por për thjeshtësi, unë nuk e përdora atë. Nëse dëshironi, mund të gjeni informacionin e nevojshëm në të njëjtin dokumentacion.

Pra, ja çfarë na nevojitet:

Kjo do të thotë, së pari duhet të transmetojmë komandën "0xBE", dhe më pas, si 3 parametra, të transmetojmë frekuencën e sinjalit, kohëzgjatjen e ciklit të funksionimit, si dhe parametrin e tretë që përcakton nëse DBC është i aktivizuar apo jo (0x01 - i çaktivizuar , 0x09 - aktivizuar) .

Për të rregulluar vetë ndriçimin, duhet të ndryshoni vetëm frekuencën e ciklit të funksionimit. Meqenëse ne po transmetojmë të dhëna si një bajt, vlerat e lakut mund të jenë nga 0 në 255. Vendosa të përcaktoj 9 nivele ndriçimi (nga 0 në 8). Prandaj, të gjitha 256 vlerat duhet të ndahen në 9 hapa. Por ia vlen gjithashtu t'i kushtohet vëmendje faktit që nëse hapat janë të barabartë, atëherë shkëlqimi nuk do të ndryshojë aq mirë sa do të dëshironim. Kjo do të thotë, tashmë, për shembull, në hapin e 4-të, shkëlqimi do të jetë pothuajse maksimal, dhe nga hapi i 4-të në të 8-të do të ndryshojë pothuajse në mënyrë të padukshme. Nisur nga kjo, vendosa të përdor një progresion gjeometrik me emërues 2. Kjo do të thotë, shkëlqimi do të llogaritet duke përdorur formulën e mëposhtme: (2^lvl) - 1, ku lvl është niveli i shkëlqimit nga 0 në 8. Vini re se meqenëse vlerat fillojnë nga zero, atëherë duhet të zbritni një. Sigurisht, hapat dhe vlerat e tyre mund t'i zgjidhni vetë, por unë e dhashë këtë shembull mjaft të thjeshtë. Tani vetë kodi:

Set i pavlefshëmBright(bajt lvl) (shkëlqimi i bajtit(1); për (bajt i(1); i<= lvl; i++) //Возведение в степень brightness *= 2; Lcd_Write_Com(0xBE); //Вывод команды Lcd_Write_Data(0x01); //Ставим частоту 760Гц Lcd_Write_Data(brightness-1); //Выводим длину рабочего цикла Lcd_Write_Data(0x01); //Отключаем DBC }

Tani mund të përdorni UTFT.setBright(byte lvl);


Top