LED 7 segment không hiển thị dấu chấm

t10000

Trứng gà
tôi làm một mạch hiển thị led 7 đoạn dùng để hiện số mắc theo sơ đồ kèm theo.
Dùng 16F877A, portB từ 0 đến 8 nối các chân a -> p. code chương trình nhw sau:
...
//code cho CCSC ver 4.0

#include <16F877A.h>
#include <def_877A.h>
#device *=16 ADC=10
#FUSES HS, NOPROTECT, NOWDT, NOWRT, NOPUT, NODEBUG, NOBROWNOUT, NOLVP

void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
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);
setup_vref(FALSE);

// TODO: USER CODE!!
TRISB=0X00;
TRISD=0xFF;
while(1)
{
output_low(pin_d0);
output_b(0x00);
}

}
...
kết quả là dấu chấm không thể hiện được
dù là dòng lệnh
output_b(0x00);
hay
output_b(0b00000000);
đều vẫn thế

Xin giúp đỡ dùm, do tự nghiên cứu ở nhà nên không biết hỏi ai.
Xin cảm ơn!
 

Attachments

tungbk

Cố Vấn CLB
Staff member
Vì mỗi con led rơi áp khác nhau nên việc mắc song song có thể dẫn đến có con sáng con không sáng; các led phải phân cực riêng ra bằng các nối thêm 8 trở khoảng 330 vào giữa chân led và Pic ,bỏ con led R_RS 330 chổ anode.
Và con A1015 chỉ có nhiệm vụ đóng ngắt nên không cần có trở cực E,chỉ cần trở cực B khoảng 1K thôi.
Vài góp ý :) !!!
 

t10000

Trứng gà
Cảm ơn bạn tungbk,
Thực ra trong mạch thật mình đã phân áp cho 8 đường ra từ portB đến led như bạn chỉ giáo, mình gắn thêm trở 330 ở a1015 mục đích giảm bớt dòng cho led thôi vì chỉ có phân áp như thế led vẫn sáng quá trong khi không sẵn có trở 470, cũng không quan trọng lắm, khi vẽ lại mạch để gửi lên diễn đàn thì làm biếng nên bỏ qua đi, mình thắc mắc là chẳng hiểu thế nào mà hiển thị 7 đoạn thì ok, song cái dấu chấm thì nó chẳng thèm sáng gì cả, mình đã test thử phần mạch bằng cách nối - cho chân 40 của PIC thì dấu chấm sáng tốt, và chân 40 bảo đảm vãn ok vì nó còn nạp chương trình bằng cổng ICSP trên mạch tốt.
Mình cần cái dấu chấm là vì để điều khiển nó lúc cần thì nhấp nháy, lúc thì sáng hẳn luôn nên nối với portB-8 để điều khiển bằng chương trình.
Chẳng hiểu thế nào nữa bạn à, bạn cố xem lại giúp mình một tý!
 
nếu vậy thì bạn chi còn kiểm tra xem chân B7 của bạn có bị đai không. còn các con trở bạn mắc vào chân của con pic rồi thì 2 con trở ở cực c và e của con a1015 của bạn không cần nữa. vì mấy con kia đã là trở hạn dòng cho LED rồi.
 

t10000

Trứng gà
nếu vậy thì bạn chi còn kiểm tra xem chân B7 của bạn có bị đai không. còn các con trở bạn mắc vào chân của con pic rồi thì 2 con trở ở cực c và e của con a1015 của bạn không cần nữa. vì mấy con kia đã là trở hạn dòng cho LED rồi.
Cảm ơn Phương Tuấn,
chắc chắn pin B7 không chết vì nó còn dùng tốt khi nạp chương trình như mình đã nói ở trên mà, (nó dùng nhận PGD để nạp)
Còn điều gì nữa không nhỉ?
Bây giờ mình sẽ tháo PIC ra gắn vào testboard thử lại cái xem sao!
 

tungbk

Cố Vấn CLB
Staff member
Bạn nối qua PortD hoặc đổi chân 39,40 để xem 7 led với dot có cái nào không sáng không !!! Nếu nó vẫn k sáng dau dot thi do mạch rồi :) .
 

tungbk

Cố Vấn CLB
Staff member
TRISB=0X00;
TRISD=0xFF;
while(1)
{
output_low(pin_d0);
output_b(0x00);
}

Ah mà cho hỏi tí sao lại TRISD = 0xff nhỉ ; không dùng CCS nên không biết ; bạn TRIS vậy rồi dùng output_low(pin_do) nó có tự set chân RD0 là output không ?
 

t10000

Trứng gà
Bạn nối qua PortD hoặc đổi chân 39,40 để xem 7 led với dot có cái nào không sáng không !!! Nếu nó vẫn k sáng dau dot thi do mạch rồi
...
Ah mà cho hỏi tí sao lại TRISD = 0xff nhỉ ; không dùng CCS nên không biết ; bạn TRIS vậy rồi dùng output_low(pin_do) nó có tự set chân RD0 là output không ?
à, lệnh này sai rồi, đáng lẽ là TRISD=0x00 mới phải, chương trình mình dùng TRISA = 0xFF nhận ADC từ pin 2 , trích dẫn nhầm, mình vẫn xuất ra số cho tổ hợp LED7 gồm 4 số đúng yêu cầu, chỉ không ra dấu chấm thôi. Mình làm cái mạch đo nhiệt độ, xuất tốt, nay muốn độ chính xác đến 1 dấu phẩy ấy mà, lập trình thì không trở ngại, nhưng vướng mỗi cái led dot, hihi
Mình sẽ làm theo lời khuyên của bạn, chắc do mạch thôi.

Cám ơn bạn đã trao đổi với mình nhé!
 
Top