Operácie

Tester obvodu 7493: Rozdiel medzi revíziami

Z SensorWiki

(Algoritmus a program)
(Program)
 
(54 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 5: Riadok 5:
  
 
Úlohou je zapojiť a testovať funkčnosť integrovaného obvodu 7493, je to 4 bitové počítadlo.
 
Ú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).
+
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.  
 
Binárné hodnoty počítadla 7493 musia byť znázornené (vyblikané) pomocu ledky.  
  
 
[[Obrázok:A000066-arduino-uno-rev3-new-pinout.jpg|400px|thumb|center|Vývojová doska Aruino UNO.]]
 
[[Obrázok:A000066-arduino-uno-rev3-new-pinout.jpg|400px|thumb|center|Vývojová doska Aruino UNO.]]
 +
[[Obrázok:R3 pindiagram.png|600px|thumb|center|Vývojová doska Aruino UNO.]]
  
 
'''Literatúra:'''  
 
'''Literatúra:'''  
Riadok 17: Riadok 18:
 
__TOC__
 
__TOC__
  
== Analýza  a opis riešenia ==
+
== Zapojenie a riešenie ==
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
+
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.
  
[[Súbor:7493.jpg|400px|thumb|center|Integrovaný obvod 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).
  
Nezabudnite doplniť schému zapojenia!
+
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.
  
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
+
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 prejdení 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.
  
=== Algoritmus a program ===
+
[[Súbor:7493.jpg|400px|thumb|center|Integrovaný obvod 7493  QA,QB,QC,QD sa niekedy označuje ako Q0,Q1,Q2,Q3.]]
 +
[[Súbor:LEDka_cervena.png|400px|thumb|center|LED dióda.]]
 +
[[Súbor:Pravdivostná tabulka 7493.png|400px|thumb|center|Tabulka hodnôt 7493 L je 0, H je 1.]]
  
Algoritmus programu je....
+
 
 +
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ť.
 +
 
 +
[[Súbor:Schéma zapojenia 7493 s resetom.png|800px|thumb|center|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 fin, 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.  
  
  
 
<tabs>
 
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
+
<tab name="main.c"><source lang="c++" style="background: LightYellow;">
  
 
#define F_CPU 16000000UL
 
#define F_CPU 16000000UL
Riadok 47: Riadok 68:
 
/* Pripojenie periferii k vyvojovej doske Arduino: */
 
/* Pripojenie periferii k vyvojovej doske Arduino: */
  
#define LED PD7  // externa LED dioda
+
#define INPUT_A PD7  // INPUT_A
 
+
#define Reset PD4    //Reset
#define LED_ON  (PORTD |= (1<<LED))
 
#define LED_OFF (PORTD &= ~(1<<LED))
 
  
 +
#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))
  
  
Riadok 78: Riadok 101:
  
 
FILE mystdout = FDEV_SETUP_STREAM(USART_putchar_printf, NULL, _FDEV_SETUP_WRITE);
 
FILE mystdout = FDEV_SETUP_STREAM(USART_putchar_printf, NULL, _FDEV_SETUP_WRITE);
 +
  
 
int main(void)
 
int main(void)
Riadok 93: Riadok 117:
 
     sei();
 
     sei();
 
    
 
    
   DDRD = (1<<LED);       // PORTD: LED na PD7  je output
+
   DDRD = (1<<INPUT_A)|(1<<Reset);       // PORTD: INPUT_A na PD7  je output
 
+
  /*  LOOP  */
 
 
   
 
   
 
     unsigned char duty = 250;
 
     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  
 
       // Main loop  
     while(1)
+
      
 +
while(1)
 
     {               
 
     {               
 
     // nase vlastne pocitadlo pocita stale dokola, rychlost dana delay
 
     // nase vlastne pocitadlo pocita stale dokola, rychlost dana delay
  
      for (int time=0;time<255;time++)
+
  // cítanie pinov PB0-PB3
  {
 
    if (time > duty)
 
  LED_ON;
 
    else
 
      LED_OFF;
 
    _delay_us(1500);
 
  }
 
 
 
 
 
  // Čítanie pinov PB0-PB3
 
 
         uint8_t input_pins = PINB & 0x0F;
 
         uint8_t input_pins = PINB & 0x0F;
 +
  
 
         // Ked input pin je low tak aktualizuje pocitadlo
 
         // Ked input pin je low tak aktualizuje pocitadlo
        if (input_pins != 0x0F) {
+
          count = input_pins;
            count = input_pins;
+
 
        }
+
 
  
 
         printf("Counter value: %d\n", count);
 
         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);
  
        _delay_ms(1000);
 
 
 
 
 
 
}  /* koniec while */
 
}  /* koniec while */
  
 
return(0);  
 
return(0);  
 
}
 
}
 
</source></tab>
 
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
 
 
void adc_init(void);                                  // A/D converter initialization
 
 
unsigned int adc_read(char a_pin);
 
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
  
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: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
+
Zdrojový kód: [[Médiá:Semestralny_projekt_Gabriel_Nagy1.zip|Semestralny_projekt_Gabriel_Nagy.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.  
+
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.
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.  
+
Vo videi čo sa nachádza pod obrázkom je vidno overenie funkčnosti. Od 37 sekundy videa je demonštrovaný čo sa stane keď nastane chyba, takým spôsobom, že jeden z input pinov
 
+
bol odpojený a už referenčná hodnota sa nezhodovala s hodnotou počítadla tak vypísalo ERROR.
[[Súbor:MIPS_7493_Nagy.jpg|400px|thumb|center|Aplikácia.]]
+
[[Súbor:7493ver2.jpg|400px|thumb|center|zapojenie.]]
  
 
'''Video:'''
 
'''Video:'''
<center><youtube>_l02MBu41n0</youtube></center>
+
<center><youtube>WdMDVqfRepE</youtube></center>
  
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 13:25, 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 prejdení 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 fin, 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. Vo videi čo sa nachádza pod obrázkom je vidno overenie funkčnosti. Od 37 sekundy videa je demonštrovaný čo sa stane keď nastane chyba, takým spôsobom, že jeden z input pinov bol odpojený a už referenčná hodnota sa nezhodovala s hodnotou počítadla tak vypísalo ERROR.

zapojenie.

Video: