Thông báo

Collapse
No announcement yet.

bác nào bit về chân của ADC0808 cho em hỏi

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • bác nào bit về chân của ADC0808 cho em hỏi

    cho em hỏi cách kích hoạt (hay mức tích cực )của các chân trong con ADC0808 là thế nào?(ALE,EOC,OE,START)
    bởi vì em có 2 cuốn sách:8051 của tăng cường và kỹ thuật vi xử lý của đỗ xuân tiến ____ đều đề cập đến ADC0808 nhưng mức tích cực của các chân (ALE,EOC,OE,START)lại khác nhau(2 cuốn sách nói khác nhau)
    vậy bác nào có kinh nghiệm làm rồi có thể chỉ giáo cho em được không?

  • #2
    bác nào bit về chân của ADC0808 cho em hỏi

    bởi con ADC0808 nay` không mô phỏng trong proteus được nên em không thể test được

    Comment


    • #3
      Theo mình tốt nhất bạn hãy tải tài liệu của con ADC0808 xuống mà đọc! Chắc bạn sẽ giải đáp được thắc mắc! Chúc vui

      Comment


      • #4
        www.katalog.elektroda.net
        trang này download datasheet của linh kiện với ít lần nhấn chuột nhất(nhanh hơn,nhưng ko chắc đủ,nhưng 0808 thì có)

        Comment


        • #5
          Hôm nay, mình xin góp vui với anh chị em một bài viết vui về giao tiếp vi điều khiển 8051 với ADC0808 ngõ hầu sẽ đem lại nhiều lợi ích cho anh chị em:

          Thứ nhất: SƠ BỘ VỀ CHIP ADC0808
          Chúng ta xem hình ảnh về chip ADC0808:

          Comment


          • #6
            Tiếp theo chúng ta xem sơ đồ chân của ADC0808 :

            Comment


            • #7
              Sau đây chúng ta xem chức năng của từng chân trên CHIP ADC0808:
              Pin Number Description
              Chân 1 IN3 - ngõ vào tín hiệu Analog Input 3
              Chân 2 IN4 - ngõ vào tín hiệu Analog Input 4
              Chân 3 IN5 - ngõ vào tín hiệu Analog Input 5
              Chân 4 IN6 - ngõ vào tín hiệu Analog Input 6
              Chân 5 IN7 - ngõ vào tín hiệu Analog Input 7

              Chân 6 START - chân điều khiển tín hiệu bắt đầu quá trình biến đổi ADC.
              Chân 7 EOC - Chân phát tín hiệu báo kết thúc quá trình chuyển đổi ADC.
              Chân 8 2 (-5) - Ngõ ra Tín hiệu số- Data Bit 5
              Chân 9 OUT EN - Chân cho phép xuất.
              Chân 10 CLK - chân nhận nguồn xung Clock
              Chân 11 Vcc - Chân nhận điện nguồn dương
              Chân 12 Vref+ - Chân nhận(input) điện áp tham chiếu.
              Chân 13 GND - Chân nhận điện áp âm(Ground=0v)
              Chân 14 2(-7) - Ngõ ra Tín hiệu số- Data Bit 7
              Chân 15 2(-6) - Ngõ ra Tín hiệu số- Data Bit 6

              Chân 16 Vref- - Voltage Reference Negative Input
              Chân 17 2(-8) - Ngõ ra Tín hiệu số- Data bit 8
              Chân 18 2(-4) - Ngõ ra Tín hiệu số- Data Bit 4
              Chân 19 2(-3) - Ngõ ra Tín hiệu số- Data Bit 3
              Chân 20 2(-2) - Ngõ ra Tín hiệu số- Data Bit 2
              Chân 21 2(-1) - Ngõ ra Tín hiệu số- Data Bit 1

              Chân 22 ALE - Address Latch Enable
              Chân 23 ADD C - Address Input C
              Chân 24 ADD B - Address Input B
              Chân 25 ADD A - Address Input A

              Chân 26 IN0 - ngõ vào tín hiệu Analog Input 0
              Chân 27 IN1 - ngõ vào tín hiệu Analog Input 1
              Chân 28 IN2 - ngõ vào tín hiệu Analog Input 2

              Comment


              • #8
                Như vậy ADC0808 có tất cả 8 đầu vào Analog!
                Và chúng ta lưu ý tầm điện áp đầu vào analog là:0-> 5v, tuy nhiên chúng ta cũng có thể chọn tầm giá trị đầu vào nhỏ hơn nhưng vẫn có thể chia với độ phân giải toàn giải - có nghĩa là có thể đạt giá trị Max255 thông qua việc điều chỉnh điện áp trên chân điện áp tham chiếu Vref.
                Và ngõ ra của ADC0808 tương thích chuẩn họ TTL.
                Last edited by MicroDuyphi; 10-03-2006, 23:46.

                Comment


                • #9
                  Tiếp theo chúng ta sẽ thiết kế mạch kết nối
                  giữa vi điều khiển 8051 và ADC0808

                  * Với 8051 chúng ta sẽ dùng PORT2 làm port nhập data của ADC808.
                  * Vì ADC0808 có tất cả 8 cổng vào mà tại một thời điểm chúng ta chỉ có thể làm việc với 1 trong số 8 kênh ấy mà thôi, do đó chúng cần có 3 dây dùng để chọn lấy 1 ngõ vào và chúng ta sẽ chọn 3 chân của vi điều khiển 8051 là P3.2, P3.3, P3.4 để điều khiển.

                  * Ngoài ra để có thể điều khiển được quá trình truy xuất/giao tiếp ADC thì chúng ta cũng cần thêm một số dây khác để kết nối với ADC0808 nữa, cụ thể là:
                  - Chân EOC của ADC0808 sẽ kết nối với chân của 8051 P1.4
                  - Chân OE của ADC0808 sẽ kết nối với chân của 8051 P1.5
                  - Chân LE của ADC0808 sẽ kết nối với chân của 8051 P1.7
                  - Chân START của ADC0808 sẽ kết nối chung với chân LE
                  - Chúng ta cũng cần lưu ý rằng nguồn xung clock cấp cho ADC0808 sẽ được tạo ra bởi chính chân P1.6
                  của vi điều khiển 8051 thông qua việc điều khiển chương trình phần mềm.

                  * Để đơn giản thìi ta sẽ dùng màn hình LCD để hiện thị thông tin và kết quả đo được. Và khi đó một số chân của vi điều khiển lại được cần đến để có thể điều khiển LCD
                  - Chân E của LCD sẽ được điều khiển bởi chân P3.5 của 8051
                  - Chân RS của LCD sẽ được điều khiển bởi chân P3.6 của 8051
                  - Chân RW của LCD sẽ được điều khiển bởi chân P3.7 của 8051
                  Last edited by MicroDuyphi; 11-03-2006, 00:23.

                  Comment


                  • #10
                    Các bạn có thể download sơ đồ mạch về xem( vì dung lượng lớn nên không thể hiển hị hết trên màn hình được).

                    Comment


                    • #11
                      Và đây là board mạch in của 8051+ADC0808+ LCD

                      Comment


                      • #12
                        Và đây là đọa code chương trình cho mạch điện trên:
                        ; +--------------------=-=-=-=-=-=-=-=-=-=-=-----------------+
                        ; | Project: ADC0808 Evaluation |
                        ; | ATMEL AT89s8252 at 11.0592MHz v1.2 |=-
                        ; +--------------------=-=-=-=-=-=-=-=-=-=-=-----------------+

                        ;=============| I/O |======================================

                        LCD_PORT EQU P1 ; LCD 16x2 Display Port
                        CONV_PORT EQU P2 ; ADC0808 PORT

                        LCD_E BIT P3.5 ; LCD ENABLE pin
                        LCD_RS BIT P3.6 ; Select either instruction or data
                        LCD_RW BIT P3.7 ; Read/write select

                        ; ====| ADC0808's Equates |==========================

                        AD_OE BIT P1.5 ; Output enable
                        AD_SC BIT P1.7 ; Start conversion
                        AD_EOC BIT P1.4 ; End of conversion
                        AD_ALE BIT P1.7 ; address lacth enable
                        AD_CLK BIT P1.6 ; clock

                        AD0 BIT P3.2 ; mutiplexer channel addressing
                        AD1 BIT P3.3
                        AD2 BIT P3.4

                        VAR1 DATA 60H
                        VAR2 DATA 61H

                        ORG 0
                        jmp MAIN


                        MAIN:

                        ;--INITIALIZE A/D

                        clr AD_OE
                        clr AD_ALE
                        clr AD_CLK
                        ;--
                        clr LCD_RW ; Set lcd to write

                        call _LCD_INI ; Initialize LCD

                        mov a,#80h ; Cursor on first column, first row
                        call _LCD_INST

                        mov dptr,#MESSAGE01 ; LCD <- 'ADC0808 TEST'
                        call _LCD_WRITE_STRING

                        mov a,#0C0H ; Cursor on first column, 2nd row
                        call _LCD_INST

                        mov dptr,#MESSAGE02 ; LCD <- 'VALUE:'
                        call _LCD_WRITE_STRING

                        CONVERSION:

                        mov a,#0C7h
                        lcall _LCD_INST

                        clr AD0 ; Set A/D multiplexer channel0
                        clr AD1
                        clr AD2

                        call START_CONV ; A/D conversion routine

                        mov R3,#0
                        mov R2,A
                        lcall _BINTOASC ; binary to ascii conversion routine

                        mov A,32H ; put result with 3 digits on lcd
                        lcall _LCD_PUT_CHAR

                        mov A,33H
                        lcall _LCD_PUT_CHAR

                        mov A,34H
                        lcall _LCD_PUT_CHAR

                        jmp CONVERSION


                        ;------------------------=| SUBROUTINES |=------------------------------
                        ; THIET LAP LCD
                        _LCD_INI:

                        mov a,#28h ; Interface 4 bits 2 lines 5*7 pixels
                        call _LCD_INST

                        mov a,#28H
                        call _LCD_INST

                        mov a,#06H ;
                        call _LCD_INST

                        mov a,#0Ch ; invisible cursor
                        call _LCD_INST

                        mov a,#01h ; clear LCD
                        call _LCD_INST

                        mov a,#03
                        call _DELAY_MS

                        RET


                        ; ----=| GHI LENH TOI LCD |=----------
                        ; | INPUT=A |

                        _LCD_INST:

                        clr LCD_RS ; Instruction command

                        swap a ; load LSB nibble first

                        push acc

                        anl a,#0fH
                        mov VAR1,a

                        mov VAR2,LCD_PORT
                        anl VAR2,#0f0h

                        mov a,VAR1
                        orl a,VAR2

                        mov LCD_PORT,a
                        pop acc

                        setb LCD_E
                        nop
                        nop
                        nop
                        clr LCD_E

                        swap a ; now the MSB

                        push acc

                        ;--
                        anl a,#0fH
                        mov VAR1,a

                        mov VAR2,LCD_PORT
                        anl VAR2,#0f0h

                        mov a,VAR1
                        orl a,VAR2
                        ;--

                        mov LCD_PORT,a

                        pop acc

                        setb LCD_E
                        nop
                        nop
                        nop
                        clr LCD_E

                        call _WAIT_LCD
                        ret


                        ; GHI MOT BYE RTOI LCD
                        ; | INPUT= A (ASCII) |

                        _LCD_PUT_CHAR:

                        setb LCD_RS ; Set lcd to data

                        swap a ; LSB first

                        push acc

                        ;--
                        anl a,#0fH
                        mov VAR1,a

                        mov VAR2,LCD_PORT
                        anl VAR2,#0f0h

                        mov a,VAR1
                        orl a,VAR2
                        ;--
                        mov LCD_PORT,a

                        pop acc

                        setb LCD_E
                        nop
                        nop
                        nop
                        nop
                        clr LCD_E

                        swap a ; send MSB

                        push acc

                        ;--
                        anl a,#0fH
                        mov VAR1,a

                        mov VAR2,LCD_PORT
                        anl VAR2,#0f0h

                        mov a,VAR1
                        orl a,VAR2
                        ;--
                        mov LCD_PORT,a

                        pop ACC

                        setb LCD_E
                        nop
                        nop
                        nop
                        nop
                        clr LCD_E

                        call _WAIT_LCD

                        ret


                        ; GHI MOT CHUOI BYE TOI LCD
                        ; | INPUT: ROM DATA POINT AT DPTR |

                        _LCD_WRITE_STRING:

                        clr LCD_E
                        setb LCD_RS ; LCD data command

                        clr a
                        movc a,@a+dptr
                        jz final

                        swap a ; send LSB...

                        push ACC

                        ;--
                        anl a,#0fH
                        mov VAR1,a

                        mov VAR2,LCD_PORT
                        anl VAR2,#0f0h

                        mov a,VAR1
                        orl a,VAR2
                        ;--
                        mov LCD_PORT,a

                        pop ACC

                        setb LCD_E
                        nop
                        nop
                        nop
                        nop
                        clr LCD_E

                        swap a ; MSB...

                        push ACC

                        ;--
                        anl a,#0fH
                        mov VAR1,a

                        mov VAR2,LCD_PORT
                        anl VAR2,#0f0h

                        mov a,VAR1
                        orl a,VAR2
                        ;--
                        mov LCD_PORT,a

                        pop ACC

                        setb LCD_E
                        nop
                        nop
                        nop
                        nop
                        clr LCD_E

                        call _WAIT_LCD
                        inc dptr
                        jz FINAL
                        sjmp _LCD_WRITE_STRING
                        FINAL:
                        ret


                        ;---------------------------------
                        ; ----=| LCD delay routine |=-----
                        ;---------------------------------
                        _WAIT_LCD:
                        push acc
                        push psw

                        mov a,#190
                        djnz acc,$


                        pop psw
                        pop acc
                        ret

                        ; +--------------------------------------------+
                        ; | ADC0808 conversion routine |
                        ; | output: A |
                        ; | input : multiplexer channel on ad0,ad1,ad2 |
                        ; | PIN |
                        ; | AD2 AD1 AD0 ANALOG INPUT |
                        ; | 0 0 0 1 |
                        ; | 0 0 1 2 |
                        ; | 0 1 0 3 |
                        ; | 0 1 1 4 |
                        ; | 1 0 0 5 |
                        ; | 1 0 1 6 |
                        ; | 1 1 0 7 |
                        ; | 1 1 1 8 |
                        ; +--------------------------------------------+

                        START_CONV:

                        mov CONV_PORT,#0ffh

                        clr AD_OE ; hi Z output

                        setb AD_ALE ; start converter (SET both SC and ALE)

                        clr AD_ALE

                        START_CLK:

                        cpl AD_CLK

                        jnb AD_EOC,START_CLK

                        setb AD_OE
                        mov a,CONV_PORT
                        clr AD_OE
                        ret



                        ; +-----------------------------------------------------------------------;
                        ; Use example:
                        ;
                        ;START:
                        ; MOV R2,#low(1234)
                        ; MOV R3,#high(1234)
                        ; LCALL BINTOASC
                        ;
                        ; in 30h until 34h of internal RAM will be :'0','1',' 2',','3','4' ( ASCII)
                        ;
                        ; +-----------------------------------------------------------------------

                        _BINTOASC:

                        MOV R0,#30h ; R0 = POUT
                        MOV DPTR,#TAB ; R=TAB(P)

                        COM1:

                        CLR A ; P <- 0
                        MOVC A,@A+DPTR ; R <- TAB(P)
                        MOV R7,A
                        INC DPTR
                        CLR A
                        MOVC A,@A+DPTR
                        MOV R6,A

                        MOV R4,#'0' ; C <- '0'


                        SOMA: ; N <- N-R
                        CLR C ;
                        MOV A,R2 ;
                        SUBB A,R6 ;
                        MOV R2,A ;

                        MOV A,R3 ;
                        SUBB A,R7 ;
                        MOV R3,A ;
                        JC SAIDA ; If < 0 goto SAIDA
                        INC R4 ; If >0 then C <- C +1
                        SJMP SOMA ; goto SOMA
                        SAIDA:
                        MOV A,R4
                        MOV @R0,A ;TABOUT (POUT) <- C

                        MOV A,R2
                        ADD A,R6 ; N=N+R
                        MOV R2,A

                        MOV A,R3
                        ADDC A,R7
                        MOV R3,A

                        INC R0 ; PSAIDA=PSAIDA +1

                        CLR A
                        MOVC A,@A+DPTR
                        CJNE A,#1,INCREMENTA ; TAB(P) = 1 ?
                        RET ; If yes, END

                        INCREMENTA: ; If No, P <- P+1
                        INC DPTR
                        LJMP COM1 ; goto COM1


                        TAB:
                        DW 10000
                        DW 1000
                        DW 100
                        DW 10
                        DW 1




                        ; |###################################|
                        ;--=| DELAY MILISECONDS PLUS ACC VALUE |=-
                        ; |###################################|


                        _DELAY_MS:

                        push ACC
                        push B
                        mov B,#250
                        DD:
                        djnz B,$ ; ~ 500 uS @ 12 Mhz
                        djnz B,$ ; ~ 500 uS @ 12 Mhz
                        djnz ACC,DD

                        pop B
                        pop ACC
                        ret




                        MESSAGE01:
                        db 'ADC0808 TEST ',0

                        MESSAGE02:
                        db 'VALUE:',0



                        END
                        Last edited by MicroDuyphi; 11-03-2006, 01:58.

                        Comment


                        • #13
                          Nhân đây mình cũng xin báo luôn với "phidoigabay1" phần mềm Proture dư sức mô phỏng ADC0808, kể cả toàn bộ chương trình này:8051+LCD+ADC0808 nó điều mô phỏng được cả và hơn thế nữa.

                          Comment


                          • #14
                            cảm ơn nhiều tôi cũng đang cần cái này

                            Comment


                            • #15
                              Em post lại file của anh P để mọi người cùng bàn luận và dễ theo dõi trực tuyến luôn

                              Comment

                              Về tác giả

                              Collapse

                              phidoigabay1 Tìm hiểu thêm về phidoigabay1

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X