佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1636|回复: 5

【分享】简易实验数字示波器用5110LCD + 12F675

[复制链接]
发表于 26-5-2013 11:10 PM | 显示全部楼层 |阅读模式
这个是几个月前做的用 Nokia 5110 LCD + 12F675 电压直接用2个AA电池。 不过数度很慢能测试几百赫兹讯号。X扫描速度是固定的。有兴趣的可以直接 compile一下的程式。 或者改一改做比较完善的数字示波器吧。。

记得输入脚是AN0。讯号需要做正确的调正,请看原理图,可以自己改进用op-amp还是什么的。



演戏视频。
http://www.youtube.com/watch?v=JuvvHk5BbNk

;----------------------------------------code-----------------------------------------
;GPIO 0 -> SCK
;GPIO 2 -> SDIN
;GPIO 5 -> D/C
;GPIO 4 -> RES
;----------------------- Configurations -------------------------
        LIST    P=12F675, W=-302, r=DEC
        #include    <p12f675.inc>
        __CONFIG    0x0184  ;
;------------------ Equal assign --------------------------------
                DAT        EQU                0X20
                Y        EQU                0X21
                X        EQU                0X22

        TEMP        EQU                0X23
;------- USE FOR CONVERTER
                D1        EQU                0X24
                D2        EQU                0X25
                D3        EQU                0X26
                D4        EQU                0X27
                D5        EQU                0X28
                D6        EQU                0X29
                DP        EQU                0X2A
        VALUE        EQU                0X2B
;------------SENDING TO LCD---
        DIS1        EQU                0X2C
        DIS2        EQU                0X2D
        DIS3        EQU                0X2F
        DIS4        EQU                0X30
        DIS5        EQU                0X31
        DIS6        EQU                0X32
;--------------------------
        PVALUE        EQU                0X33
        TEMP2        EQU                0X34
        COUNT        EQU                0X35
        COUNT1        EQU                0X36
               
               
;----------------------------------------------------------------
                org 0
                MOVLW        B'0'
                MOVWF        INTCON
                MOVLW        B'11011111'
                OPTION
                MOVLW        B'100'
                MOVWF        CMCON
                BSF                STATUS,5
                MOVLW        B'001010'
                TRIS        05
                MOVLW        B'0000010'
                MOVWF        ANSEL
                BCF                STATUS,5
                BCF                GPIO,0
                BCF                GPIO,2
                BCF                GPIO,5
                BCF                GPIO,4

                CALL        DELAY
                CALL        DELAY
                BSF                GPIO,4

                BCF                GPIO,5                ;SET LCD TO COMMAND
                MOVLW        0x23                ; SET LCD IN VERTICAL MODE
                MOVWF        DAT
                CALL        SERIAL_LCD


                MOVLW        0xC2
                MOVWF        DAT
                CALL        SERIAL_LCD

                MOVLW        0x13
                MOVWF        DAT
                CALL        SERIAL_LCD

                MOVLW        0x20
                MOVWF        DAT       
                CALL        SERIAL_LCD

                MOVLW        0x09
                MOVWF        DAT
                CALL        SERIAL_LCD

                MOVLW        0x08
                MOVWF        DAT
                CALL        SERIAL_LCD
                       
                MOVLW        0x0C
                MOVWF        DAT
                CALL        SERIAL_LCD       
               
                BCF                GPIO,5                ;SET LCD TO COMMAND
                MOVLW        0x22                ; SET LCD IN VERTICAL MODE
                MOVWF        DAT
                CALL        SERIAL_LCD
                BSF                GPIO,5

                MOVLW        250
                MOVWF        X
                MOVLW        0
                MOVWF        DAT
CLEAR
                CALL         SERIAL_LCD
                DECFSZ        X
                GOTO        CLEAR

                MOVLW        253
                MOVWF        X
CLEAR2               
                CALL        SERIAL_LCD
                DECFSZ        X
                GOTO        CLEAR2

                BCF                GPIO,5       
                BSF                GPIO,5                ;SET LCD TO DATA MODE
                MOVLW        H'0'
                MOVWF        DAT
                CALL        SERIAL_LCD       
                BCF                GPIO,5
;--------------- AFTER INIT LCD ---------------
PRECOUNT
                MOVLW        D'200'
                MOVWF        COUNT
LOOPX1
                MOVLW        D'255'
                MOVWF        COUNT1
START
                MOVF        ADRESH,0        ;SAVE PREVIOUS VALUE
                MOVWF        PVALUE       

                MOVLW        B'00010111'
                MOVWF        ADCON0
ADCSTART
                BTFSC        ADCON0,1
                GOTO        ADCSTART
               
                RRF        ADRESH,1
                RRF        ADRESH,1
                MOVF        ADRESH,0
                ANDLW        B'00111111'
                MOVWF        ADRESH
;----------------------TRIGGER EXPERIMENT AT 0 LEVEL ------------
                MOVLW        D'32'                        ; 0 -> 32 . SINCE 64 IS FULL SCALE
                SUBWF        ADRESH,0
                BTFSC        STATUS,Z
                GOTO        PASS
                BTFSS        STATUS,C
                GOTO        FAIL
PASS
                MOVF        PVALUE,0                ; POS EDGE
                SUBWF        ADRESH,0
                BTFSS        STATUS,C
                GOTO        START
                GOTO        SAMPL
FAIL
                DECFSZ        COUNT1,F
                GOTO        START
                DECFSZ        COUNT,F
                GOTO        LOOPX1
               
               
               
;--------------------------------------------
SAMPL
                MOVLW        D'84'
                MOVWF        COUNT
STARTSAMPL
                MOVF        ADRESH,0        ;SAVE PREVIOUS VALUE
                MOVWF        PVALUE
                CLRF        DIS1
                CLRF        DIS2               
                CLRF        DIS3
                CLRF        DIS4
                CLRF        DIS5
                CLRF        DIS6               

                MOVLW        B'00010111'
                MOVWF        ADCON0
ADCSTART1
                BTFSC        ADCON0,1
                GOTO        ADCSTART1
               
                RRF                ADRESH,1
                RRF                ADRESH,1
                MOVF        ADRESH,0
                ANDLW        B'00111111'
                MOVWF        ADRESH
       
;--------------DRAW VECTOR LINE ------------------               
VECTOR
                MOVF        ADRESH,0                ; PVALUE - ADRESH = TEMP2
                SUBWF        PVALUE,0
                BTFSS        STATUS,C
                GOTO        NEGINC
                BTFSC        STATUS,Z
                GOTO        NOADD
                                                                ;WHEN RESULT IS POSITIVE
                MOVWF        TEMP2
                MOVF        ADRESH,0
                MOVWF        VALUE
POSINC                                                               
                CALL        CONVERT
                MOVF        D1,0                        ; ADD DOT
                IORWF        DIS1,1
                MOVF        D2,0
                IORWF        DIS2,1
                MOVF        D3,0
                IORWF        DIS3,1
                MOVF        D4,0
                IORWF        DIS4,1
                MOVF        D5,0
                IORWF        DIS5,1
                MOVF        D6,0
                IORWF        DIS6,1
                INCF        VALUE,F
                DECFSZ  TEMP2,F
                GOTO        POSINC
                GOTO         DRAW       
NEGINC
                MOVF        PVALUE,0                ; WHEN RESULT IS NEGATIVE
                SUBWF        ADRESH,0                ; ADRESH - PVALUE = TEMP2
                MOVWF        TEMP2
                BTFSC        STATUS,Z
                GOTO        NOADD
                MOVF        ADRESH,0
                MOVWF        VALUE       

NEGINCLOOP
                CALL        CONVERT
                MOVF        D1,0                        ; ADD DOT
                IORWF        DIS1,1
                MOVF        D2,0
                IORWF        DIS2,1
                MOVF        D3,0
                IORWF        DIS3,1
                MOVF        D4,0
                IORWF        DIS4,1
                MOVF        D5,0
                IORWF        DIS5,1
                MOVF        D6,0
                IORWF        DIS6,1
                DECF        VALUE,F
                DECFSZ  TEMP2,F
                GOTO        NEGINCLOOP
                GOTO        DRAW

NOADD       
                MOVF        ADRESH,0                ; RESULT IS SAME NO CHANGE , NO NEED TO DRAW LINE
                MOVWF        VALUE
                CALL        CONVERT
                MOVF        D1,0                        ; ADD DOT
                IORWF        DIS1,1
                MOVF        D2,0
                IORWF        DIS2,1
                MOVF        D3,0
                IORWF        DIS3,1
                MOVF        D4,0
                IORWF        DIS4,1
                MOVF        D5,0
                IORWF        DIS5,1
                MOVF        D6,0
                IORWF        DIS6,1
               
