Operácie

Tester obvodu 7493: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
Riadok 184: Riadok 184:




Zdrojový kód: [[Médiá:Semestralny_projekt_Gabriel_Nagy.zip|Semestralny_projekt_Gabriel_Nagy.zip]]
Zdrojový kód: [[Médiá:Semestralny_projekt_Gabriel_Nagy1.zip|Semestralny_projekt_Gabriel_Nagy.zip]]


=== Overenie ===
=== Overenie ===

Verzia z 11:56, 21. 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), na konci musí vypísať či je obvod OK alebo sa nastala chyba ERROR. 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:

Zapojenie a riešenie

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 pin PD4, čo je v kóde napísaný reset aby počítalo do 16 príznakov teda od 0 do 15.

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. Po prjdení všetkýk 16 príznakov program vyíše stav obvodu 7493, vypíše OK keď počítadlo prešlo cez všetkých 16 príznakov bez problém alebo vypíše ERROR keď sa nastane chyba.

Ú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 QA,QB,QC,QD sa niekedy označuje ako Q0,Q1,Q2,Q3.
LED dióda.
Tabulka hodnôt 7493 L je 0, H je 1.


Obvod 7493 bol zapojený pomocou na breadboardu. Najprv bol pripojený pin Clk A k pine na arduine PD7.Na PD4 boly napojené resety (MR1 a MR2). Potom 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.


Program

Program sa skladá z jednej časti main.c. Ako prvé boli zadefinované použité knižnice, aby sa dalo ďalej pracovať s kódom v hlavnej časti. Boli zadefinované potrebné veci k prenosu cez sériový kanál. Výstupný signál bol zadefinovaný na PD7.Reset bol zadefinovaný na PD4. Ďalej v hlavnej časti kódu bol 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. Do kódu bola napísaná referenčná hodnota, s čím v if podmienke je prirovnaná hodnota počítadla. Ak prirovnané hodnoty sa zhodojú a počítadlo presiahne posledný príznak tak vypíše cez sériový kanálo OK, ak nezhodujú tak vypíše ERROR.


#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 INPUT_A PD7   // INPUT_A
#define Reset PD4    //Reset

#define INPUT_A_ON  (PORTD |= (1<<INPUT_A))
#define INPUT_A_OFF (PORTD &= ~(1<<INPUT_A))
#define Reset_on	(PORTD |= (1<<Reset))    
#define Reset_off	(PORTD &= ~(1<<Reset))


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<<INPUT_A)|(1<<Reset);        // PORTD: INPUT_A na PD7  je output
 
 
    unsigned char duty = 250;
	int time;
	uint8_t fin=0;
	
	INPUT_A_OFF;
	Reset_on;
	_delay_us(1500);
	Reset_off;
    _delay_us(1500);
	
      // Main loop 
    
	while(1)
    {             	   
     // nase vlastne pocitadlo pocita stale dokola, rychlost dana delay

	   // cítanie pinov PB0-PB3
        uint8_t input_pins = PINB & 0x0F;


        // Ked input pin je low tak aktualizuje pocitadlo
           count = input_pins;				



        printf("Counter value: %d\n", count);
		
		if(fin != count)
		{
			printf("ERROR\n");
		}
		else if(fin == count && fin == 15)
		{
			printf("OK\n");
		}
		
		INPUT_A_ON;
		fin++;
		fin &= 15;
		
       for (time=0;time<255;time++)
	   {
 	     if (time > duty)	
		   {
			      INPUT_A_ON;
		   }
		 else 
		   {
				 INPUT_A_OFF;
		   }			 	        
		   	
	     _delay_us(1500);
	   }
	
        _delay_ms(1000);

	}  /* koniec while */

	return(0); 
}


Zdrojový kód: Semestralny_projekt_Gabriel_Nagy.zip

Overenie

Overenenie funkčnosti je na videum Aby tester fungovalo treba ho zapojiť do USB portu počítača, Ledky sa začnú rozsvecovať a zhasnúť podla toho či je na tom 0 alebo 1. Na počítači treba zapnúť Putty aby vypisovalo hodnotu počítadla.

zapojenie.

Video: