PDA

View Full Version : Nạp Pic chạy không chính xác,vout ko đủ 5V


dl988
26-12-2009, 07:07 PM
E mới học Pic nên gặp khá nhiều rắc rối, nhờ mọi người chỉ dùm...
- Phần cứng : cấp nguồn cho pic, TA=4Mhz nối trực tiếp vào pin 13,14(vì chưa có tụ 30pF,có thể thay được bằng tụ nào vậy???)
- Lập trình: ban đầu viết nút nhấn không chạy nên viết tạm cái này test thử, có chạy nhưng không chính xác...hic.Đo thử pin RB6 thì vout có 3V à, Led chỉ đỏ không nhấp nháy như trong code...ko hiểu tại sao (Biên dịch bằng CCS C, Dùng IC-Prog để nạp, dùng mạch nạp JDM ở Nhật Tảo).Mô phỏng Protues thì chạy OK :(
Code:
#include<16f877.h>
#fuses nowdt,noprotect,nolvp,hs,noput,nodebug
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x6
#bit b6=portb.6
void main()
{
set_tris_b(0b00000001);
output_b(0);
while(true)
{
b6=1;
delay_ms(1000);
b6=0;
delay_ms(1000);
}
}

dl988
26-12-2009, 07:30 PM
kiếm được 2 con 12pF mắc theo datasheet nhưng ko thay đổi được gì...hic

namqn
26-12-2009, 07:38 PM
Bạn nên post thêm sơ đồ nguyên lý của mạch thử nghiệm nữa. Có khả năng mạch reset, hay mạch dao động, hoặc các chân cấp nguồn của bạn chưa ổn.

Thân,

dl988
26-12-2009, 07:50 PM
Bạn nên post thêm sơ đồ nguyên lý của mạch thử nghiệm nữa. Có khả năng mạch reset, hay mạch dao động, hoặc các chân cấp nguồn của bạn chưa ổn.

Thân,
E chỉ làm đơn giản như sau thôi ^^:
Ban đầu phần cứng thử nghiệm : cấp nguồn 5V cho pic(11,12,31,32), TA=4Mhz nối trực tiếp vào pin 13,14 nhưng gặp vấn đề như đã nêu.
Sau này có mắc thêm 2 con 12pF giống DSheet cho Thạch Anh nhưng ko thay đổi được gì :(.e ko làm mạch reset, giúp e với :(

namqn
26-12-2009, 09:06 PM
E chỉ làm đơn giản như sau thôi ^^:
Ban đầu phần cứng thử nghiệm : cấp nguồn 5V cho pic(11,12,31,32), TA=4Mhz nối trực tiếp vào pin 13,14 nhưng gặp vấn đề như đã nêu.
Sau này có mắc thêm 2 con 12pF giống DSheet cho Thạch Anh nhưng ko thay đổi được gì :(.e ko làm mạch reset, giúp e với :(
Mạch của bạn đơn giản quá, đến mức nó không thể chạy được.

Quan trọng nhất là chân MCLR phải được đặt logic '1' (tôi thường nối chân MCLR vào VDD, thông qua một điện trở từ 10 k đến 33 k). Khuyên bạn nên dùng giá trị lớn hơn cho hai tụ nối vào thạch anh (22 - 33 pF), giá trị 15 pF trong datasheet chỉ là giá trị khuyến cáo cho thạch anh cụ thể mà họ đã dùng để thử nghiệm.

Thân,

dl988
27-12-2009, 01:01 AM
Mạch của bạn đơn giản quá, đến mức nó không thể chạy được.

Quan trọng nhất là chân MCLR phải được đặt logic '1' (tôi thường nối chân MCLR vào VDD, thông qua một điện trở từ 10 k đến 33 k). Khuyên bạn nên dùng giá trị lớn hơn cho hai tụ nối vào thạch anh (22 - 33 pF), giá trị 15 pF trong datasheet chỉ là giá trị khuyến cáo cho thạch anh cụ thể mà họ đã dùng để thử nghiệm.

Thân,

cám ơn a, e đã mắc thêm R10k kéo MCLR lên VDD,nhưng vẫn vậy, để mai e mua tụ 30pF test lại xem sao.

dl988
27-12-2009, 01:02 AM
đi dạo 4Rum 1 vòng, thấy có vấn đề với Breakboard...hì. E đang test trên BB đó, không biết đó có phải là nguyên nhân ko??? Hì

Mr.Bi
27-12-2009, 05:00 PM
E mới học Pic nên gặp khá nhiều rắc rối, nhờ mọi người chỉ dùm...
- Phần cứng : cấp nguồn cho pic, TA=4Mhz nối trực tiếp vào pin 13,14(vì chưa có tụ 30pF,có thể thay được bằng tụ nào vậy???)
- Lập trình: ban đầu viết nút nhấn không chạy nên viết tạm cái này test thử, có chạy nhưng không chính xác...hic.Đo thử pin RB6 thì vout có 3V à, Led chỉ đỏ không nhấp nháy như trong code...ko hiểu tại sao (Biên dịch bằng CCS C, Dùng IC-Prog để nạp, dùng mạch nạp JDM ở Nhật Tảo).Mô phỏng Protues thì chạy OK :(
Code:
#include<16f877.h>
#fuses nowdt,noprotect,nolvp,hs,noput,nodebug
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x6
#bit b6=portb.6
void main()
{
set_tris_b(0b00000001);
output_b(0);
while(true)
{
b6=1;
delay_ms(1000);
b6=0;
delay_ms(1000);
}
}

TA=4M thì khai báo là XT chứ k phải HS , dùng tụ 22p gắn vào chỗ thạch anh đi u ,chân RST kéo trở 10k lên 5v, để ổn định thì mắc thêm tụ 220u ngay sát chân 11 và 12 hoặc 31 và 32

#include<16f877.h>
#fuses nowdt,noprotect,nolvp,XT,noput,nodebug
#use delay(clock=4000000)

#byte TRISB=0x86;
#bit rb6 =0x06.6
void main()
{
TRISB=0x01;
while(1) {rb6=0;delay_ms(1000);rb6=1;delay_ms(1000);}
}


đơn giản , nhẹ nhàng

xalachxoan
04-01-2010, 10:21 AM
Các bạn thân mến! sẵn đây cho mình hỏi về vấn đề của mình nhé!
Mình có đoạn code viết bằng ccs như sau:

#include <16F887.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)


void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab
set_tris_e(0x00);

output_e(0b111);

}

Phần cứng: Thạch anh 20MHz nối với tụ 33pF, nguồn,mass, chân reset mắc theo hướng dẫn của các bạn. Mình nghĩ phần này không có vấn đề.
Nhưng điện thế chân RE2 chỉ có 2V thôi, trong khi RE1,RE0 thì được 4V.
Lúc đầu 3 chân này hoạt động bình thường, mình sử dụng 3 chân này để cấp dữ liệu cho IC ghi dịch 74595. Sau một thời gian sử dụng tốt thì tình trạng chạy loạn đã xãy ra.
Mình test lại 3 chân RE2,RE1,RE0 thì gặp phải hiện tượng trên.
Chân RE2, khi out mức 1 thì V=2V,mức 0 thì V=0V, để lững thì V=2V.
Các bạn giúp mình nhé!

huynhhai
04-01-2010, 02:55 PM
Ban dl988, Thật sự khi bạn dùng proteus mô phỏng PIC không chính xác bằng thực tế đâu. Tôi đã gặp nhiều trường hợp như vậy. Không biết là bạn có khai báo cho phép và không cho phép nhiệm vụ của từng port chưa, tại vì ở một port có rất nhiều chức năng khác nhau dùng chung , PIC xuất 3V ( tín hiệu có đúng với bạn lập trình không? )