 |
Forumas » Mikrovaldikliai » Atmega ir NOKIA lcd
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 03, 19:15 |
|
|
|
Sveiki. Gal galetumet pirma kart padėti pajungti prie Atmega16 NOKIA 5110 lcd ekraną? Turiu visą telefoną, galvoju nupjauti platos dalį ant kurios dedasi ekranas kaip parodyta čia :
http://serdisplib.sourceforge.net/ser/pcd8544.html
Mano kaip type2 nuorodoj, su guminiais kontaktais.
Net neįsivaizduoju kaip jį jungt prie atmegos. Gal galit patart? Kiek ieškojau tik su PICais schemos. Bibliotekos ir valdymas lyg ir toks pat kaip 3310 tik nežinau, kaip dėl kontaktų. Gal kam teko užvaldyti tokį lcd? Ačiū už betkokią pagalbą. |
|
|
|
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 03, 22:27 |
|
|
|
Kaip ir prie bet kurio kito proco junk laidais... |
|
|
|
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 04, 13:03 |
|
|
|
Nu vo, dabar viskas daug aiškiau. O prie kurio porto jungt ir koki kontakta prie kurios kojos? Galima kažkaip sujungt, kad lcd bibliotekoj nieko keist nereiktu. |
|
|
|
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 04, 13:42 |
|
|
|
kaip prijungsi -taip ir bus gerai... O programuoti-teks pagal prijungima. |
|
_________________ Nieko taip lengvai nedaliname, kaip patarimus... |
|
|
|
 |
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 04, 13:56 |
|
|
|
Bet pas mane tas lcd be jokio kontrolerio. Kiek žejau tai 3310 lcd dar jungia per kažkokį philips kontrolerį.
Gal galit pasakyt kaip tiksliai pajungt?
Cia is bibliotekos:
Kodas: |
#define SET_DC_PIN PORTB |= 0x02
#define CLEAR_DC_PIN PORTB &= ~0x02
#define SET_SCE_PIN PORTB |= 0x04
#define CLEAR_SCE_PIN PORTB &= ~0x04
#define SET_RST_PIN PORTB |= 0x10
#define CLEAR_RST_PIN PORTB |= 0x10 |
Cia lcd pinai:
Kodas: |
| 1 2 3 4 5 6 7 8 9 |
rear view
connector is visible
1 .. VDD
2 .. SCLK
3 .. SI
4 .. D/C
5 .. /CS
6 .. Osc
7 .. GND
8 .. Vout
9 .. /RES
|
VDD, GND pinai aiškūs . RES lygtais nėra pas 3310, tai galima apseit gal ir be reseto. Kaip kitus sujungt? Osc tai išoriniam kvarcui turėtų būt, kiek suprantu jis nebūtinas.
Kažko toj telefo platoj 1 ir 6 kontaktas trumpai jungtas, t.y VDD su GND, kame šaknys? |
|
|
|
|
 |
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 04, 16:40 |
|
|
|
Gal tu pailsek su tais lcd, nes kazkaip ir su skaiciais iki 9 sunkiai sekas kiek matau... |
|
|
|
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 04, 19:59 |
|
|
|
sneikaz rašo: |
Gal tu pailsek su tais lcd, nes kazkaip ir su skaiciais iki 9 sunkiai sekas kiek matau... |
ok, thx |
|
|
|
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 06, 11:09 |
|
|
|
Is pradziu ledus bent pamirksink, suprasi ka "PORTB, DDRB, (1 << 1), |=, &= ~..." ir t.t. reiskia... |
|
Paskutinį kartą redagavo MarcaZ, 2010 06 06, 11:09. Redaguota 1 kartą |
|
|
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 06, 11:09 |
|
|
|
Tikrai 5V? Nereik 3.3V ekranui? |
|
Paskutinį kartą redagavo Sloikas, 2010 06 06, 13:55. Redaguota 1 kartą |
|
|
|
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 06, 13:33 |
|
|
|
MarcaZ rašo: |
Is pradziu ledus bent pamirksink, suprasi ka "PORTB, DDRB, (1 << 1), |=, &= ~..." ir t.t. reiskia... |
Oj kiek aš tuos ledus prisimirksinau... Ir su PWM ir su taimeriais... Maždaug dabar viskas aišku, tik nežinau kaip dėl to lcd maitinimo, ar galima 5V jungt.
Radau, kad šitas lcd susitvarko ir su 5V signalais iš kontrolerio, tai tada turbūt ir maitinimas toks pat nebaisus.
Ciklius gal galetum imest tas bibles su kuriom tu dirbi? Man kažko viskas susipainiojo.... Sujungiau taip, kaip sitoj schemoj, tik prie porto C , o ne B.
http://tinkerish.com/blog/wp-content/uploads/2009/01/schematic-atmega8-3310-thermistor.png |
|
|
|
|
 |
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 07, 19:40 |
|
|
|
LCD.C
Kodas: |
/*
** lcd.c
**
** LCD 3310 driver
** Unbuffered version - very small memory footprint
** Target: ATMEGA128 :: AVR-GCC
**
** Written by Tony Myatt - 2007
** Quantum Torque - www.quantumtorque.com
*/
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd.h"
/* delay macro function */
#define lcd_delay() for(int i=-32000;i<32000;i++)
/* Command type sent to the lcd */
typedef enum { LCD_CMD = 0, LCD_DATA = 1 } LcdCmdData;
/* Function prototypes */
void lcd_base_addr(unsigned int addr);
void lcd_send(unsigned char data, LcdCmdData cd);
/* The lcd cursor position */
int lcdCacheIdx;
/* Alphabet lookup */
unsigned char PROGMEM font5x7 [][5] = {
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0x32, 0x34, 0x08, 0x16, 0x26 }, // %
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
{ 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x06, 0x09, 0x09, 0x06, 0x00 }, // ^
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
{ 0x00, 0x7F, 0x3E, 0x1C, 0x08 }, // > Filled
{ 0x08, 0x1C, 0x3E, 0x7F, 0x00 }, // < Filled
{ 0x08, 0x7C, 0x7E, 0x7C, 0x08 }, // Arrow up
{ 0x10, 0x3E, 0x7E, 0x3E, 0x10 }, // Arrow down
{ 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }, // Stop
{ 0x00, 0x7F, 0x3E, 0x1C, 0x08 } // Play
};
/* Performs IO & LCD controller initialization */
void lcd_init(void)
{
// Pull-up on reset pin
LCD_PORT |= LCD_RST_PIN;
// Set output bits on lcd port
LCD_DDR |= LCD_RST_PIN | LCD_CE_PIN | LCD_DC_PIN | LCD_DATA_PIN | LCD_CLK_PIN;
// Wait after VCC high for reset (max 30ms)
_delay_ms(15);
// Toggle display reset pin
LCD_PORT &= ~LCD_RST_PIN;
lcd_delay();
LCD_PORT |= LCD_RST_PIN;
// Disable LCD controller
LCD_PORT |= LCD_CE_PIN;
lcd_send(0x21, LCD_CMD); // LCD Extended Commands
lcd_send(0xC8, LCD_CMD); // Set LCD Vop(Contrast)
lcd_send(0x06, LCD_CMD); // Set Temp coefficent
lcd_send(0x13, LCD_CMD); // LCD bias mode 1:48
lcd_send(0x20, LCD_CMD); // Standard Commands, Horizontal addressing
lcd_send(0x0C, LCD_CMD); // LCD in normal mode
// Clear lcd
lcd_clear();
// For using printf
fdevopen(lcd_chr, 0);
}
/* Set display contrast. Note: No change is visible at ambient temperature */
void lcd_contrast(unsigned char contrast)
{
lcd_send(0x21, LCD_CMD); // LCD Extended Commands
lcd_send(0x80 | contrast, LCD_CMD); // Set LCD Vop(Contrast)
lcd_send(0x20, LCD_CMD); // LCD std cmds, hori addr mode
}
/* Clears the display */
void lcd_clear(void)
{
lcdCacheIdx = 0;
lcd_base_addr(lcdCacheIdx);
// Set the entire cache to zero and write 0s to lcd
for(int i=0;i<LCD_CACHE_SIZE;i++) {
lcd_send(0, LCD_DATA);
}
}
/* Clears an area on a line */
void lcd_clear_area(unsigned char line, unsigned char startX, unsigned char endX)
{
// Start and end positions of line
int start = (line-1)*84+(startX-1);
int end = (line-1)*84+(endX-1);
lcd_base_addr(start);
// Clear all data in range from cache
for(unsigned int i=start;i<end;i++) {
lcd_send(0, LCD_DATA);
}
}
/* Clears an entire text block. (rows of 8 pixels on the lcd) */
void lcd_clear_line(unsigned char line)
{
lcd_clear_area(line, 1, LCD_X_RES);
}
/* Sets cursor location to xy location corresponding to basic font size */
void lcd_goto_xy(unsigned char x, unsigned char y)
{
lcdCacheIdx = (x-1)*6 + (y-1)*84;
}
/* Sets cursor location to exact xy pixel location on the lcd */
void lcd_goto_xy_exact(unsigned char x, unsigned char y)
{
lcdCacheIdx = (x-1) + (y-1)*84;
}
/* Displays a character at current cursor location */
void lcd_chr(char chr)
{
lcd_base_addr(lcdCacheIdx);
// 5 pixel wide characters and add space
for(unsigned char i=0;i<5;i++) {
lcd_send(pgm_read_byte(&font5x7[chr-32][i]) << 1, LCD_DATA);
}
lcd_send(0, LCD_DATA);
lcdCacheIdx += 6;
}
/* Displays string at current cursor location and increment cursor location */
void lcd_str(char *str)
{
while(*str) {
lcd_chr(*str++);
}
}
// Set the base address of the lcd
void lcd_base_addr(unsigned int addr) {
lcd_send(0x80 |(addr % LCD_X_RES), LCD_CMD);
lcd_send(0x40 |(addr / LCD_X_RES), LCD_CMD);
}
/* Sends data to display controller */
void lcd_send(unsigned char data, LcdCmdData cd)
{
// Data/DC are outputs for the lcd (all low)
LCD_DDR |= LCD_DATA_PIN | LCD_DC_PIN;
// Enable display controller (active low)
LCD_PORT &= ~LCD_CE_PIN;
// Either command or data
if(cd == LCD_DATA) {
LCD_PORT |= LCD_DC_PIN;
} else {
LCD_PORT &= ~LCD_DC_PIN;
}
for(unsigned char i=0;i<8;i++) {
// Set the DATA pin value
if((data>>(7-i)) & 0x01) {
LCD_PORT |= LCD_DATA_PIN;
} else {
LCD_PORT &= ~LCD_DATA_PIN;
}
// Toggle the clock
LCD_PORT |= LCD_CLK_PIN;
LCD_PORT &= ~LCD_CLK_PIN;
}
// Disable display controller
LCD_PORT |= LCD_CE_PIN;
// Data/DC can be used as button inputs when not sending to LCD (/w pullups)
LCD_DDR &= ~(LCD_DATA_PIN | LCD_DC_PIN);
LCD_PORT |= LCD_DATA_PIN | LCD_DC_PIN;
}
|
[/list] |
|
|
|
|
 |
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 07, 19:41 |
|
|
|
LCD.H
Kodas: |
/*
** lcd.h
**
** LCD 3310 driver
** Target: ATMEGA :: AVR-GCC
**
** Written by Tony Myatt - 2007
** Quantum Torque - www.quantumtorque.com
*/
#ifndef _NOKIALCD_H_
#define _NOKIALCD_H_
/* Lcd screen size */
#define LCD_X_RES 84
#define LCD_Y_RES 48
#define LCD_CACHE_SIZE ((LCD_X_RES * LCD_Y_RES) / 8)
/* Pinout for LCD */
#define LCD_DC_PIN (1<<PD0)
#define LCD_CLK_PIN (1<<PD1)
#define LCD_DATA_PIN (1<<PD4) // PD2
#define LCD_CE_PIN (1<<PD5) // PD3
#define LCD_RST_PIN (1<<PD6) // PD4
#define LCD_PORT PORTD
#define LCD_DDR DDRD
/* Special Chars */
#define ARROW_RIGHT ICON(0)
#define ARROW_LEFT ICON(1)
#define ARROW_UP ICON(2)
#define ARROW_DOWN ICON(3)
#define STOP ICON(4)
#define PLAY ICON(5)
/* Function for my special characters */
#define ICON(x) 'z'+1+x
void lcd_init(void);
void lcd_contrast(unsigned char contrast);
void lcd_clear(void);
void lcd_clear_area(unsigned char line, unsigned char startX, unsigned char endX);
void lcd_clear_line(unsigned char line);
void lcd_goto_xy(unsigned char x, unsigned char y);
void lcd_goto_xy_exact(unsigned char x, unsigned char y);
void lcd_chr(char chr);
void lcd_str(char* str);
#endif
|
|
|
Paskutinį kartą redagavo Ciklius, 2010 06 07, 19:44. Redaguota 1 kartą |
|
|
|
 |
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 07, 19:43 |
|
|
|
main.c
Kodas: |
/*
** main.c
**
** Nokia 3310 Example Program
** Target: ATMEGA :: AVR-GCC
**
** Written by Tony Myatt - 2007
** Quantum Torque - www.quantumtorque.com
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include "lcd.h"
/* main -- Program starts here */
int main(void)
{
// Setup LCD
lcd_init();
lcd_contrast(0x40);
// Print on first line
lcd_goto_xy(1,1);
lcd_str("Banzai :P");
// Print on second line with custom characters
lcd_goto_xy(4,2);
lcd_chr(ARROW_LEFT);
printf(" CIKLIUS ");
lcd_chr(ARROW_RIGHT);
while(1);
}
|
|
|
|
|
|
 |
 |
Atmega ir NOKIA lcd |
Parašytas: 2010 06 07, 19:53 |
|
|
|
Jeigu jungi per ta nokios platą tada tikrai galima naudoti 5V
Seniau jungiau ant 3,3 , bet laimingo atsitiktinumo dėka gavau didelį kiekį tu ekranų tai pabandžiau su 5v ir nieko veikia
Sloikas rašo: |
MarcaZ rašo: |
Is pradziu ledus bent pamirksink, suprasi ka "PORTB, DDRB, (1 << 1), |=, &= ~..." ir t.t. reiskia... |
Oj kiek aš tuos ledus prisimirksinau... Ir su PWM ir su taimeriais... Maždaug dabar viskas aišku, tik nežinau kaip dėl to lcd maitinimo, ar galima 5V jungt.
Radau, kad šitas lcd susitvarko ir su 5V signalais iš kontrolerio, tai tada turbūt ir maitinimas toks pat nebaisus.
Ciklius gal galetum imest tas bibles su kuriom tu dirbi? Man kažko viskas susipainiojo.... Sujungiau taip, kaip sitoj schemoj, tik prie porto C , o ne B.
http://tinkerish.com/blog/wp-content/uploads/2009/01/schematic-atmega8-3310-thermistor.png |
|
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
LEGO
Mänguköök,
mudelautod,
nukuvanker |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|