Tervehdys kaikki,
Olen tässä viikon ajan koittanut saada toimimaan DEM20486 LCD moduulia. Moduuli käyttää ohjaukseensa Samsungin KS0066 piiriä, joka käsittääksei pitäisi olla yhteensopiva HD44780 kanssa.
Moduuli on kytketty AVR AtMega168 seuraavasti:
Moduulin olisi tarkoitus toimia 4-bit modessa.
Kytkennät:
PORTC 0 - 3 → LCD DB4-7
PORTC 4 → LCD RS
PORTC 5 → LCD RW
PORTD 7 → LCD EN
Olen koittanut vaikka mitä ( valmiita lcd kirjastoja, sekä koittanut saada omalla koodilla toimimaan ). Mikään ei näytä auttavan. LCD ledit palavat hienosti, mutta siihen se sitten jääkin. Eli LCD moduulin näyttöön en ole saanut missään välissä näkyviin yhtikäs mitään. Itselläni on vastaavia LCD moduuleja 2 kpl joista kumpikaan ei ole ollut yhteistyö haluisia.
Kytkennät olen tarkistanut moneen otteeseen eikä niissäkään vikaa pitäisi olla.
Osaisiko joku fiksumpi sanoa jotain suuntaa antavaa mikä LCD näytössä voisi olla vikana? Vai voiko kummatkin LCD moduuleista olla rikki?
Laitan viimeisimmän oma kirjoittamani LCD driverin koodin.
#define F_CPU 20000000UL
#include <avr/io.h>
#include <util/delay.h>
#define LCD_DDR_1 DDRC
#define LCD_DDR_2 DDRD
#define LCD_DATA_PORT PORTC
#define LCD_DATA_PIN4 0
#define LCD_DATA_PIN5 1
#define LCD_DATA_PIN6 2
#define LCD_DATA_PIN7 3
#define LCD_RS_PORT PORTC
#define LCD_RS_PIN 4
#define LCD_RW_PORT PORTC
#define LCD_RW_PIN 5
#define LCD_EN_PORT PORTD
#define LCD_EN_PIN 7
void enableLcd()
{
LCD_EN_PORT |= LCD_EN_PIN;
_delay_us( 1 );
LCD_EN_PORT &= LCD_EN_PIN;
}
void initLcd()
{
LCD_DDR_1 = 0xFF;
LCD_DDR_2 = 0xFF;
LCD_RS_PORT &= ~LCD_RS_PIN;
LCD_RW_PORT &= ~LCD_RW_PIN;
LCD_EN_PORT &= ~LCD_EN_PIN;
_delay_ms( 35 );
LCD_DATA_PORT = 0x0A;
enableLcd();
_delay_us( 44 );
LCD_DATA_PORT = 0x0E;
enableLcd();
_delay_us( 44 );
LCD_DATA_PORT = 0x01;
enableLcd();
_delay_ms( 2 );
LCD_DATA_PORT = 0x04;
enableLcd();
}
void writeLcd()
{
LCD_DATA_PORT = 0x04;
LCD_RS_PORT |= LCD_RS_PIN;
enableLcd();
LCD_RS_PORT &= ~LCD_RS_PIN;
_delay_us( 44 );
}
int main()
{
initLcd();
writeLcd();
while( 1 )
{
}
return 0;
}
teg
June 10, 2012, 6:20pm
2
Huomasithan, että kirjoittaessasi väylälle tietoa (LCD_DATA_PORT = 0x0A), kirjoitat samalla kaikki kontrollipinnit nollille?
Eikös näin ole tarkoituskin?
e-lab.de/diverse/DEM20486.pdf
Moduulin speksissä kappaleessa 13 ( LCD INITIALIZING BY INSTRUCTION )
13 - 2 4-bit interface mode --> Function Set
Kuten huomaat controlli pinnit RS ja RW tulee olla nollana.
teg
June 10, 2012, 7:12pm
4
enablelcd() funktio ei luultavasti pelaa kuten olet ajatellut. Enable signaali ei ainakaan sen toimesta mene alas.
Hyvä huomio.
Korjasin tuon + tein muutakin muutosta, mutta ei tahdo vieläkään toimia.
#define F_CPU 20000000UL
#include <avr/io.h>
#include <util/delay.h>
#define LCD_DDR_1 DDRC
#define LCD_DDR_2 DDRD
#define LCD_DATA_PORT PORTC
#define LCD_DATA_PIN4 0
#define LCD_DATA_PIN5 1
#define LCD_DATA_PIN6 2
#define LCD_DATA_PIN7 3
#define LCD_RS_PORT PORTC
#define LCD_RS_PIN 4
#define LCD_RW_PORT PORTC
#define LCD_RW_PIN 5
#define LCD_EN_PORT PORTD
#define LCD_EN_PIN 7
void enableLcd()
{
LCD_EN_PORT |= LCD_EN_PIN;
_delay_us( 1 );
LCD_EN_PORT &= ~LCD_EN_PIN;
}
void initLcd()
{
LCD_DDR_1 = 0xFF;
LCD_DDR_2 = 0xFF;
LCD_RS_PORT &= ~LCD_RS_PIN;
LCD_RW_PORT &= ~LCD_RW_PIN;
LCD_EN_PORT &= ~LCD_EN_PIN;
_delay_ms( 35 );
LCD_DATA_PORT = 0x02;
enableLcd();
LCD_DATA_PORT = 0x02;
enableLcd();
LCD_DATA_PORT = 0x00;
enableLcd();
_delay_us( 44 );
LCD_DATA_PORT = 0x00;
enableLcd();
LCD_DATA_PORT = 0x0F;
enableLcd();
_delay_us( 44 );
LCD_DATA_PORT = 0x00;
enableLcd();
LCD_DATA_PORT = 0x01;
enableLcd();
_delay_ms( 2 );
LCD_DATA_PORT = 0x00;
enableLcd();
LCD_DATA_PORT = 0x07;
enableLcd();
}
void writeLcd()
{
LCD_DATA_PORT = 0x0F;
LCD_RS_PORT |= LCD_RS_PIN;
enableLcd();
LCD_RS_PORT &= ~LCD_RS_PIN;
_delay_us( 44 );
}
int main()
{
initLcd();
DDRB = 0xFF;
while( 1 )
{
writeLcd();
//PORTB ^= 0xFF;
_delay_ms( 20 );
}
return 0;
}
Limba
June 10, 2012, 10:27pm
6
Hmm. alustukset näyttää olevan OK.
Muuten näkykö alussa ennen kun alustetaan näytö yhtään mustia ruutuja?
Mietin että onko toi pin3 LCD Driver “käyttis” / kontrasti jännite oikein.
Limba:
Hmm. alustukset näyttää olevan OK.
Muuten näkykö alussa ennen kun alustetaan näytö yhtään mustia ruutuja?
Mietin että onko toi pin3 LCD Driver “käyttis” / kontrasti jännite oikein.
Mustia ruuttuja ei ole näkyny missään vaiheessa. Olen vetänyt tuohon LCD Driver pinniin saman mitä VCC eli suoraa 5V jännite jänniteregulaattorilta.
teg
June 11, 2012, 7:43am
8
Speksin mukaan LCD driver jännite pitäisi olla korkeampi kuin käyttöjännite
, mikäli oikein tulkitsin taulukkoa.
Hmm VDD +0.3… Voisiko tosiaan olla tuosta kiinni ettei toimi?
Limba
June 11, 2012, 2:53pm
10
ite kyllä tulkitsen tuon että VDD tai max 15v Vdd:tä matalampi
“Vdd-15.0 ~ Vdd + 0.3”
Edit:
Yleensä toi pin3 on kytketty trimmerin keskinastaan, joka on VDD:n ja GND:n välillä
Joissain tapauksissa/vanhemmissa LCD näytöissä tuo vaatii negatiivisen jännitteen.
Ongelma ratkesi.
“Vika” oli siinä, että tosiaan syötin Pin3 Kontrasti pinniin 5V joka tarkoittaa = Tekstin kirkkaus täysillä. Kolvasin pin3 säätövastuksen ja nytten pelittää hienosti.
Limba
June 11, 2012, 4:30pm
12
OK
Hyvä että lähti jotenkin pelittää