Tester obvodu 7493: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 35: | 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) | ||
{ | { | ||
/* SETUP */ | |||
// Nastavenie PB0-PB3 ako vstup | |||
DDRB &= 0xF0; | |||
// Inicializacia UART | |||
USART_Init(MYUBRR); | |||
stdout = &mystdout; | |||
return(0); | // 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); | |||
} | } | ||
Riadok 62: | Riadok 145: | ||
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]] | ||
=== Overenie === | === Overenie === |
Verzia z 08:13, 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);
}
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
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.