Tester obvodu 7493: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
(67 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: | [[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__ | ||
== | == 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. | |||
[[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.]] | |||
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=" | <tab name="main.c"><source lang="c++" style="background: LightYellow;"> | ||
#define F_CPU 16000000UL | |||
#define BAUD 9600 | |||
#define MYUBRR F_CPU/16/BAUD-1 | |||
#include <avr/io.h> | #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) | int main(void) | ||
{ | { | ||
unsigned int | /* 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); | |||
} | |||
</source></tab> | </source></tab> | ||
</tabs> | </tabs> | ||
Zdrojový kód: [[Médiá:Semestralny_projekt_Gabriel_Nagy1.zip|Semestralny_projekt_Gabriel_Nagy.zip]] | |||
=== Overenie === | === 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. | |||
[[Súbor: | [[Súbor:7493ver2.jpg|400px|thumb|center|zapojenie.]] | ||
'''Video:''' | '''Video:''' | ||
<center><youtube> | <center><youtube>WdMDVqfRepE</youtube></center> | ||
[[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.
![](/sensorwiki/images/thumb/3/31/A000066-arduino-uno-rev3-new-pinout.jpg/400px-A000066-arduino-uno-rev3-new-pinout.jpg)
![](/sensorwiki/images/thumb/b/bf/R3_pindiagram.png/600px-R3_pindiagram.png)
Literatúra:
- Dokumentácia k doske Arduino UNO R3
- Datasheet pre integrovaný obvod 7493
- Pin diagram pre Aruino UNO R3
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.
![](/sensorwiki/images/thumb/e/e2/7493.jpg/400px-7493.jpg)
![](/sensorwiki/images/thumb/5/50/LEDka_cervena.png/400px-LEDka_cervena.png)
![](/sensorwiki/images/thumb/f/f7/Pravdivostn%C3%A1_tabulka_7493.png/400px-Pravdivostn%C3%A1_tabulka_7493.png)
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ť.
![](/sensorwiki/images/thumb/2/2a/Sch%C3%A9ma_zapojenia_7493_s_resetom.png/800px-Sch%C3%A9ma_zapojenia_7493_s_resetom.png)
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.
![](/sensorwiki/images/thumb/f/fd/7493ver2.jpg/400px-7493ver2.jpg)
Video: