Hôm nay mình giới thiệu các bạn IC mở rộng đầu vào số tốc độ cao ,74HC165 .
Các chân dữ liệu đầu vào .
Chân Số 1 Load hoặc lựa chọn .
Chân số 2 CLK xung clock
Chân số 9:đầu ra dữ liệu ,Là đầu vào vi điều khiển
Chân 10 :chân nối tiếp IC tiếp theo
Nguyên lý hoạt động :
giản đồ xung như hình vẽ sau .
Chương trình STM32F1,F4,H7 :
#define DATA_74HC165 PA_7 // chan nhan du lieu noi tiep P26
#define LOAD_74HC165 PA_4 // pin load data P48
#define CLK_74HC165 PA_5 // pin clock P47
// #define DATA_74HC165 37 // chan nhan du lieu noi tiep
//#define LOAD_74HC165 45 // pin load data
//#define CLK_74HC165 46 // pin clock
unsigned char byte_2=0,byte_1=0;
unsigned char byte_3=0,byte_4=0;
long int cnt=0;
unsigned char i1;
unsigned char temp = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(CLK_74HC165, OUTPUT);
pinMode(LOAD_74HC165,OUTPUT);
pinMode(DATA_74HC165,INPUT);
}
void loop() {
// digitalWrite(CLK_74HC165,LOW); digitalWrite(LOAD_74HC165,LOW); delay(1000);digitalWrite(CLK_74HC165, HIGH); digitalWrite(LOAD_74HC165, HIGH);delay(1000);
read_74165();
if(++cnt>10) { cnt=0;Serial.println(byte_1);}
// delay(100);
// Serial.println(byte_2);
// Serial.println(byte_3);
// put your main code here, to run repeatedly:
// digitalWrite(CLK_74HC165, HIGH); digitalWrite(LOAD_74HC165, HIGH); digitalWrite(DATA_74HC165, HIGH);delay(1000);
// digitalWrite(CLK_74HC165, LOW); digitalWrite(LOAD_74HC165, LOW); digitalWrite(DATA_74HC165, LOW);delay(1000);
//read_74165();
//printf("SPI:_CH1:%d_CH2:%d_CH3:%d\n\r",byte_1,byte_2,byte_3,byte_4);
// delay(10);
}
unsigned char Read_74HC165(void)
{
unsigned char i,data;
long int cnt_time=0;
// LOAD_74HC165 = 0; // load data
// LOAD_74HC165 = 1;
data = 0;
// digitalWrite(CLK_74HC165, HIGH); digitalWrite(CLK_74HC165,LOW);
for( i=8;i>=1;i-- )
{
digitalWrite(CLK_74HC165,LOW);digitalWrite(CLK_74HC165, HIGH);
data = data << 1;
if( digitalRead(DATA_74HC165) == 0)
{
data |= 0x01 ;
}
// digitalWrite(CLK_74HC165,LOW);digitalWrite(CLK_74HC165, HIGH);
// delay(1);
// delay(10);
//
};
return(data);
}
void read_74165(void)
{
// byte_3 = Read_74HC165(); // Doc U4
// byte_2 = Read_74HC165(); // Doc U3
byte_1 = Read_74HC165(); // doc U1
digitalWrite(LOAD_74HC165,LOW); digitalWrite(LOAD_74HC165, HIGH);
}
Để ổn định các bạn tham khảo thêm FPGA Có sẵn 74HC165
Cảm ơn các bạn đã ghé thăm shop