PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 08-07-2011, 12:57 PM   #1
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
Unhappy 74595

các bác cho em hỏi về 74595 được ko
em mới vào nghề nên chẳng biết j cả
giúp em với
em đang làm một mạch hiển thị led 7 thanh gồm 8 led và 2 ic 74595
em dùng pic 16f886
em làm mãi rùi mà nó ko chạy
chán lắm
mong các bác chỉ giáo cho

thay đổi nội dung bởi: thanhtb_89, 08-07-2011 lúc 01:03 PM.
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:03 PM   #2
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
có gì pam vào mail mình mình gửi cho bạn.con này nói chung rất dể sài không khó lắm đâu.
tranvanphat1989@yahoo.com.vn
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:05 PM   #3
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
ko có ai giúp em ah
huuuuu
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:06 PM   #4
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
em cám ơn bác
em đang học cách lập trình bằng ngôn ngữ c
mong bác giáp em vói
và chỉ giùm em chỗ sai
thanks
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:08 PM   #5
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
cu thể là bạn đã đưa dữ liệu ra 595 duọc chưa.bạn đưa code bạn lên thử xem để mọi người còn sửa code giúp bạn
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:10 PM   #6
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
anh phatcddt08a ui
bây giờ anh có online trên yahoo ko
nếu có thì em add nick của anh vào nhá
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:12 PM   #7
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
thế để nick bạn lại đi . mail trên đó cũng là nick mình đó.mình với bạn đồng tuổi thôi cứ kêu bạn là được
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:13 PM   #8
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
vâng
đây là code của em

#include <16F886.h>
#device adc=10

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES PROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOIESO //No Internal External Switch Over mode enabled
#FUSES NOFCMEN //No Fail-safe clock monitor enabled
#FUSES NOLVP //No Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NODEBUG //No Debug mode for ICD
#FUSES WRT //Program memory write protected
#FUSES BORV40 //Brownout reset at 4v

#use delay(clock=4000000)
#byte PORTB = 0x06
#byte TRISB = 0x86

//===============================
//define com
//mant
//===============================

//#define data PIN_B5
//#define
//#define SHIFT_CLK_1 PORTB |= 0b00010000
//#define SHIFT_CLK_0 PORTB &= ~0b00010000
#define SHIFT_DTA_1 PORTB |= 0b00100000
#define SHIFT_DTA_0 PORTB &= ~0b00100000

#define MASK_LED_0 0b00101000
#define MASK_LED_1 0b10101111
#define MASK_LED_2 0b10011000
#define MASK_LED_3 0b10001010
#define MASK_LED_4 0b00001111
#define MASK_LED_5 0b01001010
#define MASK_LED_6 0b01001000
#define MASK_LED_7 0b10101110
#define MASK_LED_8 0b00001000
#define MASK_LED_9 0b00001010
//int16 n;
const unsigned char dta[10] =
{MASK_LED_0,MASK_LED_1,MASK_LED_2,MASK_LED_3,MASK_ LED_4,
MASK_LED_5,MASK_LED_6,MASK_LED_7,MASK_LED_8,MASK_L ED_9};

//===============================
//dinh nghia cac ham
//===============================
void sckc();
void lat();
void dichbit();

//===============================
//tao xung clock
//===============================
void sckc()
{ //PORTB=0b11110111
output_high(PIN_B4);
delay_us(200);
output_low(PIN_B4);
delay_us(200);
}

//===============================
//tao xung latch va hien thi
//===============================
void lat()
{ //PORTB=0b11101111
output_high(PIN_B3);
delay_us(200);
output_low(PIN_B3);
delay_us(200);
}

//===============================
//DICH BIT
//n la so phan tu mang
//i so lan lap dich bit
//===============================
void main()
{
unsigned char mask,i,n;
int8 dk;

mask = 0x80;
for(n=0;n<10;n++)
{ for(i=0;i<8;i++)
{ if( dta[n] & mask ) {SHIFT_DTA_1;}
else {SHIFT_DTA_0;}
sckc();
mask>>=1;
}
dk=0b00001111;
if(dk & mask) {SHIFT_DTA_1;}
else {SHIFT_DTA_0;}
sckc();
mask>>=1;
lat();
delay_ms(2000);
}
}
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:16 PM   #9
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
còn đây là nick của mình
chithanh_pro89
còn đây là mail của mình
chithanhtb
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:22 PM   #10
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
mail của em là chithanhtb@gmail.com
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:32 PM   #11
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
Trích:
Nguyên văn bởi thanhtb_89 View Post
vâng
đây là code của em

#include <16F886.h>
#device adc=10

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES PROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOIESO //No Internal External Switch Over mode enabled
#FUSES NOFCMEN //No Fail-safe clock monitor enabled
#FUSES NOLVP //No Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NODEBUG //No Debug mode for ICD
#FUSES WRT //Program memory write protected
#FUSES BORV40 //Brownout reset at 4v

#use delay(clock=4000000)
#byte PORTB = 0x06
#byte TRISB = 0x86

//===============================
//define com
//mant
//===============================

//#define data PIN_B5
//#define
//#define SHIFT_CLK_1 PORTB |= 0b00010000
//#define SHIFT_CLK_0 PORTB &= ~0b00010000
#define SHIFT_DTA_1 PORTB |= 0b00100000
#define SHIFT_DTA_0 PORTB &= ~0b00100000

#define MASK_LED_0 0b00101000
#define MASK_LED_1 0b10101111
#define MASK_LED_2 0b10011000
#define MASK_LED_3 0b10001010
#define MASK_LED_4 0b00001111
#define MASK_LED_5 0b01001010
#define MASK_LED_6 0b01001000
#define MASK_LED_7 0b10101110
#define MASK_LED_8 0b00001000
#define MASK_LED_9 0b00001010
//int16 n;
const unsigned char dta[10] =
{MASK_LED_0,MASK_LED_1,MASK_LED_2,MASK_LED_3,MASK_ LED_4,
MASK_LED_5,MASK_LED_6,MASK_LED_7,MASK_LED_8,MASK_L ED_9};

//===============================
//dinh nghia cac ham
//===============================
void sckc();
void lat();
void dichbit();

//===============================
//tao xung clock
//===============================
void sckc()
{ //PORTB=0b11110111
output_high(PIN_B4);
delay_us(200);
output_low(PIN_B4);
delay_us(200);
}

//===============================
//tao xung latch va hien thi
//===============================
void lat()
{ //PORTB=0b11101111
output_high(PIN_B3);
delay_us(200);
output_low(PIN_B3);
delay_us(200);
}

//===============================
//DICH BIT
//n la so phan tu mang
//i so lan lap dich bit
//===============================
void main()
{
unsigned char mask,i,n;
int8 dk;

mask = 0x80;
for(n=0;n<10;n++)
{ for(i=0;i<8;i++)
{ if( dta[n] & mask ) {SHIFT_DTA_1;}
else {SHIFT_DTA_0;}
sckc();
mask>>=1;
}
dk=0b00001111;
if(dk & mask) {SHIFT_DTA_1;}
else {SHIFT_DTA_0;}
sckc();
mask>>=1;
lat();
delay_ms(2000);
}
}
ý của bạn là xuất dữ liệu trong mảng ra hết rồi lặp lại. chân b5 chân dữ lệu chân b4 chân clock chân b3 chân chốt.viết code như bạn tốn rất nhiều chu kỳ máy. bạn đưa sơ đồ bạn lên đi mình lúc trước toàn viết kiểu này nhưng thấy truyền bít chậm quá nếu bạn dùng khoảng 16con 595 mắt nối tiếp thì làm cách này e rằng hơi châm. thay hồ dùng lệnh if và dùng thuật toán nhận dạng bít cần đưa vào là 0 hay 1 kiểu này rất chậm.
gợi ý nhé.
int dulieu = 0x01,i,y;
int1 value;
for(i=8;i>=1;i--)
{
value = bit_test(dulieu,i-1);
data = value; // data la chân dử liệu 595
ckl = 0; // chân xung nhip
ckl=1;
chot=0; // chân chốt
chot=1;
}
ở đây chương trình chạy như sau bắt đầu lấy bít 7 dử liệu đưa ra rồi chốt liền ,lần thứ 2 sẽ là 6 và 5 dến 0 cứ thế . còn nếu bạn muốn đưa nguyên byte rồi chốt thì làm như sau:
int dulieu = 0x01,i,y;
int1 value;
for(i=8;i>=1;i--)
{
value = bit_test(dulieu,i-1);
data = value; // data la chân dử liệu 595
ckl = 0; // chân xung nhip
ckl=1;

}
chot=0; // chân chốt
chot=1;
cái lệnh bit_test này tốn rất ít chu kỳ máy so với if
mình thường đưa bít 7 vào trước để dữ liệu ra giống như dữ liệu vào,còn đưa bít 0 ra trước thì dữ liệu sẻ đảo lại. bản thân thanh ghi dịch bên trong 595 la dịch trái.đi ăn cái gì đã đói bụng thế

thay đổi nội dung bởi: phatcddt08a, 08-07-2011 lúc 01:39 PM.
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:39 PM   #12
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
vâng
em gửi toàn bộ mạch in và chuơng trình vào mail của anh rùi
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:40 PM   #13
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
thế nói chung chuong trình của mình có đúng ko bạn
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:44 PM   #14
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
cám ơn bạn nhiều
mình sẽ thay đổi theo cách của bạn
nhưng sao mình nạp chuơng trình mình viết nó lại ko chạy được nhỉ
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2011, 01:51 PM   #15
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
bạn có thể giải thích cho mình cái 0x01,i,y đẻ làm j ko?
và bit_test(dulieu,i-1); để làm gì
ý nghĩa của nó
được ko bạn
giải thích giúp mình với
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam