ในการกวดวิชานี้เราจะไปติดต่อกับเซ็นเซอร์ FLEX ATMEGA8 ไมโครคอนโทรลเลอร์ ใน ATMEGA8 เราจะใช้คุณสมบัติ 10bit ADC (Analog to Digital Conversion) เพื่อทำงานนี้ ตอนนี้ADC ใน ATMEGAไม่สามารถรับอินพุตมากกว่า + 5V ได้
Flex Sensor คืออะไร?
เซ็นเซอร์ FLEXเป็นตัวแปลงสัญญาณซึ่งการเปลี่ยนแปลงความต้านทานเมื่อรูปร่างของมันมีการเปลี่ยนแปลง ดังแสดงในรูปด้านล่าง
เซ็นเซอร์นี้ใช้เพื่อตรวจจับการเปลี่ยนแปลงของความเป็นเส้นตรง ดังนั้นเมื่อเซ็นเซอร์ FLEX งอความต้านทานจะงออย่างมาก ดังแสดงในรูปด้านล่าง
ตอนนี้สำหรับการแปลงการเปลี่ยนแปลงในความต้านทานต่อการเปลี่ยนแปลงในแรงดันไฟฟ้าที่เราจะไปใช้วงจรไฟฟ้าแรง divider ในเครือข่ายตัวต้านทานนี้เรามีความต้านทานคงที่หนึ่งตัวและความต้านทานตัวแปรอื่น ๆ ดังแสดงในรูปด้านล่าง R1 ที่นี่คือความต้านทานคงที่และ R2 คือเซ็นเซอร์ FLEX ซึ่งทำหน้าที่เป็นตัวต้านทาน จุดกึ่งกลางของสาขาถูกนำไปวัด เมื่อความต้านทาน R2 เปลี่ยนไป Vout จะเปลี่ยนไปตามแนวเส้นตรง ด้วยเหตุนี้เราจึงมีแรงดันไฟฟ้าซึ่งเปลี่ยนไปตามความเป็นเส้นตรง
ตอนนี้สิ่งสำคัญที่ควรทราบก็คืออินพุตที่คอนโทรลเลอร์สำหรับการแปลง ADC นั้นต่ำถึง 50µAmp ผลการโหลดของตัวแบ่งแรงดันตามความต้านทานนี้มีความสำคัญเนื่องจากกระแสที่ดึงมาจาก Vout ของตัวแบ่งแรงดันจะเพิ่มเปอร์เซ็นต์ความผิดพลาดในตอนนี้เราไม่จำเป็นต้องกังวลเกี่ยวกับผลการโหลด
เราจะใช้ตัวต้านทานสองตัวและสร้างวงจรแบ่งเพื่อให้ Vin 25Volt เราได้ 5Volt Vout ดังนั้นสิ่งที่เราต้องทำคือคูณค่า Vout ด้วย“ 5” ในโปรแกรมเพื่อให้ได้แรงดันไฟฟ้าเข้าจริง
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์: ATMEGA8, แหล่งจ่ายไฟ (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), ตัวเก็บประจุ 100uF, ตัวเก็บประจุ 100nF (5 ชิ้น), ตัวต้านทาน100KΩ
ซอฟต์แวร์: Atmel studio 6.1, progisp หรือ flash magic
แผนภาพวงจรและคำอธิบายการทำงาน
ในวงจร PORTD ของATMEGA8เชื่อมต่อกับพอร์ตข้อมูล LCD ในจอ LCD 16x2 จะมีหมุดทั้งหมด 16 พินหากมีไฟด้านหลังหากไม่มีไฟส่องหลังจะมี 14 พิน หนึ่งสามารถจ่ายไฟหรือปล่อยหมุดไฟด้านหลัง ตอนนี้ใน 14 ขามี 8 ข้อมูลหมุด (7-14 หรือ D0-D7) 2 หมุดแหล่งจ่ายไฟ (1 & 2 หรือ VSS & VDD หรือ GND & + 5V) 3 ถพินสำหรับการควบคุมความคมชัด (วีควบคุมวิธีการหนาตัวละครที่ควรจะเป็น แสดง) และ 3 พินควบคุม (RS & RW & E)
ในวงจรคุณสามารถสังเกตได้ว่าฉันใช้หมุดควบคุมเพียงสองตัว ไม่ได้ใช้บิตคอนทราสต์และ READ / WRITE บ่อยนักดังนั้นจึงสามารถย่อลงมาที่พื้นได้ ทำให้ LCD มีคอนทราสต์สูงสุดและโหมดอ่าน เราต้องควบคุมพิน ENABLE และ RS เพื่อส่งอักขระและข้อมูลตามนั้น
การเชื่อมต่อ LCD กับ ATmega8 มีดังต่อไปนี้:
PIN1 หรือ VSS กับกราวด์
PIN2 หรือ VDD หรือ VCC ถึง + 5v
PIN3 หรือ VEE to Ground (ให้ความเปรียบต่างสูงสุดที่ดีที่สุดสำหรับผู้เริ่มต้น)
PIN4 หรือ RS (Register Selection) ถึง PB0 ของ uC
PIN5 หรือ RW (อ่าน / เขียน) ไปที่กราวด์ (ทำให้ LCD อยู่ในโหมดอ่านทำให้การสื่อสารสำหรับผู้ใช้ง่ายขึ้น)
PIN6 หรือ E (เปิดใช้งาน) ถึง PB1 ของ uC
PIN7 หรือ D0 ถึง PD0 ของ uC
PIN8 หรือ D1 ถึง PD1 ของ uC
PIN9 หรือ D2 ถึง PD2 ของ uC
PIN10 หรือ D3 ถึง PD3 ของ uC
PIN11 หรือ D4 ถึง D4 ของ uC
PIN12 หรือ D5 ถึง PD5 ของ uC
PIN13 หรือ D6 ถึง PD6 ของ uC
PIN14 หรือ D7 ถึง PD7 ของ uC
ในวงจรคุณจะเห็นว่าเราใช้การสื่อสาร 8 บิต (D0-D7) แต่นี่ไม่ใช่ภาคบังคับเราสามารถใช้การสื่อสาร 4 บิต (D4-D7) ได้ แต่ด้วยโปรแกรมการสื่อสาร 4 บิตจะซับซ้อนเล็กน้อยดังนั้นเราจึงใช้ 8 บิต การสื่อสาร. (ตรวจสอบบทช่วยสอนนี้ด้วย: 16x2 LCD เชื่อมต่อกับไมโครคอนโทรลเลอร์ AVR)
ดังนั้นจากการสังเกตจากตารางด้านบนเรากำลังเชื่อมต่อ LCD 10 พินเข้ากับคอนโทรลเลอร์ซึ่ง 8 พินเป็นพินข้อมูลและ 2 พินสำหรับควบคุม
แรงดันไฟฟ้าทั่ว R2 ไม่เป็นเส้นตรงอย่างสมบูรณ์ มันจะมีเสียงดัง ในการกรองตัวเก็บประจุสัญญาณรบกวนจะถูกวางไว้บนตัวต้านทานแต่ละตัวในวงจรแบ่งดังแสดงในรูป
หม้อ 1K คือการปรับความแม่นยำของ ADC ตอนนี้ขอหารือเกี่ยวกับ ADC ของ ATMEGA8
ใน ATMEGA8 เราสามารถให้อินพุตแบบอะนาล็อกไปยังช่องใดก็ได้ของ PORTC สี่ช่องไม่สำคัญว่าเราจะเลือกช่องใดเหมือนกันทั้งหมดเราจะเลือกช่อง 0 หรือ PIN0 ของ PORTC
ใน ATMEGA8 ADC มีความละเอียด 10 บิตดังนั้นคอนโทรลเลอร์สามารถตรวจจับการเปลี่ยนแปลงขั้นต่ำของ Vref / 2 ^ 10 ได้ดังนั้นหากแรงดันอ้างอิงคือ 5V เราจะได้รับการเพิ่มเอาต์พุตดิจิตอลทุกๆ 5/2 ^ 10 = 5mV. ดังนั้นสำหรับทุกๆ 5mV ที่เพิ่มขึ้นในอินพุตเราจะเพิ่มขึ้นหนึ่งครั้งที่เอาต์พุตดิจิตอล
ตอนนี้เราต้องตั้งค่าการลงทะเบียนของ ADCตามเงื่อนไขต่อไปนี้
1. ก่อนอื่นเราต้องเปิดใช้งานคุณสมบัติ ADC ใน ADC
2. ที่นี่จะได้รับแรงดันไฟฟ้าอินพุตสูงสุดสำหรับการแปลง ADC คือ + 5V ดังนั้นเราจึงสามารถตั้งค่าสูงสุดหรือการอ้างอิงของ ADC เป็น 5V
3. คอนโทรลเลอร์มีคุณสมบัติการแปลงทริกเกอร์ซึ่งหมายความว่าการแปลง ADC จะเกิดขึ้นหลังจากทริกเกอร์ภายนอกเท่านั้นเนื่องจากเราไม่ต้องการให้เราต้องตั้งค่าการลงทะเบียนเพื่อให้ ADC ทำงานในโหมดการทำงานฟรีอย่างต่อเนื่อง
4. สำหรับ ADC ใด ๆ ความถี่ของการแปลง (ค่าอนาล็อกเป็นค่าดิจิตอล) และความแม่นยำของเอาต์พุตดิจิตอลจะแปรผกผัน ดังนั้นเพื่อความแม่นยำที่ดีขึ้นของเอาต์พุตดิจิตอลเราต้องเลือกความถี่ที่น้อยกว่า สำหรับนาฬิกา ADC ปกติเรากำลังตั้งค่าการขายล่วงหน้าของ ADC เป็นค่าสูงสุด (2) เนื่องจากเราใช้นาฬิกาภายใน 1MHZ นาฬิกาของ ADC จะเป็น (1000000/2)
นี่เป็นเพียงสี่สิ่งที่เราต้องรู้เพื่อเริ่มต้นใช้งาน ADC
คุณสมบัติทั้งสี่ประการข้างต้นถูกกำหนดโดยการลงทะเบียนสองรายการ:
RED (ADEN): ต้องตั้งค่าบิตนี้เพื่อเปิดใช้งานคุณลักษณะ ADC ของ ATMEGA
BLUE (REFS1, REFS0): บิตทั้งสองนี้ใช้เพื่อกำหนดแรงดันอ้างอิง (หรือแรงดันไฟฟ้าขาเข้าสูงสุดที่เราจะให้) เนื่องจากเราต้องการมีแรงดันอ้างอิง 5V จึงควรกำหนด REFS0 ตามตาราง
สีเหลือง (ADFR): ต้องตั้งค่าบิตนี้เพื่อให้ ADC ทำงานอย่างต่อเนื่อง (โหมดการทำงานฟรี)
PINK (MUX0-MUX3): สี่บิตนี้ใช้สำหรับบอกช่องสัญญาณเข้า เนื่องจากเราจะใช้ ADC0 หรือ PIN0 เราจึงไม่จำเป็นต้องตั้งค่าบิตใด ๆ ตามตาราง
BROWN (ADPS0-ADPS2): บิตทั้งสามนี้ใช้สำหรับตั้งค่า prescalar สำหรับ ADC เนื่องจากเราใช้ prescalar เป็น 2 เราจึงต้องตั้งค่าหนึ่งบิต
DARK GREEN (ADSC): บิตนี้ตั้งค่าสำหรับ ADC เพื่อเริ่มการแปลง บิตนี้สามารถปิดใช้งานได้ในโปรแกรมเมื่อเราต้องการหยุดการแปลง
เซ็นเซอร์ FLEX ที่เชื่อมต่อกับ ATmega8อธิบายทีละขั้นตอนในรหัส C ที่ระบุด้านล่าง