Operácie

Tester obvodu 7493: Rozdiel medzi revíziami

Z SensorWiki

(Analýza a opis riešenia)
(Overenie)
Riadok 161: Riadok 161:
 
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.  
 
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.  
  
[[Súbor:MIPS_7493_Nagy.jpg|400px|thumb|center|Aplikácia.]]
+
[[Súbor:MIPS_7493_Nagy.jpg|400px|thumb|center|zapojenie.]]
  
 
'''Video:'''
 
'''Video:'''

Verzia zo dňa a času 10:41, 18. máj 2024

Záverečný projekt predmetu MIPS / LS2024 - Gabriel Nagy


Zadanie

Úlohou je zapojiť a testovať funkčnosť integrovaného obvodu 7493, je to 4 bitové počítadlo. Hodnoty počítadla musia byť odosielané cez UART a vypísané cez sériový kanál (Putty, Serial port). Binárné hodnoty počítadla 7493 musia byť znázornené (vyblikané) pomocu ledky.

Vývojová doska Aruino UNO.
Vývojová doska Aruino UNO.

Literatúra:

Analýza a opis riešenia

Tento obvod na overenie funkčnosti 4-bitového počítadla sa skladá z častí: mikrokontrolér (vývojová doska Arduino UNO R3),z rezistorov s odporom 330 ohmov, z LED diód a z integrovaného obvodu 7493.

Princíp fungovania je pomerne jednoduché, Na pin obvodu 7493 je privedený obdĺžníkový signál z pinu arduina PD7 (D7). Integrovaný obvod 7493 má za účel počítať impulzy odaoslané z arduina. Funguje tak že sníma či je signál rastúci alebo klesajúci (rising edge, falling edge).

Napojené LED diódy slúžia na znázornenie bitov. Jedna ledka reprezentuje jeden bit, ktorá ledka zo štyroch práve svietí reprezenuje bit s hodnotou 1 a ktorá nesvietí reprezentuje bit s hodnotou 0. Podstate je to binárna sústava a podla pravdivostnej tabulky 4 bitového počítadal dá sa prepočítať do decimálnej sústavy. Na počítadle piny MR1 a MR2 (niekedy sa označuje ako Ro1 a Ro2) sú reset. Dá sa snimi určiť do akej hodnoty má počítadlo počítať. V tomoto prípade sú zapojené na piny na počítadle MR1 na QB a MR2 na QD, stým je nastavený počítadlo aby počítalo 10 znakov teda od 0 do 9.

LED diódy sú napojené na piny QA (1.bit), QB (2.bit), QC (3.bit), QD (4.bit). Na tieto piny sú napojené aj vedenia naspäť do arduina. Kód nahratý do arduina impulzy z týchto pinov spočíta, prevedie ich do desiatkovej sústavy a vypíše ich cez sériový kanál (Putty, Serial port...). Hodnotu vypíše vo forme: Counter value: value.

Úloho tohto obvodu je overiť funkčnosť integrovaného obvodu 7493. V prípde keby ledky neblikali a keby cez seriálný kanál nevedel vypísať hodnoty, takto sa dá zistiť že je obvod 7493 nefunkčný. Reálné využitie má iba pre testovanie tohto obvodu.

Integrovaný obvod 7493.
LED dióda.

Obvod 7493 bol zapojený pomocou na breadboardu. Najprv bol pripojený pin Clk A k pine na arduine PD7. Po tom boli pripojené vedenia napájania +5V a uzemnenie GND z arduina k 7493. Boli použité piny PB0, PB1, PB2, PB3 pre vstup signálov do arduina. Ako posledné boli zapojené LED diódy K pinom na integrovanom obvode QA, QB, QC, QD a k uzemneniu. Pre ochranu LED diód boli použié 330 ohmove odpory. Piny NC na 7493 nie sú pripojené lebo (NC-not connectd) netreba ich pripojiť.

Schéma zapojenia integrovaného obvodu 7493.


Algoritmus a program

Program sa skladá z jednej časti main.c. Ako prvé boli zadefinované použité knižnice, aby sa dol ďalej precovať s kódom v hlavnej časti. Boli zadefinované potrebné veci k prenosu cez sériový kanál. Výstipný signál bol zadefinovaný na PD7. Ďalej v hlavnej časti kódu bolo inicalizovný UART. V časti programu main() boli zadefinované vstupy na prijatie signálu, inicalizovanie UART a prerušenia. V časti while(1) bol napísaný kód pre generovanie signálu, príkaz pr čítanie vstupných pinov a počítadlo ktoré počíta vstupné piny. Na koniec stále vo while(1) sa nachádza príkaz na výpis hodnozy cez sériový kanál.


#define F_CPU 16000000UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1

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

/* Pripojenie periferii k vyvojovej doske Arduino: */

#define LED PD7   // externa LED dioda 

#define LED_ON  (PORTD |= (1<<LED))
#define LED_OFF (PORTD &= ~(1<<LED))



volatile uint8_t count = 0;


// Inicializacia UART
void USART_Init(unsigned int ubrr) {
    UBRR0H = (unsigned char)(ubrr >> 8);
    UBRR0L = (unsigned char)ubrr;
    UCSR0B = (1 << TXEN0); 
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); 
}

// Prenos cez uart UART
void USART_Transmit(unsigned char data) {
    while (!(UCSR0A & (1 << UDRE0))); 
    UDR0 = data; 
}

int USART_putchar_printf(char var, FILE *stream) {
    if (var == '\n') USART_Transmit('\r');
    USART_Transmit(var);
    return 0;
}

FILE mystdout = FDEV_SETUP_STREAM(USART_putchar_printf, NULL, _FDEV_SETUP_WRITE);

int main(void)
{
  /*  SETUP   */ 
  
   // Nastavenie PB0-PB3 ako vstup
    DDRB &= 0xF0;

    // Inicializacia UART
    USART_Init(MYUBRR);
    stdout = &mystdout; 

    // Globalne prerusenia
    sei();
  
  	DDRD = (1<<LED);       // PORTD: LED na PD7  je output
   
  /*   LOOP   */ 
 
    unsigned char duty = 250;
	
      // Main loop 
    while(1)
    {             	   
     // nase vlastne pocitadlo pocita stale dokola, rychlost dana delay

       for (int time=0;time<255;time++)
	   {
 	     if (time > duty)	
		   LED_ON;
	     else 
	       LED_OFF;	
	     _delay_us(1500);
	   }
	   
	   
	   // Čítanie pinov PB0-PB3
        uint8_t input_pins = PINB & 0x0F;

        // Ked input pin je low tak aktualizuje pocitadlo
        if (input_pins != 0x0F) {
            count = input_pins;
        }

        printf("Counter value: %d\n", count);

        _delay_ms(1000);
	   
	   
	}  /* koniec while */

	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.

zapojenie.

Video:

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