|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
照葫蘆畫瓢:90S2313,最高分辨率2us的8通道邏輯分析儀 |
| 作者:janeslee 欄目:單片機 |
對于沒有示波器或邏輯分析儀的工程師們,調(diào)試電路過程中,若經(jīng)驗不足或稍一馬虎,干活往往事倍功半。這里根據(jù)AVRFREAKS上的OPEN PROJECT制作了一個簡單的8通道邏輯儀,使用90S2313,5V,工作頻率16MHZ,最高分辨率2us,存儲深度2K,與PC使用串口連接,波特率38400,對很多低速外設(shè)的調(diào)試監(jiān)控來說足夠了。 原作者使用90S1200,使用軟件模擬UART,我這里改動了一下,使用90S2313,串口也改為使用硬件串口,編譯后程序為495WORDS。若哪位大蝦有閑也可以將存儲深度提高,傳輸速率提高甚至使用FPGA升級到100M分辨率、采用USB傳輸?shù)鹊取?br> 源程序及原理圖下載地址: http://www.avrfreaks.net/freaks/files/project_47/project_47.zip 軟件界面: ![]() 我的樣板: ![]() |
| 2樓: | >>參與討論 |
| 作者: xiao_ke 于 2004/11/18 20:32:00 發(fā)布:
好!謝謝。 不過把你改后的圖和程序(495WORDS)也提供出來就更好了。 |
|
| 3樓: | >>參與討論 |
| 作者: bigger 于 2004/11/19 0:14:00 發(fā)布:
. 同感! |
|
| 4樓: | >>參與討論 |
| 作者: su_mj000 于 2004/11/19 6:08:00 發(fā)布:
極有創(chuàng)意的設(shè)計 若改用Mega32或更高檔的芯片的話,設(shè)計還可簡化(省去外接RAM等), 是嗎?可能分辨率能達到1~1.5us。 |
|
| 5樓: | >>參與討論 |
| 作者: Wxy8030 于 2004/11/19 10:04:00 發(fā)布:
很不錯! 我有個想法—— 如果能增加一個控制輸入端,作為啟動和停止數(shù)據(jù)采集的控制端,作用為——如果我對某段代碼有懷疑想看看執(zhí)行時I/O輸出的情況,可借用另外一個I/O口控制數(shù)據(jù)采集,這樣就可以更好的對某一段代碼進行分析,,, |
|
| 6樓: | >>參與討論 |
| 作者: janeslee 于 2004/11/19 10:06:00 發(fā)布:
CPU改為2313的源程序,硬件改動見程序中管腳定義 討論:采用MEGA32等芯片的話,使用內(nèi)部SRAM存儲,確實應(yīng)該還能提高分辨率,不過這就是簡單的升級了。其實,程序還可加入數(shù)據(jù)壓縮功能,將數(shù)據(jù)壓縮10-200倍以上,加大存儲深度,具體實現(xiàn)是采用時間變化量存儲,實際存儲的數(shù)據(jù)是當前通道的值和距前一次通道變化的時間間隙,一個字節(jié)用于存儲時間可高達255個采樣間隔,實際數(shù)據(jù)壓縮率應(yīng)該能達到50-100倍以上,這樣對于跟蹤長周期的數(shù)據(jù)變化非常有幫助。 ; Logic-Analyzer and PulseGenerator ; Version 0.16 CPU改為2313 ; Version 0.15 Neu: PulseGenerator-Modes. Erwartet 7 Bytes! ; Version 0.09 Verkuerzte Routine fuer cntclk und ram_wr ; Version 0.07 Neue Modes fuer Test-Routinen ; Version 0.06 Anpassung an AT90S1200 ; Version 0.05 funktionsfaehig fuer AT90S2313 ; ; 串口控制字符/LogicAnalyzer: / PulseGen: ; 1. TriggerByte (觸發(fā)字節(jié)) / TiL ; 2. Masken-Byte (為1的位don't care) / TiH ; 3. Timer-Intervall / TpL ; 4. Timer-Prescaler / TpH ; 5. Pre-Trigger in 256-Byte Schritten; / TnL ; 6. unbenutzt / TnH ; 7. Modus-Byte (int-/ext-Clock, int-/ext-Trigger) / Mode ; ; 假設(shè) Triggerword: 0 1 1 0 X X X 1 ; TriggerByte: 0 1 1 0 1 1 1 1 ; Masken-Byte: 0 0 0 0 1 1 1 0 ; ; Sampling-Byte: 0 1 1 0 0 1 1 1 ; mit Masken-OR: 0 1 1 0 1 1 1 1 = TriggerByte --> TRIGGER! ; .nolist .include ".\2313def.inc" .list .def TpCntH = R27 ;PulseGen: Tp-Counter-High .def TpCntL = R26 ;PulseGen: Tp-Counter-Low .def TiCntH = R25 ;PulseGen: Ti-Counter-High .def TiCntL = R24 ;PulseGen: Ti-Counter-Low .def TEMP = R23 ;TEMPorary storage register .def bitcnt = R22 ;bit counter .def TXbyte = R21 ;Data to be transmitted .def RXbyte = R20 ;Received data .def bufcntH = R19 ;Ringspeicher-Zaehler High .def TnCntH = R19 ;PulseGen: Burst-Count-High .def bufcntL = R18 ;Ringspeicher-Zaehler Low .def TnCntL = R18 ;PulseGen: Burst-Count-Low .def mode = R17 ;Modus .def wreg = R16 ;Working-Register .def trig = R15 ;Trigger-Register .def TiL = R15 ;低電平持續(xù)時間(PulseGen) .def mask = R14 ;Masken-Register .def TiH = R14 ;高電平持續(xù)時間(PulseGen) .def timereg = R13 ;fuer Timervergleich .def TnH = R13 ;(PulseGen) .def prescal = R12 ;Timer PreScaler .def TpH = R12 ;(PulseGen) .def delta = R11 ;Timer-Intervall .def TpL = R11 ;(PulseGen) .def pretrig = R10 ;Pre-Trigger .def TnL = R10 ;(PulseGen) .def aux1 = R9 ;Hilfsregister .def aux0 = R8 ;Hilfsregister .def store1 = R7 ;PORTD, cntclk=H und ram_wr=L .def store2 = R6 ;PORTD, cntclk=L und ram_wr=H (Ruhezustand) ;--------------------------------------------------------------------------- ;HARDWARE Definition ; ;Baudrate 38400: .equ baud = 25 ;16MHZ Quart (90S3212) fosc/(16*BAUD) - 1 ; ;Port-Pinbelegung: .equ ram_wr = PD5 ;RAM /WR Write-Enable (Low-aktiv) .equ ram_oe = PD4 ;RAM /OE OUTPUT-Enable (Low-aktiv) .equ SAMPLE = PD6 ;Clock (positiv) und OUTPUT-Enable (Low) des 74HC574 .equ PGout = PD2 ;PulseGenerator OUTPUT .equ cntclk = PD3 ;Clock (positiv) des Ripple-Counters 74HC4040 .equ RxD = PD0 ;RxD .equ TxD = PD1 ;TxD .equ extpin = PB0 ;Externer Trigger-/Clock-Eingang an Port-B ; ;--------------------------------------------------------------------------- .org 0x0000 rjmp start ;Sprung nach Reset reti ;INT0 reti ;INT1 reti ;TMR1 CAPT1 reti ;TMR1 COMP1 reti ;TMR1 OVF reti ;TMR0 OVF rjmp RAMfull ;UART RXI 程序中斷捕獲 reti ;UART UDRE reti ;UART TXI reti |
|
| 7樓: | >>參與討論 |
| 作者: zlei 于 2004/11/19 14:10:00 發(fā)布:
好,給janeslee大哥助興 推薦一個網(wǎng)站,很多AVR做的小儀器 |
|
| 8樓: | >>參與討論 |
| 作者: janeslee 于 2004/11/19 16:04:00 發(fā)布:
若以速度論英雄,在這么簡單的MCU中 當屬SCENIX公司的SX系列單片機,我手頭的SX28AC就能跑75MHz!SX52BD更能跑100MHZ,指令周期10ns,用來做這個邏輯分析儀仿佛更合適。但為了提高精度,我覺得還是用CPLD/FPGA做前端更好,主要就是鎖存、邏輯比較、計數(shù)、存儲器地址發(fā)生、讀寫,后端用CYPRESS的EZUSB做傳輸,這樣就比較完美了,能成為一個有商業(yè)價值的產(chǎn)品. |
|
| 9樓: | >>參與討論 |
| 作者: jy6715 于 2004/11/19 19:39:00 發(fā)布:
不錯。頂 |
|
| 10樓: | >>參與討論 |
| 作者: zhifeng 于 2004/11/20 8:40:00 發(fā)布:
能夠說說原理嗎?是采集后傳輸?shù)絧c處理嗎? |
|
| 11樓: | >>參與討論 |
| 作者: crc 于 2004/11/20 10:40:00 發(fā)布:
好東西,頂 |
|
| 12樓: | >>參與討論 |
| 作者: qwernet 于 2004/11/21 11:52:00 發(fā)布:
請問什么叫做預觸發(fā)(Pre-Trigger)?有什么用? |
|
| 13樓: | >>參與討論 |
| 作者: 傲氣雄鷹 于 2004/11/23 9:17:00 發(fā)布:
“軟件界面”上那兒弄? |
|
| 14樓: | >>參與討論 |
| 作者: qjy_dali 于 2004/11/28 14:57:00 發(fā)布:
同意janeslee的說法 |
|
| 15樓: | >>參與討論 |
| 作者: flymonkey 于 2005/3/7 13:22:00 發(fā)布:
頂上來看! |
|
| 16樓: | >>參與討論 |
| 作者: 黑佬 于 2005/12/11 8:13:00 發(fā)布:
樓主,我怎么下不了呀 樓主,我怎么下不了呀 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |