Hallo!
Hier möchte ich meine geprüfte Idee zeigen. Weil ich mit den kleinsten PIC12F629 angefangen habe, und auch etwas auf dem Display sehen wollte, habe ich mir als Ziel gesetzt (und glücklicheweise erreicht), eine Schnittstelle für Display, die nur 2 pins zum Betreiben braucht, zu enwickeln. Um die zwei pins maximal auszunutzen, habe ich auf denen noch 3 Taster gehängt. Und es funktioniert!
Ich habe eben bemerkt, dass beim Beschreiben des 9-bittigen Schieberegisters (74HC164 + linke Hälfte von 74HC74) die steigende Flanke von _DT immer ein Prozessortakt vor der steigender Flanke von _CK kommt und habe es durch Vertauschen der Funktionen von _CK und _DT zum Erzeugen vom Enable (E) ausgenutzt (siehe das Zeitdiagramm im Code).
Bei der Tastenabfrage gibt es folgende Kombinationen der _CK und _DT:
_CK=1 und _DT=1 -> keine Taste gedrückt
_CK=1 und _DT=0 -> Taste T1 gedrückt
_CK=0 und _DT=1 -> Taste T2 gedrückt
_CK=0 und _DT=0 -> Taste T3 gedrückt
Vielleicht braucht jemand von euch so was. Wer keine Taster braucht, kann sie, alle Resistoren und beide Transistoren weg lassen (untere Skizze). In dem Fall könnte man die beiden IC's in SMD auf der Displayplatine mit doppelseitigen Klebeband befestigen und mit dünnem Kupferlackdraht verbinden. Vorteil: man kann das Display vielseitig mit diversen µC's verwenden.
Zur Skizze. Um es durchschaulicher zu gestalten sind folgende Verbindungen noch zu machen, die auf der Skizze nicht berücksichtigt sind:
An GND (Masse): IC1 pin7, IC2 pin7
An VCC: IC1 pin 14, IC2 pin 14 und IC1 pins 1,4,10,13.
IC1 ist 74HC74 und IC2 ist 74HC164. Die Transistoren sind beliebig.
Sollte ich was übersehen haben, bitte fragen. Weil es nur eine Idee ist, habe ich kein Layout (Platine) dafür.
Das Testprogram ist für übliches 2x16 Zeichendisplay geschrieben. Auf dem Display soll in der ersten Zeile "0123456789ABCDEF" und in der zweiten "FEDCBA9876543210" erscheinen.
Übrigens, es funktioniert auch mit anderen Zeichendisplays (z.B. 4x16 Zeichen) mit gleichen Anschlüssen: R/W, RS, E und D0 bis D7 (ausprobiert).
MfG
Code:
_ _ _ _ _ _ _ _ _____________
_CK ___| |_| |_| |_| |_| |_| |_| |_| |_| |_____
| | | | | | | | |
V V V V V V V V V
D7 D6 D5 D4 D3 D2 D1 D0 RS
___ ___ ___ ___ ___ _ _
_DT __| |___| |___| |___| |___| |__| |______| |__
| | | | | | |
V V V V V V V
________
E _________________________________________| |____
vom PIC
_CK V V _DT
GND | | VCC
=== T1 R1 1k | | R3 10k +
| --- ___ | | ___ |
+--+---o o---+-|___|---------+-----+-----|___|-+
| | T2 | R2 1k | | | R4 10k |
.-. | --- | ___ | | | ___ |
R7| | +---o o-+---|___|-+---+-------------+-|___|-+
10k | | | VCC | | | | | |
'-' T3 | | + | .-------. .-------. | .------.
| --- | | | | | 3 2 | |11 12| +----|2 |
+--+--+o o-------+ | | 5 | | 9 | +--|1,3,5 |
| | | | | '-------' '-------' | | |
.-..-. | | | | IC1 | === | |
R5| || |R6 | | +---+ | 74HC74 | GND | |
10k || |10k| | | | +------------|6 E |
'-''-' | | | +----------------------|4 RS |
| | |/ | | | | |
| +--| | .-------. | |
| |> | | 8 1,2| | |
| TS1 | | VCC| 3|--------------------|7 D0 |
| ===| + | 4|--------------------|8 D1 |
| GND| | | 5|--------------------|9 D2 |
| | +-|9 6|--------------------|10 D3 |
| |/ | 10|--------------------|11 D4 |
+-------| | 11|--------------------|12 D5 |
|> | 12|--------------------|13 D6 |
TS2 | | 13|--------------------|14 D7 |
=== '-------' '------'
GND IC2 74HC164 DISPLAY
PIC Miniterminal
vom PIC
_CK V V _DT
| |
| +-----+
| | |
| | |
+----+-------------+ VCC
| | | | | + .--------.
| .-------. .-------. | | |
| | 3 2 | |11 12| +--|2 |
| | 5 | | 9 | +--|1,3,5 |
| '-------' '-------' | | |
| | IC1 | === | |
+----+ | 74HC74 | GND | |
| | +---------------|6 E |
| +-------------------------|4 RS |
| | | |
.-------. | |
| 8 1,2| | |
VCC | 3|-----------------------|7 D0 |
+ | 4|-----------------------|8 D1 |
| | 5|-----------------------|9 D2 |
+--|9 6|-----------------------|10 D3 |
| 10|-----------------------|11 D4 |
| 11|-----------------------|12 D5 |
| 12|-----------------------|13 D6 |
| 13|-----------------------|14 D7 |
'-------' '--------'
IC2 74HC164 DISPLAY
; Test programm for display with 2-pin serially connection
LIST P=12F629
include "P12F629.inc" ; 4.000 MHz internal clock
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
#define _DT GPIO,0 ; display data line
#define _CK GPIO,1 ; display clock line
#define _C STATUS,C
DTemp EQU 0x20
DTemp1 EQU 0x21
DTemp2 EQU 0x22
DTemp3 EQU 0x23
ORG 0x0000
call Init
Main call FstLine
movlw 0x01
call ValLCD
movlw 0x23
call ValLCD
movlw 0x45
call ValLCD
movlw 0x67
call ValLCD
movlw 0x89
call ValLCD
movlw 0xAB
call ValLCD
movlw 0xCD
call ValLCD
movlw 0xEF
call ValLCD
call SndLine
movlw 0xFE
call ValLCD
movlw 0xDC
call ValLCD
movlw 0xBA
call ValLCD
movlw 0x98
call ValLCD
movlw 0x76
call ValLCD
movlw 0x54
call ValLCD
movlw 0x32
call ValLCD
movlw 0x10
call ValLCD
goto Main
FstLine movlw 0x80
goto CmdLCD
SndLine movlw 0xC0
CmdLCD movwf DTemp2
bcf _C ; clear RS
goto SendLCD
ValLCD movwf DTemp1 ; display value (00-FF)
swapf DTemp1,0
call NumLCD
movf DTemp1,0
NumLCD andlw 0x0F ; display number (0-F)
movwf DTemp
movlw 0x0A
subwf DTemp,0
btfsc _C
addlw 7
addlw 0x3A
CharLCD movwf DTemp2 ; display ASCII character
bsf _C ; set RS
SendLCD bcf _CK ; clear display enable
bcf _DT
bsf _DT
movlw 9
movwf DTemp
SerSend bcf _CK ; send a byte+RS
bcf _DT
btfsc DTemp2,7
bsf _DT
bsf _CK
rlf DTemp2,1
decfsz DTemp,1
goto SerSend
bcf _DT ; set display enable
bsf _DT
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
movlw 0xFC ; set GP5 to GP2 as inputs
movwf TRISIO ; and set GP0 and GP1 as outputs
call 0x3FF ; call calibration value
movwf OSCCAL ; calibrate internal RC oscillator
bcf STATUS, RP0 ; bank 0
movlw 0x38 ; 8 bit, 2 lines , 5x7 dots
call CmdLCD
movlw 0x0C ; display on, cursor off, no blink
call CmdLCD
movlw 6 ; increment, no shift
goto CmdLCD
END
Lesezeichen