Arduino Serial PORT

รูปภาพ
Arduino Serial PORT       ใน Arduino นั้นจะสามารถติดต่อสื่อสารกับ Computer ผ่าน Serial ที่หลายคนก็รู้เช่ยเดียวกัน ในครั้งนี้ห็จะมาดูกันว่าจะสามารถทำอะไรกลับ Serial ได้บ่าง   คำสั่งแรกที่ต้องใช้ในการเริ่มต้นสือสารคือ การกำหนดความเร็วในการสือสาร ด้วยคำสั่งด้านล่าง จะใส่ไว้ใน Founction setup()  Serial.begin(9600);         นอกจากนี้ถ้าเป็นบอร์ดที่มีหลาย Serial (Arduino Maga2560) ก็จะใช้ การตั้งค่าเป็นดังนี้ Serial1.begin(9600); Serial2.begin(9600);        ก่อนที่จะเริ่มไปส่งค่าหรือรับค่ามาใช้งาน มาดูรายละเอียดของ  Baud Rate กันก่อน  เพื่อดูระยะเวลาในการรับ/ส่งข้อมูลกันก่อนเพราะบางที่ก็จะมีผลต่อโปรแกรมที่เราเขียนขึ้นจาก สูตร         ถ้าใช้ Baud Rate เท่ากลับ 9600 bit/s จะได้ว่า t = 1/9600 t= 0.104 mS         สรุปได้ว่า 1 bit = 0.104 mS ถ้า 1 char จะได้ว่า 0.104 ms*11 bit = 1.144 ms นั้นหมายความว่า ถ้าเราส่งข้อมูลหลายตัวอักษรก็จะใช้เวลาที่นาน   ...

AT24C32 EEPROM and arduino (เสียดายของแถมเลยจับมาใช้ซะ)

AT24C32 EEPROM and arduino
        หลังจากที่ได้ทดลองกับ module RTC มันดันมี IC ติดมาด้วย 1 ตัวคือ AT24C32 เป็น IC ที่ใช้เก็บข้อมูลแบบ EEPROM ที่เชื่อมต่อผ่าน I2C  ขนาดหน่วยความจำภายใน 32kbits ไม่ใช้ bite นะครับ ก็สามมารถเก็บข้อมูลได้ 4kbytes ละครับตัวนี้ 
       สำคัญเลย คือ EEPROM มีจำนวนในการอ่านเขียนที่ีมีขีดจำกัด ควรดู datasheet ไปด้วยนะครับ แต่ถ้าถึงขีดจำกัดแล้ว IC ใช้ไม่ได้เลยหรือไม่ ตอบว่า  ไม่ครับมันจะเสียแค่ Address ตัวนั้นเท่านั้น Address ที่ไม่ได้ใช้งานก็สามารถนำมาใช้งานได้อยู่ครับ
       เราไปดูรายละเอียดต่างๆ กันครับ
ลายวงจรและการต่อ

AT24C32 device addressing (ใช้เชื่อมต่อ)

       ในการตั้งค่าของระบบในมาตรฐาน I2C นั้นจำเป็นจะต้องมีรหัสที่ใช้ในการเชื่อมต่อระหว่าง Master กับ slave โดยรหัสนั้นจะใช้เป็นเลขฐาน16 โดยการตั้งค่า จะใช้บิต 5 – 7 เป็นบิตที่ทำการตั้งค่ารหัส Address นั้นคือ A0 - A2 โดยในการตั้งค่านั้นจะทำการใช้ pull - resister เพื่อให้สถานะทางลอจิกเป็น HIGH หรือ LOW ต่อที่ขา 1(A0), 2(A1) และ 3(A2)  การคิด Address ออกมาเป็นเลขฐานสอง ตั้งตารางด้านล่างนี้ แล้วในการแปลงเป็นเลขฐานสิบหกก็จะคิดโดยการเพิ่ม 0 ไปที่ก่อนรีจีสเตอร์บิตแรก ก็จะได้เป็น 01010111B แล้วแปลงเป็นเลขฐานสิบหก 0x57H แล้วในบิตสุดท้ายเป็นการกกำหนดการเขียนหรืออ่านข้อมูลใน EEPROM นั้น


อ่านและเขียนข้อมูลใน EEPROM



ตัวอย่างที่
  
       เป็นการเลือก Address  และการส่งข้อมูลที่ละ byte วิธีการเลือก Address ที่ทำการเก็บข้อมูลจะอธิบายในภานหลัง  มาดูตัวอย่างแรกกันก่อน

#include <Wire.h>
#define address 0x57

int val = 100;
byte data;
void setup()
 Wire.begin();
 Serial.begin(9600);
 delay(1000);

 //WRITE(เขียน)!!!!*******************************
 Wire.beginTransmission(address);
 Wire.write(0x00);      //First Word Address
 Wire.write(0x00);      //Second Word Address

 Wire.write(0x41);      //Write an 'A'

 delay(10);

 Wire.endTransmission();
 delay(10);

 //READ!!!!*********************************
 Wire.beginTransmission(address);
 Wire.write(0x00);      //First Word Address
 Wire.write(0x00);      //Second Word Address
 Wire.endTransmission();
 delay(10);

 Wire.requestFrom(address, 1);
 delay(10);
 data = Wire.read();
 Serial.write(data);      //Read the data and print to Serial port
 Serial.println();
 delay(10);
}

void loop()
{
}

ตัวอย่างที่ 2 ลำดับการอ่าน

          สามารถอ่านและเขียน EEPROM ในหน่วยความจำได้ไปเรื่อยๆ จนกว่าจะสิ้นสุดขนาด ของหน่วยความจำ 4kbytes และเริ่มอ่านจาก bite แรกจนสุด ตามตัวอย่างข้างล่างนี้

#include <Wire.h>
#define address 0x50
 
const int val = 26;
byte data;
 
void setup()
 Wire.begin();
 Serial.begin(9600);
 delay(1000); 
 
 //WRITE!!!!*******************************
 Serial.println("Writing to EEPROM:");
 Wire.beginTransmission(address);
 Wire.write(0x00);
 Wire.write(0x00);
 
 for(byte i=0; i//Write 26 data bytes
 {
   Wire.write(i+65);    
   Serial.write(i+65);
   Serial.println();
 }
 delay(10);
 Serial.println();
 
 Wire.endTransmission();
 delay(10);
 
 //READ!!!!*********************************
 Serial.println("Reading from EEPROM:");
 Wire.beginTransmission(address);
 Wire.write(0x00);
 Wire.write(0x00);
 Wire.endTransmission();
 delay(10);
 
 Wire.requestFrom(address, val);
 delay(10);
 
 for(byte i=0; i//Read 26 data bytes
 {
   data = Wire.read();
   Serial.write(data);
   Serial.println();
 }
 delay(10);
}
 
void loop()
{
}

ตัวอย่างที่ 3 ลำดับการอ่าน

       จาก code ที่ผ่านมา ยังไม่สามารควบคุมการเขียนและอ่านในตำแหน่งที่ต้องการได้ถ้าเราต้องการที่จะควบคุมการเขียนและอ่านในตำแหน่งที่เราต้องการ ก็แค่กำหนด ดังโค๊ดด้านล่างนี้ 

  Wire.write(0x00); // Matic regitter
  Wire.write(0x00); // Matic regitter 


       ให้เปลี่ยนจาก 0x00, เปลี่ยนเป็นแลขฐานสิบหก ตัวอื่น โดยคิดแบบเมทริก X คูณ Y ดังด่านล่างนี้
A(First, Second)

     จบละครับ เราก็สามารถอ่านและเขียนข้อมูลไปเก็บไวที่ EEROM AT24C32 ของเราได้แล้วหลังจากนี้ก็แล้วแต่ละครับว่าจะนำไปใช้อะไรกัน อ๋อลืมไปตัว Address ของ EEPROM ตัวนี้เขียนได้ ถึง(0x0F,0xFF) ก็จะได้ 4kbytes พอดี


      ถ้าใครมีปัญหาด้านงานออกแบบหรือน้องที่สนใจหาที่ปรึกษาฟรีๆ หรือต้องการเขียน  3D componentต่าง ๆ สามารถ สอบถามได้ทีี่
 Tal. 094-787-1126 
Line ID : saksakkiki
facebook : saksan Momo


ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การโปรแกรม Bootloader ATMEGA2560-16AU (เรื่องวุ้น)

การวัดแรงดันไฟฟ้า AC220V ด้วยหม้อแปลง12VAC / 200 mA

การวัดแรงดันไฟฟ้าด้วย ADC ใน Arduino