全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1608
推到 Plurk!
推到 Facebook!

24線循環移位器

缺席
ingchih
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-26 08:21:51 IP:218.175.xxx.xxx 未訂閱
我想設計一個24 Line 循環移位器,〈其作用如循環移動的跑馬燈〉但頻率要求達到15k〈圖一〉,曾在麵包板上用 CMOS 4515 製作過,有移位作用,但用示波器觀察卻出現〈如圖二〉雜訊,努力了幾個月無法克服,請教諸位先進有無其它解決方案?或有無適合的單晶片?  謝謝! yingl
------
yingl
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-26 19:26:52 IP:211.76.xxx.xxx 未訂閱
CMOS 4515 應該是如下連結的 IC 吧 http://www.xs4all.nl/~ganswijk/chipdir/giicm/4515.txt
引言:
4515, 744515
1-of-16 inverting decoder/demultiplexer with address latches.         ---------- 
 LE |1   --  24| VCC
 S0 |2       23| /EN
 S1 |3       22| S3
/Y7 |4       21| S2
/Y6 |5       20| /Y10
/Y5 |6       19| /Y11
/Y4 |7  4515 18| /Y8
/Y3 |8       17| /Y9
/Y2 |9       16| /Y15
/Y1 |10      15| /Y14
/Y0 |11      14| /Y13
GND |12      13| /Y12
     ----------     [This information is part of the GIICM]
如果使用解碼 IC 會出現雜訊,一種可能是您的 S0,S1,S2,S3 的選擇訊號在切換時不夠快,導致 4515 會在切換的時會改變準位,而在 Sx 訊號穩定後,又改變一次,使得您看到雜訊。 您可以試試,利用 /EN 來控制,在 Sx 訊號穩定後,再給 /EN 訊號,就不會有因 Sx 的短暫改變,而使 4515 誤判,產生雜訊。 如果您要使用單晶片來完成,那只要有內建 Timer 又可以直接控制 DIO PIN OUT 的如 8051,就可以由 Timer 直接控制 Dout 作到您要的時序圖。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
ingchih
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-27 09:36:28 IP:218.175.xxx.xxx 未訂閱
感謝dllee先生,我會試試看能否改善,再問兩個問題:1.除了使用解碼電路有沒有其他更簡單的羅輯電路? 2. 8051的輸出位準能否達到18V? 謝謝 yingl
------
yingl
bum_bum
一般會員


發表:6
回覆:16
積分:4
註冊:2004-02-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-28 16:50:09 IP:61.223.xxx.xxx 未訂閱
如果使用解碼 IC 會出現雜訊,令一種可能是您的 S0,S1,S2,S3 的選擇訊號在切換時不夠明確,例於1011,和1100間變化時上一個byte的bit 和下一個byte 的bit間變化時時間差,也就是Tr,Tf所產生的,也有可能你給s0,..s3的來源信號tr,tf無法被4514認同所造成. 我建議你用cpld來完成 你可以到altera網站抓學生版邏輯程式開發軟體,利用vhdl來寫,其內部還有模擬器不用先弄硬體,也有一般TTL只要將TTL一貼就可模擬,不用示波器 你可以到下訴網址填資料索取. https://mysupport.altera.com/login/signin.asp 或到書店看看,有關VHDL的書有些書就有附送,(Programmable logic development software)光碟.請不要買到附送的是範例光碟書
bum_bum
一般會員


發表:6
回覆:16
積分:4
註冊:2004-02-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-28 16:54:58 IP:61.223.xxx.xxx 未訂閱
引言: 8051的輸出位準能否達到18V? 這種沒有,自己加一段Buffer吧!
Eigen
初階會員


發表:19
回覆:36
積分:26
註冊:2002-12-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-30 09:45:55 IP:61.218.xxx.xxx 未訂閱
找有24io的pic 二十二行就能做出你要的東西 至於18V,自行加個buffer吧 bsf portb,0 clrc loop rlf portb ;1 rlf portc ;1 rlf portd ;1 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto $-.1 ;2 goto loop ;33
ingchih
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-01 09:27:39 IP:218.175.xxx.xxx 未訂閱
感謝 Bum_Bum 及Eigen的解答 1.從Altera下載Max Plus Student Edition 軟體,功能蠻多的,進入一個新領域,一下子無法上手可能要摸索幾天! 2.Pic種族繁多,〈可能又要面對燒錄問題!〉何不直接告訴我那顆IC? yingl
------
yingl
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-02 00:30:50 IP:203.67.xxx.xxx 未訂閱
關於你的問題綜合回答如下希望其他使用麵包板作實驗的同好也參考參考: 1.麵包板上用 CMOS 4515 製作過,有移位作用,但用示波器觀察卻出現雜訊,努力了幾個月無法克服.    I.麵包板作實驗因為插線很長,很容易產生雜訊(很多的雜散電容,電感) II.麵包板作實驗時在板下墊一片同等或大一點的金屬板,並將此板和你的電路的"GND"連接,以降低干擾 III.麵包板作實驗其電源(在板上)沒有旁路電容(這是許多人都沒注意到的問題)還有電原連接不好    2.從Altera下載Max+Plus Student Edition 軟體,功能蠻多的,進入一個新領域,一下子無法上手    這種元件教作"CPLD",你可以自行規劃數出輸入及功能,好用,不過新手要下一點工夫    3.貼上8051電路希望有所幫助 程式規劃方法如下 1.使用Timer0以中斷的方式來做輸出移位時間 2.程式以24位元旋轉的方式來執行你要的功能
bum_bum
一般會員


發表:6
回覆:16
積分:4
註冊:2004-02-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-03 17:35:15 IP:218.164.xxx.xxx 未訂閱
[quote] 我想設計一個24 Line 循環移位器,〈其作用如循環移動的跑馬燈〉但頻率要求達到15k〈圖一〉,曾在麵包板上用 CMOS 4515 製作過,有移位作用,但用示波器觀察卻出現〈如圖二〉雜訊,努力了幾個月無法克服,請教諸位先進有無其它解決方案?或有無適合的單晶片?  謝謝 你也可以用8051來完成;程式內容如下,此程式只是單純單一方向,不考慮D1,D2,D3,D4有亂數發生時的情況         org 00h inti         mov p0,#00h        ;將輸出PORT歸0         mov p1,#00h         mov p2,#00h         MOV P3,#00H start         jb p0.7, loop2        ;如果P0.7=1 跳到LOOP2         mov a,#01h                ;將累積器初始化 loop0         mov p0,a                ;將累積器的值移到P0         acall delay                ;呼叫副程式         jb p0.7,loop1        ;if p0.7=1 jumploop1         rl a                        ;累積器左旋1位元         ajmp loop0                ;回LOOP0 loop1         mov p0,#00h                ;把P0歸0         mov a,#01h                ;將累積器初始化 loop1a         mov p1,a                :將累積器的值移到P1         acall delay         jb p1.7,loop2        ;if p1.7=1 jumploop2         rl a          ajmp loop1a loop2         mov p1,#00h         mov a,#01h loop2a         mov p2,a         acall delay         jb p2.7,inti ;如不需如此長可以改P2.X的地方         rl a         ajmp loop2a    delay                                        ;時間副程式         mov r1,#00h                        ;若要延長時間從這裡改 delay0         mov r2,#00h         nop         djnz r2,$         djnz r1,delay0         ret         end
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-04 00:23:01 IP:210.64.xxx.xxx 未訂閱
補上程式 這是一個有點笨的程式         org 00h         jmp main         org 0bh ;        jmp IntTimer0         org 30h ;初始化程式 main:        mov sp,#70h        ;設定堆疊指標啟始位址         mov a,#00h         mov p1,a         mov p2,a         mov p3,a         mov p0,a start:        mov r3,#08        ;設定計數器         setb c p0_out:        rlc a         mov p0,a         call delay         djnz r3,p0_out         mov p0,#00h         mov r3,#08        ;設定計數器         setb c p1_out:        rlc a         mov p1,a         call delay         djnz r3,p1_out         mov 01,#00h         mov r3,#08        ;設定計數器         setb c p2_out:        rlc a         mov p2,a         call delay         djnz r3,p2_out         mov p2,#00h         jmp start ;------------------------------- ;暫存器r4調整長時間 ;暫存器r5微調整時間 delay:         mov r4,#01h delay2:        mov r5,#80h delay1:        nop         djnz r5,delay1         djnz r4,delay2         ret ;----------------------------- < >< >0,1的世界太寂寞,閒暇時候登登山,可以洗滌生硬的心靈
bum_bum
一般會員


發表:6
回覆:16
積分:4
註冊:2004-02-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-04-04 15:00:07 IP:218.164.xxx.xxx 未訂閱
引言: 再回答此信時我先聲明非常抱歉我不是來打擂台的只是因為這程式有Bag來補丁釘一下下. 補上程式 這是一個有點笨的程式 org 00h jmp main org 0bh ; jmp IntTimer0 org 30h ;初始化程式 main: mov sp,#70h ;設定堆疊指標啟始位址 mov a,#00h mov p1,a mov p2,a mov p3,a mov p0,a start: mov r3,#08 ;設定計數器 setb c mov a,#00h ;新加 p0_out: rlc a mov p0,a call delay djnz r3,p0_out mov p0,#00h mov r3,#08 ;設定計數器 setb c mov a,#00h p1_out: rlc a mov p1,a call delay djnz r3,p1_out mov 01,#00h mov r3,#08 ;設定計數器 setb c mov a,#00h p2_out: rlc a mov p2,a call delay djnz r3,p2_out mov p2,#00h jmp start ;------------------------------- ;暫存器r4調整長時間 ;暫存器r5微調整時間 delay: mov r4,#01h delay2: mov r5,#80h delay1: nop djnz r5,delay1 djnz r4,delay2 ret ;----------------------------- 如果沒有把a清成0到第2Loop時就不只一個燈亮 < >< >0,1的世界太寂寞,閒暇時候登登山,可以洗滌生硬的心靈
bum_bum
一般會員


發表:6
回覆:16
積分:4
註冊:2004-02-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-04-04 15:00:16 IP:218.164.xxx.xxx 未訂閱
引言: 再回答此信時我先聲明非常抱歉我不是來打擂台的只是因為這程式有Bag來補丁釘一下下. 補上程式 這是一個有點笨的程式 org 00h jmp main org 0bh ; jmp IntTimer0 org 30h ;初始化程式 main: mov sp,#70h ;設定堆疊指標啟始位址 mov a,#00h mov p1,a mov p2,a mov p3,a mov p0,a start: mov r3,#08 ;設定計數器 setb c mov a,#00h ;新加 p0_out: rlc a mov p0,a call delay djnz r3,p0_out mov p0,#00h mov r3,#08 ;設定計數器 setb c mov a,#00h p1_out: rlc a mov p1,a call delay djnz r3,p1_out mov 01,#00h mov r3,#08 ;設定計數器 setb c mov a,#00h p2_out: rlc a mov p2,a call delay djnz r3,p2_out mov p2,#00h jmp start ;------------------------------- ;暫存器r4調整長時間 ;暫存器r5微調整時間 delay: mov r4,#01h delay2: mov r5,#80h delay1: nop djnz r5,delay1 djnz r4,delay2 ret ;----------------------------- 如果沒有把a清成0到第2Loop時就不只一個燈亮 < >< >0,1的世界太寂寞,閒暇時候登登山,可以洗滌生硬的心靈
ingchih
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-25

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-04-04 23:43:35 IP:218.175.xxx.xxx 未訂閱
這兩天比較忙,晚上11點多打開電腦,發現有人為我的問題傷腦筋寫程式,實在很感動,但我得花一些時間把它弄懂而且實作一遍,到時有問題再問大家。 謝謝! yingl
------
yingl
bum_bum
一般會員


發表:6
回覆:16
積分:4
註冊:2004-02-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-04-05 18:18:00 IP:218.164.xxx.xxx 未訂閱
引言: 補上休正程式 這是一個有點笨的程式 org 00h jmp main org 0bh ;初始化程式 main: mov sp,#70h ;設定堆疊指標啟始位址 mov a,#00h mov p1,a mov p2,a mov p3,a mov p0,a start: mov r3,#09 ;設定計數器 setb c p0_out: rlc a mov p0,a call delay djnz r3,p0_out mov p0,#00h mov r3,#09 ;設定計數器 p1_out: rlc a mov p1,a call delay djnz r3,p1_out mov 01,#00h mov r3,#09 ;設定計數器 p2_out: rlc a mov p2,a call delay djnz r3,p2_out mov p2,#00h jmp start ;------------------------------- ;暫存器r4調整長時間 ;暫存器r5微調整時間 delay: mov r4,#01h delay2: mov r5,#80h delay1: nop djnz r5,delay1 djnz r4,delay2 ret end
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-04-05 21:27:40 IP:210.244.xxx.xxx 未訂閱
;我們Delphi K TOP能夠愈來愈好,人氣愈來愈盛,就是有像bum_bum先進的熱心,這就是進步的原動力 ;由衷的感謝 ;程式說明 org 00h jmp main org 0bh ;jmp IntTimer0 org 30h ;初始化程式 main: mov sp,#70h ;設定堆疊指標啟始位址 mov a,#00h mov p1,a ;先令所有輸出全為"0" mov p2,a mov p3,a mov p0,a start: mov r3,#08 ;設定計數器 ;此程式片段(指p0_out這個loop)和bum_bum所修改的程式 ;最大不一樣是在d7輸出後,不會多跑1次loop(d7輸出時間和d6,d5...是相同的) ;這個程式片段是先輸出再執行djnz指令,我的ICE故障請ingchih 作實驗後將實際結果貼上來 setb c ;先設carry flag 為"1" p0_out: rlc a ;包括carry flag及acc共9 bit作左旋轉 mov p0,a ;將acc內容載入p0輸出 call delay djnz r3,p0_out mov p0,#00h;保證p0輸出"0" mov r3,#08 ;設定計數器 setb c p1_out: rlc a mov p1,a call delay djnz r3,p1_out mov p1,#00h mov r3,#08 ;設定計數器 setb c p2_out: rlc a mov p2,a call delay djnz r3,p2_out mov p2,#00h jmp start ;------------------------------- ;暫存器r4調整長時間 ;暫存器r5微調整時間 delay: mov r4,#01h delay2: mov r5,#80h delay1: nop djnz r5,delay1 djnz r4,delay2 ret ;----------------------------- end 補上休正程式 這是一個有點笨的程式 org 00h jmp main org 0bh ;初始化程式 main: mov sp,#70h ;設定堆疊指標啟始位址 mov a,#00h mov p1,a mov p2,a mov p3,a mov p0,a start: mov r3,#09 ;設定計數器,使用djnz指令所以設為9, ;其目的是要讓p0作完後,此1"1"移回carry flag setb c ;先設carry flag 為"1" p0_out: rlc a ;包括carry flag及acc共9 bit作左旋轉 mov p0,a ;將acc內容載入p0輸出 call delay djnz r3,p0_out mov p0,#00h;此行可省略(原先程式怕p0的D7還輸出) mov r3,#09 ;設定計數器 p1_out: rlc a mov p1,a call delay djnz r3,p1_out mov p1,#00h mov r3,#09 ;設定計數器 p2_out: rlc a mov p2,a call delay djnz r3,p2_out mov p2,#00h jmp start ;------------------------------- ;暫存器r4調整長時間 ;暫存器r5微調整時間 delay: mov r4,#01h delay2: mov r5,#80h delay1: nop djnz r5,delay1 djnz r4,delay2 ret end
bbtw
一般會員


發表:2
回覆:31
積分:16
註冊:2003-07-11

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-04-05 23:12:29 IP:61.71.xxx.xxx 未訂閱
插花... 單晶片當然都可以做到, 但是在某些單純化及低成本的需求下, 用單晶片是不合理的, 所以除了研究單晶片的做法外,最好4515的方法也要研究出來
ingchih
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-25

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-04-11 17:27:54 IP:218.175.xxx.xxx 未訂閱
大家好: 忙了幾天問題總算得到初步解決。 1.製作一個AT89S52燒錄器及模擬器,買了五顆AT89S52,開始做起實驗,除了 編譯器及連接主電腦的鮑率遭遇一些困難外,其他還算順利。 2.因為我要求的頻率是15k,所以程式裡的Delay部分都用不到,要靠調整AT89S52的主頻來達到要求。〈依89s52資料,主頻率可3Mhz~33Mhz〉 ORG 0000H MOV A,#00000001B LP1: MOV P1,A NOP ;延遲兩個週期 NOP MOV P2,A NOP NOP MOV P3,A RL A AJMP LP1 .END 程式就這麼簡單,連自己也感到懷疑,拔掉模擬器上LS373及6264,把燒好的89s52插上IC座,開機後用示波器觀測,三個port的波形都很乾淨,但 RL加AJMP是3個指令週期,兩個NOP佔2個週期,有點跛腳,還要改進。 3.此問題就此告一段落,非常感謝大家的解答!初次進入單晶片領域,有點興奮,因為有許多控制方面的問題都可靠它解決,在學習過程上一定會有很多問題,還要請教大家,謝謝! yingl
------
yingl
系統時間:2024-04-18 16:28:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!