Operácie

Projekt: Hodiny B: Rozdiel medzi revíziami

Z SensorWiki

d (Hodiny na orientačný beh)
(Hodiny na orientačný beh)
Riadok 51: Riadok 51:
 
Následne musíme zabezpečit správne zobrazenie znakov na sedemsegmetovke. Sedemsegmentovka je ovládaná, resp. na vysvietenie segmentov používame PortD. Najnižší bit PortD zodpovedá segmentu "a",najvyšší bit PortD zodpovedá bodke.  
 
Následne musíme zabezpečit správne zobrazenie znakov na sedemsegmetovke. Sedemsegmentovka je ovládaná, resp. na vysvietenie segmentov používame PortD. Najnižší bit PortD zodpovedá segmentu "a",najvyšší bit PortD zodpovedá bodke.  
  
[[Súbor:segment.jpg]]  
+
:::::[[Súbor:segment.jpg]]  
 
:::::::::::::::::::Obrázok č.2 Vyobrazenie jednotlivých segmentov displaya
 
:::::::::::::::::::Obrázok č.2 Vyobrazenie jednotlivých segmentov displaya
  
Riadok 57: Riadok 57:
  
 
''Funkcia pre vypisovanie znakov na display''
 
''Funkcia pre vypisovanie znakov na display''
 +
 +
<source lang="c">
  
 
#include <avr/io.h>
 
#include <avr/io.h>
Riadok 194: Riadok 196:
  
 
}
 
}
 +
</source>

Verzia zo dňa a času 15:50, 11. január 2013

Hodiny na orientačný beh

Semestrálny projekt
  • Vypracovali:
Bc.Michal Géczy
Bc.Ondrej Kamenský
  • Obsah:
1.Zadanie
2.Schéma zapojenia sedem segmentového displaya
3.Riešenie zadania
4.Záver




1.Zadanie

Naprogramujte procesor Atmega128 so stvornásobným sedemsegmentovým displayom na orientačný beh, tak aby po zapnutí odpočítaval minúty nasledujúce po štarte.

Program musí spĺňať tieto podmienky:

1.Po zapnutí sa na display znaky "----", čo bude znamenať pripravenosť.
2.Po zatlačení tlačítka sa spustí počítanie.
3.Posledných 5 sekúnd pred každou celou minútou bude počítanie sprevádzať pípaním a posledné pípnutie bude dlhšie.
4.Po zatlačení tlačidla reset, sa hodiny na orientačný beh premažu, zobrazia počiatočne znaky a budú čakať na spustenie.
2.Schéma zapojenia

Na obrázku je vnútorná schéma zapojenia stvornásobného sedemsegmentového displaya. Schéma obsahuje vyobrazenie jednotlivých segmentov, samozrejmosťou je že sú tu uvedené aj jednotlivé piny, pomocou ktorých je pripojený na procesor Atmega 128. Súčasťou plošného spoja, na ktorom je osadený sedemsegmentový display, sú dve tlačítka ale aj bzučiak. Jedno tlačitko slúži na resetovanie procesora, druhé tlačítko budeme v našom prípade používať na spúštanie hodín na orientačný beh.

Schema.jpg

Obrázok č.1 Schéma zapojenia sedemsegmentového displaya

Jednotlivé prepínanie medzi sedemsegmentami sa zabezpečuje pomocou PortB, naktorý sú napojené nie len jednotlivé sedemsegmetny ale aj tlačítko slúžiace na spustenie hodín na orientačný beh, bzučiak.


3.Riešenie zadania

V prvom rade si musíme zabezpečiť správne prepínanie medzi sedemsegmentami, aby nedošlo k tomu že to čo chceme zobraziť na sedemsegmente A4 sa zobrazí na A3 Sedemsegmenty sú pripojené nasledovne na PortB:

PB.0=A4
PB.1=A3
PB.2=A2
PB.3=A1

Prízak pmocou ktorého prepíname medzi jednotlivými sedemsegmentami

PORTB = ~(1<<place) & 0b11011111;


Následne musíme zabezpečit správne zobrazenie znakov na sedemsegmetovke. Sedemsegmentovka je ovládaná, resp. na vysvietenie segmentov používame PortD. Najnižší bit PortD zodpovedá segmentu "a",najvyšší bit PortD zodpovedá bodke.

Segment.jpg
Obrázok č.2 Vyobrazenie jednotlivých segmentov displaya

Pre prvý, druhý a štvrtý sedemsegment používame zobrazenie rovnakých znakov, ale pri treťom sedemsegmente musí použiť ešte aj bodku, ktorá nám bude odeľovať minúty od sekúnd na displayi. Pre celé toto zobrazovanie používame funkciu, ktorú vždy voláme keď je potrebná. Do funkcie vždy posielame dve premenné. Jedna premenná je miesto, na ktorý sedemsegment chceme zobraziť číslo. Druhá premmená nám hovorí aký znak chceme zobraziť.

Funkcia pre vypisovanie znakov na display

#include <avr/io.h>


void znak(int number, unsigned char place)

    {


   PORTB = ~(1<<place) & 0b11011111;    // nastavenie sedemsegmentu displaya na ktorom chceme zobrazovat znak
    
	if (number==10) 		//prázdny display
		{    
		PORTD = 0b11111111;
		}

	if (number==11) 		// pomlčka
		{    
		PORTD = 0b10111111;
		}
			if (number==0) 	//0
		{    
		PORTD = 0b11000000;
		}

	if (number==1) 			//1
		{       
		PORTD = 0b11111001;
		}

	if (number==2) 			//2
		{         
		PORTD = 0b10100100;
		}

	if (number==3) 			//3
		{         
		PORTD = 0b10110000;
		}

	if (number==4) 			//4
		{          
		PORTD = 0b10011001;
		}

	if (number==5)			//5 
		{          
		PORTD = 0b10010010;
		}

	if (number==6) 			//6
		{          
		PORTD = 0b10000010;
		}

	if (number==7) 			//7
		{          
		PORTD = 0b11111000;
		}

	if (number==8) 			//8
		{          
		PORTD = 0b10000000;
		}

	if (number==9) 			//9
		{          
		PORTD = 0b10010000;
		}

	if (number==0) 			//0
		{          
		PORTD = 0b11000000;
		}


		
}

void znakmin(int number, unsigned char place)

    {
   PORTB = ~(1<<place) & 0b11011111;

	//tabulka s cislami ale aj s bodkou pre minuty
	if (number==1) 
		{       
		PORTD = 0b01111001;
		}

	if (number==2) 
		{         
		PORTD = 0b00100100;
		}

	if (number==3) 
		{         
		PORTD = 0b00110000;
		}

	if (number==4) 
		{          
		PORTD = 0b00011001;
		}

	if (number==5) 
		{          
		PORTD = 0b00010010;
		}

	if (number==6) 
		{          
		PORTD = 0b00000010;
		}

	if (number==7) 
		{          
		PORTD = 0b01111000;
		}

	if (number==8) 
		{          
		PORTD = 0b00000000;
		}

	if (number==9) 
		{          
		PORTD = 0b00010000;
		}

	if (number==0) 
		{    
		PORTD = 0b01000000;
		}


}