Svetelný efekt s obvodom 74595: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 32: | 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 | |||
#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 | |||
} | |||
</source></tab> | </source></tab> | ||
</tabs> | </tabs> |
Verzia z 12:33, 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 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.
Nezabudnite doplniť schému zapojenia!
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
}
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:
Zdrojový kód: zdrojaky.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.