Operácie

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

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
StudentMIPS (diskusia | príspevky)
Riadok 40: Riadok 40:
#define dataPin PD4              // Definovanie pinu pre dátový 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
int hodnota;                    // Premenná pre ukladanie hodnôt posuvného registra


Riadok 52: Riadok 49:


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


         // Toggle clock pin to shift data
         // Toggle clock pin to shift data
Riadok 76: Riadok 73:


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


     PORTD |= (1 << latchPin);        // Nastaviť pin latch na vysokú úroveň
     PORTD |= (1 << latchPin);        // Nastaviť pin latch na vysokú úroveň
Riadok 86: Riadok 83:
     while (1) {                       
     while (1) {                       
         hodnota = 0b11100000;        // Nastaviť počiatočnú hodnotu na 0b11100000 (prvé 3 LED zapnuté)
         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
         for (int i = 0; i < 6; i++) { // Cyklus pre každý bit
             updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
             updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
             hodnota = hodnota >> 1;  // Posunúť hodnotu o 1 bit doprava
             hodnota = hodnota >> 1;  // Posunúť hodnotu o 1 bit doprava
             _delay_ms(200);          // Oneskorzenie 200 ms
             _delay_ms(100);          // Oneskorzenie 200 ms
         }
         }
         hodnota = 0b00000111;        // Nastaviť hodnotu na 0b00000111 (posledné 3 LED zapnuté)
         hodnota = 0b00000111;        // Nastaviť hodnotu na 0b00000111 (posledné 3 LED zapnuté)
         for (int i = 0; i < 8; i++) { // Cyklus pre každý bit
         for (int i = 0; i < 6; i++) { // Cyklus pre každý bit
             updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
             updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
             hodnota = hodnota << 1;  // Posunúť hodnotu o 1 bit doľava
             hodnota = hodnota << 1;  // Posunúť hodnotu o 1 bit doľava
             _delay_ms(200);          // Oneskorzenie 200 ms
             _delay_ms(100);          // Oneskorzenie 200 ms
         }
         }
     }
     }
Riadok 101: Riadok 98:
     return 0;                        // Návratová hodnota
     return 0;                        // Návratová hodnota
}
}


</source></tab>
</source></tab>
Riadok 108: Riadok 106:


Zdrojový kód: [[Médiá:74HC595OliverKramla.zip|74HC595OliverKramla.zip]]
Zdrojový kód: [[Médiá:74HC595OliverKramla.zip|74HC595OliverKramla.zip]]


=== Overenie ===
=== Overenie ===

Verzia z 13:39, 16. 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




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 (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
            }
                               
            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);  // 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 < 6; i++) { // Cyklus pre každý bit
            updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
            hodnota = hodnota >> 1;   // Posunúť hodnotu o 1 bit doprava
            _delay_ms(100);           // Oneskorzenie 200 ms
        }
        hodnota = 0b00000111;         // Nastaviť hodnotu na 0b00000111 (posledné 3 LED zapnuté)
        for (int i = 0; i < 6; i++) { // Cyklus pre každý bit
            updateShiftRegister();    // Aktualizovať hodnoty na posuvnom registri
            hodnota = hodnota << 1;   // Posunúť hodnotu o 1 bit doľava
            _delay_ms(100);           // 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.