Tester obvodu 7493: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 147: | Riadok 147: | ||
'''Video:''' | '''Video:''' | ||
<center><youtube> | <center><youtube>_5E9Z3w04</youtube></center> | ||
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | ||
[[Category:AVR]] [[Category:MIPS]] | [[Category:AVR]] [[Category:MIPS]] |
Verzia z 08:00, 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.
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
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.
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.