Simpel C kod för en vanlig HD44780

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

jo, ändrade till _delay_loop_2 på dom två eller tre som hade lite högre värden...

som det ser ut nu kommer jag inte riktigt åt den porten på kortet...

så jag ändrade det till

Kod: Markera allt

#define LCD_D4 PA0
#define LCD_D5 PA1
#define LCD_D6 PA2
#define LCD_D7 PA3

#define LCD_RS PA4
#define LCD_E  PA6
men, det borde väl funka med eller?

ska prova jorda rw å se om det blir någon förändring


justde..

det va den senaste gången jag grejade med frekvensen fick jag det inte att funka med den extärna, den gick på den intärna på 4Mhz hela tiden så ja förmodar att den gör de än...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> ...Det ser ut som du spegelvänt det hela...

Då skulle 5V och GND ligga på de smala kopparbanorna som går iväg över kortet tillsammans med de andra, verkar inte troligt, eller ?

Hur som helst, alla LCD'er jag har sett har haft "1" och "14" (eller "16" markerat i screentrycket. Syns inget på bilden, men det kanske är fel sida...
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

kan vara möjligt att jag spegelvänt databussen på bilden där, jag kopplade om det för en stundsedan men, nu sitter det rätt, har dubbelkollat 100ggr..

sen står det 16,15,1 sen står det 14 på sista
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Som sagt, "Koppla precis som define-raderna antyder och ändra ingenting."! Koden var bara ett ihopsläng för att jag själv snabbt ville få det att fungera. Sedan dess har jag inte använt den så mycket.

Men jag har ändrat manuellt det som behövs för att köra på PortA nu.

Kod: Markera allt

#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>

#define LCD_D4 PA0
#define LCD_D5 PA1
#define LCD_D6 PA2
#define LCD_D7 PA3

#define LCD_RS PA4
#define LCD_E  PA6 

#define delay _delay_loop_2

// Initieringskommandon till LCD:n
static const uint8_t lcd_init_cmds[] =
{
   _BV(LCD_D5)|_BV(LCD_D4),
   _BV(LCD_D5)|_BV(LCD_D4),
   _BV(LCD_D5)|_BV(LCD_D4),
   _BV(LCD_D5),
   _BV(LCD_D5),
   _BV(LCD_D7),
   _BV(0), _BV(LCD_D7),
   _BV(0), _BV(LCD_D4),
   _BV(0), _BV(LCD_D6)|_BV(LCD_D5),
   _BV(0), _BV(LCD_D7)|_BV(LCD_D6)
};


void lcd_cmd(uint8_t cmd)
{
   PORTA &= ~(_BV(LCD_D7)|_BV(LCD_D6)|_BV(LCD_D5)|_BV(LCD_D4));
   PORTA |= cmd;

   PORTA |= _BV(LCD_E);
   delay(10);
   PORTA &= ~_BV(LCD_E);

   delay(1000);
}

void lcd_byte(uint8_t byte)
{
   PORTA |= _BV(LCD_RS);
   delay(10);

   lcd_cmd((byte&0xf0) >> 4);
   lcd_cmd(byte&0x0f);

   PORTA &= ~_BV(LCD_RS);
   delay(10);
}

void lcd_print_string(uint8_t *string)
{
   while (*string)
      lcd_byte(*string++);
}

void lcd_move_cursor(const uint8_t row, const uint8_t offset)
{
   lcd_cmd(_BV(LCD_D7) | (row==1 ? _BV(LCD_D6) : 0) | (offset&16 ? _BV(LCD_D4) : 0));
   lcd_cmd((offset&0xf) << 1);
}

void lcd_init()
{
   uint8_t i;

   DDRA |= _BV(LCD_D4)|_BV(LCD_D5)|_BV(LCD_D6)|_BV(LCD_D7);
   PORTA |= _BV(LCD_D4)|_BV(LCD_D5)|_BV(LCD_D6)|_BV(LCD_D7);

   DDRA |= _BV(LCD_RS)|_BV(LCD_E);
   PORTA &= ~(_BV(LCD_RS)|_BV(LCD_E));
   
   delay(20000); //20ms

   for (i=0;i<sizeof(lcd_init_cmds);i++)
      lcd_cmd(lcd_init_cmds[i]);
}

int main()
{
   lcd_init();
   lcd_move_cursor(0,0);
   lcd_print_string("Hej");

   return 0;
}
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

tack för att ni tar er tid...

dock så är displayen fortfarande kålsvart...

börjar förlora hoppet om att den är hel nu...
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Du har kopplat RW till jord?
Kan du mäta spänningarna igen?
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

visst, mäter och återkommer med resultat i detta svar...

rw är kopplad till jodrd ja...

Edit:

D1 = 0,5v - 0v
D2 = 5,5v
D3 = 0v
D4 = 4,88v
RS = 0v
E = 0,5v - 0v
Senast redigerad av Virr3 15 oktober 2005, 00:18:02, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kanske kolsvart ? :wink: :wink:
mrhedin
Inlägg: 114
Blev medlem: 3 maj 2005, 19:46:24
Ort: Trollhättan/Kiruna
Kontakt:

Inlägg av mrhedin »

Nej det stämmer nog att du inte spegelvänt dina anslutningar.

Från vänster sett i din bild på din display, varför börjar du med GND först på 3dje anslutningen och inte på den längst till vänster?
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

den första är pin 16 den andra är 15... det står på den andra sidan av displayen...
mrhedin
Inlägg: 114
Blev medlem: 3 maj 2005, 19:46:24
Ort: Trollhättan/Kiruna
Kontakt:

Inlägg av mrhedin »

Ok, dom sitter rätt alltså antar jag... Jag skulle vilja ha dom längst ut där, men jag blir nog fintad av att jag sitter och jämför med min display hela tiden...
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

http://www.elfa.se/pdf/75/07550130.pdf

där ser du på bilden hur det serut...
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Virr3> Hur menar du med kolsvart?

Vad jag iaf har märkt generellt med HD44780 komptibla LCD:er är att om LCDn funkar (dvs innan den har blivit initierad) så är en av raderna helt fylld. Om ingen av raderna är detta eller om raderna är det så kanske du ska schystera kontrasten. I annat fall är jag 100% att du har kopplat FEL. Det spelar inte hur många gånger man TITTAR på en koppling som man anser ska vara rätt... koppla om den! Vrid å vänd på LCDn och trippel kolla att du verkligen har lött på rätt pinnar på LCDn! Tro INTE,VET!

//rickeboy
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

Det kan också vara så att allt _ser_ rätt ut men inte är det. Min LCD börjad visa skumma tecken. Då var det något glapp eller kortis på RS-anslutningen. Tvättade och vickade lite så började den funka igen
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

rickeboy skrev:Vad jag iaf har märkt generellt med HD44780 komptibla LCD:er är att om LCDn funkar (dvs innan den har blivit initierad) så är en av raderna helt fylld. Om ingen av raderna är detta eller om raderna är det så kanske du ska schystera kontrasten.
På en OLED-display brukar man inte se något förrens man skriver ut något tecken på skärmen.
Skriv svar