Kódový zámek s atmega
Schéma zapojení
editovatVyužité součástky:
- SW1 - SW16: klávesnice maticové klávesnice
- R1 - R4, R8: 1 kΩ
- SV1: servomotor
- LED1 - LED3: LED
- R5 -R7: 150 Ω
- R9: 100 Ω
- SW17: mikrospínač
- Q1: 16 MHz krystal
- C1: 100 nF
- C2, C3: 22 pF
Funkce na čtení klávesnice
editovatPrincip čtení z klávesnice je velmi prostý. Sloupce nastavíme jako výstup a řádky jako vstup (naopak to samozřejmě funguje naprosto stejně). Poté připojíme na výstupu vnitřní pull - up rezistory, tím dosáhneme toho, že na vstupních pinech budeme udržovat logickou 1. Dalším krokem je nastavování vždy pouze jednoho sloupce do stavu logické 0 a následující skenování klávesnice, které nám řekne, jesli se logická 0 z daného sloupce nepřenesla na nějaký řádek. Tato informace nám jednoznačně určí jestli je nějaká klávesnice stisknutá a jaký je to znak. Tuto funkci stále opakujeme a střídáme sloupce.
Část z funkce na čtení stavu klávesnice:
DDRD = 0b11110000; //pin 7-4 == OUTPUT; pin 3-0 == INPUT PORTD = 0b11111111; //nastavení výstupu na sloupce a vstupu na řádky
if (column == 1) //první sloupec
{
PORTD &=0b01111111; //nastaví 0 na pin7 (ostatní piny jsou nezměněny)
PORTD |=0b01110000; //nastaví 1 na pin 6,5,4 (ostatní piny jsou nezměněny)
_delay_ms(1); //prodleva 1ms (definována v klihovně <util/delay.h>)
position = (PIND << 4); //bitový posun o 4 bity do leva (zprava se doplní 0)
switch (position)
{ case 0b11100000: //když se 0 přenese na pin0
result = 13; //* .... odpovídající znak
break; //break ukončí switch
case 0b11010000: //když se 0 přenese na pin1
result = 9; //7
break;
case 0b10110000: //když se 0 přenese na pin2
result = 5; //4
break;
case 0b01110000: //když se 0 přenese na pin3
result = 1; //1
break;
default:
result = 255; //žádný stisk/vícenásobný stisk
break;
}
}
Ovládání servomotoru Micro Servo SG90
editovatInformační kabel servomotoru připojíme na pin mikrokontroléru a generujeme signál o frekvenci 50 Hz (T = 20 ms) s různou střídou. Pokud budeme posílat 1.5 ms úrověň H (5 V, 1 pomocí protokolu PORTx) a 18.5 ms úroveň L, osa serva se bude pohybovat do defaultní pozice (O°). Když impuls zkrátíme a budeme posílat například 1 ms úroveň H a 19 ms úroveň L, tak se bude osa serva otáčet do leva. Naopak když impuls prodloužíme (H - 2 ms, L - 18 ms), tak se bude osa serva pohybovat do prava. Micro Servo SG90 má osu, která se může otočit maximálně o 180° (+- 90°). Délka úrovně H se v signálu může pohybovat v intervalu od 0.6ms do 2.4ms a určuje rychlost otáčení osy servomotoru.
Atmel Studio
editovatK psaní programů v programovacím jazyce C pro mikrokontrolery od firmy Atmel se využívá program Atmel Studio. Atmel studio je bezplatná aplikace a k jejímu stažení je nutná pouze registrace. Prostředí Atmel Studia je prakticky stejné jako prostředí programu Microsoft Visual Studio. Atmel studio nám umožňuje z vytvořeného programu vybudovat .hex (hexadecimální) soubor, který již dále můžeme přímo nahrát do mikrokontroléru.
AVRDUDE
editovatK implementaci programu do mikrokontroléru jsem využil program AVRDUDE, což je program pro implementaci/stažení .hex souboru do/z mikrokontroléru typu AVR. Tento program je velmi jednoduchý a jeho jediným nedostatkem je, že nemá podepsaný ovladač a to je špatná zpráva hlavně pro uživatele systému windows 8. Další věc, kterou potřebujeme k naprogramování mikrokontroléru je USB programátor.
Okomentovaný zdrojový kód pro naprogramování kódového zámku ke stažení ZDE