Nokia és egyéb telefon LCD-k

Hogyha sikeresen O/PLED illetve hagyományos alfanumerikus - esetleg tán grafikus kijelzővel gyűlik meg a baja valakinek:)
Avatar
doidoi
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2008. november 30. vasárnap, 7:00

Hozzászólás Szerző: doidoi »

na valahogy megvagyok , megoldotam,most mar biteket tudok kuldeni a kijelzore,ez volt a nehez,a tobbi mar csak szepseg dolga :)

most mar csak karakterszetet kel csinaljak , persze a magamet .
majd ha megleszek ,felteszem ide a programot
egy igazi magyarazatal.

sok 100-bol oszeviszasagot latam , de csak igy tanulunk .
Avatar
atideath
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2011. július 3. vasárnap, 6:00

Hozzászólás Szerző: atideath »

Üdv mindenkinek!

Ma jött meg az új kijelzőm a projektemhez de elakadtam egy picit. Ez egy Siemens A70-es kijelző (Feketefehér). A lábkiosztása ismert. Be is kötöttem az Atmega8-hoz. A következő vakvezető dolgokat találtam hozzá, ezt is olyan egyszerű nyelven.

Kód: Egész kijelölése

Reset_LCD
{
  Data=0;
  Clock=0;
  Control=0;
  Data=0;
  Reset=1;
  ChipSelect=0;
  Reset=0;
  Reset=1;
  ChipSelect=1;
}

SendCommand(Command)
{ 
 Data=0;
 Clock=0;
 Control=0;
 ChipSelect=0;
 i = 0;
 do {
   Data = (((1 << (7-i))& Command) > 0);
   Clock=1;
   Clock=0;
   i++;
 } while (i <= 7);
 ChipSelect=1;
}

Init_LCD
{
    SendCommand(0b00100001);
    SendCommand(0b11011010);
    SendCommand(0b00010100);
    SendCommand(0b00001011);
    SendCommand(0b00000101);
    SendCommand(0b00100000);
    SendCommand(0b00010001);
    SendCommand(0b00001100);    // Display normal  
//    SendCommand(0b00001101);    // Display inverse
}  


SetContrast(Value)
{
    SendCommand(0b00100001);
    SendCommand((Value+128));
    SendCommand(0b00100000);
}

GotoLineRow(Line, Row)
{   // Line: 0..7, Row 0..101;
    SendCommand((0b01000000 + Line));
    SendCommand((0b10000000 + Row ));
}

WriteDisplay(Value)
{           
    Data=0;
    Clock=0;
    Control=1;
    ChipSelect=0;
    j = 0;
    do 
    {
        Data = (((1 << (7-j))& Value) > 0);
        Clock=1;
        Clock=0;
        j++;
    } while (j <= 7);
    ChipSelect=1;
}
Egyenlőre csak egy vonalat szeretnék húzni. Majd a többivel elleszek. Valaki tudna ebben segíteni? Még a Reset-es részt meg bírtam írni de ezt a bitléptetéses dolgot nem értem. Másik hogy mindenképpen kell SPI-t használni az LCD-hez? Mert őszintén lövésem sincs miaz :)..

Köszönöm a segítséget és a türelmet!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

SPI: kommunikációs csatorna.

Ezen át vezérled az LCD-t... (azaz ezen át adsz utasításokat neki.)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Az alábbi programrészt nevezzük Szoftveres SPI-nek. (Soros adat BITek küldése 1 Porton át )

Kód: Egész kijelölése

ChipSelect=0;      'LCD Aktiválása 
 I = 0 ; 				/ / 0 -áza Az Index Számlálót
  Do { 				/ / Hátul Tesztelős Ciklus Kezdete
    Data =(((1 <<(7 -i))& Command) > 0) ;		 / / Data Portra Küldi a Parancs (7 – i)-edik Bitjét
    Clock=1;		// Az LCD óra jele = 1 Most olvassa be a küldőt Bitet.
    Clock=0;		// Az LCD óra jele = 0
    i++;			// mutatót a következő bitere állítja
  } while (i <= 7);	// addig vissza ugrik „Do{„ utánra amíg „i” kisebb mint 8
  ChipSelect=1;		// LCD inaktiv lesz.
Tehát itt most nem használ Hardveres SPI-t.
Ami annyival gyorsabb lenne, hogy az egész Bytet (8 Bits) egyszerre átadhatjuk neki.
És automatikusan végrehajtja a fenti „Do{….}While” ciklust.
Az alatt a programunk haladhatna tovább.
Nagy vonalakban ezt nevezzük „SPI” soros adat átvitelnek.
8)
Avatar
Ecku01
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. szeptember 12. hétfő, 6:00

Nokia 6100 kijelző vezérlése + arduino

Hozzászólás Szerző: Ecku01 »

Sziasztok!

Van egy nokia 6100-as kijelzőm, lábait kivezettem. http://www.arduino.cc/playground/upload ... ematic.jpg
e szerint bekötöttem az arduinomba, letöltöttem ugyan ezen az oldalon található library-t és rátöltöttem az alapprogramot, de nem történt semmi. Gondolom a program jó szóval bekötésnél rontottam el vmi. Én úgy értelmeztem a bekötési rajzot, hogy ahova írta a 3,3V-ot ada bekötöttem a gnd-t is és az adatlábakat pedig egy 680 ohm-os ellenállással kötöttem be a megfelelő avr lábhoz.
Mit rontottam el, vagy mire nem figyeltem?
A válaszokat előre is köszönöm!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A 680 ohm soros ellenállás a baj. Lsd a rajzot amit linkeltél...

Az AVR 5V kimenete + 680R : a nikoakijelzo bemenetere 5V jutott. Ha peched van: +halt...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

3V3-as lábra NEM gnd, hanem 3.3V kotendő!
Avatar
Ecku01
DrótVégénSzéndarab
Hozzászólások: 47
Csatlakozott: 2011. szeptember 12. hétfő, 6:00

Hozzászólás Szerző: Ecku01 »

3.3v-os lábra 3.3v-ot kötöttem, csak elírtam sry.
Nem teljesen értem, hogy akkor hogyan kellene. Picit leírnád részletesebben, hogyan oldjam meg a problémát?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Áz ábrán amit linkeltél ott a 3-féle alternatív rajz az 5V-3.3V jelszintek átalakítására. az amit TE 680R ellenállással oldottál meg, a helyett kell ezeket berakni (én a ellenállásosztót javaslom).
Avatar
gomy
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. október 21. szerda, 6:00

3410 LCD

Hozzászólás Szerző: gomy »

ICSoftware írta:
doncarlos írta:Hello!

Annyit szeretnék megtudni hogy vezérlés téren mennyi különbség van egy 3410 és egy 3310 kijelzője között? a 3410 is meg bascommal?
A Nokia 3310 és 3410 ugyan az a kijelző, csak a felbontás más
3310 84x48
3410 96x64
A vezérlés tök ugyan az.
Szevasztok!

Ez tuti? Mert nekem 3410-es lcd-m van. Ennek a chip-je Philips OM6206.
http://www.module.ro/nokia_3510.html
Próbáltad már? Melyik lib kell hozzá?
Köszi a választ!
Avatar
atideath
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2011. július 3. vasárnap, 6:00

Hozzászólás Szerző: atideath »

Sziasztok!

Már régebben írtam Siemens A70-es kezeléssel kapcsolatban. Na most kerültem oda hogy a megvalósítás is esedékes. Megpróbáltam átírni az általam kapott kódot AVR-re.. C-be. De valamiért nem működik. Hátha valaki látja benne a hibát.

Eredeti kód:

Kód: Egész kijelölése

Reset_LCD
{
  Data=0;
  Clock=0;
  Control=0;
  Data=0;
  Reset=1;
  ChipSelect=0;
  Reset=0;
  Reset=1;
  ChipSelect=1;
}

SendCommand(Command)
{ 
 Data=0;
 Clock=0;
 Control=0;
 ChipSelect=0;
 i = 0;
 do {
   Data = (((1 << (7-i))& Command) > 0);
   Clock=1;
   Clock=0;
   i++;
 } while (i <= 7);
 ChipSelect=1;
}

Init_LCD
{
    SendCommand(0b00100001);
    SendCommand(0b11011010);
    SendCommand(0b00010100);
    SendCommand(0b00001011);
    SendCommand(0b00000101);
    SendCommand(0b00100000);
    SendCommand(0b00010001);
    SendCommand(0b00001100);    // Display normal  
//    SendCommand(0b00001101);    // Display inverse
}    

SetContrast(Value)
{
    SendCommand(0b00100001);
    SendCommand((Value+128));
    SendCommand(0b00100000);
}

GotoLineRow(Line, Row)
{   // Line: 0..7, Row 0..101;
    SendCommand((0b01000000 + Line));
    SendCommand((0b10000000 + Row ));
}

WriteDisplay(Value)
{           
    Data=0;
    Clock=0;
    Control=1;
    ChipSelect=0;
    j = 0;
    do 
    {
        Data = (((1 << (7-j))& Value) > 0);
        Clock=1;
        Clock=0;
        j++;
    } while (j <= 7);
    ChipSelect=1;
}
És az átalam írt kód:

Kód: Egész kijelölése

#define LCD_PORT			PORTC   
#define LCD_DATA			PINC4
#define LCD_RESET			PINC1
#define LCD_CE				PINC0
#define LCD_CD				PINC2
#define LCD_CLOCK			PINC3
 


