痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 3966|回復: 20

[請求協助]VFD NEC LD8140 + ESP32 顯示問題

[複製鏈接]
發表於 2022-2-3 11:51:52 | 顯示全部樓層 |閱讀模式
各位前輩好, 之前買了一個vfd時鐘套件, 現在不管怎麼調整, 時間不是快就是慢, 剛好最近在玩 esp32 , 又在國外網路上看到很多電子時鐘都是 esp32 + vfd iv12/11/18/22做成, 其中不乏以 SN74HC595做為顯示驅動
剛好我的電路顯示驅動與 ysc前輩發表的 VFD驅動迴路 一樣, 我也有先請教ysc前輩一些問題後, 我仔細檢查了電路, 發現可以拆掉 89s52 直接從 74hc595 的接腳輸入
但是好像事與願違, 我失敗了, 顯示功能沒有成功也沒有正常, 程式在跑的時候, 不定時顯示, 大部份時間都不顯示, 而且都是不正確

似乎不是我想像那麼單純, 不知道我還遺漏了什麼?
另外我有看到有人是直接把 74hc595 第13腳直接地. 我是用 esp32 輸出低電位 LOW , 不知道是不是這個原因而失敗?
操作中還因為接錯線, 燒壞一個ESP32和兩個sn74hc595

時鐘板用原來的電源, ESP32 由時鐘板降壓第一個二極體4.27v共用電源
VFD 能點亮, 表示燈絲及柵極供電正常

以下是ESP32接腳對應sn74hc595的接腳
const int clockPin = 15;   // 74HC595 序列時脈腳接 11
const int latchPin = 12;   // 74HC595 暫存器時脈腳接 12
const int oe       = 13;    // 74HC595 開機時保持低電位 13
const int dataPin = 14;    // 74HC595 序列腳接 14

arduino 使用ESP32-S2
arduino IDE 1.8.19

板子照片
257153-1.jpg

從 esp32 輸出接線
257164.jpg

不定時顯示, 大部份時間都不顯示, 而且都不正確
擷取v01.JPG

發表於 2022-2-3 12:29:52 | 顯示全部樓層
靜態屏很容易驅動才對啊,先寫一段測試程式,把特定數值輸出到HC595,實際測量是否相符?

沒看您附的程式檔,驅動HC595原則上就是常態保持CLK跟ST為LOW,發出CLK或ST時HI-->LO,尤其ST不能常態在HI,至於OE一直保持LO沒關係。

發表於 2022-2-3 12:46:16 | 顯示全部樓層
本帖最後由 ysc 於 2022-2-3 12:50 PM 編輯

剛剛大致看一下程式,輸出HC595時序有點問題,正確演算法說明如下。

以這個32BIT串聯輸出例子來說:
1. 把欲輸出的BIT輸出到DATA腳位。
2. CLK輸出HI,CLK輸出LOW。
3. 回到步驟1, 重複32次。
4. ST輸出HI,ST輸出LOW。

看您程式,ST平常為HI,開始移位時才設為LOW,移位完1位數(8BIT)又設為HI,
雖然這時序有點問題,但頂多顯示有殘影,會有時顯示有時不顯示,應該還有其他原因。

評分

2

查看全部評分

 樓主| 發表於 2022-2-4 15:04:04 | 顯示全部樓層
ysc 發表於 2022-2-3 12:29 PM
靜態屏很容易驅動才對啊,先寫一段測試程式,把特定數值輸出到HC595,實際測量是否相符?

沒看您附的程式 ...

因為我參考到的一些程式, 並沒有預設 LOW , 所以我就沒有預設了, 目前我程式改成預設為 LOW 了
我一開始在 setup() 有一段 shiftOUt(), 就是先輸出 0 , 但看起來這段並沒有成功
 樓主| 發表於 2022-2-4 15:21:26 | 顯示全部樓層
ysc 發表於 2022-2-3 12:46 PM
剛剛大致看一下程式,輸出HC595時序有點問題,正確演算法說明如下。

以這個32BIT串聯輸出例子來說:

您的意思是改成

  1.   shiftOut(dataPin, clockPin, LSBFIRST, LED_D[count]); // 先推入「陣列D」
  2.   digitalWrite(clockPin, LOW);
  3.   digitalWrite(clockPin, HIGH);
  4.   shiftOut(dataPin, clockPin, LSBFIRST, LED_C[count]); // 先推入「陣列C」
  5.   digitalWrite(clockPin, LOW);
  6.   digitalWrite(clockPin, HIGH);
  7.   shiftOut(dataPin, clockPin, LSBFIRST, LED_B[count]); // 先推入「陣列B」
  8.   digitalWrite(clockPin, LOW);
  9.   digitalWrite(clockPin, HIGH);
  10.   shiftOut(dataPin, clockPin, LSBFIRST, LED_A[count]); // 再推入「陣列A」
  11.   digitalWrite(clockPin, LOW);
  12.   digitalWrite(clockPin, HIGH);
  13.   digitalWrite(latchPin, HIGH);  
  14. digitalWrite(latchPin, LOW);  
