Tester obvodu 7493: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 133: | Riadok 133: | ||
<tabs> | <tabs> | ||
Verzia z 08:17, 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....
<tabs>
<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 <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); }
<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: 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.