Tester logických obvodov: Rozdiel medzi revíziami
Zo stránky SensorWiki
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) | ||
{ | { | ||
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++; | |||
} | } | ||
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 z 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.
Literatúra:
Analýza a opis riešenia
Najprv sme pripojili LCD displej s tlačidlom a LED diódou
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.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.