Operácie

MIPS Template: Rozdiel medzi revíziami

Z SensorWiki

(2 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.)
Riadok 17: Riadok 17:
 
== Analýza  a opis riešenia ==
 
== Analýza  a opis riešenia ==
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
 
 
[[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]]
 
 
Nezabudnite doplniť schému zapojenia!
 
 
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
 
  
  
Riadok 34: Riadok 27:
 
<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>
 +
#include <util/delay.h>
 +
#include <avr/interrupt.h>
 +
 +
// 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; // PD0-PD3 ako výstupné (riadky), PD4-PD7 ako vstupné (stĺpce)
 +
    PORTD = 0xF0; // Povolenie pull-up rezistorov na vstupných pinoch
 +
}
 +
 +
// 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)))) { // Skontrolovanie, či je stĺpec LOW
 +
                while (!(PIND & (1 << (col + 4)))); // Počkaj, kým kláves nie je uvoľnený
 +
                return keys[row][col]; // Vrátenie stlačeného klávesu
 +
            }
 +
        }
 +
    }
  
int main(void)
+
    return '\0'; // Vrátiť NULL, ak žiadny kláves nie je stlačený
{
+
}
  unsigned int measuredValue;
 
  
  while (1)
+
// Funkcia na inicializáciu UART
  {
+
void uart_init(unsigned int baud) {
     /*  relax  */
+
    unsigned int ubrr = F_CPU / 16 / baud - 1;
  }
+
    UBRR0H = (unsigned char)(ubrr >> 8);
 +
    UBRR0L = (unsigned char)ubrr;
 +
    UCSR0B = (1 << TXEN0) | (1 << RXEN0); // Povoliť vysielač a prijímač
 +
     UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia
 +
}
  
  return(0);
+
// Funkcia na odoslanie znaku cez UART
 +
void uart_send(char data) {
 +
    while (!(UCSR0A & (1 << UDRE0)));
 +
    UDR0 = data;
 
}
 
}
  
</source></tab>
+
// Funkcia na prijímanie znaku cez UART
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
+
char uart_receive() {
#include <avr/io.h>
+
    while (!(UCSR0A & (1 << RXC0)));
 +
    return UDR0;
 +
}
 +
 
 +
int main(void) {
 +
    uart_init(9600); // Inicializácia UART s baud rate 9600
 +
    keypad_init(); // Inicializácia klávesnice
 +
    sei(); // Povolenie globálnych prerušení
 +
 
 +
    while (1) {
 +
        char key = keypad_get_key(); // Získanie stlačeného klávesu
  
void adc_init(void);                                   // A/D converter initialization
+
        if (key) {
 +
            uart_send(key); // Odoslanie stlačeného klávesu cez UART
 +
        }
 +
    }
 +
 
 +
    return 0;
 +
}
  
unsigned int adc_read(char a_pin);
 
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
Riadok 60: Riadok 110:
  
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
  
 
=== Overenie ===
 
=== Overenie ===

Verzia zo dňa a času 22:56, 11. 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 Arduino Uno R3.

Súbor:600px-OBRArduino

Literatúra:


Analýza a opis riešenia

Algoritmus a program

Algoritmus programu je....


#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

// 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; // PD0-PD3 ako výstupné (riadky), PD4-PD7 ako vstupné (stĺpce)
    PORTD = 0xF0; // Povolenie pull-up rezistorov na vstupných pinoch
}

// 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)))) { // Skontrolovanie, či je stĺpec LOW
                while (!(PIND & (1 << (col + 4)))); // Počkaj, kým kláves nie je uvoľnený
                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 baud) {
    unsigned int ubrr = F_CPU / 16 / baud - 1;
    UBRR0H = (unsigned char)(ubrr >> 8);
    UBRR0L = (unsigned char)ubrr;
    UCSR0B = (1 << TXEN0) | (1 << RXEN0); // Povoliť vysielač a prijímač
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8-bitová komunikácia
}

// Funkcia na odoslanie znaku cez UART
void uart_send(char data) {
    while (!(UCSR0A & (1 << UDRE0)));
    UDR0 = data;
}

// Funkcia na prijímanie znaku cez UART
char uart_receive() {
    while (!(UCSR0A & (1 << RXC0)));
    return UDR0;
}

int main(void) {
    uart_init(9600); // Inicializácia UART s baud rate 9600
    keypad_init(); // Inicializácia klávesnice
    sei(); // Povolenie globálnych prerušení

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

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.

Aplikácia.

Video:

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