LCD modul od PK Design
Pořízení modulu
PK-design nabízí modul s kombinací: znakový LCD, maticová klávesnice a multiplexně řízený LED displej. V současnosti je už na světě druhá verze. Modul lze pořídit za 590 Kč bez DPH a to na stránkách výrobce a nebo v našem e-shopu. Součástí dodávky je i propojovací kabel k základové desce.Pracujeme s LCD
Modul je osazen znakovým LCD od fy Elatec. Je řízen klasickým řadičem HD44780. Pro jednoduché využití jsem vytvořil jednoduché knihovny pro práci s LCD. Obsahují následující fce:-
void LCD_Init()
-
void LCD_Clear()
-
void LCD_WriteData(unsigned char data)
-
void LCD_WriteCommand(unsigned char command)
-
void LCD_WriteString(char* string)
-
void LCD_WriteCString(const char* string)
-
void LCD_Position(char radek, char sloupec)
Praktický přiklad
V minulém díle jsme si ukázali jak využít AD převodník. Měřili jsme napětí. Dnes si ukážeme, jak vytvořit jednoduchý dvou kanálový voltmetr do 5V. zobrazovat na LCD. Nejdříve si uvedeme zdrojový kód:#define ADC_VREF_TYPE 0x40
#define F_CPU 147456000
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include "lcd_lib.h"
void delay_ms(unsigned int val)
{
unsigned int i;
for (i = 0; i < val; i++)
_delay_loop_2(3686);
}
unsigned int read_adc(unsigned char kanal)
{
ADMUX = kanal;
ADCSRA| = 0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA |= 0x10;
return ADCW;
}
int main(void)
{
unsigned int vysledek;
unsigned char kanal = 0;
float realne;
PORTC = 0x00;
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x3C;
LCD_Init();
LCD_WriteCString("Napeti: ");
ADMUX = ADC_VREF_TYPE;
ADCSRA = 0x87;
while (1)
{
vysledek = read_adc(kanal);
realne = (float) 5.03 / 1023;
realne = (float) realne * vysledek;
vysledek = (float) realne * 100;
LCD_Position(kanal , 9);
LCD_PrDec(vysledek / 100);
LCD_WriteData('.');
LCD_PrDec(vysledek % 100);
LCD_WriteData('V');
if (kanal) kanal = 0; else kanal = 1;
}
}
Protože se jedná o velmi jednoduchý program, není nutné jej dalekosáhle vysvětlovat. Hlavní inovací oproti minulému příkladu je zobrazení hodnoty na LCD. Funkce pro práci s LCD jsou uvedeny výše. Pro naše účely není nutné dopodrobna znát jak fungují, protože si je můžete stáhnout zde. Knihovnu pro práci s LCD budu postupem času doplňovat. Na možnost stažení nové verze samozřejmě upozorním.
Jen upozorním, že pokud byste chtěli používat jiné porty pro připojení LCD, stačí změnit názvy portů v souboru lcd_lib.h.
Komentovat článek
Komentáře k článku
Zdravím, knihovna je v nové verzi - v té komunikuje displej na dvojici portů A,B, odpadá nově jakákoliv konfigurace v main.c. Porty lze samozřejme libovoně změnit
Zdravim, chcel by som sa spytat preco je v lcd_lib kde su definovane porty definovane PORTA a PORTB ked lcd komunikuje s PORTC ako bolo tu nizsie spomenute.Dakujem.
Zdravim, chcel by som sa spytat preco je v lcd_lib kde su definovane porty definovane PORTA a PORTB ked lcd komunikuje s PORTC ako bolo tu nizsie spomenute.Dakujem.
V této verzi bohužel nemohu moc roztahovat text (špatný lyout). Ale chystá se nová, kde bude kód řádně okomentován a bude tam i sekce "zdrojové kódy", kde bude ke stažení vše v originálu a hlavně vše bude funkční a vyzkoušené. To znamená, že ke každé knihovně bude sada příkladů, tak aby každý zájemce viděl na první pohled k čemu jaká funkce slouží
Vidím, že tu píšou hlavně začátečníci a nejspíš je to pro ně i určené. Osobně bych přivítal víc komentářů v programu, možná by to pomohlo. Btw, jsem samozřejmě taky amatér :)
Bohužel v Bascomu nedělám, ale pokud se najde někdo, kdo by byl ochoten zde uveřejňovat své programy, můžeme se dohodnout...
Dobrý den, nebyly by pro začátečníky popisy a ukázky programů pro AVR i v BASCOMu ? Jinak děkuji za srozumitelné popisy periferií AVR (i když v C).
Dobrý den, jsem začátečník a některé věci mi unikly. Přesto děkuji za reakce.
No asi si trochu netozumíme, v tomto příkadě komunikuju po 8-bitové datové sběrnici. Připojení signálů je patrné z hlavičkového souboru knihovny
Dobrý den, problém vyřešen (našel jsem příklad zapojení). Problém byl v HW zapojení a nevědomost, že komunikujete 4-bitove(předpokládám). Na ovládání displeje Vám tedy stačí 1 port (PORTC). Děkuji
Zdravím, bohužel se pletete, data se do LCD přenáší přes PORTC. Zbytek odpovědi najdete na fóru programujte, ale ve stručnosti:
Jakélikoliv nastavení interního nebo externího oscilátoru postačuje. Pouze si zkontrolujte, zda máte vypnut JTAG. V případě že je JTAG zapnut, nemůžete využít některé piny portu C
Je-li nutný krystal, jaké má parametry a zapojení souhlasí u ATMEGA8 (PB6 a PB7 - sv.9 a 10). Prosím o nastavení fuse. Děkuji
Dobrý den, prosím o radu - zapojení LCD modulu s řadičem 44780 k ATMEGA 8(16). HW bych to měl mít dobře (beru, že datový tok jde přes PORT D). Ptám se, zde je nutné mít zapojeny kryslal, jiné nastavní FUSE než default, nebo je to jen jednoduché zapojení DB0-7 na PORT D, RS e E na PORT C (PC0 a 1)). Děkuji

