Tester obvodu 7493: Rozdiel medzi revíziami
Z SensorWiki
(Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2024 - '''Meno Priezvisko''' == Zadanie == Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejši…“) |
(→Algoritmus a program) |
||
(30 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
− | Záverečný projekt predmetu MIPS / LS2024 - ''' | + | Záverečný projekt predmetu MIPS / LS2024 - '''Gabriel Nagy''' |
== Zadanie == | == 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. | ||
− | [[Obrázok: | + | [[Obrázok:A000066-arduino-uno-rev3-new-pinout.jpg|400px|thumb|center|Vývojová doska Aruino UNO.]] |
'''Literatúra:''' | '''Literatúra:''' | ||
− | * [ | + | * [https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf Dokumentácia k doske Arduino UNO R3] |
− | * [ | + | * [https://www.electroschematics.com/wp-content/uploads/2013/07/7493-datasheet.pdf Datasheet pre integrovaný obvod 7493] |
− | + | * [https://content.arduino.cc/assets/Pinout-UNOrev3_latest.pdf Pin diagram pre Aruino UNO R3] | |
__TOC__ | __TOC__ | ||
Riadok 19: | Riadok 21: | ||
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... | Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... | ||
− | [[Súbor: | + | [[Súbor:7493.jpg|400px|thumb|center|Integrovaný obvod 7493.]] |
Nezabudnite doplniť schému zapojenia! | Nezabudnite doplniť schému zapojenia! | ||
Riadok 33: | Riadok 35: | ||
<tabs> | <tabs> | ||
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;"> | <tab name="AVR C-code"><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 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) | int main(void) | ||
{ | { | ||
− | unsigned | + | /* 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); | |
+ | } | ||
</source></tab> | </source></tab> | ||
</tabs> | </tabs> | ||
Riadok 60: | Riadok 137: | ||
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | ||
− | |||
=== Overenie === | === Overenie === | ||
Riadok 67: | Riadok 143: | ||
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: | + | [[Súbor:MIPS_7493_Nagy.jpg|400px|thumb|center|Aplikácia.]] |
'''Video:''' | '''Video:''' |
Verzia zo dňa a času 09:05, 15. 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.
Literatúra:
- Dokumentácia k doske Arduino UNO R3
- Datasheet pre integrovaný obvod 7493
- Pin diagram pre Aruino UNO R3
Analýza a opis riešenia
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
Nezabudnite doplniť schému zapojenia!
Algoritmus a program
Algoritmus programu je....
#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.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.