;------------------SEND TO LCD---------------------               
DRAW
                  BCF                GPIO,5
                BSF                GPIO,5                ;SET LCD TO DATA MODE
                MOVF        DIS1,0
                MOVWF        DAT
                CALL        SERIAL_LCD

                BCF                GPIO,5
                BSF                GPIO,5                ;SET LCD TO DATA MODE
                MOVF        DIS2,0
                MOVWF        DAT
                CALL        SERIAL_LCD
               
                BCF                GPIO,5
                BSF                GPIO,5                ;SET LCD TO DATA MODE
                MOVF        DIS3,0
                MOVWF        DAT
                CALL        SERIAL_LCD

                BCF                GPIO,5
                BSF                GPIO,5                ;SET LCD TO DATA MODE
                MOVF        DIS4,0
                MOVWF        DAT
                CALL        SERIAL_LCD

                BCF                GPIO,5
                BSF                GPIO,5                ;SET LCD TO DATA MODE
                MOVF        DIS5,0
                MOVWF        DAT
                CALL        SERIAL_LCD
               
                BCF                GPIO,5       
                BSF                GPIO,5                ;SET LCD TO DATA MODE
                MOVF        DIS6,0
                MOVWF        DAT
                CALL        SERIAL_LCD       
                BCF                GPIO,5
               

               
                DECFSZ        COUNT,F
                GOTO        STARTSAMPL
                GOTO        PRECOUNT
               

;------------------SUBROTINE-----------------------------------
DELAY       
                MOVLW        50
                MOVWF        Y
LOOPY
                MOVLW        225
                MOVWF        X
LOOPX
       
                DECFSZ        X
                GOTO        LOOPX

                DECFSZ        Y
                GOTO        LOOPY
                RETURN

;------------------BINARY TO LEVEL CONVERTER-------------------
CONVERT
                CLRF        D1
                CLRF        D2
                CLRF        D3
                CLRF        D4
                CLRF        D5
                CLRF        D6
               
                MOVF        VALUE,0
                ANDLW        B'000111'
                MOVWF        TEMP

                MOVLW        B'000000'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        NEXT1
                MOVLW        B'10000000'
                MOVWF        DP
                GOTO        LOC
NEXT1
                MOVLW        B'000001'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        NEXT2
                MOVLW        B'01000000'
                MOVWF        DP
                GOTO        LOC
NEXT2
                MOVLW        B'000010'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        NEXT3
                MOVLW        B'00100000'
                MOVWF        DP
                GOTO        LOC
NEXT3
                MOVLW        B'000011'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        NEXT4
                MOVLW        B'00010000'
                MOVWF        DP
                GOTO        LOC
NEXT4
                MOVLW        B'000100'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        NEXT5
                MOVLW        B'00001000'
                MOVWF        DP
                GOTO        LOC
NEXT5
                MOVLW        B'000101'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        NEXT6
                MOVLW        B'00000100'
                MOVWF        DP
                GOTO        LOC
NEXT6
                MOVLW        B'000110'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        NEXT7
                MOVLW        B'00000010'
                MOVWF        DP
                GOTO        LOC

NEXT7
                MOVLW        B'000111'
                SUBWF        TEMP,0
                BTFSS        STATUS,Z
                GOTO        LOC
                MOVLW        B'00000001'
                MOVWF        DP
LOC
                MOVF        VALUE,0
                ANDLW        B'111000'
                MOVWF        TEMP

                MOVLW        B'001000'
                SUBWF        TEMP,0
                BTFSC        STATUS,Z
                GOTO        D6_WRITE

                MOVLW        B'010000'
                SUBWF        TEMP,0
                BTFSC        STATUS,Z
                GOTO        D5_WRITE

                MOVLW        B'011000'
                SUBWF        TEMP,0
                BTFSC        STATUS,Z
                GOTO        D4_WRITE

                MOVLW        B'100000'
                SUBWF        TEMP,0
                BTFSC        STATUS,Z
                GOTO        D3_WRITE
               
                MOVLW        B'101000'
                SUBWF        TEMP,0
                BTFSC        STATUS,Z
                GOTO        D2_WRITE       

                MOVLW        B'110000'
                SUBWF        TEMP,0
                BTFSC        STATUS,Z
                GOTO        D1_WRITE               
                RETURN

D6_WRITE
                MOVF        DP,0
                MOVWF        D6
                RETURN
D5_WRITE
                MOVF        DP,0
                MOVWF        D5
                RETURN
D4_WRITE
                MOVF        DP,0
                MOVWF        D4
                RETURN
D3_WRITE
                MOVF        DP,0
                MOVWF        D3
                RETURN               
D2_WRITE
                MOVF        DP,0
                MOVWF        D2
                RETURN
D1_WRITE
                MOVF        DP,0
                MOVWF        D1
                RETURN               
               



;-------------------------LCD SEND ----------------------------
SERIAL_LCD
                BCF                GPIO,0
                BTFSS        DAT,7
                BCF                GPIO,2
                BTFSC        DAT,7
                BSF                GPIO,2
                BSF                GPIO,0

                BCF                GPIO,0
                BTFSS        DAT,6
                BCF                GPIO,2
                BTFSC        DAT,6
                BSF                GPIO,2
                BSF                GPIO,0

                BCF                GPIO,0
                BTFSS        DAT,5
                BCF                GPIO,2
                BTFSC        DAT,5
                BSF                GPIO,2
                BSF                GPIO,0
               
                BCF                GPIO,0
                BTFSS        DAT,4
                BCF                GPIO,2
                BTFSC        DAT,4
                BSF                GPIO,2
                BSF                GPIO,0

                BCF                GPIO,0
                BTFSS        DAT,3
                BCF                GPIO,2
                BTFSC        DAT,3
                BSF                GPIO,2
                BSF                GPIO,0

                BCF                GPIO,0
                BTFSS        DAT,2
                BCF                GPIO,2
                BTFSC        DAT,2
                BSF                GPIO,2
                BSF                GPIO,0

                BCF                GPIO,0
                BTFSS        DAT,1
                BCF                GPIO,2
                BTFSC        DAT,1
                BSF                GPIO,2
                BSF                GPIO,0
               
                BCF                GPIO,0
                BTFSS        DAT,0
                BCF                GPIO,2
                BTFSC        DAT,0
                BSF                GPIO,2
                BSF                GPIO,0
                BCF                GPIO,0
                RETURN


                END

原理图

原理图

评分

参与人数 1积分 +50 收起 理由
pic + 50 原创内容

查看全部评分

回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 26-5-2013 11:14 PM | 显示全部楼层
另一个视频没有带触发的。

http://www.youtube.com/watch?v=RmLXsYbCJYo

还有一个更加早起做的用Nokia 6100LCD + 16F877 由于这个LCD需要一直发送指令怎个示波器只能测试讯号低过50hz,只是能显示点没有vector,没有触发。

http://www.youtube.com/watch?v=mTQc_0mJdFY 本帖最后由 sougisyou 于 26-5-2013 11:43 PM 编辑

回复

使用道具 举报

发表于 28-5-2013 12:35 AM | 显示全部楼层
太深了,看不懂。
回复

使用道具 举报

 楼主| 发表于 28-5-2013 09:28 AM | 显示全部楼层
西门庆33 发表于 28-5-2013 12:35 AM
太深了,看不懂。

可能是assembly code , 不容易读。我也读不懂别人的assembly code 。 这个示波器工作原理很简单,只是读ADC 然后显示在LCD,因为是nokia 5110 (3310) LCD现实只有 横(X-axis) 84 点 x 直(y-axis) 48点。因为直只有48点 用6bits的 ADC就可以满足了, 6bits可以现实 0-64,我只拿 MSB的6bits 其他的都丢了。如果要放大比如x2,x4,x8 可以向右一位一位移。就可以省去外加电阻。

读到的 ADC数字就 放在Y-axis 如果是0 就放最下,如果读到63就放在最上然后 x-axis 向右移一格。一直到画完整个x-axis,然后在重复。就做完了。带触发的也只是等到ADC读到设定值是才开始从左手边开始画。

可以试试用arduino做看,应该很好玩。。 我小时候没有示波器,对于“poor man” project 非常有兴趣,这个就可以给没有能力或买不到示波器的人一个不错的DIY project。

回复

使用道具 举报

发表于 28-5-2013 09:38 AM | 显示全部楼层
sougisyou 发表于 28-5-2013 09:28 AM
可能是assembly code , 不容易读。我也读不懂别人的assembly code 。 这个示波器工作原理很简单,只是读 ...

nokia 5110手机以前有一个,已经坏了。有时间把它的LCD拆岀来测试一下。
回复

使用道具 举报

 楼主| 发表于 28-5-2013 10:04 AM | 显示全部楼层
西门庆33 发表于 28-5-2013 09:38 AM
nokia 5110手机以前有一个,已经坏了。有时间把它的LCD拆岀来测试一下。

这里有 LCD的资料。 祝你成功。

https://www.sparkfun.com/products/10168




回复

使用道具 举报

Follow Us
您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 24-4-2024 12:50 PM , Processed in 0.065904 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表