Se sei già registrato           oppure    

Orario: 29/03/2024 08:33:23  

 

Energia Alternativa ed Energia Fai Da Te > Applicazioni E Realizzazioni Pratiche

VISUALIZZA L'ALBUM


Mini oscilloscopio con display Nokia3310
FinePagina

fly1971

Avatar
MegaWatt


Gruppo:Utente
Messaggi:544

Stato:



Inviato il: 18/2/2011,10:21

Ciao a tutti, mi trovo un 18F4520 e un vecchio display di un Nokia 3310 , guardando sulla rete mi sono imbattuto in questo progettino, in pratica un mini scope , con tanto di regolazione di trigger , tempi, lettura della frequenza.
http://www.energialternativa.info/Public/NewForum/ForumEA/2/4/5/6/8/1/9/1298020181.png
questo è lo schema e la discussione del progetto con dei video
Sicuramente non sarà una cosa precisa , però visto che mi trovo i due componenti principali , lo volevo costruire.
www.electronicslab.ph/forum/index.php?topic=9152.0

Dubbi???
la parte del op-amp , tempo fà ho fatto un interfaccia per il pc da usare come osciloscopio e in quel caso ho usato un TL082 con alimentazione duale e con protezioni di diodi antiparallelo e un attenuatore a 3 scale, in questo schema c'è solo una singola alimentazione, la VGND sarebbe la massa da collegare alla pinza del probe?
si può cambiare la parte del op-amp e farne una semplice ma efficace?
Essendo quasi un gagdet e nulla di professionale volevo capire se op-amp è necessaria l'alimentazione duale.
Lo SW3 fà da deviatore AC/DC, SW1 da attenuatore del segnale
però non capisco bene come funziona non dovrebeb essere un partitore resistivo con più resistenze e che ad ogni nodo collego il segnale a seconda della scala che mi serve?
Nello schema non compare il quarzo per il PIC ,invece nelle foto della discussione, c'è il circuito con il PIC e il quarzo.
Usa una sola alimentazione al PIC gli serve 5V , anche op-amp posso alimentarlo con 5V, anche se nello schema originario c'è LM6132 , lui usa un LM358

questo è lo schema che ho usato nella mia interfaccia
http://www.energialternativa.info/Public/NewForum/ForumEA/2/4/5/6/8/1/9/1267653247.jpg

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 18/2/2011,13:00

E bravo fly....
questo progetto è molto interessante...indipendentemente dalla applicazione dell'oscilloscopio è molto molto interessante per applicazioni a display commerciali...io sono rimasto ai display a protocollo hitachi....ehehe
Allego anche il codice...molto molto interessante.
Ciao
Bolle

CODICE
////////////////////////////////////////////////////////////////////////////////
/*
LPH7779-LCD(Nokia 3310) library
*/
////////////////////////////////////////////////////////////////////////////////



char CONST TABLE5 [240] = { // ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes
0x00,0x00,0x00,0x00,0x00, // 20 space
0x00,0x00,0x5f,0x00,0x00, // 21 !
0x00,0x07,0x00,0x07,0x00, // 22 "
0x14,0x7f,0x14,0x7f,0x14, // 23 #
0x24,0x2a,0x7f,0x2a,0x12, // 24 $
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
0x00,0x1c,0x22,0x41,0x00, // 28 (
0x00,0x41,0x22,0x1c,0x00, // 29 )
0x14,0x08,0x3e,0x08,0x14, // 2a *
0x08,0x08,0x3e,0x08,0x08, // 2b +
0x00,0x50,0x30,0x00,0x00, // 2c ,
0x08,0x08,0x08,0x08,0x08, // 2d -
0x00,0x60,0x60,0x00,0x00, // 2e .
0x20,0x10,0x08,0x04,0x02, // 2f /
0x3e,0x51,0x49,0x45,0x3e, // 30 0
0x00,0x42,0x7f,0x40,0x00, // 31 1
0x42,0x61,0x51,0x49,0x46, // 32 2
0x21,0x41,0x45,0x4b,0x31, // 33 3
0x18,0x14,0x12,0x7f,0x10, // 34 4
0x27,0x45,0x45,0x45,0x39, // 35 5
0x3c,0x4a,0x49,0x49,0x30, // 36 6
0x01,0x71,0x09,0x05,0x03, // 37 7
0x36,0x49,0x49,0x49,0x36, // 38 8
0x06,0x49,0x49,0x29,0x1e, // 39 9
0x00,0x36,0x36,0x00,0x00, // 3a :
0x00,0x56,0x36,0x00,0x00, // 3b ;
0x08,0x14,0x22,0x41,0x00, // 3c <
0x14,0x14,0x14,0x14,0x14, // 3d =
0x00,0x41,0x22,0x14,0x08, // 3e >
0x02,0x01,0x51,0x09,0x06, // 3f ?
0x32,0x49,0x79,0x41,0x3e, // 40 @
0x7e,0x11,0x11,0x11,0x7e, // 41 A
0x7f,0x49,0x49,0x49,0x36, // 42 B
0x3e,0x41,0x41,0x41,0x22, // 43 C
0x7f,0x41,0x41,0x22,0x1c, // 44 D
0x7f,0x49,0x49,0x49,0x41, // 45 E
0x7f,0x09,0x09,0x09,0x01, // 46 F
0x3e,0x41,0x49,0x49,0x7a, // 47 G
0x7f,0x08,0x08,0x08,0x7f, // 48 H
0x00,0x41,0x7f,0x41,0x00, // 49 I
0x20,0x40,0x41,0x3f,0x01, // 4a J
0x7f,0x08,0x14,0x22,0x41, // 4b K
0x7f,0x40,0x40,0x40,0x40, // 4c L
0x7f,0x02,0x0c,0x02,0x7f, // 4d M
0x7f,0x04,0x08,0x10,0x7f, // 4e N
0x3e,0x41,0x41,0x41,0x3e}; // 4f O

char CONST TABLE6 [240] = {
0x7f,0x09,0x09,0x09,0x06, // 50 P
0x3e,0x41,0x51,0x21,0x5e, // 51 Q
0x7f,0x09,0x19,0x29,0x46, // 52 R
0x46,0x49,0x49,0x49,0x31, // 53 S
0x01,0x01,0x7f,0x01,0x01, // 54 T
0x3f,0x40,0x40,0x40,0x3f, // 55 U
0x1f,0x20,0x40,0x20,0x1f, // 56 V
0x3f,0x40,0x38,0x40,0x3f, // 57 W
0x63,0x14,0x08,0x14,0x63, // 58 X
0x07,0x08,0x70,0x08,0x07, // 59 Y
0x61,0x51,0x49,0x45,0x43, // 5a Z
0x00,0x7f,0x41,0x41,0x00, // 5b [
0x02,0x04,0x08,0x10,0x20, // 5c \
0x00,0x41,0x41,0x7f,0x00, // 5d ñ
0x04,0x02,0x01,0x02,0x04, // 5e ^
0x40,0x40,0x40,0x40,0x40, // 5f _
0x00,0x01,0x02,0x04,0x00, // 60 `
0x20,0x54,0x54,0x54,0x78, // 61 a
0x7f,0x48,0x44,0x44,0x38, // 62 b
0x38,0x44,0x44,0x44,0x20, // 63 c
0x38,0x44,0x44,0x48,0x7f, // 64 d
0x38,0x54,0x54,0x54,0x18, // 65 e
0x08,0x7e,0x09,0x01,0x02, // 66 f
0x0c,0x52,0x52,0x52,0x3e, // 67 g
0x7f,0x08,0x04,0x04,0x78, // 68 h
0x00,0x44,0x7d,0x40,0x00, // 69 i
0x20,0x40,0x44,0x3d,0x00, // 6a j
0x7f,0x10,0x28,0x44,0x00, // 6b k
0x00,0x41,0x7f,0x40,0x00, // 6c l
0x7c,0x04,0x18,0x04,0x78, // 6d m
0x7c,0x08,0x04,0x04,0x78, // 6e n
0x38,0x44,0x44,0x44,0x38, // 6f o
0x7c,0x14,0x14,0x14,0x08, // 70 p
0x08,0x14,0x14,0x18,0x7c, // 71 q
0x7c,0x08,0x04,0x04,0x08, // 72 r
0x48,0x54,0x54,0x54,0x20, // 73 s
0x04,0x3f,0x44,0x40,0x20, // 74 t
0x3c,0x40,0x40,0x20,0x7c, // 75 u
0x1c,0x20,0x40,0x20,0x1c, // 76 v
0x3c,0x40,0x30,0x40,0x3c, // 77 w
0x44,0x28,0x10,0x28,0x44, // 78 x
0x0c,0x50,0x50,0x50,0x3c, // 79 y
0x44,0x64,0x54,0x4c,0x44, // 7a z
0x00,0x08,0x36,0x41,0x00, // 7b {
0x00,0x00,0x7f,0x00,0x00, // 7c |
0x00,0x41,0x36,0x08,0x00, // 7d }
0x10,0x08,0x08,0x10,0x08, // 7e ~
0x78,0x46,0x41,0x46,0x78}; // 7f ¦

// 7e,43,40,43,7e --> Ü
// 7e,43,42,43,7e --> Ö
// 1e,21,21,71,21 --> Ç
// 3c,42,53,53,72 --> Ð

//function prototypes
void nokia_init();
void nokia_write_command(char bytefornokia_command);
void nokia_write_data(char bytefornokia_data);
void nokia_write_dorc(char bytefornokia);
void nokia_gotoxy(char xnokia, char ynokia);
void nokia_contrast (byte contrast);
void nokia_printchar(char cvar);
void nokia_clean_ddram();
void table_to_nokialcd();
void LcdPixel (char x, char y);
void erase_column(char x); //yus


char char_row,charsel,charpos,chardata;
int16 ddram;

void nokia_init() {
nok_dc=1; // bytes are stored in the display data ram, address counter, incremented automatically
delay_us(1);
nok_cs=1; // chip disabled
delay_us(200);

nok_res=0;
delay_ms(10);
nok_res=1;

nokia_write_command(0x21); // set extins extended instruction set
nokia_write_command(0xc8); // Vop v1: 0xc8 (for 3V), v2: 0xa0 (for 3V)
nokia_write_command(0x13); // bias
nokia_write_command(0x20); // horizontal mode from left to right, X axe are incremented automatically,
// 0x22 for vertical addressing, back on normal instruction set too
nokia_write_command(0x09); // all on

delay_ms(50);

nokia_clean_ddram(); // reset DDRAM, otherwise the lcd is blurred with random pixels

delay_ms(10);

nokia_write_command(0x08); // mod control blank change (all off)
delay_ms(10);

nokia_write_command(0x0c); // mod control normal change
}

void nokia_clean_ddram() {
nokia_gotoxy(0,0); // 84*6=504 clear LCD
for (ddram=504; ddram>0; ddram--)
nokia_write_data(0x00);
}

void nokia_write_command(char bytefornokia_command)
{
nok_dc=0; // byte is a command it is read with the eight SCLK pulse
nok_cs=0; // chip enabled
nokia_write_dorc(bytefornokia_command);
nok_cs=1; // chip disabled
}

void nokia_write_data(char bytefornokia_data)
{
nok_dc=1;
nok_cs=0; // chip enabled
nokia_write_dorc(bytefornokia_data);
nok_cs=1; // chip disabled
}

#define pulse_bit(c, mask) \
nok_sclk=0; \
delay_cycles(1); \
nok_sda=0; \
if (c & mask) \
nok_sda=1; \
delay_us(1); \
nok_sclk=1; \
delay_us(1)

// serial write data or command subroutine
void nokia_write_dorc(char bytefornokia)
{
pulse_bit(bytefornokia, (1<<7));
pulse_bit(bytefornokia, (1<<6));
pulse_bit(bytefornokia, (1<<5));
pulse_bit(bytefornokia, (1<<4));
pulse_bit(bytefornokia, (1<<3));
pulse_bit(bytefornokia, (1<<2));
pulse_bit(bytefornokia, (1<<1));
pulse_bit(bytefornokia, (1));
}

void nokia_gotoxy(char xnokia, char ynokia) { // Nokia LCD 3310 Position cursor
nokia_write_command(0x40|(ynokia&0x07)); // Y axe initialisation: 0100 0yyy
nokia_write_command(0x80|(xnokia&0x7f)); // X axe initialisation: 1xxx xxxx
}

void nokia_contrast (char contrast) {
nokia_write_command(0x21); // LCD Extended Commands.
nokia_write_command(0x80 | contrast); // Set LCD Vop (Contrast).
nokia_write_command(0x20); // LCD Standard Commands, horizontal addressing mode.
}

void nokia_printchar(char cvar) { // Write 1 character to LCD
charsel=cvar;
table_to_nokialcd();
}

void table_to_nokialcd() { // extract ascii from tables & write to LCD
if (charsel<0x20) return;
if (charsel>0x7f) return;

for (char_row=0;char_row<5;char_row++)
{
if (charsel<0x50){charpos=(((charsel&0xff)-0x20)*5);chardata=TABLE5[(charpos+char_row)];} // use TABLE5
if (charsel>0x4f){charpos=(((charsel&0xff)-0x50)*5);chardata=TABLE6[(charpos+char_row)];} // use TABLE6

nokia_write_data(chardata); // send data to nokia
}
nokia_write_data(0x00); // 1 byte (always blank)
}


