Svetelný efekt s obvodom 74595
Zo stránky SensorWiki
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 Night 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
#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
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.