PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Lập nhóm PIC16F877A (http://www.picvietnam.com/forum/showthread.php?t=325)

falleaf 09-09-2006 09:21 PM

Trích:

Nguyên văn bởi dohoangnam (Post 4035)
tôi thấy tất cả các diễn đàn đều rất hay. Cả chuyện bác F muốn giúp các bạn học qua một công việc cụ thể nữa. Tất cả đều là ý tưởng tốt. Nhưng tôi có chút ý kiến. Học về 1 con 16f877a này cũng tốt. Nhưng chúng ta học bằng các dự án như bác F làm thì tốt hơn học "chay" thế này. Nhưng mới cái bắt đầu mà bác F đã yêu cầu nặng anh em quá. Anh em sv chủ yếu là ít tiền. Đấy là cái thứ nhất (kể cả vài trăm ngàn thôi cũng khó khăn), thứ 2 tôi thấy công việc ấy cũng hơi nặng so với sức chung của mọi người. Hy vọng các anh em admin quan tâm hơn nữa.
Thân.

Câu chuyện học PIC của F, chắc F cũng đã kể cả trăm lần rồi, trên chat và cả trên diễn đàn. Lúc trước F học PIC, hoàn toàn là học chay, không có con PIC trong tay, tự ngồi nghĩ tự viết chương trình, tự làm mô phỏng với MPLAB, tự nhìn các con số nhảy để mà hình dung.

Đó là chuyện hồi trước F học, bây giờ các bạn có nhiều công cụ để học, thoải mái hơn, thông tin nhiều hơn. Điều đó là tốt hơn rất nhiều. Như vậy học chay hay không chay, tùy thuộc vào mỗi người. Có người thì thông minh theo kiểu tưởng tượng (vd F cũng là kiểu đó, cho nên ngồi tưởng tượng tốt). Có người thông minh theo kiểu trực quan (vd như F nhìn vào cái máy mà nó dập bụp bụp bụp, F khó mà học hiểu cái đó, nhưng có nhiều người nhìn vào cái máy thôi, lại hiểu ngay và có thể chế cái máy tương tự).... Đó là cách người ta nói về trí thông minh của loài người, mỗi người có một khả năng thông minh khác nhau.

Do vậy, F không cho rằng cách học nào tốt hơn cách học nào, mà chỉ khuyên mọi người chọn cách học tốt nhất cho chính mình.

Về vấn đề tài chính để học. Sự thực là picvietnam đã hỗ trợ 120K (theo giá thị trường) cho một đề tài nghiên cứu của các bạn, mà đề tài đó theo kinh nghiệm thực hành của các bạn kể trên khi khoảng 200 - 300K.

Đúng là con số khá lớn đối với một số bạn sinh viên. Nhưng nếu các bạn không nhân những cơ hội này đầu tư vào để học, để thực hành, thì các bạn sẽ tốn nhiều cái 100K vào những việc vô bổ khác. Hãy can đảm nói với bạn gái của mình rằng, anh muốn dành một chút tiền để đầu tư vào việc học.

Nếu các bạn thực sự học và làm việc, khi các bạn kết thúc dự án, và có kết quả khả dĩ vì những tìm hiểu học tập của các bạn. F sẽ mua lại mô hình đó cho các bạn. (miễn sao đừng bán mắc cho F, vì F không có tiền nhiều đâu, chỉ là giúp đỡ các bạn thực sự khó khăn thôi, hihi..).

Nói để các bạn thấy việc này. Để làm cái mô hình của F ở bên Hàn, giáo sư đã phải bỏ 5000$ tới thời điểm này mà chưa ra cái hình thù gì cả. Trong khi đó, ở VN mà làm thì cái mô hình F đang làm về haptics 1 bậc tự do, thì thực ra chỉ là 2 cái động cơ, mấy miếng nhôm lớn. Cùng lắm chỉ 3 triệu động là căng. Tất nhiên động cơ và driver mua mới thì tốn kém, còn mua ở nhà mình chơi đồ cũ, nhưng có ảnh hưởng gì nhiều đâu.

Vậy nên việc nghiên cứu ở nước ngoài, còn khó khăn hơn ta nhiều, về nhiều khía cạnh, nhất là chi phí đầu tư thử nghiệm. Có những cái quá cao cấp, thì chúng ta không làm được, nhưng tốn 500K đi nữa, để học một bộ điều khiển mà 90% các bộ điều khiển công nghiệp phải sử dụng thì F không nghĩ nó là quá nhiều. Và nó rẻ ngang với việc theo một lớp học PIC. Trong khi học cái này thì có thể giữ được mô hình, lại có thêm 2 con PIC...

Các bạn tính toán thật kỹ vì cơ hội không có lần thứ hai đâu :). Đây là lần đầu tiên, F thực hiện việc này, chủ yếu để thử nghiệm mô hình dự án mở trên mạng, sau đó, tất nhiên, nếu có thể, F sẽ kêu gọi những nhà tài trợ cho các dự án kiểu như thế này. Lúc đó sẽ tốt hơn cho các bạn, nhưng bây giờ tiếng nói của F chưa đủ mạnh với những nhà tài trợ, vì ... các bạn chưa làm xong dự án :).

Chúc vui.

spirit 11-09-2006 10:46 PM

Trích:

Nguyên văn bởi nhh (Post 1825)
Đây là chương trình đếm số lần switch on từ 1 đến 9 hiển thị lên LED 7 đoạn,dùng ngắt ngoài RB0 và kỹ thuật bảng.

Code:

;========================================
;Auhor:                NHH
;Date:                02/03/06
;Hardware:        PIC16F877A ,Crystal 10MHz
;========================================
        TITLE                "Count button on by Interrupt RB0"
        PROCESSOR        PIC16f877A
        INCLUDE<P16f877A.inc>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;========================================
        COUNT        EQU        0x20       
w_temp                EQU        0x71                ; variable used for context saving
status_temp        EQU        0x72                ; variable used for context saving
pclath_temp        EQU        0x73                ; variable used for context saving                       

;=============================================================================
;CHUONG TRINH CHINH
;=============================================================================
        ORG 0000h
        GOTO        MAIN
        ORG 0004h
        GOTO        INTERRUPT

;==============================INTERRUPT PROGRAM===========================               
INTERRUPT
        movwf w_temp        ; save off current W register contents
        movf STATUS,w        ; move status register into W register
        movwf status_temp        ; save off contents of STATUS register
        movf PCLATH,w        ; move pclath register into w register
        movwf pclath_temp        ; save off contents of PCLATH register
;******************************************************************************
        BCF        INTCON,INTF        ;xoa co int
        INCF        COUNT,F
        MOVLW        d'10'
        SUBWF        COUNT,W
        BTFSS        STATUS,0
        GOTO        $+2
        GOTO        NODISPLAY
        MOVF        COUNT,W
        CALL        TABLE
        MOVWF        PORTD
        retfie                        ; return from interrupt
NODISPLAY                        ;khong hien thi neu vuot qua 9
        MOVLW        d'10'
        CALL        TABLE
        MOVWF        PORTD
        RETFIE

;******************************************************************************
        movf pclath_temp,w                ; retrieve copy of PCLATH register
        movwf PCLATH                ; restore pre-isr PCLATH register contents
        movf status_temp,w                ; retrieve copy of STATUS register
        movwf STATUS                ; restore pre-isr STATUS register contents
        swapf w_temp,f
        swapf w_temp,w                ; restore pre-isr W register contents
        retfie                        ; return from interrupt
;==============        CHUONG TRINH CHINH===============
MAIN
        BCF        STATUS,RP1
        BSF        STATUS,RP0                ; chon BANK 1
        MOVLW        b'11111111'                ;RB0=Input
        MOVWF        TRISB
        CLRF        TRISD
        BCF        OPTION_REG,INTEDG        ;interrupt canh xuong
        BCF        STATUS,RP0                ; chon BANK 0
        BSF        INTCON,GIE                ;cho phep interrupt toan cuc
        BSF        INTCON,INTE                ;cho phep interrupt RB0
       
        CLRF        COUNT       
        MOVLW        d'0'
        CALL        TABLE       
        MOVWF        PORTD
       
        GOTO        $
;----------------------------------------------------------
; Bang tra ve Digital tu 0 den 9 va OFF
; Chi so dau truy cap la 0
; Bang o PAGE 0

        ORG 0x80
