This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:examples:display:segment_display [2014/10/07 10:38] – raivo.sell | et:examples:display:segment_display [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ~~PB~~ | ||
====== Numberindikaator ====== | ====== Numberindikaator ====== | ||
- | //Vajalikud teadmised: [HW] [[et: | + | //Vajalikud teadmised: |
+ | [HW] [[et: | ||
+ | [LIB] [[et: | ||
+ | [PRT] [[et: | ||
===== Teooria ===== | ===== Teooria ===== | ||
+ | |||
+ | [{{ : | ||
7-segmendiline LED numberindikaator on seitsmest number 8-kujuliselt paigutatud valgusdioodist koosnev näidik. Vastavaid LED-e (segmente) süüdates või kustutades saab nendega kuvada numbreid nullist üheksani ning mõningaid tähti. | 7-segmendiline LED numberindikaator on seitsmest number 8-kujuliselt paigutatud valgusdioodist koosnev näidik. Vastavaid LED-e (segmente) süüdates või kustutades saab nendega kuvada numbreid nullist üheksani ning mõningaid tähti. | ||
- | [{{ : | + | Elektriliselt on kõigi LED-ide anoodid ühendatud ühise anoodi viiguga (inglise keeles //common anode//) - //ca//. LED-e süüdatakse nende katoode (//a, b, c...//) lülitades. Olemas on ka vastupidi ühendusi, kus indikaatoritel on ühine katood (inglise keeles //common cathode//) - //cc//. Tavaliselt kasutatakse mitut numberindikaatorit, |
[{{ : | [{{ : | ||
- | |||
- | Elektriliselt on kõigi LED-ide anoodid ühendatud ühise anoodi viiguga (inglise keeles //common anode//) - //ca//. LED-e süüdatakse nende katoode (//a, b, c...//) lülitades. Olemas on ka vastupidi ühendusi, kus indikaatoritel on ühine katood (inglise keeles //common cathode//) - //cc//. Tavaliselt kasutatakse mitut numberindikaatorit, | ||
- | |||
- | LED numberindikaatoreid on lihtne kasutada, sest neid võib juhtida kas või otse mikrokontrolleri viikudelt, kuid on ka spetsiaalseid ajureid (inglisekeeles // | ||
- | |||
- | ===== Praktika ===== | ||
- | |||
- | Kasutajaliidese moodulil on üks 7-segmendiline LED numberindikaator. Seda juhitakse läbi järjestikliidesega ajuri. Ajuri järjestikliides on sarnane SPI-ga, kus kasutatakse ka taktsignaali ja andmesignaali. Erinevalt SPI-st pole kasutusel kiibi valikut (inglise keeles // | ||
- | |||
[{{ : | [{{ : | ||
+ | LED numberindikaatoreid on lihtne kasutada, sest neid võib juhtida kas või otse mikrokontrolleri viikudelt, kuid on ka spetsiaalseid ajureid (inglisekeeles // | ||
* Lukustussignaal (//latch//) | * Lukustussignaal (//latch//) | ||
* Taktsignaal (//clock//) | * Taktsignaal (//clock//) | ||
* Andmesignaal (//data//) | * Andmesignaal (//data//) | ||
- | |||
- | ~~CL~~ | ||
Andmed edastatakse bitthaaval andmeviigu kaudu. Iga kord, kui taktsignaal kõrgeks läheb, nihutatakse nihkeregistri sisu paremale ja kõige vasakpoolsemasse pesasse loetakse andmeviigult tulev bitt. Niiviisi laaditakse nihkeregistrisse 8 bitti. Kui lukustussignaal kõrgeks seada, laetakse nihkeregistri väärtus lukustusregistrisse, | Andmed edastatakse bitthaaval andmeviigu kaudu. Iga kord, kui taktsignaal kõrgeks läheb, nihutatakse nihkeregistri sisu paremale ja kõige vasakpoolsemasse pesasse loetakse andmeviigult tulev bitt. Niiviisi laaditakse nihkeregistrisse 8 bitti. Kui lukustussignaal kõrgeks seada, laetakse nihkeregistri väärtus lukustusregistrisse, | ||
- | Numbrite kuvamiseks Kodulabori Kasutajaliidese mooduli indikaatoril on Kodulabori teeki kirjutatud järgnev funktsionaalsus: | + | ===== Praktika ===== |
+ | |||
+ | Kasutajaliidese moodulil on üks 7-segmendiline LED numberindikaator, | ||
<code c> | <code c> | ||
- | // Märgikaart. | + | // Märgikaart |
- | // Bitid tähistavad segmente. Madalaim | + | // Bitid tähistavad segmente, madalaim |
- | static | + | const unsigned char __attribute__ ((weak)) |
{ | { | ||
0b00111111, | 0b00111111, | ||
Line 47: | Line 42: | ||
0b01111111, | 0b01111111, | ||
0b01100111, | 0b01100111, | ||
- | 0b01111001 | + | 0b01111001 |
}; | }; | ||
Line 53: | Line 48: | ||
void segment_display_init(void) | void segment_display_init(void) | ||
{ | { | ||
- | // Set latch, data out and clock pins as output | + | // Juhtviikude väljundiks seadmine |
pin_setup_output(segment_display_latch); | pin_setup_output(segment_display_latch); | ||
pin_setup_output(segment_display_data_out); | pin_setup_output(segment_display_data_out); | ||
Line 71: | Line 66: | ||
} | } | ||
- | // Number | + | // Numbri |
map = segment_char_map[digit]; | map = segment_char_map[digit]; | ||
- | // Lukustussignaal maha | + | // Lukustussignaali madalaks muutmine |
pin_clear(segment_display_latch); | pin_clear(segment_display_latch); | ||
- | // Bittide saatmine. Kõrgeim | + | // Bittide saatmine, kõrgeim |
for (i = 7; i >= 0; i--) | for (i = 7; i >= 0; i--) | ||
{ | { | ||
Line 83: | Line 78: | ||
pin_set_to(segment_display_data_out, | pin_set_to(segment_display_data_out, | ||
- | // Taktsignaal kõrgeks | + | |
+ | // Taktsignaali | ||
pin_set(segment_display_clock); | pin_set(segment_display_clock); | ||
_delay_us(1); | _delay_us(1); | ||
- | // Taktsignaal | + | // Taktsignaali |
pin_clear(segment_display_clock); | pin_clear(segment_display_clock); | ||
_delay_us(1); | _delay_us(1); | ||
} | } | ||
- | // Lukustussignaal peale | + | // Lukustussignaali kõrgeks muutmine |
pin_set(segment_display_latch); | pin_set(segment_display_latch); | ||
} | } | ||
</ | </ | ||
- | Numbrite ja " | + | Numbrite ja " |
+ | Kui kasutaja defineerib muutuja segment_char_map oma koodis ise, on võimalik luua ekraanile ka muid sümboleid (Nt teksti vmt). | ||
Järgnevalt on toodud konkreetsem numberindikaatori kasutamise näiteprogramm. Programmis kasutatakse teegi eelnevalt kirjeldatud funktsioone. Programm loeb ligikaudu sekundilise intervalliga numbreid nullist üheksani ja seejärel kuvab tähe E, kuna kahekohalisi numbreid ei ole ühekohalisel indikaatoril võimalik näidata. | Järgnevalt on toodud konkreetsem numberindikaatori kasutamise näiteprogramm. Programmis kasutatakse teegi eelnevalt kirjeldatud funktsioone. Programm loeb ligikaudu sekundilise intervalliga numbreid nullist üheksani ja seejärel kuvab tähe E, kuna kahekohalisi numbreid ei ole ühekohalisel indikaatoril võimalik näidata. | ||
Line 115: | Line 112: | ||
// Lõputu tsükkel | // Lõputu tsükkel | ||
- | while (true) | + | while (1) |
{ | { | ||
- | // Kui loenduri väärtus on suurem kui 9, | + | // Numbri kuvamine ekraanile |
- | // siis näitab 7-segment E - Error | + | segment_display_write(counter |
- | segment_display_write(counter); | + | |
- | // Loenduri suurendamine | + | // Loenduri suurendamine |
counter++; | counter++; | ||
+ | if (counter> | ||
// Paus 1 sekund | // Paus 1 sekund |