Kódový zámek s atmega

Z Wikiknih
Skočit na navigaci Skočit na vyhledávání

Schéma zapojení[editovat]

Schéma zapojení kódového zámku

Využ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[editovat]

Princip č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.

Schéma maticové klávesnice

Čá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[editovat]

Informač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[editovat]

K 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[editovat]

K 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.

prostředí programu AVRDUDE


Okomentovaný zdrojový kód pro naprogramování kódového zámku ke stažení ZDE