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:41] – 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 // | LED numberindikaatoreid on lihtne kasutada, sest neid võib juhtida kas või otse mikrokontrolleri viikudelt, kuid on ka spetsiaalseid ajureid (inglisekeeles // | ||
Line 30: | Line 28: | ||
<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 44: | Line 42: | ||
0b01111111, | 0b01111111, | ||
0b01100111, | 0b01100111, | ||
- | 0b01111001 | + | 0b01111001 |
}; | }; | ||
Line 50: | 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 68: | 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 80: | 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 112: | 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 |