Klávesnica s radičom MH1KK1 -: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
(13 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 4: | Riadok 4: | ||
== Zadanie - Klávesnica 4x4 s radičom MH1KK1 == | == Zadanie - Klávesnica 4x4 s radičom MH1KK1 == | ||
Cieľom tohto zadania je pripojiť klávesnicu 4x4 s radičom MH1KK1 k | Cieľom tohto zadania je pripojiť klávesnicu 4x4 s radičom MH1KK1 k doske ACROB. S touto klávesnicou budeme vypisovať stlačené znaky na obrazovku. | ||
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]] | |||
'''Literatúra:''' | '''Literatúra:''' | ||
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] | * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] | ||
Riadok 16: | Riadok 18: | ||
== Analýza a opis riešenia == | == Analýza a opis riešenia == | ||
Každý pin klávesnice som pripojil na samostatné piny dosky PD3 až PD6+ 2 Vcc(5V) + GND pin. Ku klávesnici nebola dostupná žiadna dokumentácia, takže pre priradenie pinov k tlačítku som musel použiť multimeter. | |||
[[Súbor:radicMH1KK1.jpg|400px|thumb|center|Radič MH1KK1 spojený s klávesnicou 4x4.]] | |||
[[Súbor:schemamh1.png|400px|thumb|center|Schéma radiča MH1KK1.]] | |||
Riadok 28: | Riadok 34: | ||
#include <avr/io.h> | #include <avr/io.h> | ||
#include <util/delay.h> | #include <util/delay.h> | ||
# | |||
#define F_CPU 16000000UL // 16 MHz | |||
#define BAUD 9600 | |||
#define MYUBRR F_CPU/16/BAUD-1 | |||
// Definícia riadkov a stĺpcov | // Definícia riadkov a stĺpcov | ||
Riadok 45: | Riadok 54: | ||
void keypad_init() { | void keypad_init() { | ||
// Nastavenie riadkov ako výstupné a stĺpcov ako vstupné | // Nastavenie riadkov ako výstupné a stĺpcov ako vstupné | ||
DDRD = 0x0F; | DDRD = 0x0F; | ||
PORTD = 0xF0; | PORTD = 0xF0; | ||
} | } | ||
Riadok 57: | Riadok 66: | ||
for (int col = 0; col < COLS; col++) { | for (int col = 0; col < COLS; col++) { | ||
if (!(PIND & (1 << (col + 4)))) { | if (!(PIND & (1 << (col + 4)))) { | ||
while (!(PIND & (1 << (col + 4)))); | while (!(PIND & (1 << (col + 4)))); | ||
return keys[row][col]; // Vrátenie stlačeného klávesu | return keys[row][col]; // Vrátenie stlačeného klávesu | ||
} | } | ||
Riadok 68: | Riadok 77: | ||
// Funkcia na inicializáciu UART | // Funkcia na inicializáciu UART | ||
void uart_init(unsigned int | void uart_init(unsigned int ubrr) { | ||
UBRR0H = (unsigned char)(ubrr >> 8); | UBRR0H = (unsigned char)(ubrr >> 8); | ||
UBRR0L = (unsigned char)ubrr; | UBRR0L = (unsigned char)ubrr; | ||
UCSR0B = (1 << TXEN0 | UCSR0B = (1 << TXEN0); // Povoliť vysielač | ||
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia | UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia | ||
} | } | ||
Riadok 78: | Riadok 86: | ||
// Funkcia na odoslanie znaku cez UART | // Funkcia na odoslanie znaku cez UART | ||
void uart_send(char data) { | void uart_send(char data) { | ||
while (!(UCSR0A & (1 << UDRE0))); | while (!(UCSR0A & (1 << UDRE0))); // Čakať, kým je vysielací buffer prázdny | ||
UDR0 = data; | UDR0 = data; | ||
} | } | ||
int main(void) { | int main(void) { | ||
uart_init( | uart_init(MYUBRR); // Inicializácia UART | ||
keypad_init(); // Inicializácia klávesnice | keypad_init(); // Inicializácia klávesnice | ||
while (1) { | while (1) { | ||
Riadok 102: | Riadok 103: | ||
return 0; | return 0; | ||
} | |||
} | } | ||
Riadok 107: | Riadok 109: | ||
</tabs> | </tabs> | ||
[[Médiá:bobocky.avr.zip]] | |||
=== Overenie === | === Overenie === | ||
Riadok 115: | Riadok 115: | ||
[[Súbor:arduinofotka.jpg|400px|thumb|center| | [[Súbor:arduinofotka.jpg|400px|thumb|center|Zapojenie.]] | ||
'''Video:''' | '''Video:''' |
Aktuálna revízia z 21:01, 27. jún 2024
Záverečný projekt predmetu MIPS / LS2024 - Daniel Samuel Bobocký
Zadanie - Klávesnica 4x4 s radičom MH1KK1
Cieľom tohto zadania je pripojiť klávesnicu 4x4 s radičom MH1KK1 k doske ACROB. S touto klávesnicou budeme vypisovať stlačené znaky na obrazovku.
Literatúra:
Analýza a opis riešenia
Každý pin klávesnice som pripojil na samostatné piny dosky PD3 až PD6+ 2 Vcc(5V) + GND pin. Ku klávesnici nebola dostupná žiadna dokumentácia, takže pre priradenie pinov k tlačítku som musel použiť multimeter.
Algoritmus a program
Algoritmus programu je....
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 16000000UL // 16 MHz
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
// Definícia riadkov a stĺpcov
#define ROWS 4
#define COLS 4
// Mapovanie kláves na 4x4 klávesnici
char keys[ROWS][COLS] = {
{'7', '8', '9', 'V'},
{'4', '5', '6', 'P'},
{'1', '2', '3', 'S'},
{'N', '0', '<', '+'}
};
// Funkcia na inicializáciu klávesnice
void keypad_init() {
// Nastavenie riadkov ako výstupné a stĺpcov ako vstupné
DDRD = 0x0F;
PORTD = 0xF0;
}
// Funkcia na získanie stlačeného klávesu
char keypad_get_key() {
for (int row = 0; row < ROWS; row++) {
PORTD = ~(1 << row); // Nastavenie aktuálneho riadku na LOW
_delay_ms(1); // Krátke oneskorenie
for (int col = 0; col < COLS; col++) {
if (!(PIND & (1 << (col + 4)))) {
while (!(PIND & (1 << (col + 4))));
return keys[row][col]; // Vrátenie stlačeného klávesu
}
}
}
return '\0'; // Vrátiť NULL, ak žiadny kláves nie je stlačený
}
// Funkcia na inicializáciu UART
void uart_init(unsigned int ubrr) {
UBRR0H = (unsigned char)(ubrr >> 8);
UBRR0L = (unsigned char)ubrr;
UCSR0B = (1 << TXEN0); // Povoliť vysielač
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia
}
// Funkcia na odoslanie znaku cez UART
void uart_send(char data) {
while (!(UCSR0A & (1 << UDRE0))); // Čakať, kým je vysielací buffer prázdny
UDR0 = data;
}
int main(void) {
uart_init(MYUBRR); // Inicializácia UART
keypad_init(); // Inicializácia klávesnice
while (1) {
char key = keypad_get_key(); // Získanie stlačeného klávesu
if (key) {
uart_send(key); // Odoslanie stlačeného klávesu cez UART
}
}
return 0;
}
}
Overenie
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.