Operácie

Riadenie križovatky: Rozdiel medzi revíziami

Z SensorWiki

 
(2 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.)
Riadok 30: Riadok 30:
 
=== Algoritmus a program ===
 
=== Algoritmus a program ===
  
Algoritmus programu je....
+
Budeme používať dve ďalšie knižnice a to <avr/interrupt.h> na prerušenia a <util/delay.h> na oneskorenia. Priradíme si každú jednu LED samostatne k jednému pinu. Funkciou volatile hovoríme kompilátoru o neskoršom prerušení v programe pri stlačení tlačidla. Potom sme si incializovali piny na LED ako výstupné a na tlačidlo ako vstupné. Mimo mainu sme si ešte napísali algoritmus nočného režimu pri stlačení tlačidla. V maine na začiatku máme ešte funkcie prerušenia, potom tam je algoritmus pre riadenie križovatky s dvomi trojLED semaformi a jedným dvojLED semaforom.
  
  
Riadok 65: Riadok 65:
 
     set_bit(DDRC, CERVENA3);
 
     set_bit(DDRC, CERVENA3);
 
     // Nastavenie pinu SW ako vstupu s pull-up rezistorom
 
     // Nastavenie pinu SW ako vstupu s pull-up rezistorom
     set_bit(PORTB, SW);
+
     set_bit(PORTB, SW);
   
 
 
 
 
 
 
}
 
}
 
 
 
  
 
