Operácie

Svetelný efekt s obvodom 74595: Rozdiel medzi revíziami

Z SensorWiki

(12 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
 
Záverečný projekt predmetu MIPS / LS2024 - '''Meno Priezvisko'''
 
Záverečný projekt predmetu MIPS / LS2024 - '''Meno Priezvisko'''
 
+
__TOC__
  
 
== Zadanie ==
 
== Zadanie ==
  
Mojou úlohou bolo vytvoriť obvod za použitia posuvného registra 74HC595. Návrh bol vytvoriť pomocou LED diód svetelný efekt s auta KITT zo slávneho seriálu night rider.
+
Mojou úlohou bolo vytvoriť obvod za použitia posuvného registra 74HC595. Návrh bol vytvoriť pomocou LED diód svetelný efekt s auta KITT zo slávneho seriálu Knight rider.
  
[[Obrázok:74HC595.jpg|400px|thumb|center|Posuvný register 74HC595.]]
+
[[Obrázok:74HC595.jpg|400px|thumb|center|Posuvný register 74HC595]]
  
 
'''Literatúra:'''  
 
'''Literatúra:'''  
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
+
* [https://lastminuteengineers.com/74hc595-shift-register-arduino-tutorial/ Dokumentácia k posuvnému registru]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]
+
 
  
  
__TOC__
 
  
 
== Analýza  a opis riešenia ==
 
== Analýza  a opis riešenia ==
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
+
Daný register má 16 nožičiek, pričom 8 nožičiek sú výstupy a 3 sú vstupy. Pomocou schémy rozloženia pinou som daný register zapojil k vývojovej doske arduino a pripojil ledky.
  
[[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]]
+
[[Súbor:PIN.jpg|400px|thumb|center|PIN LAYOUT 74HC595]]
  
Nezabudnite doplniť schému zapojenia!
+
Následne pomocou schémy zapojenia pripojíme na výstupy ledky.
  
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
+
[[Súbor:schema2.png|800px|thumb|center|Schéma zapojenia posuvného registra.]]
  
  
Riadok 33: Riadok 32:
 
<tabs>
 
<tabs>
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
+
#include <avr/io.h>               // Pripojenie knižnice pre vstupno/výstupné operácie AVR
 +
#include <util/delay.h>          // Pripojenie knižnice pre oneskorenia
  
int main(void)
 
{
 
  unsigned int measuredValue;
 
  
  while (1)
+
#define latchPin PD5              // Definovanie pinu pre latch (úložný register)
  {
+
#define clockPin PD6              // Definovanie pinu pre hodinový signál
    /*  relax  */
+
#define dataPin PD4              // Definovanie pinu pre dátový signál
  }
 
  
   return(0);
+
#define LSBFIRST 1                // Definícia poradia bitov
 +
#define MSBFIRST 1                // Definícia poradia bitov (táto premenná sa v programe nepoužíva)
 +
 
 +
 
 +
 
 +
int bitOrder;                    // Premenná pre poradie bitov (LSBFIRST alebo MSBFIRST)
 +
int hodnota;                    // Premenná pre ukladanie hodnôt posuvného registra
 +
 
 +
void shiftOut() {                // Definícia funkcie pre posúvanie dát na posuvný register
 +
    int i;                     
 +
 
 +
    for (i = 0; i < 8; i++)  {    
 +
        if (bitOrder == LSBFIRST) {   
 +
            if (hodnota & (1 << i)) {  // Ak je i-tý bit v hodnote zapnutý
 +
                PORTD |= (1 << dataPin);  // Zapnúť dátový pin
 +
            } else {                    // Inak
 +
                PORTD &= ~(1 << dataPin); // Vypnúť dátový pin
 +
            }
 +
        } else {                     
 +
            if (hodnota & (1 << (7 - i))) {  // Ak je (7 - i)-tý bit v hodnote zapnutý
 +
                PORTD |= (1 << dataPin);      // Zapnúť dátový pin
 +
            } else {                        // Inak
 +
                PORTD &= ~(1 << dataPin);    // Vypnúť dátový pin
 +
            }
 +
        }
 +
 
 +
        // Toggle clock pin to shift data
 +
        PORTD |= (1 << clockPin);      // Nastaviť hodinový pin na vysokú úroveň
 +
        PORTD &= ~(1 << clockPin);      // Nastaviť hodinový pin na nízku úroveň
 +
    }
 +
}
 +
 
 +
void updateShiftRegister() {       
 +
    PORTD &= ~(1 << latchPin);      // Nastaviť pin latch na nízku úroveň
 +
 
 +
    // Shift out data
 +
    shiftOut(dataPin, clockPin, LSBFIRST);  // Posunúť dáta na posuvný register
 +
 
 +
    PORTD |= (1 << latchPin);         // Nastaviť pin latch na vysokú úroveň
 
}
 
}
  
</source></tab>
+
int main(void) {                 
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
+
    DDRD |= (1 << latchPin) | (1 << dataPin) | (1 << clockPin);  // Nastaviť piny ako výstupné
#include <avr/io.h>
+
 
 +
    while (1) {                     
 +
        hodnota = 0b11100000;        // Nastaviť počiatočnú hodnotu na 0b11100000 (prvé 3 LED zapnuté)
 +
        for (int i = 0; i < 8; i++) { // Cyklus pre každý bit
 +
            updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
 +
            hodnota = hodnota >> 1;  // Posunúť hodnotu o 1 bit doprava
 +
            _delay_ms(200);          // Oneskorzenie 200 ms
 +
        }
 +
        hodnota = 0b00000111;        // Nastaviť hodnotu na 0b00000111 (posledné 3 LED zapnuté)
 +
        for (int i = 0; i < 8; i++) { // Cyklus pre každý bit
 +
            updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
 +
            hodnota = hodnota << 1;   // Posunúť hodnotu o 1 bit doľava
 +
            _delay_ms(200);          // Oneskorzenie 200 ms
 +
        }
 +
    }
  
void adc_init(void);                                   // A/D converter initialization
+
    return 0;                         // Návratová hodnota
 +
}
  
unsigned int adc_read(char a_pin);
 
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
  
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
+
V prílohe je udaný Zdrojový kód pre daný program
  
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
+
Zdrojový kód: [[Médiá:74HC595OliverKramla.zip|74HC595OliverKramla.zip]]
  
  
 
=== Overenie ===
 
=== Overenie ===
  
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.
+
Podľa schémy zapojenia som zapojil posuvný register k ledkám a Arduinu a do Arduina som nahral vyššie uvedený program 
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
 
  
[[Súbor:fotka.jpg|400px|thumb|center|Aplikácia.]]
+
[[Súbor:zapojenie2.jpg|400px|thumb|center|Aplikácia.]]
  
 
'''Video:'''
 
'''Video:'''
<center><youtube>_l02MBu41n0</youtube></center>
+
<center><youtube>2TvdlUReo0o</youtube></center>
  
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.  
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.  
  
 
[[Category:AVR]] [[Category:MIPS]]
 
[[Category:AVR]] [[Category:MIPS]]

Verzia zo dňa a času 13:23, 14. máj 2024

Záverečný projekt predmetu MIPS / LS2024 - Meno Priezvisko

Zadanie

Mojou úlohou bolo vytvoriť obvod za použitia posuvného registra 74HC595. Návrh bol vytvoriť pomocou LED diód svetelný efekt s auta KITT zo slávneho seriálu Knight rider.

Posuvný register 74HC595

Literatúra:



Analýza a opis riešenia

Daný register má 16 nožičiek, pričom 8 nožičiek sú výstupy a 3 sú vstupy. Pomocou schémy rozloženia pinou som daný register zapojil k vývojovej doske arduino a pripojil ledky.

PIN LAYOUT 74HC595

Následne pomocou schémy zapojenia pripojíme na výstupy ledky.

Schéma zapojenia posuvného registra.


Algoritmus a program

Algoritmus programu je....


#include <avr/io.h>               // Pripojenie knižnice pre vstupno/výstupné operácie AVR
#include <util/delay.h>           // Pripojenie knižnice pre oneskorenia


#define latchPin PD5              // Definovanie pinu pre latch (úložný register)
#define clockPin PD6              // Definovanie pinu pre hodinový signál
#define dataPin PD4               // Definovanie pinu pre dátový signál

#define LSBFIRST 1                // Definícia poradia bitov
#define MSBFIRST 1                // Definícia poradia bitov (táto premenná sa v programe nepoužíva)



int bitOrder;                    // Premenná pre poradie bitov (LSBFIRST alebo MSBFIRST)
int hodnota;                     // Premenná pre ukladanie hodnôt posuvného registra

void shiftOut() {                // Definícia funkcie pre posúvanie dát na posuvný register
    int i;                       

    for (i = 0; i < 8; i++)  {   
        if (bitOrder == LSBFIRST) {    
            if (hodnota & (1 << i)) {  // Ak je i-tý bit v hodnote zapnutý
                PORTD |= (1 << dataPin);  // Zapnúť dátový pin
            } else {                     // Inak
                PORTD &= ~(1 << dataPin); // Vypnúť dátový pin
            }
        } else {                       
            if (hodnota & (1 << (7 - i))) {  // Ak je (7 - i)-tý bit v hodnote zapnutý
                PORTD |= (1 << dataPin);      // Zapnúť dátový pin
            } else {                         // Inak
                PORTD &= ~(1 << dataPin);     // Vypnúť dátový pin
            }
        }

        // Toggle clock pin to shift data
        PORTD |= (1 << clockPin);       // Nastaviť hodinový pin na vysokú úroveň
        PORTD &= ~(1 << clockPin);      // Nastaviť hodinový pin na nízku úroveň
    }
}

void updateShiftRegister() {         
    PORTD &= ~(1 << latchPin);       // Nastaviť pin latch na nízku úroveň

    // Shift out data
    shiftOut(dataPin, clockPin, LSBFIRST);  // Posunúť dáta na posuvný register

    PORTD |= (1 << latchPin);         // Nastaviť pin latch na vysokú úroveň
}

int main(void) {                   
    DDRD |= (1 << latchPin) | (1 << dataPin) | (1 << clockPin);  // Nastaviť piny ako výstupné

    while (1) {                       
        hodnota = 0b11100000;         // Nastaviť počiatočnú hodnotu na 0b11100000 (prvé 3 LED zapnuté)
        for (int i = 0; i < 8; i++) { // Cyklus pre každý bit
            updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
            hodnota = hodnota >> 1;   // Posunúť hodnotu o 1 bit doprava
            _delay_ms(200);           // Oneskorzenie 200 ms
        }
        hodnota = 0b00000111;         // Nastaviť hodnotu na 0b00000111 (posledné 3 LED zapnuté)
        for (int i = 0; i < 8; i++) { // Cyklus pre každý bit
            updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
            hodnota = hodnota << 1;   // Posunúť hodnotu o 1 bit doľava
            _delay_ms(200);           // Oneskorzenie 200 ms
        }
    }

    return 0;                         // Návratová hodnota
}

V prílohe je udaný Zdrojový kód pre daný program

Zdrojový kód: 74HC595OliverKramla.zip


Overenie

Podľa schémy zapojenia som zapojil posuvný register k ledkám a Arduinu a do Arduina som nahral vyššie uvedený program

Aplikácia.

Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.