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 382 additions and 292 deletions
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
+++
title = "AVR - LCD panel s ATmega8"
tags = ["Technické články", "Konstrukce", "Konstrukce s mikroprocesorem", "Rozbité články"]
published = "2012-03-14T06:04:01.000Z"
author = "Michal, OK1WMR"
image = "01.jpg"
perex_e = "Tato konstrukce slouží k dalšímu seznámení s mikroprocesory od firmy
Atmel. Jde o jednoduché zapojení, kde jsme připojili nové rozhraní - LCD
displej. Na jednoduchých příkladech programů budeme postupně pronikat do tajů
jednočipů."
+++
Tato konstrukce slouží k dalšímu seznámení s mikroprocesory od firmy Atmel.
Jde o jednoduché zapojení, kde jsme připojili nové rozhraní - LCD displej.
Na jednoduchých příkladech programů budeme postupně pronikat do tajů
jednočipů.
.
.
Zde můžete najít články a výukové programy s popisem, které budeme zkoušet na tomto zapojení.
**PROGRAMY:**
[LCD_001.c](index.php/koutek-avr/94-kit-2-lcd-panel-s-atmega8-zapojeni-a-programy/529-avr-lcd-panel-1-program)
[LCD_002.c](index.php/koutek-avr/94-kit-2-lcd-panel-s-atmega8-zapojeni-a-programy/530-avr-lcd-panel-2-program)
**Pomocné programy:**
[atmega_lcd_uni_cfg.c](index.php/koutek-avr/94-kit-2-lcd-panel-s-atmega8-zapojeni-a-programy/526-avr-lcd-panel-atmegalcdunicfgc)
[kbd_2x3dm.c](index.php/koutek-avr/94-kit-2-lcd-panel-s-atmega8-zapojeni-a-programy/527-avr-lcd-panel-kbd2x3dmc)
[lcd.c](index.php/koutek-avr/94-kit-2-lcd-panel-s-atmega8-zapojeni-a-programy/525-avr-lcd-panel-lcdc)
[wait.c](index.php/koutek-avr/94-kit-2-lcd-panel-s-atmega8-zapojeni-a-programy/528-avr-lcd-panel-waitc)
![](01.jpg)
Schéma:
![schema](sch.png)
Plošný spoj:
![pcb](pcb.png).
PDF verze: [schéma](LCD_panel_sch.pdf), [plošný spoj 1:1 (100x105mm)](LCD_panel_pcb.pdf), osazovací plán [TOP](LCD_panel_osaz_TOP.pdf) a [BOT](LCD_panel_osaz_BOT.pdf)
Eagle 6.1: [SCH](LCD_panel.sch) a [BRD](LCD_panel.brd) + doporučená [Pájovo](http://paja-trb.unas.cz/elektronika/eagle.html) knihovna součástek [#PaJa_22.lbr](http://paja-trb.unas.cz/elektronika/eagle/paja_lbr_413.zip)
Seznam použitých součástek:
- LCD - displej 16x2 s řadičem HD44780 - [TME.cz](http://www.tme.eu/cz/katalog/?idp=1#cleanParameters%3D1%26md5%3Dtbd5d22cb4e6847d41578d92275a384d9%26search%3DRC1602BB%2B)
- IC1 - ATmega8 - DIL28 - mikroprocesor
- Krabička - konstrukční krabička s bočnicemi - SE100x105mm + 2x FEF100 + 4x vrut M3x25
![](02.jpg).
content/articles/2012/avr-lcd-panel-s-atmega8/pcb.png

130 B

content/articles/2012/avr-lcd-panel-s-atmega8/sch.png

130 B

+++
title = "AVR - LCD panel - wait.c"
perex_e = "
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: wait.c == wait.pdf == wait.htm
.
.
"
tags = ["Článek"]
tags = ["Technické články", "Programování", "C/C++", "Rozbité články"]
published = "2012-03-14T07:03:37.000Z"
author = "Michal, OK1WMR"
perex_e = "Kompatibilní zapojení: LCD panel s ATmega8"
+++
Kompatibilní zapojení: LCD panel s ATmega8
Ke stažení: wait.c == wait.pdf == wait.htm
.
.
Kompatibilní zapojení: LCD panel s ATmega8
* * *
Ke stažení: wait.c == wait.pdf == wait.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
/*---------------------------------------------------------------------------
soubor: wait.c
......@@ -90,6 +78,6 @@ asm("_wus1:");
}
//eof
//(c) OK1ZKV 2012
//(c) OK1ZKV 2012
```
\ No newline at end of file
```
+++
title = "AVR Školička - LEKCE #1"
perex_e = "LEKCE #1 - Blikáme s LED
PDF verze pro tisk ke stažení zde
Použitý vývojový kit LED panel s ATmega8 + schéma LED panelu
Untitled
&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;
#define F_CPU 1000000UL // 1 MHz (základní frekvence) kvůli časování delay.h
#include &lt;avr/io.h&gt; //Knihovna vstupů a výstupů (PORT, DDR, PIN)
#include &lt;util/delay.h&gt; //Knihovna čekacích funkcí (delay=čekej [ms])
int main (void)
{ // zažátek funkce main
DDRB =0xff;
for(;;) // vytvoření nekonečné smyčky
{ //začátek hlavní smyčky
PORTB=0b00000001; // nastav PORT B na 0b00000001
_delay_ms (1000); // počkej 1s
PORTB=0b00000000; // nastav PORT B na 0b00000000
_delay_ms (1000); // počkej 1s
} //konec hlavní smyčky
} //konec funkce main
Vývojový graf programu:
tags = ["Technické články", "Programování", "C/C++", "Rozbité články"]
published = "2012-01-12T08:54:54.000Z"
author = "Michal, OK1WMR"
perex_e = "LEKCE #1 - Blikáme s LED
PDF verze pro tisk ke stažení zde
Použitý vývojový kit LED panel s ATmega8 + schéma LED panelu
Untitled
&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;
#define F_CPU 1000000UL // 1 MHz (základní frekvence) kvůli časování delay.h
#include &lt;avr/io.h&gt; //Knihovna vstupů a výstupů (PORT, DDR, PIN)
#include &lt;util/delay.h&gt; //Knihovna čekacích funkcí (delay=čekej [ms])
int main (void)
{ // zažátek funkce main
DDRB =0xff;
for(;;) // vytvoření nekonečné smyčky
{ //začátek hlavní smyčky
PORTB=0b00000001; // nastav PORT B na 0b00000001
_delay_ms (1000); // počkej 1s
PORTB=0b00000000; // nastav PORT B na 0b00000000
_delay_ms (1000); // počkej 1s
} //konec hlavní smyčky
} //konec funkce main
Vývojový graf programu:
"
tags = ["Článek"]
+++
LEKCE #1 - Blikáme s LED
PDF verze pro tisk ke stažení zde
Použitý vývojový kit LED panel s ATmega8 + schéma LED panelu
Untitled
&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;
#define F_CPU 1000000UL // 1 MHz (základní frekvence) kvůli časování delay.h
#include &lt;avr/io.h&gt; //Knihovna vstupů a výstupů (PORT, DDR, PIN)
#include &lt;util/delay.h&gt; //Knihovna čekacích funkcí (delay=čekej [ms])
int main (void)
{ // zažátek funkce main
DDRB =0xff;
for(;;) // vytvoření nekonečné smyčky
{ //začátek hlavní smyčky
PORTB=0b00000001; // nastav PORT B na 0b00000001
_delay_ms (1000); // počkej 1s
PORTB=0b00000000; // nastav PORT B na 0b00000000
_delay_ms (1000); // počkej 1s
} //konec hlavní smyčky
} //konec funkce main
Vývojový graf programu:
LEKCE #1 - Blikáme s LED
PDF verze pro tisk ke stažení zde
Použitý vývojový kit LED panel s ATmega8 + schéma LED panelu
Untitled
&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;
#define F_CPU 1000000UL // 1 MHz (základní frekvence) kvůli časování delay.h
#include &lt;avr/io.h&gt; //Knihovna vstupů a výstupů (PORT, DDR, PIN)
#include &lt;util/delay.h&gt; //Knihovna čekacích funkcí (delay=čekej [ms])
int main (void)
{ // zažátek funkce main
DDRB =0xff;
for(;;) // vytvoření nekonečné smyčky
{ //začátek hlavní smyčky
PORTB=0b00000001; // nastav PORT B na 0b00000001
_delay_ms (1000); // počkej 1s
PORTB=0b00000000; // nastav PORT B na 0b00000000
_delay_ms (1000); // počkej 1s
} //konec hlavní smyčky
} //konec funkce main
Vývojový graf programu:
content/articles/2012/cq-world-wide-wpx-cw-2012/12_wpx_graf.png

129 B

+++
title = "CQ World Wide WPX - CW - 2012"
tags = ["Závody", "HF", "Rozbité články"]
published = "2012-06-11T13:08:49.000Z"
author = "Michal, OK1WMR"
perex_e = "Jako několik posledních let, i letos jsme se zúčastnili CW části CQ WW
WPX Contestu. Opět ve stejné sestavě, tedy moje maličkost, Míra
OK1DUB,Pavel OK1AW a Vašek OK1VKQ. Původně se k nám měl přidat i Martin
OK3MAD, ale povinnosti ho odvály jinam. Oproti loňsku jsme plánovali pár změn ve vybavení. Předně to je nová 5
el. Yagi na 15m z dílny Jirky OK5IM. Jirko díky, anténa je skvělá. Další
novinka měly být dva beverage pro poslech na dolních pásmech. Jako
poslední jsme uvažovali i o poslechovém pracovišti, ale to jsme nakonec
nerealizovali
.
.
.
"
+++
Jako několik posledních let, i letos jsme se zúčastnili CW části CQ WW
WPX Contestu. Opět ve stejné sestavě, tedy moje maličkost, Míra
OK1DUB,Pavel OK1AW a Vašek OK1VKQ. Původně se k nám měl přidat i Martin
OK3MAD, ale povinnosti ho odvály jinam. Oproti loňsku jsme plánovali pár změn ve vybavení. Předně to je nová 5
el. Yagi na 15m z dílny Jirky OK5IM. Jirko díky, anténa je skvělá. Další
novinka měly být dva beverage pro poslech na dolních pásmech. Jako
poslední jsme uvažovali i o poslechovém pracovišti, ale to jsme nakonec
nerealizovali
.
.
.
.
Já jsem odjel na BV už ve čtvrtek odpoledne. Bylo třeba ještě připravit materiál na stavbu beverage a tak jsem to nechtěl nechat až na pátek. Nakonec mi to zabralo celý večer, včetně přípravy operátorského pracoviště a spát jsem šel až kolem půlnoci.
V pátek ráno, už v osm, hodin dorazili Vašek VKQ a Míra DUB. Po přivítání a prohození pár slov jsme se dali do práce. Začali jsme akcí, která přímo nesouvisela s vlastním závodem. Míra s sebou přivezl zázračný stroj a tak jsme se dali do vyměření našeho pozemku na BV, o kterém jsme nikdy vlastně nevěděli, kde ve skutečnosti leží. To nám zabralo cca 2 hodinky. Pak už jsme se věnovali vlastnímu závodu. První na řadě bylo vytažení 19m stožáru, na kterém byl tribander. Vzhledem k předpřipraveným kotvám to až tolik času nezabralo. Další v pořadí bylo osvědčené INV V na 160m. Protože anténu používáme už několikátý rok, ani toto nebyl problém.
Nakonec přišla řada na novinku – beverage. Jako první jsme se pustli do beverage na západ. Jeho začátek jsme zvolili vedle stožárku BTSky a pokračovali jsme směrem z kopce po cestě. Konstrukční detaily nebudu popisovat, ale všechno šlo celkem bez problémů. Když se nám zdálo, že by to mohlo stačit. Míra vzal pásmo a jal se změřit délku. Ukázalo se, že naše oko nebylo až tak špatné, po malém prodloužení jsme beverage zakončili na délce cca 240m. Instalovali balun, zakončovací odpor a změřením analyzátorem jsme byli velmi překvapeni. Ladilo to velice dobře. Teď ještě jak to bude poslouchat. Druhý beverage jsme táhly směrem na JA, což je podél lesní cesty za chatou mezi 19m a 12m stožárem. Zde je terén malinko horší a tak jsme uchytili ANT střídavě na podpěry nebo na nízké stromky. Vzhledem k nedostatku anténního drátu jsme instalaci ukončili na délce 160m. Po dokončení a instalaci měření opět ukázalo výborný výsledek. Teď už jen jak to půjde v závodě.
Všechny práce jsme dokončili odpoledne kolem 17 hodin a tak zbyl čas i na odpočinek před závodem.
Mezitím se na Blaťák začali sjíždět vytuněné Velorexy na svůj každoroční sraz.
Vlastní závod začal vcelku v klidu a všechno probíhalo bez problémů. Beverage se ukázaly jako skvělá volba. Po přepnutí na ně zmizelo z pásma postranní rušení, statika a všechny ty nežádoucí zvuky a zbyly vlastně jen stanice. Všichni jsme si jen mlaskali. Beverage se osvědčily dokonce i na 40m pásmu jako velmi účinné. Nemohli jsme je však využít v pásmu 160m, kde při přepnutí na vysílání začal vypadávat PA. Bylo nutno snížit výkon a pak bylo všechno v pořádku. Sobotní den nám zpestřily svou aktivitou Velorexy, včetně nezapomenutelného prskání a odéru po celém kopci.
Závod se vyznačoval velmi dobrými podmínkami na 15m, naopak mizerně to fungovalo v pásmu 160m a 10m, kde jsme proti loňsku udělali méně QSO.
Nicméně, konečný výsledek byl pro všechny překvapivý. Pokořili jsme suverénně 3000 QSO a počet bodů se vyšplhal na téměř 8,5 milionu, což je o 50% více než v loňském roce. Jsme všichni rádi, že vynaložená práce přinesla ovoce.
V pondělí jsme vše v poklidu uklidili a k domovu vyrazili kolem 13.00 hodin
Počasí nám přálo, všechno fungovalo, co si víc přát.
Všem díky za účast a spolupráci, a když všechno dobře dopadne, příští rok se opět budeme těšit.
Tak nsl
73
Vláďa OK1FIK
Značka: **OL7C**Závod: CQ World Wide DX - CW - 25\. - 27\. 11\. 2011[oficiální web závodu](http://www.cqwpx.com/) - [3830 výsledek](http://lists.contesting.com/archives/cgi-bin/namazu.cgi?query=OL7C&submit=Search%21&idxname=3830&max=10&result=normal&sort=date%3Alate) - [odeslat vlastní výsledek do 3830](http://www.hornucopia.com/3830score/) - [předběžný výsledek PileUp.ru](http://pileup.ru/search.php?call=OL7C&year=2012&contest_short=cqwpx_cw)
..Contest : CQ World Wide WPX Contest
Callsign : OL7C
Mode : CW
Category : Multi Operator - Single Transmitter (MS)
Overlay : ---
Band(s) : All bands (AB)
Class : High Power (HP)
Zone/State/... :
Locator : JO60JJ
Operating time : 48h00
## BAND QSO DUP PFX POINTS AVG
160 84 0 44 159 1.89
80 420 0 117 960 2.29
40 672 2 269 1962 2.92
20 741 1 235 1357 1.83
15 1161 0 359 2719 2.34
10 191 0 36 243 1.27
---
# TOTAL 3269 3 1060 7400 2.26
TOTAL SCORE : 7 844 000
Operators: OK1FIK, OK1DUB, OK1AW
![](12_wpx_graf.png)Vybavení:ANT: 4el. 20m@14m, 5el. 15m@17m, 3el. tribander 20/15/10@15m, dipól 40m, dipól 80m
RIG: IC-756PROIII+MK2R+ACOM1000 (1kW)SW: [Win-Test](http://win-test.com/)
.[![](phoca_thumb_m_IMG_7839.jpg)](index.php/fotogalerie/category/112-) [![](phoca_thumb_m_IMG_7876.jpg)](index.php/fotogalerie/category/112-) [![](phoca_thumb_m_IMG_7899.jpg)](index.php/fotogalerie/category/112-)[Fotogalerie](index.php/fotogalerie/category/112-)
.
content/articles/2012/cq-world-wide-wpx-cw-2012/phoca_thumb_m_IMG_7839.jpg

129 B