ISR(PCINT0_vect) {
 
ISR(PCINT0_vect) {
Riadok 92: Riadok 86:
 
int main() {
 
int main() {
 
     inicializacia();
 
     inicializacia();
 
 
     PCMSK0 |= (1<<PCINT0);
 
     PCMSK0 |= (1<<PCINT0);
PCICR |= (1<<PCIE0);
+
    PCICR |= (1<<PCIE0);
 
+
    sei();   
 
+
 
 
sei();   
 
   
 
 
 
 
       
 
     
 
 
         while(1) {
 
         while(1) {
 
             set_bit(PORTD, ZELENA);
 
             set_bit(PORTD, ZELENA);
Riadok 142: Riadok 127:
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</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: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
+
Zdrojový kód: [[Médiá:projektKudlacLuky.zip|zdrojaky.zip]]
  
  
 
=== Overenie ===
 
=== 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.  
+
Po spustení, na základe vizuálneho pozorovania program funguje ako sme očakávali. Po stlačení tlačidla sa spustí nočný režim pri ktorom blikajú súčasne obe žlté LEDky.  
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.  
 
  
 
[[Súbor:lukyyy.jpg|400px|thumb|center|Aplikácia.]]
 
[[Súbor:lukyyy.jpg|400px|thumb|center|Aplikácia.]]
  
 
'''Video:'''
 
'''Video:'''
<center><youtube>_l02MBu41n0</youtube></center>
+
<center><youtube>https://youtu.be/Nq93dwdAcpc?si=MjijKgg95Q2sI4aE</youtube></center>
 
+
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
 
  
 
[[Category:AVR]] [[Category:MIPS]]
 
[[Category:AVR]] [[Category:MIPS]]

Aktuálna revízia z 08:56, 6. máj 2024

Záverečný projekt predmetu MIPS / LS2024 - Lukáš Kudláč


Zadanie

Cieľom projektu je zostaviť model svetelnej križovatky s dvomi smermi pre motorové vozidlá a jedným priechodom pre chodcov na doske ACROB.

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Každú LEDku a aj tlačidlo som pripojil na samostatný pin mikroprocesora. Prvý semafor som zapojil do pinov ako výstup nasledovne:PD5 zelená LED, PD3 žltá LED, PD2 červená LED.Druhý semafor som zapojil do pinov ako výstup nasledovne:PC2 zelená LED, PC1 žltá LED, PC0 červená LED. Semafor pre chodcov som zapojil ako dve samostatné LEDky. Červenú ako výstup pinu PC3 a zelenú ako výstup PC4.Tlačidlo je zapojené ako vstup do pinu PB0. Všetky komponenty sú zapojené na zem aby mohol pretekať elektrický prúd.

LED semafor

Schéma zapojenia

Schéma zapojenia LEDiek semafora a tlačidla.


Algoritmus a program

Budeme používať dve ďalšie knižnice a to <avr/interrupt.h> na prerušenia a <util/delay.h> na oneskorenia. Priradíme si každú jednu LED samostatne k jednému pinu. Funkciou volatile hovoríme kompilátoru o neskoršom prerušení v programe pri stlačení tlačidla. Potom sme si incializovali piny na LED ako výstupné a na tlačidlo ako vstupné. Mimo mainu sme si ešte napísali algoritmus nočného režimu pri stlačení tlačidla. V maine na začiatku máme ešte funkcie prerušenia, potom tam je algoritmus pre riadenie križovatky s dvomi trojLED semaformi a jedným dvojLED semaforom.


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

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

#define ZELENA PD5
#define ZLTA PD4
#define CERVENA PD2
#define ZELENA2 PC2
#define ZLTA2 PC1
#define CERVENA2 PC0
#define CERVENA3 PC3
#define ZELENA3 PC4
#define SW PB0

volatile uint8_t buttonPressed = 0;

void inicializacia() {
    // Nastavenie LED pinov ako výstupných
    set_bit(DDRD, ZELENA);
    set_bit(DDRD, ZLTA);
    set_bit(DDRD, CERVENA);
    set_bit(DDRC, ZELENA2);
    set_bit(DDRC, ZLTA2);
    set_bit(DDRC, CERVENA2);
    set_bit(DDRC, ZELENA3);
    set_bit(DDRC, CERVENA3);
    // Nastavenie pinu SW ako vstupu s pull-up rezistorom
    set_bit(PORTB, SW);  
}

ISR(PCINT0_vect) {
       while(!(PINB & (1 << PB0))){ 
        clear_bit(PORTD, CERVENA);
        clear_bit(PORTD, ZELENA);
		clear_bit(PORTC, CERVENA2);
        clear_bit(PORTC, ZELENA2);
         clear_bit(PORTC, CERVENA3);
        clear_bit(PORTC, ZELENA3);
		set_bit(PORTD, ZLTA);
        set_bit(PORTC, ZLTA2);
        _delay_ms(1000);
        clear_bit(PORTD, ZLTA);
        clear_bit(PORTC, ZLTA2);
        _delay_ms(1000);
}
}
int main() {
    inicializacia();
     PCMSK0 |= (1<<PCINT0);
     PCICR |= (1<<PCIE0);
     sei();   
 
        while(1) {
            set_bit(PORTD, ZELENA);
            set_bit(PORTC, CERVENA2);
             set_bit(PORTC, CERVENA3);
            _delay_ms(3500);
            set_bit(PORTD, ZLTA);
            clear_bit(PORTD, ZELENA);
            _delay_ms(1000);
            set_bit(PORTC, ZLTA2);
            set_bit(PORTD, CERVENA);
            clear_bit(PORTD, ZLTA);
            _delay_ms(1000);
             set_bit(PORTC, ZELENA3);
            clear_bit(PORTC, CERVENA3);
            set_bit(PORTC, ZELENA2);
            clear_bit(PORTC, CERVENA2);
            clear_bit(PORTC, ZLTA2);
            _delay_ms(3500);
             set_bit(PORTC, CERVENA3);
            clear_bit(PORTC, ZELENA3);
            set_bit(PORTC, ZLTA2);
            clear_bit(PORTC, ZELENA2);
            _delay_ms(1000);
            set_bit(PORTD, ZLTA);
            set_bit(PORTC, CERVENA2);
            clear_bit(PORTC, ZLTA2);
            _delay_ms(1000);
            set_bit(PORTD, ZELENA);
            clear_bit(PORTD, CERVENA);
            clear_bit(PORTD, ZLTA);
        
    }

    return 0;
}

Zdrojový kód: zdrojaky.zip


Overenie

Po spustení, na základe vizuálneho pozorovania program funguje ako sme očakávali. Po stlačení tlačidla sa spustí nočný režim pri ktorom blikajú súčasne obe žlté LEDky.

Aplikácia.

Video: