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
Kapcsolat:

HozzászólásSzerző: doidoi » 2011. március 21. hétfő, 22:31

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ásSzerző: atideath » 2011. július 14. csütörtök, 20:40

Ü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: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. július 15. péntek, 4:20

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: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. július 17. vasárnap, 6:33

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ásSzerző: Ecku01 » 2012. január 26. csütörtök, 22:04

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: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. január 27. péntek, 7:07

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: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. január 27. péntek, 7:07

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ásSzerző: Ecku01 » 2012. január 27. péntek, 16:43

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: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. január 27. péntek, 17:21

Á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ásSzerző: gomy » 2012. február 18. szombat, 18:56

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ásSzerző: atideath » 2012. március 6. kedd, 20:10

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: 3212
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. március 7. szerda, 20:23

É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ásSzerző: atideath » 2012. március 11. vasárnap, 19:14

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: 9768
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. március 11. vasárnap, 21:22

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ásSzerző: atideath » 2012. március 11. vasárnap, 21:43

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 :).


Vissza: “LCD kezelése”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 3 vendég