/*
void LcdPixel (char x, char y)
{
int16 offset;
byte data;

if (x > 84) return;
if (y > 48) return;

offset = y - ((y / 8) * 8) - 1;
data = (0x01 << offset);

nokia_gotoxy(x, (y/6));
nokia_write_data(data);
}
*/

void LcdPixel (char x, char y) //yus
{
char offset;
byte data;

if (x > 84) return;
if (y > 48) return;

offset = y % 8;
data = (0x01<<offset);

nokia_gotoxy(x, (y/8));
nokia_write_data(data);
}





void erase_column(char x) //yus
{
char line;
for(line=0; line<4; line++)
//for(line=0; line<6; line++)
{
nokia_gotoxy(x, line); //x
nokia_write_data(0x00);
}
}


void lcd_vertical_line (char x, char y1, char y2) //yusnew
{
char i, temp, line1, line2, data;
if( (x>83) || (y1>47) || (y2>47) ) return; //exit if out of range
if(y1>y2)
{
temp = y1;
y1 = y2; //swap variables
y2 = temp;
}
line1 = y1>>3; //divide by 8
line2 = y2>>3;
for(i=line1; i<=line2; i++)
{
data = 0xff;
nokia_gotoxy(x,i);
if(i==line1)
{
data = 0;
temp = 8 - (y1 % 8);
while(temp--) data |= (0x80>>temp);
}
if(i==line2)
{
temp = 7 - (y2 % 8);
while(temp--) data &= ~(0x80>>temp);
}
nokia_write_data(data);
}
}



const unsigned char pow2[] = {1, 2, 4, 8, 16, 32, 64, 128};

void lcd_fast_vertical_line (char px, char py1, char py2)
{
unsigned char cline, ctr, data, p2, y1, y2, x;

if( (px>83) || (py1>47) || (py2>47) ) return; //exit if out of range

x = px;
if(py1>py2)
{
y1 = py2;
y2 = py1;
}
else
{
y2 = py2;
y1 = py1;
}

ctr = y1 & 7;
cline = y1 >> 3;
data = 0;
p2 = pow2[ctr];

x |= 0x80;
cline |= 0x40;

while (y1<=y2)
{
data |= p2;

if (ctr>=7)
{
nok_dc=0;
delay_cycles(1);
nok_cs=0;
nokia_write_dorc(x);
nok_cs=1;
delay_cycles(1);

nok_dc=0;
delay_cycles(1);
nok_cs=0;
nokia_write_dorc(cline);
nok_cs=1;

delay_cycles(1);
nok_dc=1;
delay_cycles(1);
nok_cs=0;
nokia_write_dorc(data);
nok_cs=1;

data = 0;
++cline;
ctr = 0;
p2 = 1;
}
else
{
++ctr;
p2 <<= 1;
}
++y1;
}

if (ctr)
{
nok_dc=0;
delay_cycles(1);
nok_cs=0;
nokia_write_dorc(x);
nok_cs=1;
delay_cycles(1);

nok_dc=0;
delay_cycles(1);
nok_cs=0;
nokia_write_dorc(cline);
nok_cs=1;

delay_cycles(1);
nok_dc=1;
delay_cycles(1);
nok_cs=0;
nokia_write_dorc(data);
nok_cs=1;
}
}



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

fly1971

Avatar
MegaWatt


Gruppo:Utente
Messaggi:544

Stato:



Inviato il: 18/2/2011,16:59

Ci sono un sacco di applicazioni con questo display del nokia peccato che me ne trovo solo uno, ora chiedo ad amici se ne hanno qualcuno conservato ch enon usano più....
Bolle ma secondo te la parte del U2B è messa per verificare che sul PIC arriva lo stesso segnale che esce dal genratore di funzioni?
non capisco a cosa serve U2B l''uscita del pin7 va su quel lettore di tensione ( cerchietto verde con il valore 2,09) lo stesso che è messo all'uscita del generatore di funzioni.
quando faccio il circuito il pin7 non devo collegarlo al pi1 che mi va sul pin2 del PIC
Sia LM6132 che LM358 possono lavorare a 5V , quindi all'uscita del pin1 del op-amp mi trovo una tensione di picco di 5V, l'ingresso del PIC (pin2) può ricevere una tensioen di 5V?
Altro dubbio se il SW3 è messo su AC , la VGND sarebbe la massa ( clamp) del probe , perchè c'è il C4 dovrebbe collegare direttamente alla VGND che non è la massa ( o negativo) dell'alimentazione.

 
 InizioPagina
 

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum