Tester logických obvodov: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 116: | Riadok 116: | ||
</source></tab> | </source></tab> | ||
<tab name=" | <tab name="lcd_ch.h"><source lang="c++" style="background: LightYellow;"> | ||
lcd_ch.h | |||
unsigned int adc_read(char a_pin); | unsigned int adc_read(char a_pin); | ||
</source></tab> | </source></tab> |
Verzia z 19:10, 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++;
}
lcd_ch.h
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.