Operácie

Tester obvodu 7493: Rozdiel medzi revíziami

Z SensorWiki

(Zadanie)
(Algoritmus a program)
(20 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 8: Riadok 8:
 
Binárné hodnoty počítadla 7493 musia byť znázornené (vyblikané) pomocu ledky.  
 
Binárné hodnoty počítadla 7493 musia byť znázornené (vyblikané) pomocu ledky.  
  
[[Obrázok:A000066-arduino-uno-rev3-new-pinout.jpg|400px|thumb|left|Vývojová doska ACROB.]]
+
[[Obrázok:A000066-arduino-uno-rev3-new-pinout.jpg|400px|thumb|center|Vývojová doska Aruino UNO.]]
  
 
'''Literatúra:'''  
 
'''Literatúra:'''  
Riadok 21: 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:ledRGB.jpg|400px|thumb|center|RGB LED.]]
+
[[Súbor:7493.jpg|400px|thumb|center|Integrovaný obvod 7493.]]
  
 
Nezabudnite doplniť schému zapojenia!
 
Nezabudnite doplniť schému zapojenia!
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)
 
{
 
{
   unsigned int measuredValue;
+
   /*  SETUP  */
 +
 
 +
  // Nastavenie PB0-PB3 ako vstup
 +
    DDRB &= 0xF0;
  
  while (1)
+
    // Inicializacia UART
  {
+
    USART_Init(MYUBRR);
     /*  relax  */ 
+
     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;
 +
        }
  
</source></tab>
+
        printf("Counter value: %d\n", count);
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
 
  
void adc_init(void);                                   // A/D converter initialization
+
        _delay_ms(1000);
 +
 
 +
 
 +
/* koniec while */
  
unsigned int adc_read(char a_pin);
+
return(0);  
 +
}
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
Riadok 62: Riadok 137:
  
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
  
 
=== Overenie ===
 
=== Overenie ===
Riadok 69: 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:fotka.jpg|400px|thumb|center|Aplikácia.]]
+
[[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.

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....


#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.

Aplikácia.

Video:

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