Operácie

Tester obvodu 7493

Z SensorWiki

Verzia z 08:17, 15. máj 2024, ktorú vytvoril StudentMIPS (diskusia | príspevky) (Algoritmus a program)

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.

Vývojová doska Aruino UNO.

Literatúra:

Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...

Integrovaný obvod 7493.

Nezabudnite doplniť schému zapojenia!

Schéma zapojenia LCD displeja.


Algoritmus a program

Algoritmus programu je....


<tabs> <tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">

  1. define F_CPU 16000000UL
  2. define BAUD 9600
  3. define MYUBRR F_CPU/16/BAUD-1
  1. include <avr/io.h>
  2. include <util/delay.h>
  3. include <avr/interrupt.h>
  4. include <stdio.h>

/* Pripojenie periferii k vyvojovej doske Arduino: */

  1. define LED PD7 // externa LED dioda
  1. define LED_ON (PORTD |= (1<<LED))
  2. 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.

Aplikácia.

Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.