[操作疑難] 7-SEGMENT LCD glass, 有做過 library 的請分享

本帖最後由 xiao 於 2015-8-25 21:36 編輯

7劃管的, 8字, LCD 玻璃
請問有 C library 可以分享好抄來改改嗎
AVR 或者 8051 的都可以
當然, 不會白問白要的

如果要用到 LCD 玻璃, 當然買到有 DATASHEET 的就最好
萬一沒有, 也可以自行反推出來
公開一下俺的做法, 高手或者行業的專家不要砸磚塊
要DIY或者手邊有多餘的LCD玻璃, 也可以用這個方法應用在DIY 的 PROJECT 上
當然, 用 7-SEGMENT LED 就最簡單, 不過比LCD來說就耗電耗很大大

方法如下,
拿到一片不知名的 7-SEGMENT LCD GLASS 以後,
自己組一個AC的驅動器, 輸出電壓可調, 電流可以是 0.001mA, 你沒看錯, 沒錯, 是milli-Ampere, 不是 Ampere, 基本LCD玻璃不需要電流, 所以跳字手表才會那麼省電. 輸出電壓可調大約 2VAC 到 5VAC, 要全部筆畫顯示, 用高點的電壓, 要找出筆畫的 MAPPING, 大約2.5VAC. 得到這個AC電壓的方法很多, 其中一種是隨便一個小的變壓器輸入110VAC或220VAC, 看當地電力公司的電壓, 變壓器12VAC輸出, 搭配 VR 和 電阻, 就可以得到2VAC 到 5VAC, 記得, 要用交流電驅動LCD玻璃, 用直流電也可以, 短時間還好, 長時間就會像喇叭被消磁一樣, LCD會死的. AC的驅動器的詳細看以下圖片,

7-SEGMENT LCD GLASS

nEO_IMG_IMG_5963.jpg
2015-7-29 13:24


有了AC的驅動器, 就可以慢慢一個一個 PIN - MAPPING 找出來, 用 EXCEL 組成一個表, 以後寫驅動程式或者顯示數字就靠它了. 最好用就是把這些 LCD 做 FREQUENCY COUNTER / ESR METER 等等需要顯示數字的, 每年畢業生都要交 FYP. 或者把報廢的12 DIGIT 計數機的LCD拿來做12位頻率計, 比44780好用和省電, 體積小了, 3.7V電池也可以用小的.

PIN-MAPPING TABLE 找到了, 詳細看圖,

7-SEGMENT LCD GLASS

nEO_IMG_6-digit LCD glass mapping.jpg
2015-7-29 13:24


關於MCU IO 直接驅動 LCD GLASS, 有很多文獻有講解原理, 這是其一, 或者寫的不太好, 不過能夠看明白的.
http://cache.freescale.com/files ... app_note/AN1763.pdf

為了更好的理解 LCD 是怎樣被驅動和顯示數字的, 先來學習一下原理. LCD 的每個筆畫 (或者每個像素), 有兩個透明的電極, 中間填入液晶 (TN), 構成了一個電容, 這個電容有點特別, 它可以被人的眼睛看見它動作的過程, 每次對它充電或放電, 它就會把光線隔斷, 因此被看見了. 為了方便試驗, 用了8051模擬器, 使用PORT1, 短名字稱為P1, 任何兩支腳, 例如 P1.0 和 P1.1 兩支腳, 產生5VAC, 使LCD其中的一筆畫顯現了. 如果沒有MCU, 其實手動開關一樣有這樣的效果.

至於產生5V AC的程序很簡單, 首先把P1設定成10101010, 過一陣子, P1設定成01010101, 再過一陣子, 重複前面的動作, 不會停止直到沒電. 使用兩個 LED 連到 P1.0 和 P1.1, 就會看到藍色和白色LED輪流閃爍, 這樣就是5V AC的表現, LCD 的其中一筆畫也顯現出來.
設計的電路圖長這樣,

7-SEGMENT LCD GLASS

