Em muốn đẩy 4 Byte dữ liệu ra cho 4 chú 595 thì làm thế nào. Em đang dùng CODEversion AVR, các bac giúp em với.(Chú ý em đã hiểu rõ hoạt động của 595)
Thông báo
Collapse
No announcement yet.
đẩy dữ liệu ra 595
Collapse
X
-
đây là chương trình em viết, nó hơi lộn xộn chút.
while (1)
{
z++;y++;
// đành phải dùng thanh ghi portb làm thanh ghi đệm
PORTB=x;
x=t;
// lấy 1 bit dữ liệu đưa ra chân SDA
PORTD.0=PORTB.7;
// tạo một xung đến chân SCL
PORTD.1=1;
delay_ms(100);
PORTD.1=0; // dịch bit
x<<=y;
delay_us(10);
if (z==8){t=0b11111001;
y=0;}
if (z==16){t=0b10100100;
y=0;}
if (z==24){t=0b10110000;
y=0;}
if (z==33){
while (1){};}
// Place your code here
};
}Last edited by mrcuongcon; 19-12-2007, 10:21.
-
Đã hướng dẫn bạn ở trong nàyNguyên văn bởi mrcuongcon Xem bài viếtEm muốn đẩy 4 Byte dữ liệu ra cho 4 chú 595 thì làm thế nào. Em đang dùng CODEversion AVR, các bac giúp em với.(Chú ý em đã hiểu rõ hoạt động của 595)
http://dientuvietnam.net/forums/showthread.php?t=9310
email:mahaco@fpt.vn
Comment
-
//khai báo các chân
#define SHCP PORTB.0
#define STCP PORTB.1
#define DS PORTB.2
void send595(unsigned char byte1,unsigned char byte2,unsigned char byte3,unsigned char byte4)
{
unsigned char i;
unsigned int k;
//send byte thu 1
k=128;//send bit cao nhất đầu tiên.
for(i=0;i<16;i++)
{
if((byte1 & k)==k)
DS=1;//neu bit la 1 thi send 1 ra chan DS
else
DS=0;//Nguoc lai send 0
SHCP=0; //
delay_us(1); //
SHCP=1; //
delay_us(1); // các tín hiệu xung nhịp để 595 dịch giá trị ra ngõ ra
STCP=1; //
delay_us(1); //
STCP=0; //
delay_us(1); //các tín hiệu để ngắt việc gửi bít trước và bắt đầu gửi bít tiếp theo.
k >>= 1; //chuẩn bị cho bít tiếp theo
}
//send byte thu 2
k=128;
for(i=0;i<16;i++)
{
if((byte2 & k)==k)
DS=1;
else
DS=0;
SHCP=0;
delay_us(1);
SHCP=1;
delay_us(1);
STCP=1;
delay_us(1);
STCP=0;
delay_us(1);
k >>= 1;
}
//send byte thu 3
k=128;
for(i=0;i<16;i++)
{
if((byte3 & k)==k)
DS=1;
else
DS=0;
SHCP=0;
delay_us(1);
SHCP=1;
delay_us(1);
STCP=1;
delay_us(1);
STCP=0;
delay_us(1);
k >>= 1;
}
//send byte thu 4
k=128;
for(i=0;i<16;i++)
{
if((byte4 & k)==k)
DS=1;
else
DS=0;
SHCP=0;
delay_us(1);
SHCP=1;
delay_us(1);
STCP=1;
delay_us(1);
STCP=0;
delay_us(1);
k >>= 1;
}
}
Ban co the tim cach rut gon chuong trinh nay hon.
Comment
-
đây là chương trình em đã viết gọn lại:gửi 1 byte dữ liệu ra 595
dữ liệu là PORTD.0, clock là PORTD.1
k=128;
data=0x0f;// 1 byte dữ liệu cần gửi
for(i=0;i<9;i++)
{
if ((data & k)==k) PORTD.0=1;
else PORTD.0=0;
PORTD.1=0;
PORTD.1=1;
k>>= 1;
}Last edited by mrcuongcon; 23-12-2007, 11:31.
Comment
-
Cậu nên dùng marco của C để định nghĩa các đường kích cho dễ đọcNguyên văn bởi mrcuongcon Xem bài viếtđây là chương trình em đã viết gọn lại:gửi 1 byte dữ liệu ra 595
dữ liệu là PORTD.0, clock là PORTD.1
k=128;
data=0x0f;// 1 byte dữ liệu cần gửi
for(i=0;i<9;i++)
{
if ((data & k)==k) PORTD.0=1;
else PORTD.0=0;
PORTD.1=0;
PORTD.1=1;
k>>= 1;
}
Ví dụ
nếu PORTD.1 là đường latch thì cậu định nghĩa như vậy thì người khác khi nhìn code của cậu viết sẽ có thể sửa lỗi ngay mà không cần phải dò từ đầu chương trình
#define LATCH PORTD.1
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
//chang can delay gi het dau.
#define serin PORTB.5
#define clk PORTB.6
#define sclk PORTB.7
void spi(unsigned char _data)
{
unsigned char i;
for(i=0;i<8;i++)
{
serin=(_data>>i)&0x01;
clk=0;
clk=1;
}
sclk=0;
sclk=1;
}Cty TNHH Cơ Điện tử Hiệp Phát.
------------------------------------------
Trần Hoàng Giang
11-04-1985
Mobil: 0905 438 533
Comment
-
Em là thành viên mới tinh, vừa "chào" diễn đàn 10 phút
Em thấy cách giải quyết của bác irf540 là chuẩn nhất
xin góp ý thêm: Fclock của 595 Max = 20MHz nên cần có thêm trễ đối với các AVR dùng tần số làm việc lớn hơn 20MHz
Mong các tiền bối chỉ giáoHôm nay trời nắng chang chang.
Mèo con đi học chẳng mang thứ gì.
Chỉ mang một cái bút chì.
Và mang một mẩu bánh mì con con.
Comment
-
hay gì mà hayNguyên văn bởi traihole Xem bài viếtthe nay hay hon nhieu
sbit Data = P2^2;
sbit Clock = P2^0;
sbit Strobe = P2^4;
void Dieukhien(unsigned char input){
unsigned char i;
Clock = 0;
for(i=0;i<8;i++){
if(input&0x01) Data = 1;
else Data = 0;
input>>=1;
Clock = 1;
Clock = 0;
}
}
riêng mấy cái lệnh IF và ELSE đã thấy thừa thải rồi chớ đừng nói là hay nhât
một bài toán có rất nhiều cách giải quyết nhưng muốn tối ưu nhất là cả vấn đề.soure của tui tuy không hay nhất nhưng chắc là xử lý nhanh hơn đoạn code của bác.
#define serin PORTB.5
#define clk PORTB.6
#define sclk PORTB.7
void spi(unsigned char _data)
{
unsigned char i;
for(i=0;i<8;i++)
{
serin=(_data>>i)&0x01;
clk=0;
clk=1;
}
sclk=0;
sclk=1;
}Cty TNHH Cơ Điện tử Hiệp Phát.
------------------------------------------
Trần Hoàng Giang
11-04-1985
Mobil: 0905 438 533
Comment
Bài viết mới nhất
Collapse
-
bởi Abril9Chào mọi người, động cơ bước có hộp số (https://www.oyostepper.es/category-2...eductores.html) trên thiết bị của tôi đã được sử dụng khoảng sáu tháng. Gần đây, tôi nhận thấy dầu rò rỉ từ trục đầu ra. Mỡ bôi trơn đã bị chảy và nhỏ giọt...
-
Channel: Các hệ thống tự động hóa khác
Hôm qua, 13:26 -
-
bởi AbirChào mọi người, gần đây tôi có một ý tưởng mới.
Tôi muốn nâng cấp thiết bị của mình để tăng tốc độ, vì vậy tôi đã thay đổi nguồn cấp cho mạch điều khiển từ 24V lên 48V. Động cơ vẫn giữ nguyên và dòng điện định...-
Channel: Điện tử công nghiệp
Hôm qua, 09:49 -
-
bởi nguyendinhvanCó một chi tiết sai cơ bản trong kỹ thuật điện tử....
-
Channel: Tâm tình dân kỹ thuật
26-03-2026, 19:31 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Bài hát mới, nhạc Phật: Về Giữa Chiêm Bao, sáng tác: Hoàng Đình Thường.
[Verse 1] Nhân gian bao thay đổi
ĐỜI là giấc CHIÊM BAO
Người mê lầm tranh đấu
KHỔ ĐAU mãi LUÂN HỒI.
VÔ THƯỜNG nào ai thấu
THAM vơ...-
Channel: Tâm tình dân kỹ thuật
25-03-2026, 19:01 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi davidcopyBạn muốn hỏi nguyên lý làm việc của mạch nào...
-
Channel: Hỗ trợ học tập
24-03-2026, 22:50 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi N_Tu_Hoc_HoiBạn cần sơ đồ mạch ổn áp bao nhiêu Volt, Nếu giống anh bạn guiwr có khả năng ổn áp dùng iC họ 78XX, 79XX. Những mạch này bạn tim kiếm trên google sẽ thấy!!
-
Channel: Hỗ trợ học tập
23-03-2026, 02:32 -
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:03 -

Comment