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)
-   -   74595 (http://www.picvietnam.com/forum/showthread.php?t=9989)

thanhtb_89 08-07-2011 12:57 PM

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

phatcddt08a 08-07-2011 01:03 PM

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

thanhtb_89 08-07-2011 01:05 PM

ko có ai giúp em ah
huuuuu

thanhtb_89 08-07-2011 01:06 PM

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

phatcddt08a 08-07-2011 01:08 PM

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

thanhtb_89 08-07-2011 01:10 PM

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á

phatcddt08a 08-07-2011 01:12 PM

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

thanhtb_89 08-07-2011 01:13 PM

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 08-07-2011 01:16 PM

còn đây là nick của mình
chithanh_pro89
còn đây là mail của mình
chithanhtb

thanhtb_89 08-07-2011 01:22 PM

mail của em là chithanhtb@gmail.com

phatcddt08a 08-07-2011 01:32 PM

Trích:

Nguyên văn bởi thanhtb_89 (Post 46726)
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ế

thanhtb_89 08-07-2011 01:39 PM

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 08-07-2011 01:40 PM

thế nói chung chuong trình của mình có đúng ko bạn

thanhtb_89 08-07-2011 01:44 PM

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 08-07-2011 01:51 PM

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


Múi giờ GMT. Hiện tại là 12:14 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam