Operácie

Tester logických obvodov: Rozdiel medzi revíziami

Z SensorWiki

(Analýza a opis riešenia)
(Algoritmus a program)
Riadok 32: Riadok 32:
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
 
#include <avr/io.h>
 +
 +
#define F_CPU 16000000UL 
 +
#include <avr/io.h>
 +
#include <avr/interrupt.h>
 +
#include <util/delay.h>
 +
#include "lcd_ch.h" 
 +
 +
#define SW1 PD6          // tlacitko
 +
#define LED1 PD7        // LED
 +
 +
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))     
 +
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))   
 +
 +
#define LED1_ON  set_bit(PORTD,LED1)        //zapni LED
 +
#define LED1_OFF clear_bit(PORTD,LED1)      //vypni LED
 +
 +
static volatile int M_Sec = 0;    //integer pocíta v milisekundách
 +
int Random_Number = 0;            //generuje random cislo
 +
int Rychlost = 0;            //cas rychlost
 +
 +
//**spustenie casovaca**//
 +
void TIMER_START(void){
 +
      TCNT1 = 0xFFF0;
 +
  TCCR1B = 0b00000101;           
 +
      TIMSK1 = (1<<TOIE1);
 +
      sei();         
 +
      TCCR0A =  (1 << COM0A0)         
 +
          | (1 << WGM01);       
 +
      TCCR0B = (1 << CS02);
 +
}
 +
 +
//** output a input port**//
 +
void Start(void){
 +
DDRD =0b10000000;
 +
    PORTD =0b01000000;
 +
}
 +
  
 
int main(void)
 
int main(void)
 
{
 
{
   unsigned int measuredValue;
+
   Start();  
 +
  ini_ports();
 +
  lcd_init();
 +
 
 +
  while(1){
 +
 +
if(bit_is_set(PIND,LED1)){
 +
goto jump1;
 +
}
 +
 +
Random_Number=rand();    //generovanie random cisiel pomocou preddefinovanej funkcie
 +
_delay_ms(200);          //Kvôli rýchlej generovanie čakáme, aby led nebliklo veľmi rýchlo
 +
 +
if ((Random_Number>1) && (Random_Number<1500)){   
 +
PORTD |=  (1<<LED1); 
 +
M_Sec=0;
 +
def_Clear_spec_znaky();
 +
TIMER_START();
 +
 +
jump1:
 +
if ( !(PIND & (1<<SW1)) ){    // Ak tlacitko je stlacene tak vypni led
 +
Rychlost = M_Sec;
 +
char riadok[]= {""};
 +
sprintf(riadok,"%d ms",Rychlost);
 +
def_Clear_spec_znaky();
 +
lcd_puts("Rychlost:");
 +
lcd_command(0xC0+5);
 +
lcd_puts(riadok);
 +
PORTD &= ~(1<<LED1);         
 +
  }                      
 +
 +
  }
 +
}
 +
}
  
  while (1)
+
ISR (TIMER1_OVF_vect)
  {
+
{
    /*  relax  */ 
+
  char riadok[]= {"                "};
  }
+
  TCNT1 = 0xFFF0;             
 
+
          M_Sec++;
  return(0);
+
 
 
}
 
}
  
Riadok 58: Riadok 128:
  
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
  
 
=== Overenie ===
 
=== Overenie ===

Verzia zo dňa a času 19:07, 13. jún 2023

Tester logických obvodov 7400 a 7493. Diagnostický report cez sériové rozhranie


Záverečný projekt predmetu MIPS / LS2023 - Erik Szegi


Zadanie

Tester logických obvodov- testovali sme, ako rýchlo dokážeme stlačiť tlačidlo po bliknutú kontrolky LED.

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Najprv sme pripojili LCD displej s tlačidlom a LED diódou

Schéma zapojenia LCD displeja.


Algoritmus a program

Algoritmus programu je....


#include <avr/io.h>

#define F_CPU 16000000UL  
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd_ch.h"  

#define SW1 PD6          // tlacitko
#define LED1 PD7         // LED 

#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))       
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))    

#define LED1_ON  set_bit(PORTD,LED1)        //zapni LED
#define LED1_OFF clear_bit(PORTD,LED1)      //vypni LED

static volatile int M_Sec = 0;    //integer pocíta v milisekundách
int Random_Number = 0;            //generuje random cislo
int Rychlost = 0;            //cas rychlost

//**spustenie casovaca**//
void TIMER_START(void){
      TCNT1 = 0xFFF0; 
	  TCCR1B = 0b00000101;            		
      TIMSK1 = (1<<TOIE1);
      sei();           
      TCCR0A =  (1 << COM0A0)          
	          | (1 << WGM01);         
      TCCR0B = (1 << CS02); 
}

//** output a input port**//
void Start(void){
	DDRD =0b10000000;
    PORTD =0b01000000;
}


int main(void)
{
  Start(); 
  ini_ports();
  lcd_init();
  
  while(1){
		
	if(bit_is_set(PIND,LED1)){
		goto jump1;
	}
	
	Random_Number=rand();    //generovanie random cisiel pomocou preddefinovanej funkcie
	_delay_ms(200);          //Kvôli rýchlej generovanie čakáme, aby led nebliklo veľmi rýchlo
	
	if ((Random_Number>1) && (Random_Number<1500)){     
		PORTD |=  (1<<LED1);  
		M_Sec=0;
		def_Clear_spec_znaky();
		TIMER_START();
		
	jump1:
	if ( !(PIND & (1<<SW1)) ){     // Ak tlacitko je stlacene tak vypni led
		Rychlost = M_Sec;
		char riadok[]= {""};
		sprintf(riadok,"%d ms",Rychlost); 
		def_Clear_spec_znaky();
		lcd_puts("Rychlost:");
		lcd_command(0xC0+5);
		lcd_puts(riadok);
		PORTD &= ~(1<<LED1);          
		   }	                       
			
   }
 }
}

ISR (TIMER1_OVF_vect)
{			
		   char riadok[]= {"                "};
		   TCNT1 = 0xFFF0;              
           M_Sec++;  
		   
}
#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.

Aplikácia.

Video:

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