nEO_IMG_IMG_5993.jpg
2015-8-1 15:40

7-SEGMENT LCD GLASS

nEO_IMG_IMG_5994.jpg
2015-8-1 15:40

動作片段看起來是這樣,
https://youtu.be/67vTWbES_I4


8051的源碼和燒寫文件, 89S51 / 89C51 / 89C2051 可以燒.
  1.        
  2. ;source code
  3. ;Free assembler download : https://www.pjrc.com/tech/8051/tools/as31_beta3_win32.zip
  4. ;win7, 64bit, tested
  5. .org 0000h         ;for 8051
  6. ;.org 1000h        ;for 89C51_NoICE, user area


  7. mov P1, #10101010B        ;send 10101010 to Port 1
  8. loop:
  9. xrl P1, #0FFH                ;toggle all bits,   i.e. P1 = 01010101

  10. mov A, #30        ; more delay, slow LED blinking, easy to visual
  11. more:
  12. acall delay        ; call delay procedure
  13. dec A
  14. jnz more

  15. sjmp loop        ; make this operation to run repeatedly

  16. delay:
  17. ; entry : N/A
  18. ; exit  : N/A
  19. ; changed : R0, R1
  20.         mov R1,#010h  ; initialize the R1 register with an immediate value 10h = 16d
  21.         mov R0,#0FFh  ; load R0 with FFh value to repeat the loop for 256 times
  22.         back:
  23.         DJNZ R0, back   ;internal loop repeates 256 times
  24.         DJNZ R1,back    ;external loop repeates 16 times
  25.         RET




  26. HEX file :
  27. :100000007590AA6390FF741E110F1470FB80F47931
  28. :080010001078FFD8FED9FC2294
  29. :00000001FF
複製代碼
..


美術或者商家, 都很喜歡用一套詞語或說法, 先建立一個點, 然後再建立另外一個點, 把它連成線, 再繼續連更多的線, 構成一個面.
有了顯示一個點 (8字LCD的單一個筆畫), 那下一步要試驗顯示兩個點或更多. 到底怎樣做呢 ? 很簡單, 同時加電到其他電極就好了. 實際上, 要顯示有意義的數目或文字, 還沒到時候, 或者火候不夠, 怎樣說呢 ?!

先來看看, 7-SEGMENT 的筆畫排列和提供電力的位置, 如果要顯示一個8字或日字, 那7個筆畫的電容(名稱和排列稱為 a,b,c,d,e,f)都要給它充電放電 (方法前面已經實驗過了), 沒有難度. 但是問題來了, 如過要顯現一個7字, 筆畫 a,b,c 都要動起來, 但是會意外的看到旁邊的那個小數點也不由自主的出現, 再來會有更多的例子, 如過要顯示其它數字. 所以, 先做個實驗, 看看同時顯示兩筆畫, 會是怎樣的情形. 以下的實驗, 純粹驅動 COM1 和 SEG1 / SEG2, 理論上會顯示筆畫 d 和小數點. 實際上也做到了. MCU 程序也是很簡單, COM1設成5V, SEG1 和 SEG2 設成0V, 兩個電容被充電, 過一陣子, 把它們翻轉過來, COM1設成0V, SEG1 和 SEG2 設成5V (記得前面研討過的交流供電方式).

設計的電路圖長這樣,

7-SEGMENT LCD GLASS

nEO_IMG_IMG_6016.jpg
2015-8-1 16:03

7-SEGMENT LCD GLASS

nEO_IMG_IMG_6017.jpg
2015-8-1 16:03

7-SEGMENT LCD GLASS

nEO_IMG_IMG_6019.jpg
2015-8-1 16:03


動作片斷看起來無特別, 跟一個筆畫的無大分別, 只是多了一點. 那為何電路圖看來複雜了那麼多? 看圖就知道, 因為 LCD GLASS 不喜歡太高的電壓 (例如5V), 所以要適當給它降低到2.5V, 另外這個使用中 8051的除錯器是低成本的工具加玩具, 方便設計實驗, 只留PORT1 / PORT3給使用, P0/P2用做SRAM的接口, 它唯一的好處是不用燒寫MCU, LOAD就可以把HEX裝到SRAM開始執行, 並且可以由USB連到電腦一步一步看到CPU執行程序. 另外8051的設計, P1.0沒有輸入HI-Z, 而且8051 I/O PORT的設計也有別於其他MCU (有人寫了原因, 不熬述, [url]http://www.edsim51.com/8051Notes/8051/parallelInputOuput.html[/url])

那, 要顯示有意義的數字或字母, 必須用人家施行的方法, 每個筆畫顯示一下, 然後輪到下一個筆畫, 逐個筆畫做一次, 直至完成8個點, 這樣做就由[點] 演變成 [面] 的顯示 (或許可叫做Scanning charging, 因LCD每個筆畫(像素)是一個電容), 提供了更多的人易於理解的資訊, 只要設計適當, 人的眼睛的動態緩慢反應的現象 (視覺暫留 VISUAL PERSISTENCE) 和電容儲電的總體效果會造成眼睛看到一個完整數字或字母 (人的腦袋和眼睛其實不太聰明, 很容易被騙了). 片斷的顯示, 是設計不做完美的現象, 看到它在閃爍或不完全. 不過, 這個是Scanning charging的具體表現, 具體的程序也是很簡單, 口語化如下,

COM1設成5V, SEG1 和 SEG2 設成0V, 過一陣子, COM1設成0V, SEG1 和 SEG2 設成5V, 過一陣子
COM2設成5V, SEG1 和 SEG2 設成0V, 過一陣子, COM2設成0V, SEG1 和 SEG2 設成5V, 過一陣子
COM3設成5V, SEG1 和 SEG2 設成0V, 過一陣子, COM3設成0V, SEG1 和 SEG2 設成5V, 過一陣子
COM4設成5V, SEG1 和 SEG2 設成0V, 過一陣子, COM4設成0V, SEG1 和 SEG2 設成5V, 過一陣子
重複以上動作.


動作片段看起來是這樣,
https://youtu.be/59LZabw_-_k


8051的源碼和燒寫文件, 89S51 / 89C51 / 89C2051 可以燒.
  1. ;; MCU 12MHZ, 89S51 ICE Monitor, USB connection
  2. ;; Load HEX to MCU, command, l
  3. ;; Run user program, command, g
  4. ;; .org must be set to 1000h for debug mode
  5. ;; .org set to 0000h for release


  6. ;external voltage divider port 1, port1 used to drive com & seg lines, a,b,c,d,e,f,g,dot of seven-segment LCD glass
  7. ; P1.0 com1
  8. ; P1.1 com2
  9. ; P1.2 com3
  10. ; P1.3 com4

  11. ; P1.4 seg1
  12. ; P1.5 seg2

  13. .equ com1, 0x01
  14. .equ com2, 0x02
  15. .equ com3, 0x04
  16. .equ com4, 0x08
  17. .equ seg1, 0x10
  18. .equ seg2, 0x20


  19.         .org 0000h         ;for 8051
  20.         ;.org 1000h        ;for 89C51_NoICE, user area
  21.        
  22.         nop
  23.         nop

  24.         mov P1,#00h          ;initialize the Port1, all output

  25. start:
  26. com1go:        mov A, #com1
  27.         mov P1, A
  28.         acall delay4   ; call delay procedure

  29.         mov A, #com1
  30.         CPL A        ;not Acc        ;invert
  31.         mov P1, A
  32.         acall delay4   ; call delay procedure

  33. ;        sjmp start        ; make this operation to run repeatedly

  34. com2go:        mov A, #com2
  35.         mov P1, A
  36.         acall delay4   ; call delay procedure

  37.         mov A, #com2
  38.         CPL A        ;not Acc
  39.         mov P1, A
  40.         acall delay4   ; call delay procedure


  41. com3go:        mov A, #com3
  42.         mov P1, A
  43.         acall delay4   ; call delay procedure

  44.         mov A, #com3
  45.         CPL A        ;not Acc
  46.         mov P1, A
  47.         acall delay4   ; call delay procedure


  48. com4go:        mov A, #com4
  49.         mov P1, A
  50.         acall delay4   ; call delay procedure

  51.         mov A, #com4
  52.         CPL A        ;not Acc
  53.         mov P1, A
  54.         acall delay4   ; call delay procedure
  55.        
  56.         sjmp start        ; make this operation to run repeatedly


  57. delay:
  58. ; entry : N/A
  59. ; exit  : N/A
  60. ; changed : R0, R1
  61.         mov R1,#010h  ; initialize the R1 register with an immediate value 10h = 16d
  62.         mov R0,#0FFh  ; load R0 with FFh value to repeat the loop for 256 times
  63.         back:
  64.         DJNZ R0, back   ;internal loop repeates 256 times
  65.         DJNZ R1,back    ;external loop repeates 16 times
  66.         RET

  67. delay2:
  68.         acall delay   ; call delay procedure
  69.         acall delay   ; call delay procedure
  70.         ret

  71. delay3:
  72.         acall delay   ; call delay procedure
  73.         acall delay   ; call delay procedure
  74.         acall delay   ; call delay procedure
  75.         ret

  76. delay4:
  77.         acall delay   ; call delay procedure
  78.         acall delay   ; call delay procedure
  79.         acall delay   ; call delay procedure
  80.         acall delay   ; call delay procedure
  81.         ret

  82. delay5:
  83.         acall delay   ; call delay procedure
  84.         acall delay   ; call delay procedure
  85.         acall delay   ; call delay procedure
  86.         acall delay   ; call delay procedure
  87.         acall delay   ; call delay procedure
  88.         ret


  89. ; uses A31 assembler, comment out below
  90. ;END





  91. HEX file :
  92. :1000000000007590007401F59011717401F4F59081
  93. :1000100011717402F59011717402F4F590117174FC
  94. :1000200004F59011717404F4F59011717408F59051
  95. :1000300011717408F4F590117180CA7590AA6390DB
  96. :10004000FF741E115C1470FB80F43F065B4F666DFD
  97. :100050007D077F6F777C395E79714000791078FF7A
  98. :10006000D8FED9FC22115C115C22115C115C115C80
  99. :1000700022115C115C115C115C22115C115C115C41
  100. :05008000115C115C227F
  101. :00000001FF
複製代碼
..



既然 80C51的 PORT1 不提供高阻抗 HI-Z 的輸入模式, 因此不能拿來用作最終的試驗. 因此換了一下, 用手邊有的, 例如ATMEGA328P, 因為他的PORT-D 的每只腳可以設定成3個狀態, 分別是
1) 輸入 (HI-Z)
2) 輸出 (HIGH)
3) 輸出 (LOW)
如果用3V電池供電, 用電阻分壓, 接到每只腳, 再加以MCU的程序控制, 每只腳則可得到 0V, 1.5V 及 3V 三種電壓
這樣就可以完成試驗了, 因此也順利顯示了兩組字符, 分別為 70 和 EF, 示範.

7-SEGMENT LCD GLASS

lcd_glass_avr_drive1.JPG
2015-8-25 21:16

7-SEGMENT LCD GLASS

lcd_glass_avr_drive2.JPG
2015-8-25 21:16

https://youtu.be/_FCZ6nxlt9I
AVR的源碼和燒寫文件, ATMEGA328P 可以燒.
  1. /*
  2. xiaoalab
  3. LCD glass driver testing
  4. MCU : ATmega328p
  5. PORTD used for LCD glass interface
  6. Vcc : 3V, must be
  7. compiler : arduino 0022
  8. */

  9. // port D, 8 bit, bit7 to bit0, connects to LCD glass, pin out
  10. #define com1 0x01
  11. #define com2 0x02
  12. #define com3 0x04
  13. #define com4 0x08

  14. #define seg1a 0x10  //1st digit, seg-a
  15. #define seg1b 0x20  //1st digit, seg-b
  16. #define seg2a 0x40  //2nd digit, seg-a
  17. #define seg2b 0x80  //2nd digit, seg-b


  18. #define delay_const 4



  19. void setup() {               
  20.   // initialize the digital pin as an output.
  21.   // Pin 13 has an LED connected on most Arduino boards:
  22.   pinMode(13, OUTPUT);

  23.   DDRD = 0; // port D, all bit, input mode
  24.   PORTD = 0; // write 0x00 to port D while it is in input mode, disable all pull up
  25. }

  26. void loop() {

  27.   PINB = bit (5); // toggle D13
  28.   
  29.   showEF();  //LCD glass will display EF, two digits
  30.   showEF();
  31.   showEF();
  32.   showEF();
  33.   showEF();
  34.   showEF();
  35.   showEF();
  36.   showEF();

  37.   show70();  ////LCD glass will display 70, two digits
  38.   show70();
  39.   show70();
  40.   show70();
  41.   show70();
  42.   show70();
  43.   show70();
  44.   show70();

  45. }


  46. void showEF ()
  47. {
  48.   DDRD = com1 + seg1a + seg1b + seg2a + seg2b;  // output pin setup, com1= 0v, com2,com3,com4 input mode, 1.5V
  49.   PORTD = seg1a;
  50.   delay(delay_const);
  51.   PORTD ^= com1 + seg1a + seg1b + seg2a + seg2b;  //toggle output pins, produces AC to drive LCD comX-segX
  52.   delay(delay_const);
  53.   

  54.   DDRD = com2 + seg1a + seg1b + seg2a + seg2b;  // output pin setup, com2= 0v, com1,com3,com4 input mode, 1.5V
  55.   PORTD =  seg1a  + seg2a;
  56.   delay(delay_const);
  57.   PORTD ^= com2 + seg1a + seg1b + seg2a + seg2b;
  58.   delay(delay_const);


  59.   DDRD = com3 + seg1a + seg1b + seg2a + seg2b;  // output pin setup, com3= 0v, com1,com2,com4 input mode, 1.5V
  60.   PORTD = seg1a  + seg2a;
  61.   delay(delay_const);
  62.   PORTD ^= com3 + seg1a + seg1b + seg2a + seg2b;
  63.   delay(delay_const);


  64.   DDRD = com4 + seg1a + seg1b + seg2a + seg2b;  // output pin setup, com4= 0v, com1,com2,com3 input mode, 1.5V
  65.   PORTD = seg1a + seg1b + seg2a + seg2b;
  66.   delay(delay_const);
  67.   PORTD ^= com4 + seg1a + seg1b + seg2a + seg2b;
  68.   delay(delay_const);
  69. }


  70. void show70 ()
  71. {
  72.   DDRD = com1 + seg1a + seg1b + seg2a + seg2b;
  73.   PORTD = seg2a;
  74.   delay(delay_const);
  75.   PORTD ^= com1 + seg1a + seg1b + seg2a + seg2b;
  76.   delay(delay_const);
  77.   

  78.   DDRD = com2 + seg1a + seg1b + seg2a + seg2b;
  79.   PORTD =  seg1b  + seg2a + seg2b;
  80.   delay(delay_const);
  81.   PORTD ^= com2 + seg1a + seg1b + seg2a + seg2b;
  82.   delay(delay_const);


  83.   DDRD = com3 + seg1a + seg1b + seg2a + seg2b;
  84.   PORTD = seg1b  + seg2b;
  85.   delay(delay_const);
  86.   PORTD ^= com3 + seg1a + seg1b + seg2a + seg2b;
  87.   delay(delay_const);


  88.   DDRD = com4 + seg1a + seg1b + seg2a + seg2b;
  89.   PORTD = seg1b + seg2a + seg2b;
  90.   delay(delay_const);
  91.   PORTD ^= com4 + seg1a + seg1b + seg2a + seg2b;
  92.   delay(delay_const);
  93. }

  94. // end of program, source code



  95. HEX
  96. :100000000C9461000C947E000C947E000C947E0095
  97. :100010000C947E000C947E000C947E000C947E0068
  98. :100020000C947E000C947E000C947E000C947E0058
  99. :100030000C947E000C947E000C947E000C947E0048
  100. :100040000C944A010C947E000C947E000C947E006B
  101. :100050000C947E000C947E000C947E000C947E0028
  102. :100060000C947E000C947E00000000002400270009
  103. :100070002A0000000000250028002B0000000000DE
  104. :1000800023002600290004040404040404040202DA
  105. :100090000202020203030303030301020408102007
  106. :1000A0004080010204081020010204081020000012
  107. :1000B0000007000201000003040600000000000029
  108. :1000C000000011241FBECFEFD8E0DEBFCDBF11E08E
  109. :1000D000A0E0B1E0EAEAF4E002C005900D92A030A1
  110. :1000E000B107D9F711E0A0E0B1E001C01D92A9303D
  111. :1000F000B107E1F70E944C020C9453020C940000EB
  112. :100100000F931F9311EF1AB980E48BB964E070E08C
  113. :1001100080E090E00E9492018BB181278BB964E06E
  114. :1001200070E080E090E00E94920112EF1AB900EEB8
  115. :100130000BB964E070E080E090E00E9492018BB126
  116. :1001400081278BB964E070E080E090E00E9492012A
  117. :1001500014EF1AB980EA8BB964E070E080E090E0B7
  118. :100160000E9492018BB181278BB964E070E080E03E
  119. :1001700090E00E94920118EF1AB90BB964E070E0A8
  120. :1001800080E090E00E9492018BB181278BB964E0FE
  121. :1001900070E080E090E00E9492011F910F9108951D
  122. :1001A0000F931F9311EF1AB980E18BB964E070E0EF
  123. :1001B00080E090E00E9492018BB181278BB964E0CE
  124. :1001C00070E080E090E00E94920112EF1AB900E521
  125. :1001D0000BB964E070E080E090E00E9492018BB186
  126. :1001E00081278BB964E070E080E090E00E9492018A
  127. :1001F00014EF1AB90BB964E070E080E090E00E945F
  128. :1002000092018BB181278BB964E070E080E090E0CF
  129. :100210000E94920118EF1AB980EF8BB964E070E088
  130. :1002200080E090E00E9492018BB181278BB964E05D
  131. :1002300070E080E090E00E9492011F910F9108957C
  132. :1002400080E283B90E94D0000E94D0000E94D000BA
  133. :100250000E94D0000E94D0000E94D0000E94D000D6
  134. :100260000E94D0000E9480000E9480000E948000B6
  135. :100270000E9480000E9480000E9480000E948000F6
  136. :100280000E94800008958DE061E00E9426021AB865
  137. :100290001BB808951F920F920FB60F9211242F933F
  138. :1002A0003F938F939F93AF93BF938091040190915D
  139. :1002B0000501A0910601B091070130910801019656
  140. :1002C000A11DB11D232F2D5F2D3720F02D57019635
  141. :1002D000A11DB11D20930801809304019093050195
  142. :1002E000A0930601B0930701809100019091010154
  143. :1002F000A0910201B09103010196A11DB11D80934F
  144. :10030000000190930101A0930201B0930301BF91FA
  145. :10031000AF919F918F913F912F910F900FBE0F90B2
  146. :100320001F9018959B01AC017FB7F8948091000154
  147. :1003300090910101A0910201B091030166B5A89BC3
  148. :1003400005C06F3F19F00196A11DB11D7FBFBA2FE7
  149. :10035000A92F982F8827860F911DA11DB11D62E03E
  150. :10036000880F991FAA1FBB1F6A95D1F7BC012DC02A
  151. :10037000FFB7F8948091000190910101A0910201D2
  152. :10038000B0910301E6B5A89B05C0EF3F19F00196B7
  153. :10039000A11DB11DFFBFBA2FA92F982F88278E0F3F
  154. :1003A000911DA11DB11DE2E0880F991FAA1FBB1F5F
  155. :1003B000EA95D1F7861B970B885E9340C8F22150CF
  156. :1003C00030404040504068517C4F21153105410577
  157. :1003D000510571F60895789484B5826084BD84B522
  158. :1003E000816084BD85B5826085BD85B5816085BD30
  159. :1003F000EEE6F0E0808181608083E1E8F0E0108249
  160. :10040000808182608083808181608083E0E8F0E089
  161. :10041000808181608083E1EBF0E080818460808373
  162. :10042000E0EBF0E0808181608083EAE7F0E08081AA
  163. :10043000846080838081826080838081816080830A
  164. :100440008081806880831092C1000895482F50E019
  165. :10045000CA0186569F4FFC0124914A575F4FFA010B
  166. :1004600084918823C1F0E82FF0E0EE0FFF1FE859D8
  167. :10047000FF4FA591B491662341F49FB7F8948C91F6
  168. :10048000209582238C939FBF08959FB7F8948C91F9
  169. :10049000822B8C939FBF08950E94EB010E94430121
  170. :0A04A0000E942001FDCFF894FFCF69
  171. :00000001FF
複製代碼
話說到這裡, 等待高手提供  C library 了

...
..

本帖最後由 Charcoal99 於 2015-7-29 15:00 編輯

AVR Atmel 自家官網有提供 bitbang I/O direct LCD Glass Source code Library,
App Note 可以 google 「avr LCD glass driver」
App Note 連 source code 可到官網 AppNote 區搜 「LCD」按 CD icon 下載。
http://www.atmel.com/search.aspx ... ~Application%20Note
建議先看AVR063, AVR064,AVR065

TOP

TOP

幾年前曾經用 Arduino 及 PCF8576 去點著塊 7-segment LCD,不過當時只係想玩 LCD driver,沒想到有什麼實用價值,加上技術有限,沒寫過 library。
看到師兄發帖後曾有一陣衝動再寫個 library,不過可能人又懶、年纪又大,再沒精神去搞,好快就打消這念頭了。

TOP

以前沒有用 driver 前,曾試過搭棚去點亮塊 LCD。MCU 用了 PIC16F84。
完成後的結論:得個搞字!
lcd_1.jpg
2015-8-1 09:28

TOP

AVR Atmel 自家官網有提供 bitbang I/O direct LCD Glass Source code Library,
App Note 可以 google 「av ...
Charcoal99 發表於 2015-7-29 14:54



    有點不容易看得懂
看到AVR340, 比較容易懂一些, 但不是 library

TOP

以前沒有用 driver 前,曾試過搭棚去點亮塊 LCD。MCU 用了 PIC16F84。
完成後的結論:得個搞字!
...
FPDman 發表於 2015-8-1 09:30



    加油, 為了好玩, 加油

TOP

MrAlmost 發表於 2015-7-29 22:51


不太容易看得懂.

TOP

飛到咁不如用CPLD

TOP

本帖最後由 FPDman 於 2015-8-1 22:14 編輯

不懂得用 CPLD 呵!而且輸出波形要像上面 AVR065 中 fig2-4,或者 PCF8576 datasheet 裡的 1:4 mux 輸出波形。
一隻LCD 腳就要跟最少兩個 bilateral switch 和 inverting buffer,十幾根腳成了一大串嘢,所以搞到好大棚。當然,應該還有其他簡易的方法產生波形。
最後還是玩現成 LCD driver 算了。

當時輸出波形是用了 "B" type,1/4 duty,1/3 bias,找到了舊照片,其中一個 common 的波形如下:

B type

Mux 4 Tester 3_1 B type.jpg
2015-8-1 22:10

TOP