Home work
งานที่ 10
ไมโครคอนโทรลเลอร์ เป็นอุปกรณ์ชิปไอซีพิเศษชนิดหนึ่ง ที่เราสามารถเขียนโปรแกรม
เพื่อควบคุมการทำงานตามที่ต้องการได้
-หน่วยความจำชั่วคราว (RAM)
-หน่วยความจำถาวร (ROM)
-พอร์ตอินพุต,เอาท์พุต
เพื่อควบคุมการทำงานตามที่ต้องการได้
ส่วนประกอบ
-หน่วยประมวลผล-หน่วยความจำชั่วคราว (RAM)
-หน่วยความจำถาวร (ROM)
-พอร์ตอินพุต,เอาท์พุต
การปรยุกต์ใช้ Microcontroller กับ arduino
การควบคุมการทำงานไอซี 74HC595
การควบคุมการส่งข้อมูลเพื่อเปลี่ยนแปลง Q0 - Q7 มีขั้นตอนดังนี้
Step 1 เซ็ตให้ขา ST_CP มีสถานะเป็น LOW
Step 2 เซ็ตให้ขา DS เป็นข้อมูลบิตนั้นๆ
Step 3 เซ็ตให้ขา SH_CP มีสถานะเป็น HIGH
Step 4 หน่วงเวลา
Step 5 เซ็ตให้ขา SH_CP มีสถานะเป็น LOW
Step 6 หน่วงเวลา
Step 7 เริ่มกลับไปทำ Step 2 จนครบหมดทุกบิต
Step 8 เซ็ตให้ขา ST_CP มีสถานะเป็น HIGH
การใช้งานจริงกับหลอด LED
Arduino จะมีฟังก์ชั่น shiftOut() สำเร็จรูปอยู่แล้ว ทำให้สามารถข้ามขั้นตอนตั้งแต่ Step 2 ไปจนถึง Step 7 ได้เลย ทำให้ส่วนโค้ดจริงๆที่ใช้สำหรับส่งข้อมูลไปให้ไอซีมีแค่ส่วนนี้
void DataOut(byte data) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data);
digitalWrite(latchPin, HIGH);
}
ตัวอย่างโค้ดด้านล่างนี้เป็นโค้ดไฟวิ่งจากขวาไปซ้ายครั้งละดวง โดยใช้ชนิดตัวแปรเป็น byte แล้วเลื่อนบิตไปเรื่อยๆ
int latchPin = 8; // ST_CP
int clockPin = 12; // SH_CP
int dataPin = 11; // DS
byte tmp;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(latchPin, HIGH);
}
void loop() {
if (tmp==0||tmp==0x80) tmp=0x01;
else tmp=tmp<<1;
DataOut(tmp);
delay(500);
}
void DataOut(byte data) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data);
digitalWrite(latchPin, HIGH);
}
การควบคุมการส่งข้อมูลเพื่อเปลี่ยนแปลง Q0 - Q7 มีขั้นตอนดังนี้
Step 1 เซ็ตให้ขา ST_CP มีสถานะเป็น LOW
Step 2 เซ็ตให้ขา DS เป็นข้อมูลบิตนั้นๆ
Step 3 เซ็ตให้ขา SH_CP มีสถานะเป็น HIGH
Step 4 หน่วงเวลา
Step 5 เซ็ตให้ขา SH_CP มีสถานะเป็น LOW
Step 6 หน่วงเวลา
Step 7 เริ่มกลับไปทำ Step 2 จนครบหมดทุกบิต
Step 8 เซ็ตให้ขา ST_CP มีสถานะเป็น HIGH
การใช้งานจริงกับหลอด LED
Arduino จะมีฟังก์ชั่น shiftOut() สำเร็จรูปอยู่แล้ว ทำให้สามารถข้ามขั้นตอนตั้งแต่ Step 2 ไปจนถึง Step 7 ได้เลย ทำให้ส่วนโค้ดจริงๆที่ใช้สำหรับส่งข้อมูลไปให้ไอซีมีแค่ส่วนนี้
void DataOut(byte data) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data);
digitalWrite(latchPin, HIGH);
}
ตัวอย่างโค้ดด้านล่างนี้เป็นโค้ดไฟวิ่งจากขวาไปซ้ายครั้งละดวง โดยใช้ชนิดตัวแปรเป็น byte แล้วเลื่อนบิตไปเรื่อยๆ
int latchPin = 8; // ST_CP
int clockPin = 12; // SH_CP
int dataPin = 11; // DS
byte tmp;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(latchPin, HIGH);
}
void loop() {
if (tmp==0||tmp==0x80) tmp=0x01;
else tmp=tmp<<1;
DataOut(tmp);
delay(500);
}
void DataOut(byte data) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data);
digitalWrite(latchPin, HIGH);
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น