Indicatorul segmentului și avr

Pentru a afișa litere, sunt utilizați indicatori multi-segment și matrice mai complexe. Dar aici vorbim despre șapte segmente. Luați în considerare și afișajul dinamic. ca modalitate de afișare instantanee a valorii măsurate. Pentru a face acest lucru, luați în considerare utilizarea întreruperilor în program.






Deci, ar trebui să știți că indicatorii au un anod comun și un catod ca în figura de mai jos. La vârful degetelor mi-a fost un indicator cu un catod comun (partea inferioară a figurii), a cărui ieșire de comandă este conectată la un minus. Vom lucra cu el.

Indicatorul segmentului și avr
Dacă există mai mulți indicatori, de aici, catodii sunt controlați de mai multe picioare ale MC. Dar utilizați întotdeauna tranzistori; I / O porturile pot arde din cauza unui curent relativ mare. Am folosit tranzistoarele uzuale de 315. În figura de mai jos, am arătat o conexiune aproximativă prin intermediul acestora, ieșirea de control a indicatorului și a controlerului. Pentru instalare, avem nevoie de 11 picioare de microcontroler, adică pentru a afișa informații pe segmente de 8 picioare (7 + punct) și un picior pentru fiecare indicator pentru a controla, am trei, astfel încât picioarele sunt, de asemenea, trei. Mai jos am citat și am descris programul. Pentru a gestiona segmentele, vom folosi ace de un port, ceea ce nu ar fi confuz. A scris sub microcontrolerul ATmega8. Dacă doriți să scăpați de "piatră", atunci nu este o problemă, de exemplu, în articolul # 21 Am împărțit codul în biblioteci, unde fără probleme este posibilă modificarea setărilor pe o altă "piatră", mai ales numerele de pini și porturi. Regulile generale ale universalității și ale transferului sunt de asemenea descrise aici.

Figura de conectare a tranzistorului la MK și la indicator.

Să trecem la program. În acest mic program (în C) am dat un exemplu de includere a trei elemente ale indicatorului și ieșirea unui număr cu o virgulă. Utilizați temporizatorul și întrerupeți pentru a afișa indicatorul. În timpul scrierii programului, trebuie să determinăm care pin al portului ar trebui să corespundă segmentului de pe indicator. Elementul indicator în sine este prezentat în figura de mai jos. Descriere laterală conectarea terminalelor la segmentele elementului indicator (pin port -. Picioare de element de cameră (figura de mai sus) - segment litere - numărul în matrice corespunzătoare segmentelor elementului de incluziune).

Indicatorul segmentului și avr

PB0 - 12 - controlul primului element

#include
#include
#include
/ * Definirea fiecărui pin al elementului port al celor șapte segmente (ryunok de mai sus) * /
Afișaj (i);
> / * Închiderea buclei de buclă infinită * /
> / * Închideți paranteza programului principal * /

Următorul pas este să adăugați o funcție de întrerupere care va declanșa vectorul special TIMER0_OVF_vect. care este responsabilă pentru întreruperea depășirii T0. Pentru aceasta folosim cronometrul hardware / contorul T0. Mai sus, în programul pe care l-am înregistrat cu setările cronometrului, în același loc ați numărat frecvența cu care va apărea afișarea dinamică. Ie când registrul contorului din contor este plin. programul general se oprește și funcția este executată mai jos, după ieșirea programului principal.







ISR (TIMER0_OVF_vect)
<
PORTB = 0x3e; // Curățarea PB7, PB6, PB0
pentru (j = 0; j<=30; j++) <> // Întârziere pentru oprirea tranzistorului
(k == 3). k = 0. k ++; / * Variabilă, care este responsabil pentru trei elementul indicator punte secvență, 0,1 și 2. într-o anumită cifră într-un anumit usatnavlivaetsya picior 1 se deschide în continuare și segmentele tranzistoare indicatorul luminos, prin Elemn variabilă corespunzătoare * /
comutator (k)
<
cazul 0: PORTB | = (1 < PORTD = Elem3;
pauză;
cazul 1: PORTB | = (1 < PORTD = Elem2;
pauză;
cazul 2: PORTB | = (1 < PORTD = Elem1;
>
>

Programul de mai sus este testat în hardware și într-un simulator. Mai jos sunt desenele, respectiv. Am călcat totul în glandă cu un baldachin, pe un braț rapid. După cum puteți vedea, trei elemente ale indicatorului sunt trei tranzistoare (în jurul). În simulator (Proteus) nu avem nevoie de tranzistori. Ca o diferență semnificativă în program, și anume în întrerupere, unde se produce întârzierea de a opri tranzistorul - în simulator, scrieți 50 de cicluri. Totul ar trebui să funcționeze.

Indicatorul segmentului și avr
Indicatorul segmentului și avr

Mai jos sunt sursele și proiectul pentru materialul de mai sus.

Asta e tot. În următorul articol voi descrie conexiunea senzorilor de temperatură și voi transmite informația către indicator. Ne vedem curând!

/ * Aceste macrocomenzi conțin numere corespunzătoare unui număr egal cu numărul de "picior" al portului căruia segmentul indicator este conectat cu aceeași macrocomandă de nume. * /

Pentru ce a fost ridicat la putere?

Bine ai venit! Gradul este numărul, numărul pinului (picioarelor). Pins pe port la noi 8. Portul este un octet, valoarea maximă fiind de 256. Deci fiecare picior este 2 în puterea n-a (acest port).

IMHO nu este universal, va trebui legat la un port, și nu doar la o singură secvență de picior, când se va conecta la indicator, va fi o grămadă de jumperi.

Toate acestea nu sunt pentru universalitate, ci pentru conceptul de fundamentale. La urma urmei, optimizarea și modificarea sunt întotdeauna complicate scheme și programe. Oamenii care încep să învețe căuta mereu o "fundație". Cu toate acestea, mulțumesc pentru critică.

Arăt ca aici se datorează programării și cum poate ceva care este în conformitate cu această sarcină de a face: a scrie un program pentru a afișa switch-uri care sunt conectate la unul din porturile de pe LED-uri conectate la un alt port al MC. Pe indicatorul pe șapte segmente, doriți să afișați numărul de schimburi? Și că eu sunt nemulțumit și nu mă pot gândi, pentru AVR ATmega16

Alo Voi încerca să răspund, în măsura în care înțeleg. Primul este de a sondaj poziția comutatoarelor, după cum am înțeles, fie 0 sau 1, doar paralizează starea PIN. Mai mult, am înțeles LED-urile pentru a afișa vizual poziția comutatorului, care sunt conectate la un alt port - doar în ceea ce privește corpul activează controlerul necesar picior PORTN | = _BV (PNN);. pentru a aprinde LED-ul, ei bine, înregistrăm contorul și îl emitem pe indicator. Iată cum este.

dar nu a putut scrie pentru asamblare exact locul în care este utilizat acest indicator de șapte segmente? Păi, așa verific

Bună ziua, la asamblarea cu un semn pe TINE. Nu a existat o nevoie specială de a dezvolta aceste cunoștințe.

care îl crede și îl schimbă. Am încercat să o schimb. Nu există nici un efect.

char volatile Elem1, Elem2, Elem3, Elem4 - aici nu-mi place volatile. Din acest motiv pot apărea probleme și afișarea unor simboluri clare - după toate acestea, se spune că valoarea variabilelor se va schimba în orice moment. Nu este cazul atunci când ar trebui pus. Încercați să răsuciți setările cronometrului - frecvența TCCR0.

Da, da. Controler ATmega88V-10PU







Trimiteți-le prietenilor: