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)
-   -   Dạy bang chủ học PIC18 (http://www.picvietnam.com/forum/showthread.php?t=810)

thaithienanh 02-03-2007 08:38 PM

A ha vui quá bạn omen ơi mình tìm ra nguyên nhân rồi đúng như anh linh đã nói đúng là nguyên nhân do ta khai báo config không đủ : trong các loại config sau có một cái gây ra lỗi nhưng mình hong rõ là cái nào nữa: NOBROWNOUT,NOCPD,NOWRT,NODEBUG cái này chắc phải nhờ trưởng lão giải thích hộ tụi mình thôi.

namqn 02-03-2007 09:23 PM

Trích:

Nguyên văn bởi thaithienanh (Post 7488)
A ha vui quá bạn omen ơi mình tìm ra nguyên nhân rồi đúng như anh linh đã nói đúng là nguyên nhân do ta khai báo config không đủ : trong các loại config sau có một cái gây ra lỗi nhưng mình hong rõ là cái nào nữa: NOBROWNOUT,NOCPD,NOWRT,NODEBUG cái này chắc phải nhờ trưởng lão giải thích hộ tụi mình thôi.

NOBROWNOUT: tắt bộ phát hiện nguồn suy giảm, cái này không có khả năng gây ra lỗi, vì nguồn tốt, và nếu nó tác động thì chỉ reset lại chip thôi.
NOCPD: tắt bảo vệ data EEPROM, hoàn toàn không liên quan.
NOWRT: tắt bảo vệ ghi (cái này là mặc nhiên), cũng hoàn toàn không liên quan.
NODEBUG: tắt bộ background debugger, cái này mà để bật thì nó sẽ đi vào chế độ gỡ rối, nghĩa là giống như đang được debug bằng ICD 2 vậy. Nếu vào chế độ stepping thì phải có lệnh từ ICD 2 nó mới chạy 1 lệnh.

Chỉ thử với NODEBUG xem. Mà các bạn viết code gài kiểu này thì ai mà gỡ rối cho nổi.

Quy tắc cần phát biểu ở đây: "Cấu hình đầy đủ cho chip rồi hãy thử chương trình".

Thân,

omen 02-03-2007 11:55 PM

Ôi mừng quá bác namnq và bác thaithienanh ơi :p em tìm ra rồi, đó là bỏ check cái option LVP (low voltage programming ) trong tap Setting của Winpic800 đi, thế là được, nạp xong chạy vù vù :)
Tuy nhiên đó là em mới thử được trên 16F877a, chưa thử được trên 18F4550, con 18F4550 của em ... nó ... đi về nơi xa lắm rồi :(( , và thế là sẽ ko theo được luồng này nữa rồi, h chuyển qua luồng "CCS C for 16F877a" vậy :)

Bác thaithienanh thử uncheck cái LVP xem có được ko , chúc bác may mắn :)

namqn: Ở đâu đó trên forum này tôi đã nói là dùng LVP thì phải xác định điện áp cho chân PGM (kéo nó xuống GND qua điện trở vài k), không thả nổi nó mà. Đúng là mỗi người một bệnh.

The lastest 09-05-2007 02:15 PM

Mình dùng Pic 18f4580 để lập trình với ứng dựng đơn giản để thử thì gặp lỗi mà không khắc phục được
Ứng dụng của mình chỉ hiển thị ra led 7 đoạn và tăng giá trị sau mỗi phím bấm
Tuy nhiên , quá trình chạy thử thì có vấn đề như sau:
vấn đề : khi bộ đếm đến 4 thì reset trở về lại đầu chương trình
lúc đó ,
- khi thực hiện lệnh MOVF COUNT,W,0 thì
thanh ghi PCL có giá trị là 0x0000CC h ,Status : 0x01 h, STKPTR : 0x01 , thanh ghi W có giá trị là 0x0A , biến COUNT có giá trị là 0x0A h
- khi thực hiện lệnh CALL TABLE thì nhảy đến vị trí có nhãn là TABLE , thanh ghi PCL có giá trị là 0x000F4 h , Status : 0x01 h , STKPTR : 0x02 dỉnh ngăn xếp TOS là : 0x0000D0
- khi thực hiện lệnh ADDWF PCL ,f,1 thì PCL có giá trị là 0x00000 và reset lại tại vị trí ban đầu (không phải reset chưong trình vì tất cả các giá trị khác vẫn không bị reset như thanh ghi STKPTR vẫn còn giá trị là 0x02) và thực hiện từ đầu chương trình
Tại sao trong những lần thực hiện lệnh ADDWF PCL,f,1 không xảy ra reset mà chỉ khi biến COUNT có giá trị là0x0A . Mình cũng có một số thay đổi khác thì cũng xảy ra trường hợp giống như vậy khi biến COUNT có giá trị là 0x006
Như vậy nguyên nhân do đâu mà xảy ra reset như trên, cách khắc phục.
Mình cũng đã thử viết chương trình với những ứng dụng khác đơn giản hơn như nháy led hay chạy led lan dần thì không gặp vấn đề gì cả , chứng tỏ là config cho PIC là đúng
Sau đây là mã viết bằng ASM
Code:

LIST P=18F4580 ;CHON PIC HOAT DONG
#include <P18F4580.INC> ;CAC DINH NGHIA CAC THANH GHI CHO PIC

;************************************************* ****************************
; CAU HINH CHO PIC
__CONFIG _CONFIG1H, _OSC_HS_1H & _FCMENB_OFF_1H
__CONFIG _CONFIG2L, _PWRT_OFF_2L & _BOR_OFF_2L & _BORV_20_2L
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_32768_2H
__CONFIG _CONFIG3H, _MCLRE_ON_3H & _PBADEN_OFF_3H
__CONFIG _CONFIG4L, _DEBUG_OFF_4L & _XINST_OFF_4L & _BBSIZ_2048_4L & _LVP_OFF_4L & _STVREN_OFF_4L
__CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
__CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
__CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
__CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
__CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
__CONFIG _CONFIG7H, _EBTRB_OFF_7H & _DEVID1 & _IDLOC0

;************************************************* ****************************
;KHAI BAO BIEN

CBLOCK 0x080
WREG_TEMP ;BIEN TAM DE LUU GIA TRI THANH GHI W
STATUS_TEMP ;BIEN TAM DE LUU GIA TRI THANH GHI STATUS
BSR_TEMP ;BIEN TAM DE LUU GIA TRI THANH GHI BSR
ENDC

CBLOCK 0x120
COUNT ;example of a variable in access RAM
COUNT1
COUNT2
COUNT3
ENDC

;************************************************* ****************************

ORG 0X0000 ;Reset vector
GOTO MAIN

;************************************************* ****************************
;CHUONG TRINH CHINH BAT DAU TU DAY
;PORT B LA OUT PUT XUAT TIN HIEU DE LED NHAY
;RC0 KICH LED 7 DOAN DE HIEN THI
;RC7 LA INPUT DE TANG GIA TRI CUA LED 7 DOAN
;************************************************* ****************************

ORG 0x0080 ;go to start of main code

MAIN
MOVLB 0X0F ;CHON BANK15
SETF LATB,1
CLRF LATD,1
CLRF LATC,1
MOVLW 0X07
MOVWF ADCON1,1

CONFIG_B ;THIET LAP CAU HINH CHO PORTB
MOVLW 0X00
MOVWF TRISB,1
CONFIG_D ;THIET LAP CAU HINH CHO PORTD
MOVWF TRISD,1
CONFIG_E ;THIET LAP CAU HINH CHO PORTC
MOVLW 0XF0
MOVWF TRISC,1

WAIT
MOVLW 0X00
MOVWF COUNT,0
NEXT
CALL DATA_DISPLAY
BTFSC PORTC,7,1 ;kiem tra nut duoc bam hay chua
GOTO NEXT ;neu ko thi tro lai
CHK
CALL DELAY ;tre mot luc
BTFSC PORTC,7,1 ;kiem tra nut dc nha ra chua
GOTO INC ;nhay den tang bien dem
CALL DATA_DISPLAY ;neu khong thi hien thi led
GOTO CHK ;nhay den CHK va den khi nut duoc nha ra
INC
INCF COUNT,F,0
INCF COUNT,F,0 ;tang bien dem moi lan 2 don vi
MOVF COUNT,W,0
MOVWF LATD,0
SUBLW 0X20 ;kiem tra da hien thi xong mot vong (hien thi chu F)
BTFSC STATUS,Z,1
GOTO WAIT ;nhay noi bat dau va tro lai mot vong moi
GOTO NEXT ;con khong thi tiep tuc tang cho den F

DATA_DISPLAY ;bieu dien hien thi LED
MOVF COUNT,W,0
CALL TABLE ;goi bang lay du lieu hien thi
MOVWF LATB,1
CALL DELAY
RETURN

DELAY
CLRF COUNT1,0
CLRF COUNT2,0
MOVLW D'13'
MOVWF COUNT3,0
LOOP
DECFSZ COUNT1,f,0
GOTO LOOP
DECFSZ COUNT2,f,0
GOTO LOOP
DECFSZ COUNT3,f,0
GOTO LOOP
RETURN

TABLE
ADDWF PCL,F,1
RETLW 0XC0 ;SO 0
RETLW 0XF9 ;SO 1
RETLW 0XA4 ;SO 2
RETLW 0XB0 ;SO 3
RETLW 0X99 ;SO 4
RETLW 0X92 ;SO 5
RETLW 0X82 ;SO 6
RETLW 0XF8 ;SO 7
RETLW 0X80 ;SO 8
RETLW 0X90 ;SO 9
RETLW 0X88 ;chu A
RETLW 0X83 ;chu B
RETLW 0XC6 ;chu C
RETLW 0XA1 ;chu D
RETLW 0X86 ;chu E
RETLW 0X8E ;chu F

RETLW 0XFF ;OFF

;************************************************* ****************************
;End of program

END


namqn 09-05-2007 07:37 PM

Phần code để giải mã của bạn đang nằm gần biên của các trang 256 byte. Như bạn đã cho biết, PCL = 0xF4 khi nhảy đến TABLE. Trước khi thực hiện lệnh cộng thì PCL sẽ được tăng thêm 2, cộng với giá trị mà bạn muốn giải mã là 0x0A thì bạn có thể thấy tại sao PCL = 0x00 (PCL = 0xF4 + 0x02 + 0x0A).

Bạn tìm hiểu lại về vấn đề xử lý PCH và PCL khi dùng kỹ thuật bảng.

Thân,

Jerry 10-05-2007 10:02 AM

Để sửa lỗi trên thì bạn nên sửa như sau ở đoạn Table:

org 0x100
TABLE:
movlw high(TABLE)
movwf PCLATH
movf Count,0
ADDWF PCL,F,1
RETLW 0XC0 ;SO 0
RETLW 0XF9 ;SO 1
RETLW 0XA4 ;SO 2
RETLW 0XB0 ;SO 3
RETLW 0X99 ;SO 4
RETLW 0X92 ;SO 5
RETLW 0X82 ;SO 6
RETLW 0XF8 ;SO 7
RETLW 0X80 ;SO 8
RETLW 0X90 ;SO 9
RETLW 0X88 ;chu A
RETLW 0X83 ;chu B
RETLW 0XC6 ;chu C
RETLW 0XA1 ;chu D
RETLW 0X86 ;chu E
RETLW 0X8E ;chu F

RETLW 0XFF ;OFF

Jerry 10-05-2007 10:03 AM

nếu còn thắc mắc gì thì cứ chat với tôi nhé, sẵn sàng giúp đỡ, :D. YM: hiendl2k42

tungtot_vl 18-10-2007 08:27 AM

em mới học pic18f4550 nên cũng chưa biết gì cả mong các anh chỉ giúp.
1. trong proteus em không thấy cong 18f4550 hoặc con 18f4455 đâu cả. thế để mô phỏng nó thì làm thế nào hả các bác. hay có con nào tương tự trong proteus không
2.chân rb4 mắc điện trỏ 10k lên 5v là để làm gì hả các bác. thế khi điều khiển đèn bằng portb có cần mắc con này không.
3. em viết chương trình bằng ccs 3.249. và con 18f có cần khai báo thêm device*=16 ADC = 8 có tác dụng không để dùng toàn bộ RAM không. em thấy có khai báo hay không vẫn tốn dung lượnng RAN như nhau.
em viết thử 1 đoạn code điều khiển đèn nhưng không mô phỏng được và cũng chưa có mạch để text thử nên nhờ các đại ca xem thử
Code:

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CP UDIV1,VREGEN
#device*=16 adc=8
#use delay(clock=20000000)
#use fast_io(b)
#byte portb=0x6
#use fast_io(a)
#byte porta=0x5
unsigned char tam[] = {0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};


main()
  {int i;
      set_tris_b(0);
      set_tris_a(0);

      while(true)
        { porta = 0xff;
            for(i=0;i<8;i++)
              {
                  portb=tam[i];
                  delay_ms(500);
              }
        }
  }

có chổ nào sai mong các anh chỉ giáo

tungtot_vl 20-10-2007 12:23 PM

đã có mạch tẽt thủ nhưng không thấy chạy gì cả không biết có phải config sai không. mạch text thì em dùng mạch của của con 16f877a chạy tốt và chỉ thêm mấy cái tụ 104 và 5v và mass thôi.
xin mấy đại ca chỉ giáo

ghosttn 21-10-2007 11:18 AM

song song --> noi tiep
 
mấy anh chỉ hộ em mấy con IC chuyển song song --> nối tiếp với.
//======================================
dạng vào n bit -->lock n bit--> clock out 1
em đang cần con này để trị thằng 595.

namqn 23-10-2007 05:46 PM

Trích:

Nguyên văn bởi tungtot_vl (Post 12262)
đã có mạch tẽt thủ nhưng không thấy chạy gì cả không biết có phải config sai không. mạch text thì em dùng mạch của của con 16f877a chạy tốt và chỉ thêm mấy cái tụ 104 và 5v và mass thôi.
xin mấy đại ca chỉ giáo

Bạn so sánh sơ đồ chân của PIC16F877A và PIC18F4550. Hai chip này không hoàn toàn giống nhau. Trong luồng này đã có một vài mạch thử nghiệm cho PIC18F4550 rồi. Bạn cũng có thể vào các trang sau để tham khảo mạch thử nghiệm tối thiểu.

http://www.sixca.com/eng/articles/usbdaq/index.html (chân 18 cần tụ 470 nF chứ không phải 470 pF)
http://www.electronicfr.com/usb.html
http://pic18fusb.online.fr/wiki/wikk...wakka=WikiHome

