Jste zde

Bargraf k procesoru 8051

Bargraf je slangové označení indikátoru hodnoty pomocí rozsvícení jednoho světelného bodu z několika (např. infikace výšek na ekvalizéru). V tomto článku prezentujeme program, který obsluhuje posuvný registr ovládající 8 LED.

V některých aplikacích je výhodné alespoň přibližně zobrazovat hodnotu čísla analogově. Zapojení jednoduchého 8 segmentového bargrafu se sériovým vstupem dat je na obrázku. K dispozici jsou tři programy napsané v céčku, ale pro příznivce asembleru je i LST výpis, ze kterého lze vyseparovat program v asembleru. 
 

Schéma zapojení BARGRAFu

První, jejjednodušší program rozlišuje jen 8 úrovní. Další dva programy mohou mít obecně nelineární dělení a mají rozlišení 16 úrovní tak, že se v mezistupních rozsvítí dvě sousední ledky. První verze je lineární a druhá logaritmická s rozsahem 40 dB. 

Zapojení lze snadno rozšířit zřetězením více posuvných registrů. V zapojení se společným předřadným odporem pro všechny ledky nelze zobrazit sloupec, ale pouze bod. Při zobrazení sloupce by každá ledka musela mít svůj odpor. 
 

Výpis programu


#pragma DB OE
#pragma code
#pragma print
#include    /* define Atmel registers*/
sbit Data  = P3^1;
sbit Clk   = P3^0;
typedef unsigned char	byte;
/*-------- jednoduchy bargraf bez pouziti serioveho kanalu  ---------  */
/*         8 ledek, zobrazuje 8 urovni */
void Bar(byte Vstup)
{
byte i=8;
Vstup>>=5;     /* zobrazeni ma jen tri bity */
do
{
if(!Vstup) Data=0;
else Data=1;
Clk=1; Vstup--; Clk=0;
i--;
}
while(i);
}
/* -------- lin. zobrazeni 16 Łrovni na 8 ledek pres seriovy kanal ---   */
/* pokud by nebyl k dispozici seriovy kanal, je mozne misto SBUF=neco napsat: */
/* ACC=neco; VYS();  */
/* a pouzit nasledujici program v asn:  */
/*
clkd	EQU     P3.0
datad   EQU	P3.1
;
VYS:	MOV R7,	#8
PRENOS: CLR	clkd           ;UKONCENI CLK
RRC	A
MOV	datad,C        ;CARRY DO  DATA
SETB	clkd           ;ZACATEK CLK IMPULZU
DJNZ 	R7,PRENOS
CLR	clkd
RET 			*/
void Displedlin(byte i)
{
if(i>128)
{
if(i>192)
{
if(i>224)
{
if(i>240) SBUF=~128;  /* 241-255  */
else      SBUF=~192;  /* 225-240  */
}
else
{
if(i>208) SBUF=~64;   /* 209-224  */
else      SBUF=~96;   /* 193-208  */
}
}
else       /* 129-192  */
{
if(i>160)
{
if(i>176) SBUF=~32;   /* 177-192  */
else      SBUF=~48;   /*161-176  */
}
else
{
if(i>144) SBUF=~16;   /* 145-160  */
else      SBUF=~24;   /* 129-144   */
}
}
}
else
{
if(i>64)
{
if(i>96)
{
if(i>102) SBUF=~8;    /* 103-128  */
else      SBUF=~12;   /* 97-102   */
}
else
{
if(i>80)  SBUF=~4;    /* 81-96   */
else      SBUF=~6;    /* 65-80   */
}
}
else       /* 0-64    */
{
if(i>32)
{
if(i>48) SBUF=~2;    /* 49-64   */
else     SBUF=~3;    /* 33-48   */
}
else
{
if(i>16) SBUF=~1;    /* 17-32    */
else     SBUF=~0;    /* 0-16     */
}
}
}
}
/* ----- log. zobrazeni 40 dB s rozlisenim 2,5 dB na 8 ledek    ------   */
void Displed(byte i)
{
if(i>26)
{
if(i>81)
{
if(i>143)
{
if(i>191) SBUF=~128;  /* 192-255  */
else      SBUF=~192;  /* 144-191  */
}
else
{
if(i>108) SBUF=~64;   /* 109-143  */
else      SBUF=~96;   /*  82-108  */
}
}
else
{
if(i>45)
{
if(i>60)  SBUF=~32;   /*  61-81  */
else      SBUF=~48;   /*  46-60  */
}
else
{
if(i>34)  SBUF=~16;   /* 35-45  */
else      SBUF=~24;   /* 27-34  */
}
}
}
else
{
if(i>8)
{
if(i>14)
{
if(i>19)  SBUF=~8;    /* 20-26 */
else      SBUF=~12;   /* 15-19 */
}
else
{
if(i>11)  SBUF=~4;    /* 12-18  */
else      SBUF=~6;    /*  9-11  */
}
}
else          /* 0-8    */
{
if(i>4)
{
if(i>6) SBUF=~2;     /*   7-8   */
else    SBUF=~3;     /*   5-6   */
}
else
{
if(i>2) SBUF=~1;       /*  3-4   */
else    SBUF=~0;      /*   0-2   */
}
}
}
}
/*--------------- pocatecni inicializace ------------------------------  */
void Pocinic(void)
{
SCON=0;          /*  seriovy kanal, rezim 0         */
}
/*-----------------   hlavni program    ------------------------*/
main(void)
{
Pocinic();
do
{
Bar(100);
}
while(1);
}

DOWNLOAD



Dovnload rutin - bargraf.zip (6 kb)  
Hodnocení článku: