Operácie

Klávesnica s radičom MH1KK1 -: Rozdiel medzi revíziami

Z SensorWiki

(Vytvorená stránka „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áv…“)
 
(Overenie)
 
(20 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 Arduino Uno R3.
+
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.]]
 +
 
  
[[Súbor:600px-OBRArduino]]
 
  
 
'''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]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]
+
 
  
  
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>
#include <avr/interrupt.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; // PD0-PD3 ako výstupné (riadky), PD4-PD7 ako vstupné (stĺpce)
+
     DDRD = 0x0F;  
     PORTD = 0xF0; // Povolenie pull-up rezistorov na vstupných pinoch
+
     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)))) { // Skontrolovanie, či je stĺpec LOW
+
             if (!(PIND & (1 << (col + 4)))) {
                 while (!(PIND & (1 << (col + 4)))); // Počkaj, kým kláves nie je uvoľnený
+
                 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 baud) {
+
void uart_init(unsigned int ubrr) {
    unsigned int ubrr = F_CPU / 16 / baud - 1;
 
 
     UBRR0H = (unsigned char)(ubrr >> 8);
 
     UBRR0H = (unsigned char)(ubrr >> 8);
 
     UBRR0L = (unsigned char)ubrr;
 
     UBRR0L = (unsigned char)ubrr;
     UCSR0B = (1 << TXEN0) | (1 << RXEN0); // Povoliť vysielač a prijímač
+
     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;
}
 
 
// Funkcia na prijímanie znaku cez UART
 
char uart_receive() {
 
    while (!(UCSR0A & (1 << RXC0)));
 
    return UDR0;
 
 
}
 
}
  
 
int main(void) {
 
int main(void) {
     uart_init(9600); // Inicializácia UART s baud rate 9600
+
     uart_init(MYUBRR); // Inicializácia UART
 
     keypad_init(); // Inicializácia klávesnice
 
     keypad_init(); // Inicializácia klávesnice
    sei(); // Povolenie globálnych prerušení
 
  
 
     while (1) {
 
     while (1) {
Riadok 102: Riadok 103:
  
 
     return 0;
 
     return 0;
 +
}
 
}
 
}
  
Riadok 107: Riadok 109:
 
</tabs>
 
</tabs>
  
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
+
[[Médiá:bobocky.avr.zip]]
  
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
+
=== Overenie ===
  
=== 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.
 
  
[[Súbor:fotka.jpg|400px|thumb|center|Aplikácia.]]
+
[[Súbor:arduinofotka.jpg|400px|thumb|center|Zapojenie.]]
  
 
'''Video:'''
 
'''Video:'''
<center><youtube>_l02MBu41n0</youtube></center>
+
<center><youtube>rdzedow_ek0</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 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.

Vývojová doska ACROB.


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.

Radič MH1KK1 spojený s klávesnicou 4x4.
Schéma radiča MH1KK1.


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;
}
}

Médiá:bobocky.avr.zip

Overenie

Zapojenie.

Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.