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.
|
Trích:
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, |
Ô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. |
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 |
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, |
Để 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 |
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
|
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> |
đã 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 |
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. |
Trích:
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, |
Trích:
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. |
Trích:
Thân, |
--------------------------------------------------------------------------------
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. |
Trích:
Thân, |
vẫn chưa chạy
Trích:
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 |
Trích:
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, |
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
|
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 |
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 |
Trích:
Thân, |
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. |
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, |
1 Attachment(s)
Trích:
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. |
Trích:
Thân, |
Trích:
|
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. |
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. |
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.
|
reset 4550
Trích:
|
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. |
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 |
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
|
Trích:
http://www.picvietnam.com/forum/showthread.php?t=429 Thân, |
bang chủ không học nữa ah?
|
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 đở. |
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
|
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.
|
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 |
Trích:
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