Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki WIET

Transkrypt

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki WIET
Akademia Górniczo-Hutnicza
w Krakowie
Katedra Elektroniki
WIET
Laboratorium mikrokontrolerów
Ćwiczenie 4B
Wyświetlacz LED - projekt
Autor: Paweł Russek
http://www.fpga.agh.edu.pl/pm
ver. 26.10.16
1/6
1. Cel ćwiczenia
Celem ćwiczenia jest wykorzystanie przez student wiedzy w z zakresu programowania
układów GPIO w celu stworzenia aplikacji wykorzystującej poczwórny wyświetlacz 7segmentowy. W ćwiczeniu zastosowano mikrokontroler z rodziny Kinetis L firmy NXP.
Literatura:
W opisach wykorzystanych w tym ćwiczeniu posłużono się opisami zaczerpniętymi z książki:
Muhammad Ali; Chen, Shujen; Naimi, Sarmad; Naimi, Sepehr. Freescale ARM Cortex-M
Embedded Programming: Using C Language (ARM books Book 3)
2. Budowa i zasada działania wyświetlacza 7-segmentwego
2.1. Podłączenie do mikrokontrolera i zasada działania
Wyświetlacz 7-segmentowy, to popularny układ peryferyjny wykorzystywany w aplikacjach
mikrokontrolerów. Można wytóżnić dwa typu tych wyświetlaczy: ze wspólną anodą, lub ze
wspólną katodą. W wyświetlaczach ze wspólną anodą, wspólna anoda diód jest podłączona do
napięcia odpowiadającego wysokiemu poziomowi logicznemu, a mikrokontroler steruje
niskim poziomem logicznym indywidualne katody w celu ich zaświecenia. W takiej
konfiguracji bardzo ważna jest odpowiednia wydajność prądowa źródła prądu dla anody. W
wyświetlaczach ze wspólną katodą, wspólna katoda diód jest podłączona do napięcia
odpowiadającego niskimu poziomowi logicznemu, a mikrokontroler steruje wysokim
poziomem logicznym indywidualne anody w celu ich zaświecenia. W takiej konfiguracji
bardzo ważna jest odpowiednia wydajność prądowa źródła prądu dla katody. W każdej z
konfiguracji pin mikroknotrolera nie jest w stanie dostarczyć prądu koniecznego dla wspólnej
anody/katody i dlatego konieczne jest buforowanie za pomocą układu scalonego lub
tranzystora. Pojedyncze diody wyświetlacza są oznaczone kolejnymi literami alfabetu a, b, c, d,
e, f, g, h, jak pokazano na rysunku poniżej.
2/6
Jeden bajt wystarcza do wysterowania odpowiedniej cyfry na wszystkich dostępnych
segmentach. W przykładowym sposobie połączenia portów mikrokontrolera do wyświetlacza
podanym poniżej segment a jest przypisany do bitu D0, segment b do bitu D1 i tak dalej, jak
pokazano poniżej:
Bit D7 steruje podświetleniem kropki dziesiętnej. W ten sposób można stworzyć wzorce dla
cyfr od 0 do 9. Poniżej podano wartości dla wyświetlacza ze wspólną katodą.
Rysunek poniżej przedstawia sposób podłączenia dwóch wyświetlaczy 7-segmentowych ze
wspólną anodą do mikrokontrolera.
3/6
Należy zwrócić uwagę, że ponieważ segmenty (katody) cyfr wyświetlacza są podłączone do
tych samych pinów portu mikrokontrolera, jedyną możliwością rozdzielenia sterowania cyfr
jest rozdzielne sterowania katody pierwszej cyfry i drugiej cyfry. W tym sposobie sterowania,
cyfry (anody) są załączane naprzemiennie, a wartość na katodach jest odpowiednio
podmieniana. Dla przykładu, jeżeli chcemy wyświetlić liczbę 25, dla mikrokontrolera Kinetis L
powinien być zastosowany następujący algorytm:
1) Włączyć zegar dla portów PORTD and PORTE,
2) Skonfigurować Port D jako wyjście,
3) Skonfigurować Port E jako wyjście,,
4) Wpisz wartość odpowiadającą cyfrze 2 (z tablicy powyżej) na Port D,
5) Ustaw pin PTE1 na LOW i PTE0 na HIGH , aby aktywować pozycję dziesiątek,
6) Wprowadź opóźnienie,
7) Wpisz wartość odpowiadającą cyfrze 5 na Port D,
8) Ustaw pin PTE0 na LOW i PTE1 na HIGH, aby aktywować pozycję jednostek,
9) Wprowadź opóźnienie,
10)Powtarzaj kroki 4 do 9.
Jeżeli częstotliwość przełączania będzie zbyt niska cyfry będą w sposób widoczny mrugać. Aby
wyeliminować ten efekt, każda cyfra powinna być włączona co najmniej 60 razy w ciągu
każdej sekundy. Dla przykładu, w powyższym algorytmie opóźnienie powinno wynosić 8 ms
4/6
lub mniej
1 sek. / 60 / 2 = 8 ms.
Zwróć uwagę, że aby sterować, na przykład czterema cyframi potrzebujemy 12 pinów
mikrokontrolera, to jest 8 pinów na segmenty wyświetlacza i 4 piny, aby aktywować na jego
cyfry.
Przykładowy program.
/**
*
*
*
*
*/
Display number 25 on a 4-digit 7-segment LED.
Four common anode 7-segment LEDs are used.
PTD0-6 are connected to segment A-G respectively.
PTE0 is used to control right digit (low for digit on).
PTE1 is used to control left digit (low for digit on).
#include <MKL25Z4.H>
void delayMs(int n);
int main(void)
{
unsigned char digitPattern[] = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18};
SIM->SCGC5 |= SIM_SCGC5_PORTD(1);
SIM->SCGC5 |= SIM_SCGC5_PORTE(1);
PORTD->PCR[0] = PORT_PCR_MUX(1);
PORTD->PCR[1] = PORT_PCR_MUX(1);
PORTD->PCR[2] = PORT_PCR_MUX(1);
PORTD->PCR[3] = PORT_PCR_MUX(1);
PORTD->PCR[4] = PORT_PCR_MUX(1);
PORTD->PCR[5] = PORT_PCR_MUX(1);
PORTD->PCR[6] = PORT_PCR_MUX(1);
PTD->PDDR |= 0b01111111;
PORTE->PCR[0] = PORT_PCR_MUX(1);
PORTE->PCR[1] = PORT_PCR_MUX(1);
PORTE->PCR[2] = PORT_PCR_MUX(1);
PORTE->PCR[3] = PORT_PCR_MUX(1);
PTE->PDDR |= 0b00001111;
/* enable clock to Port D */
/* enable clock to Port E */
/* make PTD0 pin as GPIO */
/* make PTD1 pin as GPIO */
/* make PTD2 pin as GPIO */
/* make PTD3 pin as GPIO */
/* make PTD4 pin as GPIO */
/* make PTD5 pin as GPIO */
/* make PTD6 pin as GPIO */
/* make PTD6-0 as output pins */
/* make PTE0 pin as GPIO */
/* make PTE1 pin as GPIO */
/* make PTE0 pin as GPIO */
/* make PTE1 pin as GPIO */
/* make PTE3-0 as output pin */
while()
{
PTD->PDOR = digitPattern[2];
/* drive pattern of 2 on the segments */
PTE->PSOR = 0x01;
/* turn off right digit */
PTE->PCOR = 0x02;
/* turn on left digit */
delayMs(8); /* delay 8 ms will result in 16 ms per loop or 62.5 Hz */
PTD->PDOR = digitPattern[5];
PTE->PCOR = 0x01;
/* drive pattern of 5 on the segments */
/* turn on right digit */
5/6
}
PTE->PSOR = 0x02;
delayMs(8);
/* turn off left digit */
}
/* Delay n milliseconds
* The CPU core clock is set to MCGFLLCLK at 41.94 MHz in SystemInit().
*/
void delayMs(int n) {
int i;
int j;
for(i = 0 ; i < n; i++)
for (j = 0; j < 7000; j++) {}
}
Ćwiczenie 2.1
Napisz program, który będzie realizował prosty stoper z funkcją start i stop, który będzie
wyświetlał sekundy na wyświetlaczu 7-segmentowym.
6/6

Podobne dokumenty