TABLE
;----------------------------------------------------------
        ADDWF        PCL, F                ; bat dau tai 0x80
        RETLW        b'00111111'                ; 0
        RETLW        b'00000110'                ; 1
        RETLW        b'01011011'                ; 2
        RETLW        b'01001111'                ; 3
        RETLW        b'01100110'                ; 4
        RETLW        b'01101101'                ; 5
        RETLW        b'01111101'                ; 6
        RETLW        b'00000111'                ; 7
        RETLW        b'01111111'                ; 8
        RETLW        b'01101111'                ; 9
        RETLW        b'00000000'                ; OFF
               
        END


Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
@nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh

sonny 12-09-2006 12:13 PM

Bác nào biết về A/D converter trong PIC16F877A xin chỉ dùm. Tui đã đọc rồi nhưng thấy khó hiểu quá, nhất là chế độ sleep của nó và cơ chế biến đổi từ tín hiệu analog thành 10 bit đầu ra.
Cám ơn các bác nhiều!

nhh 12-09-2006 09:52 PM

Trích:

Nguyên văn bởi spirit (Post 4899)
Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
@nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh

Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high
Code:

BCF        OPTION_REG,INTEDG        ;interrupt cạnh xuống
+ Ngắt cạnh lên: high to low
Code:

BSF        OPTION_REG,INTEDG        ;interrupt cạnh lên
Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

Chúc thành công!

spirit 01-10-2006 11:51 PM

Trích:

Nguyên văn bởi nhh (Post 2082)
Code:

;========================================
;Author:                NHH
;Date:                02/03/06
;Hardware:        PIC16F877A ,Crystal 4MHz
;========================================
        PROCESSOR        PIC16f877A
        INCLUDE<P16f877A.inc>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;========================================
        COUNT                EQU        0x20
        COUNT1                EQU        0x21
        COUNT2                EQU        0x22
        COUNT3                EQU        0x23
        COUNT4                EQU        0x24
        COUNT5                EQU        0x25
        COUNT6                EQU        0x26
        COUNT7                EQU        0x27
       
w_temp                EQU        0x71                ; variable used for context saving
status_temp        EQU        0x72                ; variable used for context saving
pclath_temp        EQU        0x73                ; variable used for context saving                       

;=============================================================================
;CHUONG TRINH CHINH
;=============================================================================
        ORG        0x00
        GOTO        MAIN
        ORG        0004h
        GOTO        INTERRUPT

;==============================INTERRUPT PROGRAM===========================               
INTERRUPT
        movwf w_temp        ; save off current W register contents
        movf STATUS,w        ; move status register into W register
        movwf status_temp        ; save off contents of STATUS register
        movf PCLATH,w        ; move pclath register into w register
        movwf pclath_temp        ; save off contents of PCLATH register
;******************************************************************************
        DECFSZ        COUNT,F
        GOTO        CHECK
        MOVLW        d'1'
        MOVWF        COUNT       
        INCF        COUNT1,F
        GOTO        CHECK       
BACK        BCF        INTCON,TMR0IF        ;xoa co ngat TMR0
;******************************************************************************
        movf pclath_temp,w                ; retrieve copy of PCLATH register
        movwf PCLATH                ; restore pre-isr PCLATH register contents
        movf status_temp,w                ; retrieve copy of STATUS register
        movwf STATUS                ; restore pre-isr STATUS register contents
        swapf w_temp,f
        swapf w_temp,w                ; restore pre-isr W register contents
        retfie                        ; return from interrupt

CHECK       
        CALL        CHECK1
        CALL        CHECK2
        CALL        CHECK3
        CALL        CHECK4
        CALL        CHECK5
        GOTO        BACK
;==============        CHUONG TRINH CHINH===============
MAIN
        BCF        STATUS,RP1
        BSF        STATUS,RP0                ; chon BANK 1
        MOVLW        b'11111111'                ;PORTA=Input
        MOVWF        TRISA
        MOVLW        b'00000001'                ;RB0=Input
        MOVWF        TRISB
        CLRF        TRISD
;------------------------------
;Khoi tao ngat Timer0
;------------------------------
        BSF        OPTION_REG,PS0                ;TMR0 rate 1: 64
        BSF        OPTION_REG,PS1
        BCF        OPTION_REG,PS2
        BCF        OPTION_REG,PSA                ;Prescaler is assigned to the Timer0 module
        BCF        OPTION_REG,T0CS               
        BCF        STATUS,RP0                ;select BANK 0

        BSF        INTCON,GIE
        BSF        INTCON,TMR0IE
        BCF        INTCON,TMR0IF

        MOVLW        d'246'
        MOVWF        COUNT
        CLRF        COUNT1
        CLRF        COUNT2
        CLRF        COUNT3
        CLRF        COUNT4
        CLRF        COUNT5
        CLRF        COUNT6
        CLRF        COUNT7
