Kelių skaitmenų atvaizdavimas 7 segmentų indikatoriuje  (3)

Dažnai reikia 7 segmentų indikatoriuje atvaizduoti ne vieną skaitmenį, bet skaičius iš kelių ir daugiau skaitmenų. Tam gali būti panaudotas laikinio multipleksavimo metodas. 1 pav. pateikta dviejų indikatorių prijungimo prie mikrovaldiklio schema.


Prisijunk prie technologijos.lt komandos!

Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.

Sudomino? Užpildyk šią anketą!

Taikant laikinio multipleksavimo metodą, atskirų indikatorių išvadai a, b, c, ... dp sujungiami lygiagrečiai. Bendro katodo išvadas prie žemės prijungiamas per NPN tipo tranzistorių. Norint atvaizduoti tam tikrą skaičių, pavyzdžiui, 12, pirmiausia į PORTC išvedamas kodas, atitinkantis skaitmenį „1“. Paduodamas signalas į mikrovaldiklio išvadą RB7, atidaromas tranzistorius Q1, tuomet šviečia pirmasis indikatorius. Po kelių milisekundžių indikatorius išjungimas, į PORTC išvedamas kodas, atitinkantis skaitmenį „2“ ir trumpam atidaromas tranzistorius Q2. Tokiu būdu paeiliui išvedant skaitmenis dideliu dažniu, dėl akies inertiškumo atrodo, kad vienu metu šviečia visi indikatoriai. Panašiu principu veikia ir kino projektoriai bei televizija – rodomi atskiri kadrai suvokiami kaip tolydus vaizdas. Parenkant indikatorių perjungimo dažnį, reikia atsižvelgti, kad jis nebūtų lygus 50Hz ir kartotiniams dažniams – tokiu atveju gali būti pastebimas mirgėjimas dienos šviesos lempų apšvietime.

Maksimali srovė, tekanti bendru indikatoriaus išvadu gali siekti apie 80mA (10mA x 7 segmentai + dešimtainis taškas), todėl parenkamas tranzistorius turi atlaikyti ne mažesnę srovę (2N3904 tranzistoriaus maksimali kolektoriaus srovė – 200mA). Tranzistoriaus bazės rezistoriaus parenkamas pagal tranzistoriaus stiprinimo koeficientą – jei tranzistoriaus stiprinimo koeficientas yra 100-150, tuomet minimali bazės srovė turi būti

.

Rezistoriaus apskaičiuojamas

,

čia 5V – mikrovaldiklio išvado loginio „1“ įtampa; 0,7V – įtampos kritimas bazė-emiteris sandūroje.

Atsižvelgiant į apskaičiuotą rezistoriaus varžą, parenkama artimiausia standartinė vertė – 5,1kΩ.

1 pavyzdys. Programa dviženklio skaičiaus atvaizdavimui 7 segmentų indikatoriuose

/**************************************************** 
* Programa C kalba "Dvizenklio skaiciaus atvaizdavimas indikatoriuje"
* Mikrovaldiklis: PIC18F14K22
* Daznis: 16MHz
*****************************************************/

/** I N C L U D E S *********************************/
#include <p18cxxx.h>

/** C O N F I G U R A T I O N ***********************/
#pragma config FOSC = IRC //vidinis RC rezonatorius
#pragma config WDTEN = OFF //Watchdog Off
#pragma config LVP = OFF //Low voltage program

/** Duomenys programu atmintyje *********************/
const rom unsigned char table_7_segm[] = //kodu lentele
{
0x3F, //0
0x06, //1
0x5B, //2
0x4F, //3
0x66, //4
0x6D, //5
0x7D, //6
0x07, //7
0x7F, //8
0x6F //9
};

#pragma code

/** F U N C T I O N S *******************************/
void delay (unsigned int ms)
{
unsigned int i;
while (ms--) {
for (i = 0; i < 332; i++)
;
}
}

/** M A I N *****************************************/

void main(void)
{
float skaicius = 0; //kintamasis skaiciui
char indikatorius = 0; //kintamasis indikatoriui ijungti
char i = 0;

OSCCONbits.IRCF2 = 1; //Vidinis RC rezonatorius
OSCCONbits.IRCF1 = 1; //nustatomas 16MHz
OSCCONbits.IRCF0 = 1;

ANSEL = 0b00000000; //Visi MV isvadai nustatomi
ANSELH = 0b0000; //kaip skaitmeniniai

PORTA = 0; //Visi isvadai - isejimai
TRISA = 0;
PORTB = 0;
TRISB = 0;
PORTC = 0;
TRISC = 0;

while (1)
{
skaicius = 23; //skaicius atvaizdavimui

skaicius +=0.5 //skaiciaus apvalinimui!
skaicius = skaicius/10;
indikatorius = 0x80;
for (i=0; i<2; i++) {
LATC = table_7_segm[(int)skaicius];
skaicius = skaicius - (int)skaicius;
skaicius = skaicius * 10;
LATB = indikatorius; //ijungiamas indikatorius
delay (3); //indikatoriaus svietimo trukme
LATB = 0; //indikatorius isjungiamas
indikatorius = indikatorius >> 1;
} //end for()
} //end while()
}

1 pavyzdyje pateikta programa, atvaizduojanti dviženklį skaičių 7 segmentų indikatoriuje. Atvaizduojamas skaičius saugomas float tipo kintamajame skaicius. Keičiant kintamojo tipą iš float į integer, „nukertama“ skaičiaus trupmeninė dalis, lieka tik sveikas skaičius, kurį galima atvaizduoti 7 indikatoriuje.

Pasidalinkite su draugais
Aut. teisės: www.technologijos.lt
Autoriai: Šarūnas Kilius
(0)
(0)
(0)

Komentarai (3)