void lcd_reset(void)
{
	LCD_PORT=(0<<LCD_DATA);
	LCD_PORT=(0<<LCD_CLOCK);
	LCD_PORT=(0<<LCD_CD); //  Control=0;
	LCD_PORT=(0<<LCD_DATA);//Data=0;
	LCD_PORT=(1<<LCD_RESET);//Reset=1;
	LCD_PORT=(0<<LCD_CE);//ChipSelect=0;
	LCD_PORT=(0<<LCD_RESET);//Reset=0;
	LCD_PORT=(1<<LCD_RESET);//Reset=1;
	LCD_PORT=(1<<LCD_CE);//ChipSelect=1;
}
void lcd_sendc(int cmd)
{
	LCD_PORT=(0<<LCD_DATA);//Data=0;
	LCD_PORT=(0<<LCD_CLOCK);
	LCD_PORT=(0<<LCD_CD); //  Control=0;
	LCD_PORT=(0<<LCD_CE);//ChipSelect=1;
	int i=0;
	do {
		int data;
		data=(((1<<(7-i))&cmd)>0);
		LCD_PORT=(1<<LCD_CLOCK);
		LCD_PORT=(0<<LCD_CLOCK);
		i++;
	} while(i<=7);
	LCD_PORT=(1<<LCD_CE);//ChipSelect=1;
	
}
void lcd_init(void)
{		
	lcd_sendc(0b00100001);
    lcd_sendc(0b11011010);
    lcd_sendc(0b00010100);
    lcd_sendc(0b00001011);
    lcd_sendc(0b00000101);
    lcd_sendc(0b00100000);
    lcd_sendc(0b00010001);
    lcd_sendc(0b00001100);
}	
void lcd_contrast(void)
{
	lcd_sendc(0b00100001);
	lcd_sendc((128+128));
	lcd_sendc(0b00100000);
}


int main(void)
{	
	
	//lcd_init(LCD_DISP_ON);
	//lcd_control (1, 0, 0); 
	//lcd_clrscr();
	//lcd_puts("LCD Test Line 1\n");
	lcd_reset();
	lcd_init();
	lcd_contrast();
}
Előre is köszönöm!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

És ha igy kezelnéd a Portokat:
Write an I/O register
To the Write one can set I/O registers simply like a variable. In source codes, which were developed for older
versions of the avr GCC/avr libc, the write access is made by the function outp (). Current versions of the
compiler support the access now directly and outp () are no longer necessary.
Example:
Include <avr/io.h>
...
Int main(void)
{
{/* sets the direction register of the PORTA on 0xff
(all pins as output): */
DDRA = 0xff;
/* PortA sets remaining on 0x03, bit 0 and 1 “high”, “low”: */
PORTA = 0x03;
...
}
Write of bits
One sets individual bits “standard C conformal” by means of more logically (bit) operations.
With the expression:
X |= (1 << Bitnumber); // a bit in x is set
X &= ~(1 << Bitnumber) ; // a bit is deleted in x
The least significant bit (for 1) of a byte has the bit number 0, the “most significant” (for 128) the number 7.
Example:
#include <avr/io.h>
...
#define MyBIT 2
...
PORTA |= (1 << MyBIT); /* sets bit 2 at PortA on 1 * /
PORTA &= ~(1 << MyBIT); /* deletes bit 2 at PortA */
With this method also several bits of a register can be at the same time set and reset.
Example:
#include <avr/io.h>
...
DDRA &= ~( (1<<PA0) | (1<<PA3) ); /* PA0 and PA3 as inputs */
PORTA |= (1<<PA0) | (1<<PA3); /* internal Pull UP for both switch on */
:)


http://www.mikrocontroller.net/articles ... O-Register

:arrow:
Avatar
atideath
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2011. július 3. vasárnap, 6:00

Hozzászólás Szerző: atideath »

Na sikerült életre kelteni az LCD-met de bizonyos képek megjelenítése esetén furán viselkedik. Bedobok egy youtube-os videót mit művel. Ha valakinek van valami tipje akkor szivesen fogadom. A contraston nem változtatok. Csak új képet teszek mindig ki.

http://youtu.be/QUSkc51X4ik

Probléma megoldódott.. A táp láb nem kapott egyfolytában elég kakaót így kapott egy 1uF kondit, így már nem villog a képernyő :). Bár lehet a kijelzőnek a tápja kevés neki. Most 2.44V-ot kap..
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A kontrasztfeszre is tegyél egy kondit....
Avatar
atideath
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2011. július 3. vasárnap, 6:00

Hozzászólás Szerző: atideath »

Robert írta:A kontrasztfeszre is tegyél egy kondit....
Csak két fesz bemenete van. Az egyik maga az LCD meghajtó feszültsége a másik a háttérvilágításé. A Contrastot programmal lehet állítani, nem potival. De így már nem villog :).
Válasz küldése