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).
MfGCode:_ _ _ _ _ _ _ _ _____________ _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







Zitieren


Lesezeichen