Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ok1kvk.cz/content
  • isbl/content
  • david.gerner/content
3 results
Show changes
Showing
with 174 additions and 170 deletions
+++
title = "Webkamera na Blatenském vrchu opět v provozu!"
perex_e = "
Díky členům našeho radioklubu máte opět možnost podívat se na webkameru na Blatenském vrchu
odkaz zde:
WEBKAMERA"
tags = ["Článek"]
tags = ["Obecné", "Stalo se", "Radioklub", "Rozbité články"]
published = "2011-05-12T07:05:29.000Z"
author = "Michal, OK1WMR"
perex = "Díky členům našeho radioklubu máte opět možnost podívat se na webkameru na Blatenském vrchu. Odkaz najdete v článku"
+++
Díky členům našeho radioklubu máte opět možnost podívat se na webkameru na Blatenském vrchu
odkaz zde:
WEBKAMERA
Díky členům našeho radioklubu máte opět možnost podívat se na webkameru na Blatenském vrchu
Odkaz zde: [WEBKAMERA](/clanek/webkamera)
![Webkamera Blatenský vrch](http://www.rmsecurity.cz/img/BV000M.jpg?width=512)
content/articles/2011/zapojeni-isp-konektoru/isp_pcb.png

129 B

content/articles/2011/zapojeni-isp-konektoru/isp_sch.png

129 B

+++
title = "Zapojení ISP konektoru"
tags = ["Technické články", "Mikroprocesory", "AVR"]
published = "2011-01-24T10:38:02.000Z"
author = "Michal, OK1WMR"
image = "isp_sch.png"
perex = "Zapojení programovacího konektoru, pro programovaní mikroprocesorů z rodiny AVR."
+++
Zapojení programovacího konektoru, pro programovaní mikroprocesorů z rodiny AVR přes ISP (_In-System Programming_).
### Schéma:
![Schéma zapojení ISP konektoru](isp_sch.png)
### Pohled na konektor ze shora:
![ISP konektor na DPS](isp_pcb.png)
content/articles/2012/a1-contest-2012/01.jpg

129 B

content/articles/2012/a1-contest-2012/02.jpg

129 B

content/articles/2012/a1-contest-2012/03.jpg

129 B

+++
title = "A1 Contest 2012"
perex_e = "
Na rozdíl od loňského A1 kontestu, který proběhl za nezvykle krásného počasí, jsme si letos užili asi jako všichni, kdo vyrazili do hor, spoustu deště, trochu sněhu, ale hlavně hodně větru. Po loňském poměrně úspěšném ukončení 2m závodní sezóny A1 kontestem, kdy se nám podařilo překonat náš klubový rekord, byla naše očekávání hodně vysoká, ale člověk míní a příroda mění. Namlsáni výsledky loňského A1 kontestu jsme do letošního závodu šli s velkým očekáváním, které se však nenaplnilo. Více o našem závodění se dočtete uvnitř článku.
tags = ["Závody", "VHF", "Rozbité články"]
published = "2012-11-06T12:59:00.000Z"
author = "Míra, OK7KM"
perex_e = "
Na rozdíl od loňského A1 kontestu, který proběhl za nezvykle krásného počasí, jsme si letos užili asi jako všichni, kdo vyrazili do hor, spoustu deště, trochu sněhu, ale hlavně hodně větru. Po loňském poměrně úspěšném ukončení 2m závodní sezóny A1 kontestem, kdy se nám podařilo překonat náš klubový rekord, byla naše očekávání hodně vysoká, ale člověk míní a příroda mění. Namlsáni výsledky loňského A1 kontestu jsme do letošního závodu šli s velkým očekáváním, které se však nenaplnilo. Více o našem závodění se dočtete uvnitř článku.
"
tags = ["Článek"]
+++
Na rozdíl od loňského A1 kontestu, který proběhl za nezvykle krásného počasí, jsme si letos užili asi jako všichni, kdo vyrazili do hor, spoustu deště, trochu sněhu, ale hlavně hodně větru. Po loňském poměrně úspěšném ukončení 2m závodní sezóny A1 kontestem, kdy se nám podařilo překonat náš klubový rekord, byla naše očekávání hodně vysoká, ale člověk míní a příroda mění. Namlsáni výsledky loňského A1 kontestu jsme do letošního závodu šli s velkým očekáváním, které se však nenaplnilo. Více o našem závodění se dočtete uvnitř článku.
Na rozdíl od loňského A1 kontestu, který proběhl za nezvykle krásného počasí, jsme si letos užili asi jako všichni, kdo vyrazili do hor, spoustu deště, trochu sněhu, ale hlavně hodně větru. Po loňském poměrně úspěšném ukončení 2m závodní sezóny A1 kontestem, kdy se nám podařilo překonat náš klubový rekord, byla naše očekávání hodně vysoká, ale člověk míní a příroda mění. Namlsáni výsledky loňského A1 kontestu jsme do letošního závodu šli s velkým očekáváním, které se však nenaplnilo. Více o našem závodění se dočtete uvnitř článku.
Na Blaťák vyrazil jako první Vláďa OK1FIK už v pátek brzo ráno, aby za pomoci plošiny demontoval z 15m výsuvného stožáru KV jednopásmové yaginy na 14 m a 20 m. Tím se tento stožár uvolnil pro dvojče 8 el. 2m DK7ZB a KV tribander. Na kopci bylo docela dost sněhu a nepříjemné větrné počasí. Jako obvykle, Vláďa vše připravil na příjezd ostatních posil, aby přijeli do příjemně vyhřáté chaty. Před obědem dorazili Jirka UBO s Vencou VKQ. Po krátké debatě jsme se vrhli na demontáž tribanderu z 19m stožáru a jeho namontování na 15m stožár. Nad něj jsme namontovali opravené dvojče 2m 8el. DK7ZB. I pro něj jsme měli připravený PA a LNA se sdružovačem, ale díky různým problémům nakonec zůstalo dvojče nezapojené. Páteční venkovní práce jsme ukončili osazením 2x18 el. M2 na 19m RDM 6 stožár, a po změření jsme ho schválili, jako schopné provozu. V chatě zatím Vláďa OK1FIK pomalu vybaloval vše, co bylo potřeba pro vysílací pracoviště, a připravoval ostatní nezbytnosti pro závod. Jakmile jsme se přesunuli do chaty, tak se naplno projevil hlad a žízeň, protože dokud bylo trochu vidět, tak jsme se snažili dokončit veškeré venkovní práce a na jídlo a pití nebyl čas. V komorním prostředí příjemně vyhřáté chaty jsme shodili promočené pracovní oblečení a s veškerou vervou se vrhli na jídlo a pití. Mezitím se k nám připojili další operátoři a kamarádi - Pavel OK1AW, Míra OK1DUB a Honza OK5XM. Za družného hovoru jsme také udělali i nějakou tu práci. Honza si přivezl PEP wattmetr, který se nám nakonec i podařilo nastavit za pomoci nově resuscituovaného třicet let starého PA s elektronkou 4CX250\. Předzávodní porada nám vydržela do pozdních nočních i ranních hodin.V sobotu ráno sice přestalo pršet, ale foukalo jako o život. Za tohoto počasí jsme rozvinuli kotvy pro 19m stožár a za hodinu nebylo co dělat. Stožár jsme ale nevysunuli do plné výšky, protože jsme si to prostě nedovolili kvůli silnému větru s nárazy o rychlosti přes 20 m/s. Na řadě byla instalace vysílacího zařízení a ostatní bižuterie. První zádrhel se objevil, když nešel zapnout PA s GS31B. Závada byla velmi rychle objevena, ale s opravou to už bylo slabší. Z nějakého důvodu nebyl funkční spínaný zdroj pro žhavení elektronky a bez něj nejde nahodit další ovládání PA. Nakonec nás zachránil Roman OK1VTV, který přijel na BV uvést do provozu infračervené reflektory webové kamery na BV. Na dotaz zda nemá náhodou u sebe 12V zdroj 5 A, tak mi odpověděl: „ … a jaký by to měl být, větší, menší nebo na DIN lištu?“.
Takže po jednoduchém zadrátování byl PA funkční. Přesto nedával žádný výkon. Podezření padlo na tranzistorový budič, který od posledního závodu z nějakého důvodu také přestal fungovat. Asi prostředí s vysokou vlhkostí, mrazem a se zvýšenou bleskovou činností citlivějším polovodičovým zařízením nedělá dobře..V sobotu dopoledne nás přijel podpořit a zkontrolovat náš dlouholetý bývalý VO a anténní guru Gerhard OK1GP. Během dopoledne dorazil rovněž Michal OK1WMR se členy našeho kroužku elektroniky, v jejichž řadách se, doufáme, objeví noví operátoři radioklubu. Chvíli po jejich příjezdu jsme nakonec zprovoznili skoro všechno zařízení, jen ten čtvrtý směr se nepodařilo dát dohromady, protože jsme PA s 4CX250 použili jako budič pro další PA. Nastal tedy čas na poslech majáků a byla to slabota:PI7CIS, 144,416 Mhz, QRB 614 km, QTF 291° - 4x10 el. +LNA – jen občas slabě slyšitelný na úrovni šumu
OZ7IGY, 144,471 Mhz, QRB 571 km, QTF 354°- 4x10 el. +LNA – ani stopa po signálu
ON0VHF, 144,418 Mhz, QRB 578 km. QTF 276° - 4x10 el. +LNA – jen občas slabě slyšitelný na úrovni šumu
DB0JT, 144,428 Mhz, QRB 289 km, QTF 180° - 2x18 el. +LNA – výborně slyšitelný, 20 dB nad šumemBylo nám jasné, že západ a sever je v podstatě uzavřený. Na jihovýchod jsme toho také moc neslyšeli, protože dvojče 18 el. M2 bylo díky silnému větru vysunuté jen na úroveň vrcholků stromů mokrého smrkového lesa a bylo to znát.První tři hodiny závodu byl u pastičky Vláďa a závod se rozjížděl velmi zvolna (33 + 27 + 33 QSO/h a 8 + 9 + 11 tis. b/h). Po celou dobu závodu byl pro nás zavřený směr na Z, SZ a S, odkud se velmi obtížně dolovalo jakékoli delší spojení. I přes bídné podmínky šíření (střední Evropou přecházely frontální systémy a troposféra byla hodně rozbitá) se Mírovi DUB díky perfektně fungujícímu technickému vybavení závod líbil - na pásmu se objevovaly QSB roztřepané signály ze severního Německa, signály "rozmazané" ozvěnou způsobenou vícecestným šířením v troposféře z Holandska a Belgie a další zajímavé efekty na CW signálech. I když nešlo o žádné pile-upy, byla to příjemná procházka dvoumetrovým pásmem.
Podmínky se postupně zlepšovaly a jak utichal vítr, tak jsme si dovolili kolem dvaadvacáté hodiny vysunout stožár s dvojčetem 18 el. M2 do plné výše. Začala trochu chodit spojení V a JV. V noci a nad ránem bylo na pásmu vymeteno a při sledování KST Chatu bylo jen vidět, jak všechny stanice na pásmu dávají zoufalé výzvy: „PLS anybody for sked?“. Ráno se situace postupně zlepšila a dalo se dosáhnout počtu spojení přes 10 QSO/h 5 až 7 tis. bodů/h.Dvě hodiny před koncem závodu se ozval z venku hrozivý rachot, a když jsme vyběhli ven, tak jsme jen mohli němě zírat na zlomený 19m výsuvný stožár, který nesl dvojče 18 el. M2 (záznam [web kamery](http://youtu.be/qMjUh2gDkes) z průběhu zlomení stožáru viz [fotogalerie](index.php/fotogalerie/category/122-2012-a1)). V té době za pastičkou seděl Míra DUB, a přestože došlo ke zlomení stožáru se dvěma M2, a současném „zkrácení“ jedné antény ze čtyřčete DK0ZB (způsobeným pádem 2x M2) - soustava měla od té chvíle dva rozštěpené nesymetrické laloky místo jednoho hlavního - tak ještě do konce závodu udělal 2x HB9 a několik DL. Nicméně tím skončily naše naděje na to , že bychom snad mohli překonat loňský rekord, který nám nakonec utekl 9 tisíc bodů.Úroveň rušení byla tentokrát velmi dobrá. Lépe řečeno nikdo v podstatě nerušil, pokud nebudu uvažovat moment a vzájemné nasměrování ANT s blízkými stanicemi. V tomto ohledu to byl celkem pohodový závod.Spojení jsme udělali relativně málo, i průměr bodů/QSO nebyl vysoký (339,2 km/QSO). Celkový výsledek nakonec činil 383 QSO a skoro 130 tis. bodů, ODX YU7ACO z KN05 (870 km). Pokud nebude výrazně vysoká chybovost, tak i přes všechnu smůlu a nepříznivé podmínky to bude jeden z našich nejlepších výsledků na A1 kontestu. Původní touha byla pokořit hranici 500 QSO, ale za panujících podmínek to nebylo vůbec možné. Podmínky šíření byly velmi špatné zejména na západ. V druhé polovině závodu se trochu zlepšil V, JV a J. Přesto delší spojení do tohoto segmentu se nedařila. Oproti loňskému roku nám scházely především DL (- 60 QSO), HB (-7), PA (-3), 9A (-4) a YU (-2) stanice. Nepodařilo se nám udělat ani jedno QSO s G, přestože nás jich pár spotovalo s tím, že jsme velmi dobře slyšitelní. Naopak nás potěšil větší počet OM (+8 QSO), F (+7), OK (+7), I (+5), HA (+3) a zvětšila se i aktivita SP stanic (+7).[![](/upload/ok1-36134/photo/12_11_a1/graf_sm.png)](../upload/ok1-36134/photo/12_11_a1/graf.png)Závěrem chci všem poděkovat za QSO a těšíme se NSL v další sezoně.Značka: **OL7C - JO60JJ - 1044m A.S.L.
Podmínky se postupně zlepšovaly a jak utichal vítr, tak jsme si dovolili kolem dvaadvacáté hodiny vysunout stožár s dvojčetem 18 el. M2 do plné výše. Začala trochu chodit spojení V a JV. V noci a nad ránem bylo na pásmu vymeteno a při sledování KST Chatu bylo jen vidět, jak všechny stanice na pásmu dávají zoufalé výzvy: „PLS anybody for sked?“. Ráno se situace postupně zlepšila a dalo se dosáhnout počtu spojení přes 10 QSO/h 5 až 7 tis. bodů/h.Dvě hodiny před koncem závodu se ozval z venku hrozivý rachot, a když jsme vyběhli ven, tak jsme jen mohli němě zírat na zlomený 19m výsuvný stožár, který nesl dvojče 18 el. M2 (záznam [web kamery](http://youtu.be/qMjUh2gDkes) z průběhu zlomení stožáru viz [fotogalerie](index.php/fotogalerie/category/122-2012-a1)). V té době za pastičkou seděl Míra DUB, a přestože došlo ke zlomení stožáru se dvěma M2, a současném „zkrácení“ jedné antény ze čtyřčete DK0ZB (způsobeným pádem 2x M2) - soustava měla od té chvíle dva rozštěpené nesymetrické laloky místo jednoho hlavního - tak ještě do konce závodu udělal 2x HB9 a několik DL. Nicméně tím skončily naše naděje na to , že bychom snad mohli překonat loňský rekord, který nám nakonec utekl 9 tisíc bodů.Úroveň rušení byla tentokrát velmi dobrá. Lépe řečeno nikdo v podstatě nerušil, pokud nebudu uvažovat moment a vzájemné nasměrování ANT s blízkými stanicemi. V tomto ohledu to byl celkem pohodový závod.Spojení jsme udělali relativně málo, i průměr bodů/QSO nebyl vysoký (339,2 km/QSO). Celkový výsledek nakonec činil 383 QSO a skoro 130 tis. bodů, ODX YU7ACO z KN05 (870 km). Pokud nebude výrazně vysoká chybovost, tak i přes všechnu smůlu a nepříznivé podmínky to bude jeden z našich nejlepších výsledků na A1 kontestu. Původní touha byla pokořit hranici 500 QSO, ale za panujících podmínek to nebylo vůbec možné. Podmínky šíření byly velmi špatné zejména na západ. V druhé polovině závodu se trochu zlepšil V, JV a J. Přesto delší spojení do tohoto segmentu se nedařila. Oproti loňskému roku nám scházely především DL (- 60 QSO), HB (-7), PA (-3), 9A (-4) a YU (-2) stanice. Nepodařilo se nám udělat ani jedno QSO s G, přestože nás jich pár spotovalo s tím, že jsme velmi dobře slyšitelní. Naopak nás potěšil větší počet OM (+8 QSO), F (+7), OK (+7), I (+5), HA (+3) a zvětšila se i aktivita SP stanic (+7).[![](graf_sm.png)](../upload/ok1-36134/photo/12_11_a1/graf.png)Závěrem chci všem poděkovat za QSO a těšíme se NSL v další sezoně.Značka: **OL7C - JO60JJ - 1044m A.S.L.
**Závod: [A1 Kontest 2012](http://vkvzavody.moravany.com/zavody/a12012/index.php) - [předběžné výsledky](http://www.vhfcontest.net/getlog/gentxtsql.php?zavod=63&country=1)144 MHz - 383 QSO - 129 824 pts, průměr 339,2 km/QSOODX - YU7ACO - KN05 - 870 km
..Vybavení:ANT: 2x 18el. M2@19m, 4x10el. DK7ZB@14m, 8x5el. DK7ZB
RIG: IC756PROIII + TRV Sitno + 3xPA (GU43b, 2xGI7b,GS31b).SW: [Win-Test
](http://www.win-test.com/)![01](/upload/ok1-36134/photo/12_11_a1/01.jpg)![01](/upload/ok1-36134/photo/12_11_a1/02.jpg) [](../upload/ok1-36134/photo/12_07_pd/mraky.jpg) [](../upload/ok1-36134/photo/12_07_pd/nejde.jpg)![01](/upload/ok1-36134/photo/12_11_a1/03.jpg)[Fotogalerie](index.php/fotogalerie/category/122-2012-a1)
\ No newline at end of file
](http://www.win-test.com/)![01](01.jpg)![01](02.jpg) [](../upload/ok1-36134/photo/12_07_pd/mraky.jpg) [](../upload/ok1-36134/photo/12_07_pd/nejde.jpg)![01](03.jpg)[Fotogalerie](index.php/fotogalerie/category/122-2012-a1)
content/articles/2012/a1-contest-2012/graf_sm.png

130 B

+++
title = "AVR - LCD panel - #1 Program"
perex_e = "
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: LCD_001.c == LCD_001.pdf == LCD_001.htm
.
.
"
tags = ["Článek"]
tags = ["Technické články", "Programování", "C/C++", "Rozbité články"]
published = "2012-03-14T07:09:35.000Z"
author = "Michal, OK1WMR"
perex_e = "Kompatibilní zapojení: LCD panel s ATmega8"
+++
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: LCD_001.c == LCD_001.pdf == LCD_001.htm
.
.
Kompatibilní zapojení: LCD panel s ATmega8
* * *
Ke stažení: LCD_001.c == LCD_001.pdf == LCD_001.htm
<title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="generator" content="SynEdit HTML exporter"> <style type="text/css">&amp;amp;lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --&amp;amp;gt;</style>
---
```
```c
/*
Začínáme s novým přípravkem ATmega_lcd_uni, který je vybaven znakovým
Začínáme s novým přípravkem ATmega_lcd_uni, který je vybaven znakovým
LCD displejem a klávesnicí.
LCD displej má zobrazovací kapacitu dva řádky po šestnácti sloupcích (32 znaků)
znaky (písmenka a speciální znaky jsou uložené přímo v paměti displeje a
znaky (písmenka a speciální znaky jsou uložené přímo v paměti displeje a
přibližně odpovídají ASCII tabulce (viz datasheet displeje rc1602b-biw-esx)
Protože je ale výrobci jasné, že by někdo mohl chtít na displeji zobrazovat
Protože je ale výrobci jasné, že by někdo mohl chtít na displeji zobrazovat
i jiné znaky, než které jsou uvedeny v tabulce, ponechal 8 míst volných, kam
si můžeme nahrát vlastní znaky Většinou se tato místa využívají pro písmena
s českou interpunkcí (ta v základní tabulce nejsou)
Klávesnice je tvořena dvěma řadami po třech tlačítkách, což je pro většinu
aplikací dostatečný počet. Navíc je ke každému tlačítku sériově připojena
Klávesnice je tvořena dvěma řadami po třech tlačítkách, což je pro většinu
aplikací dostatečný počet. Navíc je ke každému tlačítku sériově připojena
dioda, a to tak, že lze rozlišit i více stisknutých tlačítek najednou.
Je tedy možné používat dvojhmaty (i "vícehmaty"), což nám rozšiřuje počet
samotných tlačítek o jejich vzájemné kombinace.
samotných tlačítek o jejich vzájemné kombinace.
*/
/*
Jak už to v programování bývá, první co program napíše, je text "Hello World".
Náš první program tedy bude dělat to samé, ale protože jsme Češi, přidáme
Náš první program tedy bude dělat to samé, ale protože jsme Češi, přidáme
ještě tuto hlášku v češtině.
Nejprve ale musíme do našeho programu vložit rutiny pro komunikaci s displejem,
a soubor s konfigurací pinů mikrokontroléru pro tento přípravek.
jedná se o soubory "atmega_lcd_uni_cfg.c" a "lcd.c".
Soubor "atmega_lcd_uni_cfg.c" obsahuje informace o tom, ke kterým pinům je
Soubor "atmega_lcd_uni_cfg.c" obsahuje informace o tom, ke kterým pinům je
připojen displej a ke kterým je připojena klávesnice. Musí být proto vložen
ještě před souborem "lcd.c".
Soubor "lcd.c" obsahuje rutiny pro práci s displejem. Nemusíme se tedy starat
o to jak s displejem komunikovat, ale můžeme již rovnou na něj posílat data
Soubor "lcd.c" obsahuje rutiny pro práci s displejem. Nemusíme se tedy starat
o to jak s displejem komunikovat, ale můžeme již rovnou na něj posílat data
pomocí již hotových funkcí.
Funkce v souboru "lcd.c" jsou:
......@@ -62,5 +50,5 @@ Funkce v souboru "lcd.c" jsou:
void lcd_ini (void);//inicializace displeje (nastavení pinů a zahájení komunikace)
void lcd_char (unsigned char dat);//napíše znak pomocí ASCII kódu (písmena, čísla)
void lcd_num3 (unsigned int num,unsigned char znak);//napíše cislo (3 cifry)
void lcd_num2 (unsigned char num,unsigned char znak);//napíše cislo (2 cifry)
```
\ No newline at end of file
void lcd_num2 (unsigned char num,unsigned char znak);//napíše cislo (2 cifry)
```
+++
title = "AVR - LCD panel - #2 Program"
perex_e = "
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: LCD_002.c == LCD_002.pdf == LCD_002.htm
.
.
"
tags = ["Článek"]
tags = ["Technické články", "Programování", "C/C++", "Rozbité články"]
published = "2012-03-14T07:20:05.000Z"
author = "Michal, OK1WMR"
perex_e = "Kompatibilní zapojení: LCD panel s ATmega8"
+++
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: LCD_002.c == LCD_002.pdf == LCD_002.htm
.
.
Kompatibilní zapojení: LCD panel s ATmega8
* * *
Ke stažení: LCD_002.c == LCD_002.pdf == LCD_002.htm
<title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="generator" content="SynEdit HTML exporter"> <style type="text/css">&amp;lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --&amp;gt;</style>
---
```
```c
/*
Minule jsme na přípravku ATmega_LCD_uni vyzkoušeli displej, a nyní se pokusíme
"oživit" i klávesnici.
*/
/*
Obslužné rutiny pro klávesnici jsou uloženy v souboru "kbd_2x3dm.c". Tento
Obslužné rutiny pro klávesnici jsou uloženy v souboru "kbd_2x3dm.c". Tento
soubor je opět závislý na konfiguraci uložené v souboru "atmega_lcd_uni_cfg.c"
a je proto nutné, aby soubor "atmega_lcd_uni_cfg.c" byl vložen ještě před
souborem "kbd_2x3dm.c".
Soubor "kbd_2x3dm.c" obsahuje následující dvě rutiny:
void kbd_ini(void) //inicializace klávesnice (nastavení vstupních a výstupních pinů)
unsigned char kbd_read(void) //tato funkce "přečte" klávesnici, kdykoli je
unsigned char kbd_read(void) //tato funkce "přečte" klávesnici, kdykoli je
volána, a vrátí hodnotu právě stisknutých tlačítek
Funkce "kbd_read(void)" vrací hodnotu kláves které jsou stisknuty právě v tom
okamžiku, kdy je volána. Pokud tedy chceme na stisk klávesy reagovat okamžitě,
je vhodné tuto funkci volat přibližně 10 - 20 krát za vteřinu.
Jinak by bylapatrná prodleva, kdy je potřeba tlačítko chvíli držet, než si
je vhodné tuto funkci volat přibližně 10 - 20 krát za vteřinu.
Jinak by bylapatrná prodleva, kdy je potřeba tlačítko chvíli držet, než si
toho procesor "všimne".
Soubor "kbd_2x3dm.c" také obsahuje dvě zajímavé konstanty, které řídí chování
Soubor "kbd_2x3dm.c" také obsahuje dvě zajímavé konstanty, které řídí chování
klávesnice, pokud je tlačítko drženo déle.
Tyto konstanty jsou:
KBD_SKIP
KBD_ACC
Konstanta "KBD_SKIP" určuje, kolik cyklů se má vynechat, pokud je stisknuto
stále totéž tlačítko. To znamená, že když funkce "kbd_read()" zjistí, že je
Konstanta "KBD_SKIP" určuje, kolik cyklů se má vynechat, pokud je stisknuto
stále totéž tlačítko. To znamená, že když funkce "kbd_read()" zjistí, že je
stisknuto stejné tlačítko (nebo stejná tlačítka), jako když byla volána minule,
vrátí místo hodnoty tohoto tlačítka nulu (jako kdyby nebylo stisknuto žádné
vrátí místo hodnoty tohoto tlačítka nulu (jako kdyby nebylo stisknuto žádné
tlačítko). Konstanta "KBD_SKIP" tedy určuje, kolikrát má funkce "kbd_read()"
toto tlačítko ignorovat, než opět vrátí jeho hodnotu.
Pokud je tlačítko drženo i nadále, poté co funkce "kbd_read()" již podruhé
Pokud je tlačítko drženo i nadále, poté co funkce "kbd_read()" již podruhé
vrátila jeho hodnotu, začíná se uplatňovat konstanta "KBD_ACC". Tato konstanta
určuje, o kolik cyklů se má vynechat méně před každým dalším navrácením hodnoty
určuje, o kolik cyklů se má vynechat méně před každým dalším navrácením hodnoty
téhož tlačítka.
Výsledkem tedy je, že pokud uživatel stiskne a drží tlačítko, vrátí se jeho
Výsledkem tedy je, že pokud uživatel stiskne a drží tlačítko, vrátí se jeho
hodnota, čeká se podle "KBD_SKIP", znovu se vrátí jeho hodnota, čeká se
o "KBD_ACC" méně, zase se vrátí hodnota, čeká se o další "KBD_ACC" méně,
o "KBD_ACC" méně, zase se vrátí hodnota, čeká se o další "KBD_ACC" méně,
a tak to jde až do doby, kdy se vrací hodnota drženého tlačítka při každém
cyklu (volání funkce "kbd_read()"), nebo dokud uživatel tlačítko opět neuvolní.
Tato funkce se nazývá "autorepeat" a hodí se například, pokud je potřeba
Tato funkce se nazývá "autorepeat" a hodí se například, pokud je potřeba
nastavit nějakou proměnnou ve velkém rozsahu.
*/
/*
Nyní se tedy můžeme pustit do psaní programu. Náš program bude jednoduše
vypisovat kódy stisknutých tlačítek na displej. Tento program bude pro nás
velmi užitečný, protože až budeme později potřebovat, aby program reagoval
na dané tlačítko, budeme potřebovat vědět, jaké číslo (kód) toto tlačítko
Nyní se tedy můžeme pustit do psaní programu. Náš program bude jednoduše
vypisovat kódy stisknutých tlačítek na displej. Tento program bude pro nás
velmi užitečný, protože až budeme později potřebovat, aby program reagoval
na dané tlačítko, budeme potřebovat vědět, jaké číslo (kód) toto tlačítko
představuje.
Čtení klávesnice bude probíhat vždy jednou za 100 ms (10x za vteřinu), což
zajistíme pomocí časovače. pro čtení klávesnice nám bude stačit jednoduchý
časovač TC0\.
zajistíme pomocí časovače. pro čtení klávesnice nám bude stačit jednoduchý
časovač TC0\.
Zároveň budeme na displej vypisovat proměnnou "opakovani" která se pokaždé,
když je navrácen kód tlačítka zvýší o jednnu. Je to proměnná typu unsigned
char - bude se tedy zvyšovat jen do 255, protože pak přeteče a začíná
char - bude se tedy zvyšovat jen do 255, protože pak přeteče a začíná
opět od nuly.
*/
#define F_CPU 1000000 // Taktovací frekvence procesoru 1 MHz
#define F_CPU 1000000 // Taktovací frekvence procesoru 1 MHz
#include <avr/io.h> //Knihovna vstupů a výstupů
#include <avr/interrupt.h> //Knihovna přerušení
......@@ -97,10 +85,10 @@ opět od nuly.
#include "lcd.c" //Obslužné rutiny pro display
#include "kbd_2x3dm.c" //Obslužné rutiny pro klávesnici
#define TCNT0VAL (256-(F_CPU/1024/10))//Hodnota, od které bude časovač
#define TCNT0VAL (256-(F_CPU/1024/10))//Hodnota, od které bude časovač
//počítat, než přeteče a vyvolá přerušení.
//256 => maximum čítače + 1 = přetečení
//1024 => dělička,
//1024 => dělička,
//10 => přerušení se vyvolá 10x za vteřinu
volatile unsigned char tlacitko=0;//Globální proměnná obsahující kód stisknutého
......@@ -110,19 +98,19 @@ volatile unsigned char tlacitko=0;//Globální proměnná obsahující kód stis
//vektor přerušení vykoná se vždy když přeteče časovač TC0 (cca 10x za vteřinu)
ISR(TIMER0_OVF_vect)
{
TCNT0=TCNT0VAL; //nastavení hodnoty, od které časovač počítá
//(jinak by počítal od nuly)
TCNT0=TCNT0VAL; //nastavení hodnoty, od které časovač počítá
//(jinak by počítal od nuly)
tlacitko=kbd_read(); //přečti klávesnici a hodnotu ulož do "tlacitko"
}
int main(void)
{
unsigned char opakovani=0; //proměnná, která se pokaždé po vrácení kódu
unsigned char opakovani=0; //proměnná, která se pokaždé po vrácení kódu
//tlačítka zvýší o 1
TCCR0=0B00000101; //zapnout TC0 s předděličkou 1024
setb (TIMSK,0); //povol přerušení při přetečení TC0 (TCNT0==0x100)
SREG |= (1<<7); //povolení globálního přerušení
SREG |= (1<<7); //povolení globálního přerušení
TCNT0=TCNT0VAL; //resetTC
lcd_ini(); //inicializace displeje (nastavení výstupních pinů a zahájení komunikace)
......@@ -153,4 +141,4 @@ while(1) //hlavní smyčka
//Pro radioklub OK1KVK naspal Vašek Král
```
\ No newline at end of file
```
+++
title = "AVR - LCD panel - atmega_lcd_uni_cfg.c"
perex_e = "
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: atmega_lcd_uni_cfg.c == atmega_lcd_uni_cfg.pdf == atmega_lcd_uni_cfg.htm
.
.
"
tags = ["Článek"]
tags = ["Technické články", "Programování", "C/C++", "Rozbité články"]
published = "2012-03-14T06:53:07.000Z"
author = "Michal, OK1WMR"
perex_e = "Kompatibilní zapojení: LCD panel s ATmega8"
+++
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: atmega_lcd_uni_cfg.c == atmega_lcd_uni_cfg.pdf == atmega_lcd_uni_cfg.htm
.
.
Kompatibilní zapojení: LCD panel s ATmega8
* * *
Ke stažení: atmega_lcd_uni_cfg.c == atmega_lcd_uni_cfg.pdf == atmega_lcd_uni_cfg.htm
<title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="generator" content="SynEdit HTML exporter"> <style type="text/css">&amp;amp;lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --&amp;amp;gt;</style>
---
```
```c
/*---------------------------------------------------------------------------
soubor: atmega_lcd_uni_cfg.c
......@@ -87,6 +75,6 @@ kbd_2x3dm.c
#define D7 7
//eof
//(c) OK1ZKV 2012
//(c) OK1ZKV 2012
```
\ No newline at end of file
```
+++
title = "AVR - LCD panel - kbd_2x3dm.c"
perex_e = "
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: kbd_2x3dm.c == kbd_2x3dm.pdf == kbd_2x3dm.htm
.
.
"
tags = ["Článek"]
tags = ["Technické články", "Programování", "C/C++", "Rozbité články"]
published = "2012-03-14T06:58:52.000Z"
author = "Michal, OK1WMR"
perex_e = "Kompatibilní zapojení: LCD panel s ATmega8"
+++
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: kbd_2x3dm.c == kbd_2x3dm.pdf == kbd_2x3dm.htm
.
.
Kompatibilní zapojení: LCD panel s ATmega8
* * *
Ke stažení: kbd_2x3dm.c == kbd_2x3dm.pdf == kbd_2x3dm.htm
<title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="generator" content="SynEdit HTML exporter"> <style type="text/css">&amp;amp;amp;lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --&amp;amp;amp;gt;</style>
---
```
```c
/*---------------------------------------------------------------------------
soubor: kbd_2x3dm.c
......@@ -32,15 +20,15 @@ verze: 1.0
datum: 9.1.2012
popis:
Rutiny pro obsluhu maticove klavesnice 2x3 klavesy.
Rutiny pro obsluhu maticove klavesnice 2x3 klavesy.
Prepinani rad klavesnice je rizeno pomoci signalu KBDAB.
Pokud jsou v serii s klavesami zapojeny diody, jsou presne detekovana vsechna
Pokud jsou v serii s klavesami zapojeny diody, jsou presne detekovana vsechna
stisknuta tlacitka (umoznuje pouziti dvojhmatu)
rutina kbd_ini() slouzi k inicializaci portu a pinu ke kterym je pripojena klavesnice
rutina kbd_read() precte klavesnici a vrati hodnotu stiskle klavesy (klaves)
- optimalni je spoustet tuto funkci 10 - 20 krat za sekundu
- optimalni je spoustet tuto funkci 10 - 20 krat za sekundu
---------------------------------------------------------------------------*/
#ifndef setb //setb = makro ze souboru "wait.c"
......@@ -86,7 +74,7 @@ rutina kbd_read() precte klavesnici a vrati hodnotu stiskle klavesy (klaves)
//konstanty pro klávesnici:
#ifndef KBD_SKIP
#define KBD_SKIP 20 //pocet vynechanych cyklu mezi opakovanym navracenim
#define KBD_SKIP 20 //pocet vynechanych cyklu mezi opakovanym navracenim
#endif //hodnoty stale stiskleho tlacitka (autorepeat)
#ifndef KBD_ACC
......@@ -118,30 +106,30 @@ for(i=0;i<2;i++) //cyklus probehne dvakrat (2 rady tlacitek)
{
wait_us(5); //cekani (kvuli fyzicke konstrukci klavesnice (parazitni kapacity)
if((PIN_KBD1&(1<<KBD1))==0) //pokud je stisknute tlacitko 1 (na vstupu je log. nula)
setb(klavesa,0+(3*i)); //nastav prislusny bit promenne klavesa
if((PIN_KBD2&(1<<KBD2))==0) //pokud je stisknute tlacitko 2
setb(klavesa,0+(3*i)); //nastav prislusny bit promenne klavesa
if((PIN_KBD2&(1<<KBD2))==0) //pokud je stisknute tlacitko 2
setb(klavesa,1+(3*i)); //nastav prislusny bit promenne klavesa
if((PIN_KBD3&(1<<KBD3))==0) //pokud je stisknute tlacitko 3
if((PIN_KBD3&(1<<KBD3))==0) //pokud je stisknute tlacitko 3
setb(klavesa,2+(3*i)); //nastav prislusny bit promenne klavesa
negb(PORT_KBDAB,KBDAB); //prepni na druhou radu tlacitek
}
}
if(klavesa>0) //pokud bylo stisknuto nejake tlacitko
{
if(klavesa_old==klavesa) //pokud je stisknuto porad stejne tlacitko
{
{
if(cekani>KBD_SKIP) //pokud se jiz vynechal dostatecny pocet cyklu
{
cekani=zrychleni; //priste se bude cekat o nekolik cyklu mene
cekani=zrychleni; //priste se bude cekat o nekolik cyklu mene
//(pocet je dan aktualni hodnotou promenne "zrychleni")
if(zrychleni<=KBD_SKIP) //pokud jeste ma smysl zrychlovat
zrychleni+=KBD_ACC; //zrychli
return klavesa; //vrat hodnotu klavesy volajici funkci
}
else //pokud se jeste nevynechal dostatecny pocet cyklu
else //pokud se jeste nevynechal dostatecny pocet cyklu
cekani++; //pripocti dalsi vynechany cyklus
}//if(klavesa_old==klavesa)
}//if(klavesa_old==klavesa)
else //pokud neni stisknuto stejne tlacitko jako minule
{
cekani=0;
......@@ -157,4 +145,4 @@ return 0;
//eof
//(c) OK1ZKV 2012
```
\ No newline at end of file
```
+++
title = "AVR - LCD panel - lcd.c"
perex_e = "
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: lcd.c == lcd.pdf == lcd.htm
.
.
"
tags = ["Článek"]
tags = ["Technické články", "Programování", "C/C++", "Rozbité články"]
published = "2012-03-14T06:42:07.000Z"
author = "Michal, OK1WMR"
perex_e = "Kompatibilní zapojení: LCD panel s ATmega8"
+++
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: lcd.c == lcd.pdf == lcd.htm
.
.
Kompatibilní zapojení: LCD panel s ATmega8
* * *
Ke stažení: lcd.c == lcd.pdf == lcd.htm
<title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="generator" content="SynEdit HTML exporter"> <style type="text/css">&amp;amp;amp;amp;amp;lt;!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --&amp;amp;amp;amp;amp;gt;</style>
---
```
```c
/*---------------------------------------------------------------------------
soubor: lcd.c
......@@ -86,4 +74,4 @@ void lcd_instr(unsigned char ins); //napis instrukci
void lcd_char (unsigned char dat); //napis znak
void lcd_num3 (unsigned int num,unsigned char znak); //napis cislo (3 cifry)
void lcd_num2 (unsigned char num,unsigned char znak);//napis cislo (2 cifry)
```
\ No newline at end of file
```
content/articles/2012/avr-lcd-panel-s-atmega8/01.jpg

131 B

content/articles/2012/avr-lcd-panel-s-atmega8/02.jpg

131 B

File added
File added
File added
File added