LOOP
        CALL        DISPLAY1
        CALL        DISPLAY2
        CALL        DISPLAY3
        CALL        DISPLAY4
        CALL        DISPLAY5
        CALL        DISPLAY6
       
        BTFSC        PORTB,0
        GOTO        LOOP
        GOTO        MODIFY
MODIFY
        BCF        INTCON,GIE
       
        BTFSC        PORTA,0
        GOTO        $+2
        CALL        LED34
        BTFSC        PORTA,1
        GOTO        $+2
        CALL        LED56
        BTFSS        PORTB,0
        GOTO        MODIFY
        BSF        INTCON,GIE
        GOTO        LOOP
LED34
        INCF        COUNT3,F
        MOVLW        d'10'
        SUBWF        COUNT3,W
        BTFSS        STATUS,0
        RETURN
        CLRF        COUNT3
        INCF        COUNT4,F
        MOVLW        d'6'
        SUBWF        COUNT4,W
        BTFSS        STATUS,0
        RETURN
        CLRF        COUNT4
        RETURN
LED56
        INCF        COUNT5,F
        MOVLW        d'4'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        RETURN
        MOVLW        d'2'
        SUBWF        COUNT6,W
        BTFSS        STATUS,0
        GOTO        LED5
        CLRF        COUNT6
        RETURN
       
LED5
        MOVLW        d'10'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        GOTO        MODIFY
        CLRF        COUNT5
        INCF        COUNT6,F
        GOTO        MODIFY

;============CHUONG TRINH CON===
DISPLAY1
        MOVLW        b'11111101'
        MOVWF        PORTB
        MOVF        COUNT1,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD               
        RETURN
DISPLAY2
        MOVLW        b'11111011'
        MOVWF        PORTB
        MOVF        COUNT2,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY3
        MOVLW        b'11110111'
        MOVWF        PORTB
        MOVF        COUNT3,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY4
        MOVLW        b'11101111'
        MOVWF        PORTB
        MOVF        COUNT4,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY5
        MOVLW        b'11011111'
        MOVWF        PORTB
        MOVF        COUNT5,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN
DISPLAY6
        MOVLW        b'10111111'
        MOVWF        PORTB
        MOVF        COUNT6,W
        CALL        TABLE
        MOVWF        PORTD
        CALL        DECREATE
        CLRF        PORTB
        CLRF        PORTD
        RETURN

DECREATE
        DECFSZ        COUNT7
        GOTO        DECREATE
        RETURN

;........................................................
CHECK1
        MOVLW        d'10'
        SUBWF        COUNT1,W
        BTFSS        STATUS,0
        GOTO        BACK
        CLRF        COUNT1
        INCF        COUNT2,F
        RETURN
CHECK2
        MOVLW        d'6'
        SUBWF        COUNT2,W
        BTFSS        STATUS,0
        GOTO        BACK
        CLRF        COUNT2
        INCF        COUNT3,F
        RETURN
CHECK3
        MOVLW        d'10'
        SUBWF        COUNT3,W
        BTFSS        STATUS,0
        GOTO        BACK
        CLRF        COUNT3
        INCF        COUNT4,F
        RETURN
CHECK4
        MOVLW        d'6'
        SUBWF        COUNT4,W
        BTFSS        STATUS,0
        GOTO        BACK       
        CLRF        COUNT4
        INCF        COUNT5,F
        RETURN
CHECK5
        MOVLW        d'10'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        GOTO        BACK       
        CLRF        COUNT5
        INCF        COUNT6,F
        RETURN
CHECK6
        INCF        COUNT5,F
        MOVLW        d'4'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        RETURN
        MOVLW        d'2'
        SUBWF        COUNT6,W
        BTFSS        STATUS,0
        CALL        LED_5
        CLRF        COUNT6
        RETURN
       
LED_5
        MOVLW        d'10'
        SUBWF        COUNT5,W
        BTFSS        STATUS,0
        RETURN
        CLRF        COUNT5
        INCF        COUNT6,F
        RETURN
;----------------------------------------------------------

; Bang tra ve Digital tu 0 den 9 va OFF
; Chi so dau truy cap la 0
; Bang o PAGE 0

        ORG 07F0h
TABLE
;----------------------------------------------------------
        ADDWF        PCL, F                        ; bat dau tai 0x90
        RETLW        b'00111111'                ; 0
        RETLW        b'00000110'                ; 1
        RETLW        b'01011011'                ; 2
        RETLW        b'01001111'                ; 3
        RETLW        b'01100110'                ; 4
        RETLW        b'01101101'                ; 5
        RETLW        b'01111101'                ; 6
        RETLW        b'00000111'                ; 7
        RETLW        b'01111111'                ; 8
        RETLW        b'01101111'                ; 9
        RETLW        b'00111111'                ; 0
               
        END


Anh NHH xem lại chương trình nay đi,em mắc mạch như trong hình ( mô phỏng bằng Proteus )nhưng chương trình chạy không đúng.

newuser 03-10-2006 09:21 AM

Trích:

Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high

Code:
BCF OPTION_REG,INTEDG ;interrupt cạnh xuống+ Ngắt cạnh lên: high to low

Code:
BSF OPTION_REG,INTEDG ;interrupt cạnh lênKhi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.
Nếu mình nhớ không nhầm thì bit INTEDG chỉ xác định sườn tác động cho ngắt ngoài thôi mà! Đâu có liên quan gì đến ngắt thay đổi đâu.
Theo đúng nghĩa của ngắt thay đổi, sườn lên hay sườn xuống đều phải gây ngắt và việc lựa chọn sườn tác động nào để gây ngắt là do người lập trình quyết định. Các bạn có thể tham khảo ở một appnote của Microchip vận dụng ngắt onchange để dùng như ngắt ngoài sẽ rõ.

picpicpic 07-10-2006 07:43 PM

Sao không thấy bác nào viết về ADC, PWM vậy nhỉ !

spirit 15-10-2006 01:12 PM

Giúp em với
 
Trích:

Nguyên văn bởi nhh (Post 4912)
Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high
Code:

BCF        OPTION_REG,INTEDG        ;interrupt cạnh xuống
+ Ngắt cạnh lên: high to low
Code:

BSF        OPTION_REG,INTEDG        ;interrupt cạnh lên
Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

Chúc thành công!

+Ra vậy,em hiểu rồi nhưng còn đối với các ngắt RB4..RB7 thì sao hả anh , em đọc trong datasheet không thấy Microchip nhắc đến ngắt cạnh lên hay xuống mà chỉ nói xảy ra ngắt khi có sự thay đổi mức LOGIC trên chân.
+Khi cấu hình là ngõ vào thì cần phải có lệnh BCF option_reg,not_RBPU để cho phép điện trở kéo lên bên trong phải không ạ? Nhưng em thấy bài quét phím 4x4 của anh em thấy không có lệnh này.
+Chương trình quét phím 4x4 của anh khi mô phỏng Proteus thì chính xác nhưng khi em đem ra mạch thật test thử thì không đúng nữa.(không biết anh đã test thử trên mạch thật chưa?) à,khi em đem ra mạch thật test thì ngõ xuất LED 7 đoạn là Port D chứ không phải Port C .
Mong anh giải đáp giúp em một số thăc mác trên,chờ tin anh
@NHH:Anh học BK Tphcm phải không ? Nếu anh học ở đó thì anh có thể cho em gặp riêng không ?
@picpicpic :Bạn qua dientuvietnam.net xem sao

spirit 17-10-2006 05:38 PM

Hic,anh NHH đâu rồi trả lời giúp em đi

newuser 18-10-2006 06:53 PM

Trích:

Ra vậy,em hiểu rồi nhưng còn đối với các ngắt RB4..RB7 thì sao hả anh , em đọc trong datasheet không thấy Microchip nhắc đến ngắt cạnh lên hay xuống mà chỉ nói xảy ra ngắt khi có sự thay đổi mức LOGIC trên chân.
mình đã nói ở trên đây thôi, chẳng có bit nào xác định sườn tác động của ngắt onchange cả, sườn lên hay sườn xuống đều có thể gây ngắt, nếu có bit để mà chọn sườn tác động thì còn gì là ngắt do thay đổi trạng thái (onchange)? muốn ngắt xảy ra theo sườn nào thì bạn phải viết chương trình thôi

spirit 18-10-2006 08:02 PM

Trích:

Nguyên văn bởi newuser (Post 5575)
mình đã nói ở trên đây thôi, chẳng có bit nào xác định sườn tác động của ngắt onchange cả, sườn lên hay sườn xuống đều có thể gây ngắt, nếu có bit để mà chọn sườn tác động thì còn gì là ngắt do thay đổi trạng thái (onchange)? muốn ngắt xảy ra theo sườn nào thì bạn phải viết chương trình thôi

Mình xem trong datasheet thì thấy như sau:
OPTION_REG REGISTER (ADDRESS 81h, 181h)

Bit6: INTEDG : Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin

Vậy thì có bit INTEDG chọn cạnh ngắt lên hay xuống mà Newuser ?

Mình cũng đã xem apnote AN552:Implementing Wake-up on Key Stroke của Microchip rồi cũng thấy không nói về bit xác định sườn ngắt chân RB4...RB7

Chắc có lẽ như bạn nói là không có bit để chọn cạnh ngắt như RB0 mà mình phải xác định trong chương trình của mình.

Còn chương trình quét phím 4x4 của anh NHH trên mình đã test thử trên Proteus thì chạy tốt nhưng khi đem ra mạch thật thì không chạy được
Bạn test giùm minh nhé Newuser,mình cũng đã thử viết lại nhiều lần rồi nhưng vãn chưa được.
Mình có nhiều vấn đề vẫn chưa thông lắm bạn Newuser giúp mình nhé

newuser 18-10-2006 10:58 PM

1 Attachment(s)
Trích:

Nguyên văn bởi spirit (Post 5577)
Mình xem trong datasheet thì thấy như sau:
OPTION_REG REGISTER (ADDRESS 81h, 181h)

Bit6: INTEDG : Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin

Vậy thì có bit INTEDG chọn cạnh ngắt lên hay xuống mà Newuser ?

Mình cũng đã xem apnote AN552:Implementing Wake-up on Key Stroke của Microchip rồi cũng thấy không nói về bit xác định sườn ngắt chân RB4...RB7

Chắc có lẽ như bạn nói là không có bit để chọn cạnh ngắt như RB0 mà mình phải xác định trong chương trình của mình.

Còn chương trình quét phím 4x4 của anh NHH trên mình đã test thử trên Proteus thì chạy tốt nhưng khi đem ra mạch thật thì không chạy được
Bạn test giùm minh nhé Newuser,mình cũng đã thử viết lại nhiều lần rồi nhưng vãn chưa được.
Mình có nhiều vấn đề vẫn chưa thông lắm bạn Newuser giúp mình nhé

trời đất, có ai nói là không có bit chọn sườn tác động cho ngắt ngoài (RB0/INT) đâu? Ngắt onchange chỉ có ở các chân của PORTB<4:7> thôi, đúng không?
để đảm bảo là không có ngắt không mong muốn xảy ra mỗi khi nhả phím thì bạn phải viết thêm một đoạn code kiểm tra trạng thái chân gây ngắt onchange, chắc chắn rằng trạng thái chân này đã trở về mức logic ban đầu(trạng thái trước khi nhấn phím), nếu chưa về trạng thái ban đầu thì chưa xoá cờ báo ngắt. Tôi không biết đoạn chương trình của bạn nhh, nhưng theo tôi suy đoán,Proteus đã lý tưởng hoá việc nhấn phím -->không khử nảy phím nhấn.
bạn đọc appnote này xem

spirit 18-10-2006 11:02 PM

Thanks newuser đúng là cái mình cần.

pisco 18-10-2006 11:23 PM

pic
 
em cung moi nghien cuu ve con pic6f877a , em cung thay mach nap cua may bac nhung sao ko thay co bo nguon cung cap cho no vay

spirit 19-10-2006 06:59 PM

Đề nghị bạn post tiếng việt có dấu,nếu bạn ở tpHCM bạn có thể qua cửa hàng (của PICVIETNAM ) : STH ở đường Lạc Long Quân gần chỗ giao với Âu Cơ


Múi giờ GMT. Hiện tại là 05:40 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam