Svetelný efekt s obvodom 74595: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
(8 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 4: | Riadok 4: | ||
== 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 | 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]] | ||
Riadok 22: | Riadok 22: | ||
Následne pomocou schémy zapojenia pripojíme na výstupy ledky. | Následne pomocou schémy zapojenia pripojíme na výstupy ledky. | ||
[[Súbor:schema2.png| | [[Súbor:schema2.png|800px|thumb|center|Schéma zapojenia posuvného registra.]] | ||
Riadok 40: | Riadok 40: | ||
#define dataPin PD4 // Definovanie pinu pre dátový signál | #define dataPin PD4 // Definovanie pinu pre dátový signál | ||
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 (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 | ||
} | } | ||
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 | 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 < | 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( | _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 < | 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( | _delay_ms(100); // Oneskorzenie 200 ms | ||
} | } | ||
} | } | ||
Riadok 101: | Riadok 98: | ||
return 0; // Návratová hodnota | return 0; // Návratová hodnota | ||
} | } | ||
</source></tab> | </source></tab> | ||
</tabs> | </tabs> | ||
V prílohe je udaný Zdrojový kód pre daný program | |||
Zdrojový kód | |||
Zdrojový kód: [[Médiá:74HC595OliverKramla.zip|74HC595OliverKramla.zip]] | |||
=== Overenie === | === Overenie === | ||
Podľa schémy zapojenia som zapojil posuvný register k ledkám a Arduinu a do Arduina som nahral vyššie uvedený program | |||
[[Súbor: | [[Súbor:zapojenie2.jpg|400px|thumb|center|Aplikácia.]] | ||
'''Video:''' | '''Video:''' | ||
<center><youtube> | <center><youtube>XnieDsi0NWc</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]] |
Aktuálna revízia z 13:42, 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.
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.
Následne pomocou schémy zapojenia pripojíme na výstupy ledky.
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
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.