Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:display:segment_display [2014/10/07 10:41] raivo.sellet: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:hardware:homelab:digi]], [LIB] [[et:software:homelab:library:module:segment_display]], \\[LIB] [[et:software:homelab:library:delay]][PRT] [[et:examples:digi:led]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:digi]],  
 +[LIB] [[et:software:homelab:library:module:segment_display]], \\ [LIB] [[et:software:homelab:library:delay]]  
 +[PRT] [[et:examples:digi:led]]//
  
 ===== Teooria ===== ===== Teooria =====
 +
 +[{{  :examples:display:segment_display:7-seg.jpg?100|7-segment}}]
  
 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.
  
-[{{  :examples:display:segment_display:7-seg.jpg?100|7-segement indikaator}}] +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, et kuvada mitmekohalisi arve - selleks puhuks on indikaatorid varustatud ka koma(punkti) segmendiga //dp//. Kokkuvõttes on ühel indikaatoril siiski 8 segmenti, kuid nimetatakse neid ikkagi numbrisegmentide arvu järgi 7-segmendilisteks.
 [{{  :examples:display:segment_display:segment_display_leds.png?300|Indikaatori segmentide asetus ja elektriskeem}}] [{{  :examples:display:segment_display:segment_display_leds.png?300|Indikaatori segmentide asetus ja elektriskeem}}]
- 
- 
 [{{  :examples:display:segment_display:segment_display_driver_logic.png?300|LED ajuri nihkeregistri ülesehitus koos vastavate indikaatori segmentidega}}] [{{  :examples:display:segment_display:segment_display_driver_logic.png?300|LED ajuri nihkeregistri ülesehitus koos vastavate indikaatori segmentidega}}]
- 
-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, et kuvada mitmekohalisi arve - selleks puhuks on indikaatorid varustatud ka koma(punkti) segmendiga //dp//. Kokkuvõttes on ühel indikaatoril siiski 8 segmenti, kuid nimetatakse neid ikkagi numbrisegmentide arvu järgi 7-segmendilisteks. 
- 
 LED numberindikaatoreid on lihtne kasutada, sest neid võib juhtida kas või otse mikrokontrolleri viikudelt, kuid on ka spetsiaalseid ajureid (inglisekeeles //draiver//), mis võimaldavad numberindikaatorit juhtida vähemate mikrokontrollerite viikude arvuga. LED numberindikaatoreid on erinevat värvi, nad võivad olla väga eredad ja väga suured. Kogu ladina tähestiku kuvamiseks on olemas ka lisasegmentidega indikaatoreid. Ajureid on erinevaid, kuid levinud ajurid kasutavad järjestikliidest, mis on on sarnane SPI-ga, kus kasutatakse ka taktsignaali ja andmesignaali. Erinevalt SPI-st pole kasutusel kiibi valikut (inglise keeles //chip-select//), kuid selle asemel on andmete lukustussignaal (inglise keeles //latch//). Nimetatud kolm liini on ühendatud kontrolleri viikudega. LED numberindikaatoreid on lihtne kasutada, sest neid võib juhtida kas või otse mikrokontrolleri viikudelt, kuid on ka spetsiaalseid ajureid (inglisekeeles //draiver//), mis võimaldavad numberindikaatorit juhtida vähemate mikrokontrollerite viikude arvuga. LED numberindikaatoreid on erinevat värvi, nad võivad olla väga eredad ja väga suured. Kogu ladina tähestiku kuvamiseks on olemas ka lisasegmentidega indikaatoreid. Ajureid on erinevaid, kuid levinud ajurid kasutavad järjestikliidest, mis on on sarnane SPI-ga, kus kasutatakse ka taktsignaali ja andmesignaali. Erinevalt SPI-st pole kasutusel kiibi valikut (inglise keeles //chip-select//), kuid selle asemel on andmete lukustussignaal (inglise keeles //latch//). Nimetatud kolm liini on ühendatud kontrolleri viikudega.
  
Line 30: Line 28:
  
 <code c> <code c>
-// Märgikaart. +// Märgikaart 
-// Bitid tähistavad segmente. Madalaim järk Akõrgeim DP. +// Bitid tähistavad segmente, madalaim järk A ja kõrgeim DP 
-static const unsigned char segment_char_map[11] = +const unsigned char __attribute__ ((weak)) segment_char_map[11] = 
 { {
  0b00111111,  0b00111111,
Line 44: Line 42:
  0b01111111,  0b01111111,
  0b01100111,  0b01100111,
- 0b01111001   // E like Error+ 0b01111001   // E nagu Error
 }; };
    
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 segmentide kaardiks.+ // Numbri segmentide kaardiks teisendamine
  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 järk esimesena.+ // Bittide saatmine, kõrgeim järk esimesena
  for (i = 7; i >= 0; i--)  for (i = 7; i >= 0; i--)
  {  {
Line 80: Line 78:
  pin_set_to(segment_display_data_out, bit_is_set(map, i));  pin_set_to(segment_display_data_out, bit_is_set(map, i));
    
- // Taktsignaal kõrgeks hetkeks+ 
 + // Taktsignaali hetkeks kõrgeks muutmine
  pin_set(segment_display_clock);  pin_set(segment_display_clock);
  _delay_us(1);  _delay_us(1);
    
- // Taktsignaal madalaks+ // Taktsignaali madalaks muutmine
  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);
 } }
 </code> </code>
  
-Numbrite ja "E" tähe kuvamiseks segmentidena on loodud konstantne massiiv //segment_char_map//, kus iga segmendi põlemine on tähistatud bitiga 1 ja kustumine bitiga 0. Bitid madalamast kõrgemaks (binaarkujul paremalt vasakule) tähistavad segmente A, B, C, D, E, F, G ja DP. Ajuri juhtliides on teostatud tarkvaralise SPI-ga ehk andmesideviike programmis tarkvaraliselt juhtides. Funktsiooniga //segment_display_init// seatakse kõik kolm viiku väljundiks. Märgi kuvamiseks on //segment_display_write// funktsioon, mis leiab massiivist märgi segmendikaardi ja edastab kõigi segmentide väärtused bitthaaval ajurile. Taktsignaali sageduseks on tarkvaraliste pausidega saadud ligikaudu 500 kHz.+Numbrite ja "E" tähe kuvamiseks segmentidena on loodud "nõrk" konstantne massiiv //segment_char_map//, kus iga segmendi põlemine on tähistatud bitiga 1 ja kustumine bitiga 0. Bitid madalamast kõrgemaks (binaarkujul paremalt vasakule) tähistavad segmente A, B, C, D, E, F, G ja DP. Ajuri juhtliides on teostatud tarkvaralise SPI-ga ehk andmesideviike programmis tarkvaraliselt juhtides. Funktsiooniga //segment_display_init// seatakse kõik kolm viiku väljundiks. Märgi kuvamiseks on //segment_display_write// funktsioon, mis leiab massiivist märgi segmendikaardi ja edastab kõigi segmentide väärtused bitthaaval ajurile. Taktsignaali sageduseks on tarkvaraliste pausidega saadud ligikaudu 500 kHz
 +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 % 10);
- segment_display_write(counter);+
  
- // Loenduri suurendamine+ // Loenduri suurendamine kuni kümneni
  counter++;  counter++;
 + if (counter>19) counter=0;
  
  // Paus 1 sekund  // Paus 1 sekund
et/examples/display/segment_display.1412678482.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0