發新話題
打印

請問如何將一個50bits速度1M/S的非同步串列資料讀進MCU內?

請問如何將一個50bits速度1M/S的非同步串列資料讀進MCU內?

請問如何將一個50bits速度1M/S的非同步串列資料讀進MCU內?

--目前我是使用8051F342 system clock = 48MHZ由PCA0 設成Frequency Output Mode 輸出一2MHZ方波,再使用7個74164將串列資料轉成並列資料在用74573將一個封包資料暫存起來提供MCU抓取,而分辨封包資料結束靠封包間3uSec的Low 訊號 6個0 ( 資料內容不會有兩個以上的High或Low的連續資料 ) 會在74164最後6個data都是Low來判斷。
--目前最大問題是在8051F342所產生的2MHZ訊號如何能與輸入的訊號成相差90度的同步訊號才能正確無誤的判讀輸入的串列資料,目前我是利用3個在74164結束訊號來觸發中斷,在中斷程式中停止Frequency Output 後啟動輸入的串列訊號能觸發中斷,在輸入的串列資料觸發中斷的程式裡再起動Frequency Output 並把輸入的串列資料能觸發中斷的功能取消。
--請問 ?? 如此做雖可達到前段資料的同步但到封包資料後面在示波器器上看起來覺得蠻危險的,應該是8051F342的內部系統時鐘飄移的關係,除了換成外部晶體振盪之外,因本身對8051F342的功能還不是很了解才使用以上的做法,不知8051F342有沒有可以與外部訊號同步的機制可以使用?
--就以上的硬體架構好像太笨了,是否可以有較好的設計可以用??比如USB Port 應該也是串入模式可將USB port 拿來用嗎??

TOP

50bits  速度1M/S
==>請問這是指 50bit的資料, clk的速度是 1us?

如果是這樣, 那或許 可以使用spi介面~
理論上 1us 的時間, f342可以執行48的指令(如果都是1T),
就可以省去週便邊路~ spi slave mode~ 您可以試看看~

重點~ 這樣龐大的資料~資料要怎麼處理? 總不能只接收然後儲存~ 不做任何判斷或是傳輸吧??

TOP

Dear 小柚子:
  謝謝您的回復,設備傳出的只有一條 Data Line 一條 GND,並沒有 CLK輸出無法使用SPI or I2C,才會使F342產生 CLK 進行非同步信號接收。
  資料最短的脈波寬度是0.5uSec、其中大多是0.5uSec high 0.5uSec low、而資料內容最多1uSec high or 1uSec low 不會有兩個以上的High或Low的連續資料、而資料封包的長度是28uSec其中開頭一定是   0.5uSec high 0.5uSec low 0.5uSec high 0.5uSec low •• 8個cycle 16個 bits(8uSec)、結束一定是連續 6個 bits low(3uSec)緊接著又是下一個封包的開始連續不間斷持續送出。
  這些封包資料大多是重覆因此須在 F342 將資料接收整理統計一段時間後在用 UART 上傳至PC。

抱歉我本來還直接用輸入訊號驅動中斷(INT or PCA)來處理,但F342 Data sheet寫中斷反映時間為18system clock 但 中斷裡還須處理資料 high low 長短的事,實際跑起來連續中斷的時間反映約480nSec F342幾乎都在處理進入中斷及退出中斷的事效率很差也很容易將資料整理錯。

TOP

Dear All 不會貼圖只好硬拼希望大大能理解:

╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴|   ---F342 Generate一2MHz
 ̄|╴ ╴ ╴ ╴ ╴ ╴| ̄  ̄|╴ ╴| ̄  ̄|╴ ╴| ̄  ̄|╴ ╴| ̄  ̄|╴ ╴| ̄  ̄|╴╴  ---DUT wave 結束+開頭

╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ̄|╴| ---F342
╴| ̄  ̄|╴ ╴| ̄  ̄  ̄  ̄|╴ ╴ ╴ ╴| ̄  ̄|╴ ╴ ╴ ╴| ̄  ̄|╴ ╴| ̄  ̄  ̄  ̄|╴ ╴| ̄  ̄|╴  ---DUT
---DUT wave 最短的脈波寬度是0.5uSec
--不會有兩個以上的High或Low的連續資料,也就是資料內容最寬的 high=1uSec、low=1uSec(結束3uSec除外)

小弟才疏學淺絞盡腦汁想不出有什麼好方法,還請各位大大多多提供意見,感激不盡謝謝!!

TOP

感覺你的訊號有點類似RF 或是 IR的格式,建議您找個decodeer試看看吧~
之前在做遙控器發射的時候,好像類似丟過這樣的資料~
這都是使用者自訂的~那樣快的資料料是因為要輸出類似一個載波的訊號出來~

之前的作法是使用timer去計數的~
0.5us, 就用0.1 or 0.2us的timer中斷,不斷的判斷與計數+資料旋轉~
不過都是asm去完成的~寫C 要達成~很難~

TOP

Dear 小柚子:
  謝謝您的回復,我也有朝 decoder 方向但不之其編碼規則無法找到適用的 decoder,目前找到最像的資料形態是叫做 S/PDIF 的編碼結構,但網路上查到的 S/PDIF 是使用在數位音樂資料介面,而數位音樂資料傳輸的數率並不高,實在不懂還請各位高手給些意見。


--下面網址是對 S/PDIF 的簡介請各位高手給些意見--
http://www.diyzone.net/print.php?sid=1148

TOP

之前有某大面板廠 也是要一個串列資料的讀取~很快~
用的是F36x 100MiPS~ 如果這樣設定timer~應該很容易可以解開資料

TOP

Dear 小柚子:
  謝謝您的建議,我對 USB Module不瞭解能不能問個蠢問題--我可不可以將我的 DUT wave 透過RS-485 or RS-422變成差動訊號加到USB的 D+ 跟 D-(看起來USB好像是差動輸入,再者 USB 的 SIE內的 FIFO 及校準頻率的PLL好像都剛好可以拿來用,不知是否可將USB Module 頻率設成 2Mhz 起動PLL功能後將進入D+D-的 bits DATA 全丟入FIFO內在讓MCU去處理,不知如此是否可行??  抱歉天馬行空的想法亂說一通,不懂的地方請大大多多包函。謝謝!!

TOP

Dear 各位大大:
   用非同步串列資料的RS-485 or RS-422變差動訊號加到USB的 D+ 跟 D-是否可以讓MCU從USB FIFO撈到資料,請各位高手幫忙解惑一下,謝謝!!

TOP

Hi!
RS-485/RS-422/USB 是不同規範的Bus,Level也不同,除非你能模擬出USB規範來,否則是沒辦法跟USB IF 溝通的...


J.K

TOP

發新話題