Operácie

Vzorové riešenie MIPS A1

Zo stránky SensorWiki

Praktická časť skúšky z predmetu MIPS / LS2025 - Richard Balogh


Zadanie

Pred sebou máte novú súčiastku aj s datasheetom. Je to 4-miestny 7-segmentový LED displej, ktorý je potrebné využiť. Viac informácií nájdete v datasheete. Nič nesmiete zapojiť na výstupy D0 a D1 (PORTD.0 a PORTD.1), ktoré sa využívajú pre USB. Inak môžete využiť ktorékoľvek ostatné. Pri práci môžete využiť všetky súčiastky zo semestra, ktoré máte v krabičke a ľubovoľný počet vodičov. Odporúčame pracovať postupne: najprv si zapojte displej a vyskúšajte pripojením na GND a Vcc či bude svietiť to čo potrebujete. Potom jednoduchým programom odskúšajte základnú funkciu a až potom sa pustite do zadanej úlohy. Ak nestihnete v časovom limite všetko, dostanete čiastočný počet bodov zodpovedajúci rozpracovanosti úlohy.


Displej BQ-M326RD.

Úloha 1.A.1: Pripojte displej k mikroprocesoru (nezabudnite na ochranné odpory!) a naprogramujte nasledovnú sekvenciu: Každú sekundu sa rozsvieti postupne jeden z prostredných segmentov (g), začneme vľavo jednou paličkou a skončíme všetkými štyrmi. Potom sa celý cyklus zopakuje.

Úloha 1.A.2: Pripojte displej k mikroprocesoru (nezabudnite na ochranné odpory!) a naprogramujte nasledovnú sekvenciu: Každú sekundu sa rozsvieti jeden z prostredných segmentov (g) a postupne pribúdajú - začneme vľavo, skončíme vpravo a potom sa celý cyklus zopakuje.


Literatúra:


Analýza a opis riešenia

Tu je príklad, ako mohlo vyzerať riešenie úlohy A1, resp A2. Nie je to ideálne, optimálne ani pekné riešenie, ale také, ktoré sa dá stihnúť celkom rýchlo zapojiť aj naprogramovať. Samozrejme, toto riešenie nezohľadňuje žiadne ďalšie vstupy alebo výstupy, ani by sa takto nemalo programovať, ale na skúšku by to bolo asi najrýchlejšie riešenie.

Keďže na doske nie je nič iné pripojené, tak pracujeme s celým portom PORTD súčasne a neovládame ho po bitoch. Displej je so spoločnými anódami, preto zapojíme segment g na zem a spíname jednotlivé spoločné anódy CA1 až CA4. Teoreticky by sme mohli nahradiť štyri rezistory len jedným, medzi vývodom g a zemou, ale toto riešenie by vyhovovalo len pre úlohu A1, pre úlohu A2 by sa menila intenzita svitu LED diód pri rozličnom počte rozsvietených segmentov.

Schéma zapojenia.

Ak sa zo schémy zapojenia neviete celkom zorientovať, možno vám pomôže fotografia zapojenia priamo na doštičke.

Zapojenie na doštičke.


Algoritmus a program

Algoritmus je celkom minimalizovaný, pre krátkosť času nezavádzame ani symbolické názvy výstupov, priamo ovládame jednotlivé anódy. Pre zadanie A2 treba odkomentovať riadky v cykle while. Zvyšok kódu ostane bezo zmeny.

/*
    Jednoduche priamociare riesenie ulohy A1 resp. A2
 */ 


#include <avr/io.h>
#include <util/delay.h>

                              
int main(void)
{
  /* inicializacia a nastavenie portov */
  
  DDRD = 0b11110000; // horne 4 bity Outputs, spodne 4 Inputs
  PORTD = 0x00;       // vsetko zhasni 
  
  /* nekonecna slucka */ 
  while(1)
  {
	 PORTD = 0b00000000;     // zhasni vsetko
     delay(250);             // 250 ms delay

	 PORTD = 0b00010000;     // prva palicka
     delay(250);             // 250 ms delay

     PORTD = 0b00100000;     // druha palicka
  // PORTD = 0b00110000;     // - pre ulohu A2
	 delay(250);             // 250 ms delay
 
	 PORTD = 0b01000000;     // tretia palicka
//	 PORTD = 0b01110000;     // - pre ulohu A2
	 delay(250);             // 250 ms delay
	 
     PORTD = 0b10000000;     // svtrta palicka
//	 PORTD = 0b11110000;     // - pre ulohu A2
	 delay(250);             // 250 ms delay
  }
  
  return(0);
}



Overenie

Takto jednoduchý program fungoval na prvý raz, pozrite sa na video. Časovanie nie je celkom podľa zadania, použili sme 4x rýchlejšie ako v zadaní.