Hi friends,
I know that this is a really old topic, but, last week I got 3 of this display for free from a friend.
They are nice, bright, and has a good "retro" looking.
I did many many tests and I was unable to get a stable result from the display. They are brand new, never used.
I test the Rentron´s Hello moving message an the clock published here.
Both, I get ramndom characters and a strange behavior.
I´m using a 16F877 @ 10 Mhz (I did tests @ 20 Mhz also)
![Name: 2012-06-07 12.34.37.jpg
Views: 2184
Size: 364.7 KB](https://www.picbasic.co.uk/forum/attachment.php?s=a052f3eef6dd9c457ac69ad2ae0e0a03&attachmentid=6516&d=1339083923)
I´m using the wiring suggested by rentron :
'* // Display connections * //'
' PortB Display | PortA Display | PortC Display
' B0 #19 | A0 #3 | C0 #13
' B1 #20 | A1 #4 | C1 #6
' B2 #23 | A2 #5 | C2 #1
' B3 #24
' B4 #25
' B5 #26
' B6 #27
' * // Display GND, VCC and N.C. [no connection] * //'
' GND 15,16,17,28
' VCC 2,7,8,9,10,11,14,18
' N.C. 12
and the source code :
Code:
DEFINE OSC 10 ' 4MHz oscillator
@ ERRORLEVEL -306 ; Retira o erro de crossing page boundary
;@ __CONFIG _CP_OFF & _DEBUG_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
@ __CONFIG _HS_OSC & _CP_OFF & _DEBUG_OFF & _CPD_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF
TRISA = 0 ' Setup PortA = output for Address Bus
TRISB = 0 ' Setup PortB = output for Data Bus
TRISC = 0 ' RC.7 = input, rest outputs [used for loader]
ADCON1 = 7 ' A/D OFF
A_Bus VAR PORTA
D_Bus VAR PORTB ' PortB = Data Bus
W_Pin VAR PortC.0 ' HDSP-2112 write strobe pin #13
A3 VAR PortC.1 ' HDSP-2112 mode select pin #6
FL VAR PortC.4 'Flash mode select
RST VAR PortC.2 ' HDSP-2112 reset pin #1
Digit VAR BYTE[8] ' 8-byte digit array
DigPat VAR BYTE ' Digit pattern from lookup table
LP_Cnt VAR BYTE ' Loop counter
LowDig VAR BYTE ' Holds "low" digit # to lookup
LowDig = 0 ' 1st digit = 0
HiDig VAR BYTE ' Holds "high" digit # to lookup
HiDig = 7 ' Last digit = 7
J VAR BYTE ' Array index pointer
J = 0 ' 1st byte in array
S_Speed VAR WORD ' Holds display scroll speed
S_Speed = 200 ' Set display scroll speed here
Low D_Bus.7 ' Set display for normal operation
EOM CON "~" ' Character used as "End of Message" marker
hour VAR BYTE ' Define hour variable
dhour VAR word ' Define display hour variable
minute VAR BYTE ' Define minute variable
second VAR BYTE ' Define second variable
ticks VAR BYTE ' Define pieces of seconds variable
update VAR BYTE ' Define variable to indicate update of LCD
second10 var byte
min10 VAR BYTE
hour10 VAR BYTE
i var word
ADCON1 = 7
second10 = 0
hour = 0 ' Set initial time to 01:00:00
hour10 = 6
minute = 0
min10 = 0
second = 0
ticks = $00
update = 0
OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
INTCON = $a0 ' Enable TMR0 interrupts
On Interrupt GoTo tickint
'
'* // Initialize display - then set brightness * //'
Init_Display:
' * // Initialize Display Here * //'
High W_Pin : Low RST : Pause 20 : High RST : High FL : Pause 20
' * // Set Display Brightness Here * //'
' To change display brightness
' D_Bus = | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
' Bright =| 100% | 80% | 53% | 40% | 27% | 20% | 13% |
'
' Set 27% | mode.bit | strobe settings into display |
D_Bus = %0001100 : Low A3 : Low W_Pin : High W_Pin
High A3 ':HIGH FL' A3 used only for setting display brightness
'* // Get 8 digits into "Digit Array" for display * //'
GetDig:
For LP_Cnt = LowDig TO HiDig
LookUp LP_Cnt,[" : : "],DigPat
Digit[J] = DigPat ' Load all 8 digits into array
J = J + 1 ' Increment array index pointer
Next ' Loop until we have all 8 digits loaded
J=0 ' Re-set array index pointer
LowDig = LowDig ' Increment to next "low" digit
HiDig = HiDig ' Increment to next "high" digit
'* // Display 8 digits on display then return for more // *'
DisplayDigit:
For LP_Cnt = LowDig TO HiDig ' Scroll right-to-left
A_Bus = LP_Cnt ' Place digit address on address bus
D_Bus = Digit[J] ' Place digit data on data bus
Low W_Pin : High W_Pin' Strobe data into display
J = J + 1 ' Increment array pointer to next digit
DigPat = DigPat
Next
J = 0
chkup:
'While hour = 1 and hour10 = 3
' hour = 0
' hour10 = 1
' wend
A_Bus = 7
D_Bus = 48 + second10
Low W_Pin : High W_Pin
Pause 10
A_Bus = 6
D_Bus = 48 + second
Low W_Pin : High W_Pin
Pause 10
A_Bus = 4
D_Bus = 48 + min10
Low W_Pin : High W_Pin
Pause 10
A_Bus = 3
D_Bus = 48 + minute
Low W_Pin : High W_Pin
Pause 10
A_Bus = 1
D_Bus = 48 + hour10
Low W_Pin : High W_Pin
Pause 10
A_Bus = 0
D_Bus = 48 + hour
Low W_Pin : High W_Pin
Pause 10
IF update = 1 Then
update = 0
endif
Goto chkup
Disable
tickint:
ticks = ticks + 1 ' Count pieces of seconds
IF ticks < 165 Then tiexit
' One second elasped - update time
ticks = 0
second10 = second10 + 1
IF second10 >= 10 Then
second10 = 0
second = second + 1
IF second >= 6 Then
second = 0
min10 = min10 +1
IF min10 > 9 THEN
min10 = 0
minute = minute + 1
IF minute >= 6 Then
minute = 0
hour10 = hour10 + 1
IF hour10 > 9 THEN
hour10 = 0
hour = hour + 1
IF hour > 2 Then
hour = 0
ENDIF
ENDIF
EndIF
EndIF
EndIF
ENDIF
update = 1 ' Set to update LCD
tiexit:
INTCON.2 = 0 ' Reset timer interrupt flag
Resume
End
Have someone here ever used this kind of display ?
thanks !
Sérgio
Bookmarks