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)
đẩy dữ liệu ra 595
Collapse
X
-
Tags: None
-
đâ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
-
Em thấy như thế này, khi xuất xung ra:
SHCP=0;
delay_us(1);
SHCP=1;
không cần phải có delay, em đã thử nghiệm rồi
SHCP=0;
SHCP=1;
Và 595 hoạt động bình thường, với tần số hoạt động của ATMEGA16L la 4Mhz
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
-
-
Ha ha. đấy là hiện tại thôi, tương lai thì phải khác chứ...Hô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 mèomướp1. Tìm hiểu đc thì càng tốt, bận thì thôi. Ko cần quá quan trọng
2. Số tự động cho đơn giản, kiểu như đi xe ga ấy ạ
3. Học lý thuyết tử tế ok
4.ok
5.có. đủ số km, tgian cầm lái là đc
6.đi ăn tập thể,...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 16:34 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnE nhớ bác Vivanpham làm bên điện tử y sinh, có lần đó cái sơ đồ máy chụp x quang sao có mấy con thryristor làm gì mà ko ai trả lới đúng cả
...
-
Channel: Tâm tình dân kỹ thuật
07-08-2026, 09:17 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnBác kiểm tra lại đường mạch, mối hàn xem có bị hở hoặc dẫn không tốt không?
Thay cầu diode lớn hơn càng tốt không vấn đề gì cả....-
Channel: Điện thanh
07-08-2026, 09:12 -
-
bởi LantheChào bạn.
Trục đầu ra của hộp số hành tinh xoắn ốc được kết nối với mặt bích của khách hàng thông qua một trục răng trong. Sau chưa đầy sáu tháng hoạt động, nó phát ra tiếng kêu lách cách và độ rơ lớn đáng báo động.
Việc...-
Channel: Thiết bị điện tử cá nhân
06-08-2026, 13:05 -
-
bởi ittcChào các anh em nhé, mình dự định sắp tới sẽ đi học lái xe Ôtô, thi lấy bằng lái. Cụ thể mình sẽ học và thi lấy giấy phép lái xe hạng B. Thật sự mình là người chưa có kiến thức hiểu biết gì về Ôtô cả ? tất nhiên mình sẽ phải...-
Channel: Tâm tình dân kỹ thuật
-
-
Trả lời cho Amply bị rò DC 22 voltbởi trung30000Theo sự hướng dẫn của bác, sau khi em kiểm tra tầng Vi sai sử dụng cặp c1815, tiếp đến là 1 con a1013, và cặp thúc sử dụng mje304g và mje305g, em đã tiến hành thay cặp Vi sai c1815 sau đó mở máy lên đo ngõ công suất DC 0,2V hai giây sau máy đo...-
Channel: Điện thanh
05-08-2026, 20:09 -

Comment