Trong những sơ đồ trên bạn đều thấy là chân 18 của PIC18F4550 cần phải có một tụ 470 nF.

Thân,

hampic 23-10-2007 10:34 PM

Trích:

Nguyên văn bởi namqn (Post 6547)
Chú ý: xem hình 17-1, trang 163 của datasheet cho PIC18F4550 family (DS39632C), nếu có dùng điện trở pull-up bên ngoài thì người ta nối nó với nguồn ngoài 3.3V. Lý do chính để đưa chân VUSB ra vỏ chip là cần có một tụ (mà RedRose nói là tụ điện nhỏ).

RedRose nói tụ điện nhỏ thì bao nhiêu có thể coi là nhỏ, và bao nhiêu có thể coi là đủ? (câu này hỏi RedRose)

Một câu hỏi nữa là tại sao cần có tụ điện cho chân VUSB (mà Microchip nhắc nhở rất nhiều lần về việc dùng giá trị đúng cho nó)?

Hy vọng chú F cũng tính điểm cho phần trả lời của các câu hỏi này.

Thân,

hehe, nghe nói có treo thưởng nên làm liều trả lời 1 phát thử có trúng ko, nếu trúng thì kiếm con pic vọc cũng đở bùn,hihi.
Theo em, thì cái tụ nhỏ này là khoảng 470uF. Lý do vì sao cần tụ này thì theo mình, do Vbus cấp điện áp cho D+ và D- thông qua điện trở kéo lên bên trong (có thể thay thế bằng R bên ngoài nếu muốn), mà 2 tín hiệu vi sai này là ngỏ ra dữ liệu của USB, được dao động ở tần số 12MHz(Full speed), cho nên để ổn định nguồn này thì chắc cần phải có tụ ở đây rùi. Hihi, giải thích như vậy ko biết có đúng ko nữa, hên xui thui, hihi.

namqn 24-10-2007 12:23 AM

Trích:

Nguyên văn bởi hampic (Post 12310)
hehe, nghe nói có treo thưởng nên làm liều trả lời 1 phát thử có trúng ko, nếu trúng thì kiếm con pic vọc cũng đở bùn,hihi.
Theo em, thì cái tụ nhỏ này là khoảng 470uF. Lý do vì sao cần tụ này thì theo mình, do Vbus cấp điện áp cho D+ và D- thông qua điện trở kéo lên bên trong (có thể thay thế bằng R bên ngoài nếu muốn), mà 2 tín hiệu vi sai này là ngỏ ra dữ liệu của USB, được dao động ở tần số 12MHz(Full speed), cho nên để ổn định nguồn này thì chắc cần phải có tụ ở đây rùi. Hihi, giải thích như vậy ko biết có đúng ko nữa, hên xui thui, hihi.

Câu hỏi này đã được phamthaihoa trả lời tốt ở post #41. Bạn nên đọc lại post đó để biết mình trả lời chưa được chính xác. Để lấy được PIC thì bạn phải trả lời tốt khoảng 5 câu hỏi.

Thân,

ghosttn 24-10-2007 08:06 PM

--------------------------------------------------------------------------------

mấy anh chỉ hộ em mấy con IC chuyển song song --> nối tiếp với.
//======================================
dạng vào n bit -->lock n bit--> clock out 1
em đang cần con này để trị thằng 595.
//==============================
hây sao mấy anh không hộ em ti'
thế này sao lên được đệ tử 1 túi.
ăn mày kiểu này chắc thành xương lâu rồi.

namqn 24-10-2007 09:53 PM

Trích:

Nguyên văn bởi ghosttn (Post 12331)
--------------------------------------------------------------------------------

mấy anh chỉ hộ em mấy con IC chuyển song song --> nối tiếp với.
//======================================
dạng vào n bit -->lock n bit--> clock out 1
em đang cần con này để trị thằng 595.
//==============================
hây sao mấy anh không hộ em ti'
thế này sao lên được đệ tử 1 túi.
ăn mày kiểu này chắc thành xương lâu rồi.

Linh kiện mà bạn cần là parallel-in/serial-out shift register, 74HC/HCT165 chẳng hạn. Tuy nhiên, nếu bạn đã dùng vi điều khiển thì việc dịch các bit ra 595 không có gì là phức tạp cả, và bạn sẽ tiết kiệm được khá nhiều chân của vi điều khiển.

Thân,

tungtot_vl 25-10-2007 03:03 PM

vẫn chưa chạy
 
Trích:

Nguyên văn bởi namqn (Post 12307)
Bạn so sánh sơ đồ chân của PIC16F877A và PIC18F4550. Hai chip này không hoàn toàn giống nhau. Trong luồng này đã có một vài mạch thử nghiệm cho PIC18F4550 rồi. Bạn cũng có thể vào các trang sau để tham khảo mạch thử nghiệm tối thiểu.

http://www.sixca.com/eng/articles/usbdaq/index.html (chân 18 cần tụ 470 nF chứ không phải 470 pF)
http://www.electronicfr.com/usb.html
http://pic18fusb.online.fr/wiki/wikk...wakka=WikiHome

Trong những sơ đồ trên bạn đều thấy là chân 18 của PIC18F4550 cần phải có một tụ 470 nF.

Thân,

không có tụ 470n nên em dùng 2 tụ 1u nối tiếp nhưng vẫn không thấy chạy gì cả. em nghĩ phần cứng không có vấn đề gì vì khi em dùng portb = 0xff và = 0; thì không thấy đèn nháy nhưng khi thay output_high(..) hay output_low(..) thì thấy đèn nhấp nháy theo chu kỳ bình thường.
không biết vì sao lại xuất bằng port không được hả anh nam trong khi đã khai báo đầy đủ #byte portb = 0x06 và trisb(0).
mong anh chỉ giúp

namqn 25-10-2007 05:41 PM

Trích:

Nguyên văn bởi tungtot_vl (Post 12351)
không có tụ 470n nên em dùng 2 tụ 1u nối tiếp nhưng vẫn không thấy chạy gì cả. em nghĩ phần cứng không có vấn đề gì vì khi em dùng portb = 0xff và = 0; thì không thấy đèn nháy nhưng khi thay output_high(..) hay output_low(..) thì thấy đèn nhấp nháy theo chu kỳ bình thường.
không biết vì sao lại xuất bằng port không được hả anh nam trong khi đã khai báo đầy đủ #byte portb = 0x06 và trisb(0).
mong anh chỉ giúp

Bạn dùng thanh ghi LATB thay cho PORTB thử xem. Bạn cũng có thể dùng hàm OUTPUT_B() của CCS C. Không nên thao tác trực tiếp các thanh ghi PORTx của PIC18, khi cần xuất dữ liệu.

Tôi cho rằng các trình dịch đã định nghĩa sẵn các thanh ghi của PIC, do đó không cần định nghĩa lại như bạn đã làm với #byte portb = 0x06. Tôi cũng cho rằng hàm thiết lập thanh ghi TRISB của CCS C là SET_TRIS_B().

Thân,

tungtot_vl 27-10-2007 10:17 AM

cảm ơn anh nam nhiều. quả nhiên dùng outputB(value) thì có hiệu quả ngay. kết quả thật bất ngờ nhưng không hiểu nối dùng port và output có gì khác nhau và 18f4550 kkhông cho dùng port

vandungevn 27-10-2007 11:39 AM

Trong CCS nó chỉ có hiểu là outport_x chứ nó không hiêu portx là gì cả.
Trong MPLAB thì mới có khái niêm portx

tungtot_vl 21-12-2007 07:35 AM

các bác ơi sao con 18f4550 chạy kém ổn định quá.
khi em dùng 18f4550 cho 1 số mạch thì nó chạy tốt nhưng có 1 số mạch khi đang chạy thì nó hay reset lại từ đầu. khi em dùng phần mềm này chạy cho con 16f877a và dùng chung phần cứng thì nó chạy tốt không biết vì sao hả các bác. bác nào biết chỉ cho em với

namqn 21-12-2007 07:00 PM

Trích:

Nguyên văn bởi tungtot_vl (Post 13448)
các bác ơi sao con 18f4550 chạy kém ổn định quá.
khi em dùng 18f4550 cho 1 số mạch thì nó chạy tốt nhưng có 1 số mạch khi đang chạy thì nó hay reset lại từ đầu. khi em dùng phần mềm này chạy cho con 16f877a và dùng chung phần cứng thì nó chạy tốt không biết vì sao hả các bác. bác nào biết chỉ cho em với

Những mạch nào của bạn khiến PIC18F4550 chạy không ổn định, code tương ứng của các mạch ra sao? Bạn không nên nhanh chóng kết luận PIC18F4550 chạy kém ổn định. Tôi tin là đã có nhiều người thực hiện các mạch khác nhau với PIC18F4550, nhưng ít nghe phản ánh về độ tin cậy của nó. Mong bạn cung cấp thêm thông tin để việc phản hồi được tin cậy và chính xác hơn.

Thân,

tungtot_vl 22-12-2007 11:35 AM

em đang làm mạch quang báo bằng con 4550. khi em gắn tụ 10u song song với điện trở 4,7k ở cực B của tranistor a1013 và cho chạy bằng con 4550. khi bật nguồn lên được vài dây thì nó cứ reset lại từ đầu, do đó không chạy chử được. nhưng nếu em tháo tụ 10u ra thì nó chạy bình thường. và nếu em gắn tụ 10u vào và chạy bằng con 877a thì chạy cũng bình thường. không có vấn đề gì cả. điều quang trong là em muốn giử tụ 10u lại và chạy bằng con 4550 thì làm thế nào hả anh.
à. mà anh nam ơi nếu em không dùng chân usb của 4550 thì không gắn tụ 470p vào chân 18 thì có ảnh hưởng gì đến hoạt động của 4550. lâu nay em chạy bình thường mà không cần gắn tụ 470p vào chân này. mong anh chỉ giúp.

namqn 22-12-2007 05:49 PM

Bạn không cho biết mạch nguyên lý cùng với code chương trình thì những mô tả trên của bạn cũng chẳng giúp ích gì cho những người khác đang thử tìm hiểu vấn đề của bạn. Giả sử với cùng phần cứng ngoại vi, bạn viết code cho PIC16 và PIC18 sẽ khác nhau đôi chút, vì PIC18 có những tính năng bổ sung mà PIC16 không có (đã từng có bạn viết code thử nghiệm PIC18 rất đơn giản mà không chạy, lý do đơn giản vì bạn ấy bỏ qua các thiết lập ban đầu cho các từ cấu hình, nên phản ứng của PIC18 là không biết trước). Cần phải xem bạn kết nối phần cứng ra sao, và viết code cho PIC18 thế nào thì mới tìm hiểu xem vấn đề nằm ở đâu được.

Tụ nối vào chân VUSB của PIC18 là 470 nF chứ không phải 470 pF. Chân đó chỉ có nhiệm vụ làm VUSB thì nên nối hẳn tụ vào, mặc dù điều này là không cần thiết nếu bạn không dùng module USB của PIC.

Thân,

tungtot_vl 24-12-2007 02:01 PM

1 Attachment(s)
Trích:

#include<18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CP UDIV1,VREGEN
#use delay(clock=48000000)
#include<E:\LED MATRIX\18f4550\fontchu.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
trên là phần khai báo của em cho 18f4550.
vì code dài quá không port hết được
và mạch nguyên lý như hình vẽ.
khi không có tụ 10u thì 18f4550 chạy bình thường. nếu nối tụ vào thì có hiện tượng như đã nói ở trên, nhưng nếu dùng 16f877a thì chạy tốt.
không hiểu vì sao.

namqn 26-12-2007 02:13 AM

Trích:

Nguyên văn bởi tungtot_vl (Post 13513)
trên là phần khai báo của em cho 18f4550.
vì code dài quá không port hết được
và mạch nguyên lý như hình vẽ.
khi không có tụ 10u thì 18f4550 chạy bình thường. nếu nối tụ vào thì có hiện tượng như đã nói ở trên, nhưng nếu dùng 16f877a thì chạy tốt.
không hiểu vì sao.

Bạn cho biết lý do của việc gắn tụ điện 10 uF song song với điện trở cực base của transistor. Tôi không thấy có lý do nào cần gắn tụ điện này.

Thân,

electronicltv 26-12-2007 10:10 AM

Trích:

Nguyên văn bởi tungtot_vl (Post 13485)
em đang làm mạch quang báo bằng con 4550. khi em gắn tụ 10u song song với điện trở 4,7k ở cực B của tranistor a1013 và cho chạy bằng con 4550. khi bật nguồn lên được vài dây thì nó cứ reset lại từ đầu, do đó không chạy chử được. nhưng nếu em tháo tụ 10u ra thì nó chạy bình thường. và nếu em gắn tụ 10u vào và chạy bằng con 877a thì chạy cũng bình thường. không có vấn đề gì cả. điều quang trong là em muốn giử tụ 10u lại và chạy bằng con 4550 thì làm thế nào hả anh.

Bạn thấy có hiện tượng reset lại từ đầu như thế nào? Bạn mô tả chi tiết hiện tượng mà bạn thấy. Bạn nên chèn thêm một đoạn lệnh xuất dữ liệu ra RS232 hoặc ra một pin nào đó để kiểm tra xem có phải PIC reset lại hay không ? (nếu chương trình chạy trở lại void main() thì xuât, k thì thôi). Tôi nghĩ hiện tượng xảy ra ở đây không phải là reset, vì PIC thường bị reset khi bạn điều khiển động cơ, rơ le,... chứ điều khiển mấy cái led này thì hơi khó bị reset. Bạn nên xem xét lại kĩ nhá.

bien_van_khat 26-12-2007 10:35 AM

Cái tụ 10u song song với điện trở cực B của transistor mình thấy chẳng có lợi ích gì mà còn có hại. Khi tụ nạp dòng điện nạp lúc đầu rất lớn, nếu chân IO ko có khả năng chịu dòng điện lớn trong thời gian ngắn có thể bị hư.

Hơn nữa trong mạch thực tế, bạn cần 1 điện trở nối từ cực B lên Vdd để phân cực cho transistor, nếu thiếu, transistor sẽ đóng rất chậm làm LED có bóng mờ.

Thân.

tungtot_vl 26-12-2007 05:01 PM

cảm ơn anh đã nhắc nhỡ
 
Bạn thấy có hiện tượng reset lại từ đầu như thế nào? Bạn mô tả chi tiết hiện tượng mà bạn thấy. Bạn nên chèn thêm một đoạn lệnh xuất dữ liệu ra RS232 hoặc ra một pin nào đó để kiểm tra xem có phải PIC reset lại hay không ? (nếu chương trình chạy trở lại void main() thì xuât, k thì thôi). Tôi nghĩ hiện tượng xảy ra ở đây không phải là reset, vì PIC thường bị reset khi bạn điều khiển động cơ, rơ le,... chứ điều khiển mấy cái led này thì hơi khó bị reset. Bạn nên xem xét lại kĩ nhá.

em đã kiểm tra kỷ rồi và cũng gởi lên pc dòng lệnh trước while(). cho chữ dịch sang trái hoặc phải. khi dịch gần được 1 chữ (1 led) thì reset lại và tiếp tục như thế. và đương nhiên là trên pc cũng có dòng kiểm tra reset của pic. nếu không có mạch hiển thị chữ tức là chỉ kiểm tra pic không hoặc kô có tụ thì chạy bình thường.
Cái tụ 10u song song với điện trở cực B của transistor mình thấy chẳng có lợi ích gì mà còn có hại. Khi tụ nạp dòng điện nạp lúc đầu rất lớn, nếu chân IO ko có khả năng chịu dòng điện lớn trong thời gian ngắn có thể bị hư.

cái tụ này rất hiệu quả đấy anh ạ. nêu ta mắc thêm tụ này sẽ làm cho a1013 phóng nhanh và mạch hơn đồng thời dòng rất ổn định
khi mắc tụ này vào bảng led sẽ sáng hơn rất nhiều và sẽ làm giảm đi rất đáng kể hiện tượng cột nào có nhiều điểm sáng thì mờ và ít điểm sáng thì rỏ, nói chung khi có tụ này thì sẽ làm cho bảng quang báo rỏ và sáng điều các led hơn.

electronicltv 26-12-2007 09:54 PM

Tụ 10uF có chức năng cản thiện cạnh xung: Khi Y7 ở mức 0 thì điện áp trên cực B của Q1 gần bằng 5V, tụ điện được nạp điện. Khi Y7 chuyển lên mức 1, điện áp trên cực B của Q1 gần bằng điện áp trên Y7 + điện áp trên tụ => Q1 tắt nhanh và áp trên cực B của Q1 > 5V rất nhiều.Khi Y7 đang ở mức 1, tụ điện xả điện qua điện trở, Y7 chuyển xuống mức 0, dòng qua cực B của Q1 gồm dòng qua điện trở và dòng nạp tụ rất lớn => Q1 dẫn rất nhanh, dòng dẫn mạnh. Vì vậy tác dụng cải thiện cạnh xung của Q1 vô tình tạo xung nhiễu > 5V làm ảnh hưởng đến PIC => reset PIC. Tùy vào khả năng chịu nhiễu và dòng tải của 877 hay 4550 sẽ cho kết quả khác nhau. Vì vậy trong ứng dụng này không nên sử dụng tụ điện cải thiện cạnh xung. Ta chỉ cần giảm điện trở 4.7k xuống khoảng 2.2k và gắn thêm điện trở 10k từ cực B lên VCC là hoạt động tốt. Nên gắn thêm điện trở hạn dòng cho Led.

tungtot_vl 27-12-2007 05:01 PM

reset 4550
 
Trích:

Nguyên văn bởi electronicltv (Post 13557)
Tụ 10uF có chức năng cản thiện cạnh xung: Khi Y7 ở mức 0 thì điện áp trên cực B của Q1 gần bằng 5V, tụ điện được nạp điện. Khi Y7 chuyển lên mức 1, điện áp trên cực B của Q1 gần bằng điện áp trên Y7 + điện áp trên tụ => Q1 tắt nhanh và áp trên cực B của Q1 > 5V rất nhiều.Khi Y7 đang ở mức 1, tụ điện xả điện qua điện trở, Y7 chuyển xuống mức 0, dòng qua cực B của Q1 gồm dòng qua điện trở và dòng nạp tụ rất lớn => Q1 dẫn rất nhanh, dòng dẫn mạnh. Vì vậy tác dụng cải thiện cạnh xung của Q1 vô tình tạo xung nhiễu > 5V làm ảnh hưởng đến PIC => reset PIC. Tùy vào khả năng chịu nhiễu và dòng tải của 877 hay 4550 sẽ cho kết quả khác nhau. Vì vậy trong ứng dụng này không nên sử dụng tụ điện cải thiện cạnh xung. Ta chỉ cần giảm điện trở 4.7k xuống khoảng 2.2k và gắn thêm điện trở 10k từ cực B lên VCC là hoạt động tốt. Nên gắn thêm điện trở hạn dòng cho Led.

đúng như anh nói khả năng chịu dòng của 877 tốt hơn 4550. em đã cho bộ đệm vào portb và led để khéo dòng xuống max. còn portb chỉ điểu khiển bộ đệm quả nhiên là 4550 không reset nữa và chạy rất ổn định. tìm hoài mới ra đúng là khổ thật.

tungtot_vl 31-12-2007 08:16 AM

còn một vấn đề này nữa em chưa giải quyết được mong các anh giúp em luôn.
em viết chương trình cho gởi ký tự từ pc xuống pic.
nếu chương trình ngắn thì sau khi thực hiện ngắt để nhận tín hiệu từ pc thì chương trình quay về vị trí tại điểm ngắt bình thường để thực hiện các lệnh tiếp theo.
nhưng nếu chương trình quá dài thì sau khi ngắt để thực hiện tín hiệu từ pc xuống nó không quay về vị trí cũ nữa. do đó ko thực hiện các lệnh tiếp theo được. nhưng nếu tiếp tục gởi tín hiệu từ pc xuống thì nó vận nhận bình thường.
có phải vì chương trình quá dài nên sau khi thực hiện ngắt nó nhảy không tới được vị trí cũ không hả các anh.

footballer 27-01-2008 01:38 AM

Chào các anh, em đang học con PIC18F4550 theo luồng này, có anh nào có thể send cho em quyển tài liệu "USB complete" được không?
email của em: quang.dktd@gmail.com

tungtot_vl 14-02-2008 03:26 PM

chào các anh. em dùng mạch nạp propic2, winpic800. nạp bình thường bằng socket và icsp cho pic 877 nhưng riêng pic 18 thì chỉ nạp được chương trình trên socket còn nạp bằng icsp thì không được. đã thử cả 18f4550 và 18f4580 qua cổng ICSP nhưng Winpic không nhận dạng được. vì sao các đại ca chỉ cho em biết với

namqn 14-02-2008 05:27 PM

Trích:

Nguyên văn bởi tungtot_vl (Post 14296)
chào các anh. em dùng mạch nạp propic2, winpic800. nạp bình thường bằng socket và icsp cho pic 877 nhưng riêng pic 18 thì chỉ nạp được chương trình trên socket còn nạp bằng icsp thì không được. đã thử cả 18f4550 và 18f4580 qua cổng ICSP nhưng Winpic không nhận dạng được. vì sao các đại ca chỉ cho em biết với

Một số PIC18 nhạy cảm với nhiễu trên các chân PGD và PGC khi nạp chương trình. Khi nạp bằng socket ở trên mạch nạp, bạn không nối vi điều khiển với bất kỳ mạch ngoài nào, và các đường tín hiệu thường khá ngắn (chỉ vài cm). Khi nạp bằng ICSP thì bạn thường dùng cáp để nối từ mạch nạp sang mạch đích, cáp này có thể bị nhiễu. Ngoài ra, các mạch ngoài nối vào vi điều khiển cũng cần được thiết kế thích hợp để không ảnh hưởng đến việc nạp bằng ICSP. Bạn đọc thêm ở luồng sau về một số điều cần chú ý khi dùng ICSP (chú ý post #15):

http://www.picvietnam.com/forum/showthread.php?t=429

Thân,

tallht 18-07-2008 09:38 AM

bang chủ không học nữa ah?

tranhuyky 17-04-2009 12:06 PM

Chào mọi người.
Mình đang làm với 18F4550 và CCS. Mình gặp vấn đề về bộ nhớ.
Hiện tại chương trình của mình chiếm 60% RAM và 100% ROM.
Mình viết thêm thì bị báo không đủ bộ nhớ.
Có cách nào giải quyết không?
Mong mọi người giúp đở.

tungtot_vl 17-04-2009 03:53 PM

có thể dung pic có rom, ram lớn hơn để thay nhưng 4550 chạy ở 48M nên nhanh hơn các con khác một tý. nếu bạn ko dùng chức năng giao tiếp USB thì có thể dùng pic 18f4680 có rom, ram gấp đôi 18f4550

manhha2799 17-04-2009 10:57 PM

Có con 18f4685 còn có bộ nhớ ROM RAM lớn hơn mấy con khác mà chân Dip. Bạn thử dùng con này cũng oki.

newboystylew 14-05-2009 01:22 AM

thac max
 
bang chủ ơi cho em hỏi có con IC nào có tính năng ngược lại con IC 74hc154 không? 74154 nay giai mã ngõ ra tích cực mức thấp giờ em mún cũng giống như con 74154 này nhung ngõ ra tích cực mức cao.
em đang cần gấp bang chủ giúp em zới nha. thask nhìu

nongdanngheo 25-10-2009 08:35 PM

Trích:

Nguyên văn bởi falleaf (Post 6470)
Câu hỏi 6: Vì sao khi học 18F, thì F lại chọn 18F4550 để học? Không ai

pic 18f4450 có thể giao tiếp tốt với PC và nó còn có thể dùng làm con master để điều khiển các con slaver khác trong việc điều khiển nhiều động cơ liên tục
em chỉ biết vậy thui vì em đang làm robot scara với 3 động cơ nên em dùng 18f4450 làm con master và 3 con slaver là 18f4431.


Múi giờ GMT. Hiện tại là 05:53 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