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:36] – 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. Selline loendamine on saavutatud suuremast arvust mooduli võtmisega. | + | Järgnevalt on toodud konkreetsem numberindikaatori kasutamise näiteprogramm. Programmis kasutatakse teegi eelnevalt kirjeldatud funktsioone. Programm loeb ligikaudu sekundilise intervalliga numbreid nullist üheksani |
| <code c> | <code c> | ||
| 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 | ||