Nokia és egyéb telefon LCD-k
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 .
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 .
Ü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.
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!
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;
}
Köszönöm a segítséget és a türelmet!
Az alábbi programrészt nevezzük Szoftveres SPI-nek. (Soros adat BITek küldése 1 Porton át )
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.
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.
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.
Nokia 6100 kijelző vezérlése + arduino
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!
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!
3410 LCD
Szevasztok!ICSoftware írta:A Nokia 3310 és 3410 ugyan az a kijelző, csak a felbontás másdoncarlos í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?
3310 84x48
3410 96x64
A vezérlés tök ugyan az.
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!
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:
És az átalam írt kód:
Előre is köszönöm!
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;
}
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();
}
É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
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
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..
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..