Hallo!
Das Grafikdisplay hat eine Auflösung von 48x84 Pixel und ist mit einem Philips Kontroller PCD8544 ausgestattet. Es ist auch sehr verbreitet und unter 5 EUR bei Ebay zu haben. Ich habe den Anschluss an PIC noch vereinfacht so, das man jetzt bloß 3 pins am PIC braucht, und dazu noch 3 Taster angeschlossen. Ich finde das Display sehr gut und einfach zu steuern.
Anstatt des LM317 mit R1 und R2, kann man den 78L02 anwenden.
Wenn jemand die Taster nicht braucht, kann die D4,D5,R6,R7,R9,R10
weglassen (mittlere Skizze).
Wenn PIC mit max. 3,3V arbeitet, kann man das Display direkt anschliessen. In dem Fall bleiben in der Schaltung (ohne Taster) nur C1,C2 und R8 (untere Skizze).
Mit einfachen Hardware und ein paar zusätzlichen Zeilen im Code (SerSend) kann man die Pinzahl sogar auf 2 reduzieren, aber nur ohne Tasten (ganz unten). Im modifiziertem Unterprogramm wird ein Flag _Fdc benutzt, das am Anfang des Programms deklariert werden muss. Anstatt
#define _SCK PORTA,2 ; display serial clock
#define _SDT PORTA,1 ; display serial data
#define _DC PORTA,0 ; display 0-command,1-data
DTemp equ 0x20
DTemp1 equ 0x21
muss sein
#define _SCK PORTA,1 ; display serial clock
#define _SDT PORTA,0 ; display serial data
#define _Fdc Flags,0
DTemp EQU 0x20
DTemp1 EQU 0x21
Flags EQU 0x22
Das Display ist für Textaugabe nicht besonders geeignet, weil es keinen eigenen Zeichengenerator besitzt, der programmiert werden muss. Vielleicht braucht jemand sowas?
Für das Testprogram soll nach der Änderung der Konfiguration ein Quartz max. 16 MHz verwendet werden, da der Displaykontroller, laut Datenblatt nur bis 4 MHz geht.
MfG
Code:
VCC VCC
VCC + +
+ .-------. | |
| | | +3V | |
+--+ LM317 +--+----+--+-------+-------+-----------------+
| | | | | | | | | |
'---+---' .-. | .-. -. .-. .-. .-. .-
| | |R1 | | |R3 | |R4 | |R5 | |R6 | |R7 | |R8
R2 | | |220| | |3k3 | |3k3 | |3k3| |20k| |20k| |10k
300 | '-' | '-' '-' '-' '-' '-' '-'
___ | | | | | | D1| | |
+-|___|-+------+ . | +----------------->|--------------|-->SCK
| | | | | D2| | |
=== | | +--------->|--+-----------|-->SDT zum PIC
GND | | | | D3| | |
T1 R9 680 | | | +->|--|-----+-----|-->D_C
--- ___ | | | | | | |
+--o o--+---|___|---|--|-------|-------|-----+ | |
| | | | | | | +--+
| V D4 | | | | | | |
| T2 - R10 680 | | | | | C2 | ---
| --- | ___ | | | | | µ1 | ---
+--o o--|-+-|___|---|--|-------|-------|-----------+ | |
| | | | | +-----+ | +-+-+-----------|--+
| | V D5 | +-----------+ | | | | | | |
| T3 | - +------------+ | | | | | | | ===
| --- | | | | | | | | | | GND
+--o o--+-+ D4,D5 Ge | | | | | |--- C1 10µ |
| | | | | | |### + |
=== | | | | | | | +---------+
GND | | | | | | | |
V V V V V V V V
Display 1 2 3 4 5 6 7 8
VCC=5V
+ .-------.
| | | +3V
+--+ LM317 +--+----+--+-------+-------+-----------------+
| | | | | | | |
'---+---' .-. | .-. -. .-. .-
| | |R1 | | |R3 | |R4 | |R5 | |R8
R2 | | |220| | |3k3 | |3k3 | |3k3 | |10k
300 | '-' | '-' '-' '-' '-'
___ | | | | | | D1 |
+-|___|-+------+ . | +----------------->|--------------|-->SCK
| | | | | D2 |
=== | | +--------->|--------------|-->SDT zum PIC
GND | | | | D3 |
| | | +->|--------------|-->D_C
| | | | |
| | | | |
| | | | +--+
| | | | | |
| | | | C2 | ---
| | | | µ1 | ---
| | | | | |
| | +-----+ | +-+-+-----------|--+
| +-----------+ | | | | | | |
+------------+ | | | | | | | ===
| | | | | | | | GND
| | | | | |--- C1 10µ |
| | | | | |### + |
| | | | | | | +---------+
| | | | | | | |
V V V V V V V V
Display 1 2 3 4 5 6 7 8
VCC=max.3,3V
+
|
o-----------------------+
| |
| .-.
| | |R8
| | |10k
| '-'
| |
| +---------------------|-->SCK
| | |
| | +-------------------|-->SDT zum PIC
| | | |
| | | +-----------------|-->D_C
| | | | |
| | | | |
| | | | +--+
| | | | | |
| | | | C2 | ---
| | | | µ1 | ---
| | | | | |
| | | | +-+-+-----------|--+
| | | | | | | | |
| | | | | | | | ===
| | | | | | | | GND
| | | | | |--- C1 10µ |
| | | | | |### + |
| | | | | | | +---------+
| | | | | | | |
V V V V V V V V
Display 1 2 3 4 5 6 7 8
.-----. _
vom _SDT >----+------|J Q|----> D/C zum Display
| | |
PIC _SCK >----|------|>CK |
| |\ | _|
+-| >O-|K Qo-
|/ '-----'
oder
.-----. _
vom _SDT -----------|D Q|----> D/C zum Display
|\ | _|
PIC _SCK ------| >O-|>T Qo-
|/ '-----'
Der Inverter kann auch mit einem (SMD) Transistor realisiert werden.
Display Nokia 3310/3330
12345678
.----------------------------.
| |||||||||| |
| |||||||||| |
| '--------' |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
'----------------------------'
; Test programm for graphic display from Handy NOKIA 3310 with 3-pin connection
LIST P=16F630
include "P16F630.inc" ; 4.000 MHz internal clock
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
#define _SCK PORTA,2 ; display serial clock
#define _SDT PORTA,1 ; display serial data
#define _DC PORTA,0 ; display 0-command,1-data
DTemp equ 0x20
DTemp1 equ 0x21
ORG 0x0000
Main call Init
call DLine1
call §SP
call §SP
call §SP
call §N
call §O
call §K
call §I
call §A
call §SP
call §3
call §3
call §1
call §0
call §sl
call §3
call §3
call §3
call §0
call §SP
call §SP
call §BL
call §BL
call §BL
call §G
call §R
call §A
call §P
call §H
call §I
call §C
call §SP
call §D
call §I
call §S
call §P
call §L
call §A
call §Y
call §SP
call §T
call §E
call §S
call §T
call §BL
call §BL
call §BL
call §SP
call §SP
call §SP
call §SP
call §SP
call §0
call §1
call §2
call §3
call §4
call §5
call §6
call §7
call §8
call §9
call §.
call §sl
call §SP
call §SP
call §SP
call §SP
call §SP
call §SP
call §SP
call §A
call §B
call §C
call §D
call §E
call §F
call §G
call §H
call §I
call §J
call §K
call §L
call §M
call §N
call §O
call §SP
call §SP
call §BL
call §SP
call §SP
call §SP
call §P
call §Q
call §R
call §S
call §T
call §U
call §V
call §W
call §X
call §Y
call §Z
call §SP
call §m
call §u
call §s
call §SP
call §SP
call §SP
call §SP
call §SP
call §ar
call §SP
call §su
call §SP
call §sd
call §SP
call §os
call §SP
call §ct
call §SP
call §sk
call §SP
call §SP
call §SP
call §SP
sleep
DLine1 movlw 0x40
call COut
movlw 0x80
call COut
return
COut bcf _DC
movwf Dtemp1
goto LCDOut
DOut bsf _DC
movwf Dtemp1
LCDOut movlw 8
movwf DTemp
SerSend bcf _SDT
btfsc Dtemp1,7
bsf _SDT
rlf Dtemp1,1
bsf _SCK
bcf _SCK
decfsz DTemp,1
goto SerSend
return
Init movlw 7 ; set comparator off
movwf CMCON ; and RA0-3 to digital I/O
bsf STATUS, RP0 ; bank1
bcf OPTION_REG,7 ; enable pull-ups
clrf TRISA ; set RA0-5 as outputs
clrf TRISC ; set RC0-5 as outputs
call 0x3FF ; call calibration value
movwf OSCCAL ; calibrate internal RC oscillator
bcf STATUS, RP0 ; bank 0
clrf PORTA
clrf PORTC
movlw 0x20 ; chip active, horizontal adressing, basic instruction set
call COut
movlw 0x0C ; normal mode
call COut
return
§0 call §BL
movlw 0x3E
call DOut
movlw 0x22
call DOut
movlw 0x3E
call DOut
return
§1 call §BL
movlw 4
call DOut
movlw 0x3E
call DOut
call §BL
return
§2 call §BL
movlw 0x3A
call DOut
movlw 0x2A
call DOut
movlw x2E
call DOut
return
§3 call §BL
movlw 0x2A
call DOut
movlw 0x2A
call DOut
movlw 0x3E
call DOut
return
§4 call §BL
movlw 0x0E
call DOut
movlw 8
call DOut
movlw 0x3E
call DOut
return
§5 call §BL
movlw 0x2E
call DOut
movlw 0x2A
call DOut
movlw 0x3A
call DOut
return
§6 call §BL
movlw 0x3E
call DOut
movlw 0x2A
call DOut
movlw 0x3A
call DOut
return
§7 call §BL
movlw 2
call DOut
movlw 0x3A
call DOut
movlw 0x6
call DOut
return
§8 call §BL
movlw 0x3E
call DOut
movlw 0x2A
call DOut
movlw 0x3E
call DOut
return
§9 call §BL
movlw 0x2E
call DOut
movlw 0x2A
call DOut
movlw 0x3E
call DOut
return
§A call §BL
movlw 0x3C
call DOut
movlw 0x0A
call DOut
movlw 0x3C
call DOut
return
§B call §BL
movlw 0x3E
call DOut
movlw 0x2A
call DOut
movlw 0x14
call DOut
return
§C call §BL
movlw 0x1C
call DOut
movlw 0x22
call DOut
movlw 0x22
call DOut
return
§D call §BL
movlw 0x3E
call DOut
movlw 0x22
call DOut
movlw 0x1C
call DOut
return
§E call §BL
movlw 0x3E
call DOut
movlw 0x2A
call DOut
movlw 0x2A
call DOut
return
§F call §BL
movlw 0x3E
call DOut
movlw 0x0A
call DOut
movlw 0x0A
call DOut
return
§G call §BL
movlw 0x1C
call DOut
movlw 0x22
call DOut
movlw 0x2A
call DOut
movlw 0x1A
call DOut
return
§H call §BL
movlw 0x3E
call DOut
movlw 8
call DOut
movlw 0x3E
call DOut
return
§I call §BL
movlw 0x3E
call DOut
return
§J call §BL
movlw 0x10
call DOut
movlw 0x20
call DOut
movlw 0x1E
call DOut
return
§K call §BL
movlw 0x3E
call DOut
movlw 0x14
call DOut
movlw 0x22
call DOut
return
§L call §BL
movlw 0x3E
call DOut
movlw 0x20
call DOut
movlw 0x20
call DOut
return
§M call §BL
movlw 0x3E
call DOut
movlw 4
call DOut
movlw 8
call DOut
movlw 4
call DOut
movlw 0x3E
call DOut
return
§N call §BL
movlw 0x3E
call DOut
movlw 4
call DOut
movlw 8
call DOut
movlw 0x10
call DOut
movlw 0x3E
call DOut
return
§O call §BL
movlw 0x1C
call DOut
movlw 0x22
call DOut
movlw 0x1C
call DOut
return
§P call §BL
movlw 0x3E
call DOut
movlw 0x0A
call DOut
movlw 4
call DOut
return
§Q call §BL
movlw 0x1C
call DOut
movlw 0x22
call DOut
movlw 0x12
call DOut
movlw 0x2C
call DOut
return
§R call §BL
movlw 0x3E
call DOut
movlw 0x1A
call DOut
movlw 0x24
call DOut
return
§S call §BL
movlw 0x24
call DOut
movlw 0x2A
call DOut
movlw 0x12
call DOut
return
§T call §BL
movlw 2
call DOut
movlw 0x3E
call DOut
movlw 2
call DOut
return
§U call §BL
movlw 0x3E
call DOut
movlw 0x20
call DOut
movlw 0x3E
call DOut
return
§V call §BL
movlw 0x1E
call DOut
movlw 0x20
call DOut
movlw 0x1E
call DOut
return
§W call §BL
movlw 0x3E
call DOut
movlw 0x10
call DOut
movlw 8
call DOut
movlw 0x10
call DOut
movlw 0x3E
call DOut
return
§X call §BL
movlw 0x36
call DOut
movlw 8
call DOut
movlw 0x36
call DOut
return
§Y call §BL
movlw 6
call DOut
movlw 0x38
call DOut
movlw 6
call DOut
return
§Z call §BL
movlw 0x32
call DOut
movlw 0x2A
call DOut
movlw 0x26
call DOut
return
§m call §BL
movlw 0x3C
call DOut
movlw 4
call DOut
movlw 8
call DOut
movlw 4
call DOut
movlw 0x38
call DOut
return
§u call §BL
movlw 0x7C
call DOut
movlw 0x10
call DOut
movlw 0x20
call DOut
movlw 0x1C
call DOut
call §BL
return
§s call §BL
movlw 0x20
call DOut
movlw 0x28
call DOut
movlw 0x14
call DOut
call §BL
call §BL
return
§. call §BL
movlw 0x20
call DOut
return
§sl call §BL ; /
movlw 0x20
call DOut
movlw 0x10
call DOut
movlw 8
call DOut
movlw 4
call DOut
movlw 2
call DOut
return
§ar call §BL
movlw 0x3E
call DOut
movlw 0x1C
call DOut
movlw 8
call DOut
return
§ct call §BL ; continous
movlw 0x3E
call DOut
movlw 0x20
call DOut
movlw 0x3E
call DOut
movlw 0x20
call DOut
movlw 0x3E
call DOut
return
§os call §BL ; one shot
movlw 0x20
call DOut
movlw 0x20
call DOut
movlw 0x3E
call DOut
movlw 0x20
call DOut
movlw 0x20
call DOut
return
§su call §BL ; slope up
movlw 0x20
call DOut
movlw 0x20
call DOut
movlw 0x3E
call DOut
movlw 2
call DOut
movlw 2
call DOut
return
§sd call §BL ; slope down
movlw 2
call DOut
movlw 2
call DOut
movlw 0x3E
call DOut
movlw 0x20
call DOut
movlw 0x20
call DOut
return
§sk call §BL
movlw 0x3E
call DOut
movlw 0x2A
call DOut
movlw 0x3E
call DOut
movlw 0x2A
call DOut
movlw 0x3E
call DOut
return
§SP call §BL
call §BL
call §BL
call §BL
return
§BL movlw 0
call DOut
return
§FL movlw 0xFF
call DOut
return
end
Modifizierte Ausgabe für 2-pin Anschluß:
COut bcf _Fdc
movwf Dtemp1
goto LCDOut
DOut bsf _Fdc
movwf Dtemp1
LCDOut movlw 8
movwf DTemp
SerSend bcf _SDT
btfsc _Fdc
bsf _SDT
bcf _SCK
bcf _SDT
btfsc DTemp1,7
bsf _SDT
bsf _SCK
rlf DTemp1,1
decfsz DTemp,1
goto SerSend
return
Lesezeichen