複製代碼
 樓主| 發表於 2022-2-4 16:04:38 | 顯示全部樓層
ysc 發表於 2022-2-3 12:46 PM
剛剛大致看一下程式,輸出HC595時序有點問題,正確演算法說明如下。

以這個32BIT串聯輸出例子來說:

這是我目前找到比較相近的資料網站, 同樣是以 74HC595 + TD62783 做為驅動電路
https://www.instructables.com/Op ... -11-VFD-Tube-Clock/

但我不知道是不是 8952單晶片的動作是否和arduino ESP32 有所不同
 樓主| 發表於 2022-2-4 16:57:47 | 顯示全部樓層
ysc 發表於 2022-2-3 12:46 PM
剛剛大致看一下程式,輸出HC595時序有點問題,正確演算法說明如下。

以這個32BIT串聯輸出例子來說:

我想應該要另外重新做新的板子試試, 也許原來的板子有什麼地方我不知道的地方影響輸出顯示
發表於 2022-2-4 17:45:30 | 顯示全部樓層
本帖最後由 ysc 於 2022-2-4 07:44 PM 編輯


其實我很懶得去看別人寫的程式,尤其這種有用到函式庫的,光這樣看根本不知道函式裡做了甚麼動作。

但依常理判斷,shiftOut函式裡面應該已包含敲clock了,呼叫之後不應該再敲一次clock,這會造成移位錯誤。

另外,從HC595-->TD62783-->VFD腳位對應是否有弄清楚?最好把電路畫出來,再依腳位對應來寫軟體。

發表於 2022-2-4 17:52:19 | 顯示全部樓層
goodnight 發表於 2022-2-4 04:04 PM
但我不知道是不是 8952單晶片的動作是否和arduino ESP32 有所不同


不必擔心這個問題,只要HI、LOW準位與時序正確,用哪種MCU都不是問題。
發表於 2022-2-4 17:53:46 | 顯示全部樓層
goodnight 發表於 2022-2-4 04:57 PM
我想應該要另外重新做新的板子試試, 也許原來的板子有什麼地方我不知道的地方影響輸出顯示 ...

hc595 電源電壓多少?
ESP32 I/O 電壓多少?

Easy way:
32k 振盪器調整頻率到準確的 32.768k, 別搞單晶片程式了

Hard way:
hc595 驅動徹底研究, 用 SDCC 改寫 89S52 程式.
 樓主| 發表於 2022-2-4 20:06:10 | 顯示全部樓層
oldhan 發表於 2022-2-4 05:53 PM
hc595 電源電壓多少?
ESP32 I/O 電壓多少?

HC595 電壓 4.92v
ESP32 電壓 4.34v

這塊時鐘套件的 32.768 石英振盪器是給 ds1302 用, 所以是換掉這個振盪器?
我目前是用ESP32, 不太可能去用89S52

只是網路上有用esp32+vfp的案例, 剛好手上有這些材料
 樓主| 發表於 2022-2-4 20:22:01 | 顯示全部樓層
ysc 發表於 2022-2-4 05:45 PM
其實我很懶得去看別人寫的程式,尤其這種有用到函式庫的,光這樣看根本不知道函式裡做了甚麼動作。

但依 ...

我目前只有畫出驅動的部份, 我打算另外用板子重組驅動的部份, 因為零件我都有了
也許是還有什麼地方我沒注意到

ld8140+74hc595+td62783

ld8140+74hc595+td62783
發表於 2022-2-4 21:43:03 | 顯示全部樓層
本帖最後由 oldhan 於 2022-2-4 09:47 PM 編輯
goodnight 發表於 2022-2-4 08:06 PM
HC595 電壓 4.92v
ESP32 電壓 4.34v


ESP32 記得是 3.3V,
然後 HC595 Vih 在 6V Vcc 時 min  4.2V,
5V Vcc Vih 會不會在 3.3V 附近? (Datasheet 沒有 5V 之資料),
HC595 Vcc 要降低一些,
google 一下interface esp32 with hc595,
有人接 3.3V, 也有接 5V的,
5V 可能可以動, 但畢竟在臨界點, HC595 換個廠牌就會有問題.

評分

1

查看全部評分

 樓主| 發表於 2022-2-6 17:44:45 | 顯示全部樓層
oldhan 發表於 2022-2-4 09:43 PM
ESP32 記得是 3.3V,
然後 HC595 Vih 在 6V Vcc 時 min  4.2V,
5V Vcc Vih 會不會在 3.3V 附近? (Datashee ...

抱歉, 應該是 ESP32-S2 有 5v/3.3v
如果插回原來的 89S52 可以正常顯示, 看起來, 應該是哪裡的接線我漏掉了

整組電源是用原來的 5v 供應器
 樓主| 發表於 2022-2-6 18:50:29 | 顯示全部樓層
ysc 發表於 2022-2-4 05:45 PM
其實我很懶得去看別人寫的程式,尤其這種有用到函式庫的,光這樣看根本不知道函式裡做了甚麼動作。

但依 ...

現在能輸出了, 看起來輸出沒問題, 倒是腳位的問題, 可能沒有我想的簡單了,
從電路上看是沒有問題, 但輸出的結果, 位元組的位置不對了
要重新對應看看, 等下週零件到, 比較容易解決
發表於 2022-2-7 00:49:47 | 顯示全部樓層
看了你的VFD 可以顯示,表示"顯示電路沒問題" 字畫不符 是因為"定義不對" 程式的 字段 對應表(table)出了錯!! 因為74hc595是把七段顯示用串連方式送出去.

評分

1

查看全部評分

發表於 2022-2-7 11:40:32 | 顯示全部樓層
本帖最後由 阿明先生 於 2022-2-7 02:12 PM 編輯

時鐘用這麼複雜的線路,使用74hc595 串行輸入轉並行輸出,你的目的應該是要學習74hc595這一顆IC串入並出的功能 ,既然要學習74hc595自己寫一測試程式,測試程式延遲0.5秒一個一個的發送串輸入00000001,00000010,00000100.......... ,1支腳換另1支腳的並輸出顯示,就能知道那裡有問題,硬體錯誤還是程式錯誤,然後才建立7段顯示的數字型碼表格,要按步驟除錯,學習就是要懂得除錯的方法, 盲目的學習是沒有意義。


下面的圖是我用單晶片製作時鐘,製作時鐘不需要那麼複雜一顆單晶片就可以,很久以前製造的時鐘,單晶片是義隆電EM78P458(一顆幾塊錢台幣的單晶片),其實它不只是時鐘,是一個依時間控制馬達啟動的控制器,有類比偵測電壓控制馬達轉速PWM輸出,
時鐘.jpg 的線路

評分

2

查看全部評分

 樓主| 發表於 2022-2-8 11:44:25 | 顯示全部樓層
本帖最後由 goodnight 於 2022-2-8 12:11 PM 編輯
antlu 發表於 2022-2-7 12:49 AM
看了你的VFD 可以顯示,表示"顯示電路沒問題" 字畫不符 是因為"定義不對" 程式的 字段 對應表(table)出了錯! ...

對, 因為我被位元資料搞混了, 例如: 我要送出 1 [0,0,0,0,0,1,1,0] (VFD c,b 點亮)
一開始找到的範例都是 LSBFIRST 的方式, 輸出到 595 就變 01100000
後來改用 MSBFIRST 輸出, 但還是有問題

而且很多人分享的文章都怪怪的, 越看越混亂, 起碼找到輸出的方向了, 接下來就是確認輸出及重新定義 Table


VFD 第4位字劃
a
f
g
e
d
c
b
null
VFD 第4位 pin
26
27
28
29
30
31
32

74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
輸出 1 [0,0,0,0,0,1,1,0]
(VFD c,b 點亮) MSBFIRST
0
0
0
0
0
1
1
0




 樓主| 發表於 2022-2-8 11:58:17 | 顯示全部樓層
本帖最後由 goodnight 於 2022-2-8 12:05 PM 編輯
阿明先生 發表於 2022-2-7 11:40 AM
時鐘用這麼複雜的線路,使用74hc595 串行輸入轉並行輸出,你的目的應該是要學習74hc595這一顆IC串入並出的 ...


一開始參考的資料都沒有很詳細說解說資料輸出到 74hc595 的問題, 雖然知道 74hc595 的運作, 但不懂資料輸入方式 (LSBFIRST/MSBFIRST) 造成的影響, 而且在範例中
有些人接法是 Q0=A, Q1=B, Q2=C ,Q3=D, Q4=E, Q5=F, Q6=G
有些人則反過來接 Q7=A, Q6=B, Q5=C ,Q4=D, Q3=E, Q2=F, Q1=G
也沒有仔細看範例的 Table , 所以白忙了好幾天, 最後還是看到您的發文, 一個一個的發送, 我再重新找相關的資料, 因為手上也沒有足夠的 LED 和7段顯示器, 所以只能用現有的顯示器去測試解決問題

現在要重建字劃的 Table

非常感謝您
 樓主| 發表於 2022-2-9 14:41:23 | 顯示全部樓層
經由各位前輩的指導, 我已經找出之前失敗的原因

主要原因之一, 是對多個74hc595串接的處理概念完全不熟
第二個原因是, 我一直以第4 位 vfd 顯示推送資料, 未對第一位到第三位 vfd 顯示推送資料
第三個原因是推送方式錯誤, 我一直使用 MSBFIRST 方式推送資料 (因為接腳的方式不同沒注意到)
第四個原因是推送資料的認知, 我的認知是如下左方 (從網路看搜尋到的教學, 都是針對要點亮的筆劃送出1)
結果並不是這樣, 反而完全不顯示, 反而在第4位的Q7要送出 1 ,  

例顯示1 資料是 {0,0,0,0,0,1,1,0}, 必須要 {0,0,0,0,0,1,1,1}
例顯示8 資料是 {1,1,1,1,1,1,1,0}, 必須要 {1,1,1,1,1,1,1,1}
還有一些因為手邊沒有足夠相對的零件可以測試

資料推送方式 LSBFIRST

當時推送資料方式 (錯誤方式)
第1位到第4位數都不會顯示
VFD 第4位字劃
a
f
g
e
d
c
b
null
VFD 第4位 pin
26
27
28
29
30
31
32

74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
顯  示 1 [0,0,0,0,0,1,1,0]
0
0
0
0
0
1
1
0

VFD 第3位字劃
dot2
a
f
g
e
d
c
b
VFD 第4位 pin
18
19
20
21
22
23
24
25
74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
關閉顯示    [0,0,0,0,0,0,0,0]
0
0
0
0
0
0
0
0

VFD 第2位字劃
a
f
g
e
d
c
b
dot1
VFD 第4位 pin
10
11
12
13
14
15
16
17
74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
關閉顯示   [0,0,0,0,0,0,0,0]
0
0
0
0
0
0
0
0

VFD 第1位字劃
AM
PM
a
f
g
ed
c
b
VFD 第4位 pin
2
3
4
5
6
7
8
9
74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
關閉顯示   [0,0,0,0,0,0,0,0]
0
0
0
0
0
0
0
0

前推送資料方式 (正常運作)

VFD 第4位字劃
a
f
g
e
d
c
b
null
VFD 第4位 pin
26
27
28
29
30
31
32

74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
顯  示 1 [0,0,0,0,0,1,1,1]
0
0
0
0
0
1
1
1

VFD 第3位字劃
dot2
a
f
g
e
d
c
b
VFD 第4位 pin
18
19
20
21
22
23
24
25
74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
關閉顯示    [0,0,0,0,0,0,0,0]
0
0
0
0
0
0
0
0

VFD 第2位字劃
a
f
g
e
d
c
b
dot1
VFD 第4位 pin
10
11
12
13
14
15
16
17
74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
關閉顯示   [0,0,0,0,0,0,0,0]
0
0
0
0
0
0
0
0

VFD 第1位字劃
AM
PM
a
f
g
ed
c
b
VFD 第4位 pin
2
3
4
5
6
7
8
9
74HC595 pin
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
關閉顯示   [0,0,0,0,0,0,0,0]
0
0
0
0
0
0
0
0


我有一個地方不懂, 為什麼第四位數 74hc595 Q7 一定要送出 1, 否則第1位到第4位數都不會顯示, 這和我對要點亮的腳位推送 1 的認知, 完全不能理解,
有沒有前輩願意說明??還是我的資料有問題??

再次感謝回文的前輩們指導





補充內容 (2022-2-13 01:20 PM):
請問74hc595, 第一個接收到的資料到底是 Q7 先接收到還是 Q0 ? 網路上的說明都不一樣
 樓主| 發表於 2022-2-13 11:29:06 | 顯示全部樓層
感謝各位前輩的指導,目前已經能夠運作了, 現在能用網路對時, 但缺點是我還不會讀 localTime ,每秒都是讀取 NTPserver, 後續還有很漫長的路要學習和改進功能的地方
.時間讀取的方式
.網路斷線讀取 RTC
.網路及RTC失效問題
.時間設定問題 (web + 按鍵)
看起來困難重重, 只能一段一段慢慢學習解決了

260726.jpg

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-11-23 04:12 PM , Processed in 0.305144 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.