- ส่วนประกอบที่จำเป็นและการตั้งค่าฮาร์ดแวร์
- Nuvoton N76E003 แผนภาพวงจรเพื่ออ่านแรงดันไฟฟ้าแบบอนาล็อก
- ข้อมูลเกี่ยวกับ GPIO และ Analog Pins ใน N76E003
- ข้อมูลเกี่ยวกับ ADC Peripheral ใน N76E003
- การเขียนโปรแกรม N76E003 สำหรับ ADC
- กะพริบรหัสและเอาต์พุต
ตัวแปลงอนาล็อกเป็นดิจิตอล (ADC) เป็นคุณลักษณะฮาร์ดแวร์ที่ใช้มากที่สุดในไมโครคอนโทรลเลอร์ ใช้แรงดันไฟฟ้าอนาล็อกและแปลงเป็นค่าดิจิตอล เนื่องจากไมโครคอนโทรลเลอร์เป็นอุปกรณ์ดิจิทัลและทำงานร่วมกับเลขฐานสอง 1 และ 0 จึงไม่สามารถประมวลผลข้อมูลอนาล็อกได้โดยตรง ดังนั้น ADC จึงถูกใช้เพื่อรับแรงดันไฟฟ้าแบบอะนาล็อกและแปลงเป็นค่าดิจิทัลที่เทียบเท่าซึ่งไมโครคอนโทรลเลอร์สามารถเข้าใจได้ หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับตัวแปลงอนาล็อกเป็นดิจิตอล (ADC) คุณสามารถตรวจสอบบทความที่ลิงก์
มีเซ็นเซอร์ต่างๆที่มีอยู่ในอุปกรณ์อิเล็กทรอนิกส์ที่ให้เอาต์พุตแบบอะนาล็อกเช่นเซ็นเซอร์ก๊าซ MQ เซ็นเซอร์ ADXL335 Accelerometer เป็นต้นดังนั้นการใช้ตัวแปลงอนาล็อกเป็นดิจิตอลเซ็นเซอร์เหล่านี้จึงสามารถเชื่อมต่อกับหน่วยไมโครคอนโทรลเลอร์ได้ คุณยังสามารถดูบทช่วยสอนอื่น ๆ ที่ระบุไว้ด้านล่างสำหรับการใช้ ADC กับไมโครคอนโทรลเลอร์อื่น ๆ
- วิธีใช้ ADC ใน Arduino Uno
- การเชื่อมต่อ ADC0808 กับไมโครคอนโทรลเลอร์ 8051
- การใช้โมดูล ADC ของไมโครคอนโทรลเลอร์ PIC
- การสอน Raspberry Pi ADC
- วิธีใช้ ADC ใน MSP430G2 - การวัดแรงดันอนาล็อก
- วิธีใช้ ADC ใน STM32F103C8
ในบทช่วยสอนนี้เราจะใช้อุปกรณ์ต่อพ่วง ADC ในตัวของหน่วยไมโครคอนโทรลเลอร์ N76E003ดังนั้นลองประเมินว่าเราต้องการการตั้งค่าฮาร์ดแวร์ประเภทใดสำหรับแอปพลิเคชันนี้
ส่วนประกอบที่จำเป็นและการตั้งค่าฮาร์ดแวร์
ในการใช้ADC บน N76E003เราจะใช้ตัวแบ่งแรงดันไฟฟ้าโดยใช้โพเทนชิออมิเตอร์และอ่านแรงดันไฟฟ้าตั้งแต่ 0V-5.0V แรงดันไฟฟ้าจะแสดงใน LCD 16x2 Character หากคุณยังใหม่กับ LCD และ N76E003 คุณสามารถตรวจสอบวิธีการเชื่อมต่อ LCD กับ Nuvoton N76E003 ได้ ดังนั้นองค์ประกอบหลักที่จำเป็นสำหรับโปรเจ็กต์นี้คือ 16x2 Character LCD สำหรับโครงการนี้เราจะใช้ส่วนประกอบด้านล่าง -
- ตัวอักษร LCD 16x2
- ตัวต้านทาน 1k
- โพเทนชิออมิเตอร์ 50k หรือหม้อตัดแต่ง
- สายไฟไม่กี่เส้น
- สายเชื่อมต่อไม่กี่สาย
- เขียงหั่นขนม
ไม่ต้องพูดถึงนอกเหนือจากองค์ประกอบข้างต้นเราต้องN76E003 ไมโครคอนโทรลเลอร์คณะกรรมการพัฒนาการชั่นเช่นเดียวกับNu-Link โปรแกรมเมอร์ จำเป็นต้องใช้ชุดจ่ายไฟ 5V เพิ่มเติมเนื่องจาก LCD ดึงกระแสไฟฟ้าเพียงพอที่โปรแกรมเมอร์ไม่สามารถจัดหาได้
Nuvoton N76E003 แผนภาพวงจรเพื่ออ่านแรงดันไฟฟ้าแบบอนาล็อก
ดังที่เราเห็นในแผนผังพอร์ต P0 ใช้สำหรับการเชื่อมต่อที่เกี่ยวข้องกับ LCD ทางด้านซ้ายสุดจะแสดงการเชื่อมต่ออินเทอร์เฟซการเขียนโปรแกรม โพเทนชิออมิเตอร์ทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้าและรับรู้โดยอินพุตอะนาล็อก 0 (AN0)
ข้อมูลเกี่ยวกับ GPIO และ Analog Pins ใน N76E003
ภาพด้านล่างแสดงหมุด GPIO ที่มีอยู่ในหน่วยไมโครคอนโทรลเลอร์ N76E003AT20 อย่างไรก็ตามจากทั้งหมด 20 พินสำหรับการเชื่อมต่อที่เกี่ยวข้องกับ LCD จะใช้พอร์ต P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 และ P0.7) หมุดอะนาล็อกจะเน้นด้วยสีแดง
อย่างที่เราเห็นพอร์ต P0 มีพินอนาล็อกสูงสุด แต่ใช้สำหรับการสื่อสารที่เกี่ยวข้องกับ LCD ดังนั้น P3.0 และ P1.7 จึงมีให้เป็นพินอินพุตแบบอะนาล็อก AIN1 และ AIN0 เนื่องจากโปรเจ็กต์นี้ต้องใช้พินอนาล็อกเพียงตัวเดียวจึงใช้ P1.7 ซึ่งเป็นช่องอินพุตอนาล็อก 0 สำหรับโปรเจ็กต์นี้
ข้อมูลเกี่ยวกับ ADC Peripheral ใน N76E003
N76E003 มี12 บิต SAR ADC เป็นคุณสมบัติที่ดีมากของ N76E003 ที่มีความละเอียดของ ADC ที่ดีมาก ADC มีอินพุต 8-Channelในโหมด single-end การเชื่อมต่อ ADC นั้นค่อนข้างง่ายและตรงไปตรงมา
ขั้นตอนแรกคือการเลือกอินพุตช่อง ADCมีอินพุต 8 แชนเนลที่มีอยู่ในไมโครคอนโทรลเลอร์ N76E003 หลังจากเลือกอินพุต ADC หรือพิน I / O แล้วจะต้องกำหนดพินทั้งหมดสำหรับทิศทางในโค้ด พินทั้งหมดที่ใช้สำหรับอินพุตอะนาล็อกเป็นพินอินพุตของไมโครคอนโทรลเลอร์ดังนั้นพินทั้งหมดจึงต้องตั้งค่าเป็นโหมดอินพุตเท่านั้น (อิมพีแดนซ์สูง) เหล่านี้สามารถตั้งค่าการใช้PxM1 และ PxM2 ลงทะเบียนรีจิสเตอร์ทั้งสองนี้ตั้งค่าโหมด I / O โดยที่ x ย่อมาจากหมายเลขพอร์ต (ตัวอย่างเช่นพอร์ต P1.0 รีจิสเตอร์จะเป็น P1M1 และ P1M2 สำหรับ P3.0 จะเป็น P3M1 และ P3M2 เป็นต้น) การกำหนดค่าสามารถ เห็นได้จากภาพด้านล่าง -
การกำหนดค่าของ ADC จะกระทำโดยสองลงทะเบียนADCCON0และADCCON1คำอธิบายการลงทะเบียน ADCCON0 แสดงอยู่ด้านล่าง
4 บิตแรกของรีจิสเตอร์จากบิต 0 ถึงบิต 3 ใช้เพื่อกำหนดการเลือกช่อง ADC เนื่องจากเราใช้ช่อง AIN0 การเลือกจะเป็น 0000 สำหรับสี่บิตเหล่านี้
บิตที่ 6 และ 7 เป็นบิตที่สำคัญ ADCSจำเป็นต้องตั้งค่า 1 เพื่อเริ่มการแปลง ADC และADCFจะให้ข้อมูลเกี่ยวกับการแปลง ADC ที่ประสบความสำเร็จ เฟิร์มแวร์จะต้องตั้งค่าเป็น 0 เพื่อเริ่มการแปลง ADC การลงทะเบียนต่อไปคือ ADCCON1-
การลงทะเบียน ADCCON1 ส่วนใหญ่จะใช้สำหรับการแปลง ADC ที่ทริกเกอร์โดยแหล่งภายนอก อย่างไรก็ตามสำหรับการดำเนินการที่เกี่ยวข้องกับการสำรวจตามปกติADCENบิตแรกจะต้องตั้งค่า 1 เพื่อเปิดวงจร ADC
จากนั้นต้องควบคุมอินพุตของช่อง ADC ในทะเบียนAINDIDSซึ่งสามารถตัดการเชื่อมต่ออินพุตดิจิตอลได้
n ย่อมาจาก channel bit (ตัวอย่างเช่นช่อง AIN0 จะต้องถูกควบคุมโดยใช้P17DIDSบิตแรกของAINDIDS register) ต้องเปิดใช้งานอินพุตดิจิทัลมิฉะนั้นจะอ่านเป็น 0 ทั้งหมดนี้เป็นการตั้งค่าพื้นฐานของ ADC ตอนนี้การล้าง ADCF และการตั้งค่า ADCS การแปลง ADC สามารถเริ่มต้นได้ มูลค่าที่แปลงแล้วจะมีอยู่ในรีจิสเตอร์ด้านล่าง -
และ
รีจิสเตอร์ทั้งสองเป็น 8 บิต เนื่องจาก ADC ให้ข้อมูล 12 บิตจึงใช้ ADCRH เป็นแบบเต็ม (8 บิต) และใช้ ADCRL เป็นครึ่งหนึ่ง (4 บิต)
การเขียนโปรแกรม N76E003 สำหรับ ADC
การเข้ารหัสสำหรับโมดูลเฉพาะทุกครั้งเป็นงานที่น่าตื่นเต้นดังนั้นไลบรารี LCD ที่เรียบง่าย แต่ทรงพลังจึงมีให้ซึ่งจะมีประโยชน์มากสำหรับการเชื่อมต่อ LCD 16x2 อักขระกับ N76E003 ไลบรารี LCD 16x2 มีอยู่ในที่เก็บ Github ของเราซึ่งสามารถดาวน์โหลดได้จากลิงค์ด้านล่าง
ดาวน์โหลด 16x2 LCD Library สำหรับ Nuvoton N76E003
กรุณามีห้องสมุด (โดยโคลนหรือดาวน์โหลด) และเพียงแค่รวม lcd.c และ LCD.h ไฟล์ของคุณในโครงการ Keil N76E003สำหรับการรวมง่ายของจอแอลซีดี 16x2 ในโปรแกรมที่ต้องการหรือโครงการ ไลบรารีจะให้ฟังก์ชันที่เกี่ยวข้องกับการแสดงผลที่มีประโยชน์ดังต่อไปนี้ -
- เริ่มต้น LCD
- ส่งคำสั่งไปที่ LCD
- เขียนลงบนจอ LCD
- ใส่สตริงใน LCD (16 ตัวอักษร)
- พิมพ์อักขระโดยส่งค่าฐานสิบหก
- เลื่อนข้อความยาวมากกว่า 16 อักขระ
- พิมพ์ตัวเลขจำนวนเต็มลงใน LCD โดยตรง
การเข้ารหัสสำหรับ ADC นั้นง่ายมาก ในฟังก์ชันการตั้งค่า Enable_ADC_AIN0; ใช้สำหรับการตั้งค่า ADC สำหรับอินพุต AIN0 สิ่งนี้ถูกกำหนดไว้ในไฟล์
# กำหนด Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
ดังนั้นบรรทัดด้านบนจึงกำหนดพินเป็นอินพุตและกำหนดค่าการลงทะเบียน ADCCON0, ADCCON1 รวมถึงการลงทะเบียน AINDIDS ด้วย ฟังก์ชั่นด้านล่างจะอ่านจาก ADC ที่ ADCRH และ ADCRL ทะเบียน แต่มี 12 บิตความละเอียด
ADC_read int ที่ไม่ได้ลงนาม (โมฆะ) { register unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; ในขณะที่ (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; ส่งคืน adc_value; }
บิตถูกเลื่อนไปทางซ้าย 4 ครั้งจากนั้นเพิ่มลงในตัวแปรข้อมูล ในฟังก์ชันหลัก ADC กำลังอ่านข้อมูลและพิมพ์โดยตรงบนจอแสดงผล อย่างไรก็ตามแรงดันไฟฟ้าจะถูกแปลงโดยใช้อัตราส่วนหรือความสัมพันธ์ระหว่างแรงดันไฟฟ้าหารด้วยค่าบิต
ADC 12 บิตจะให้ 4095 บิตสำหรับอินพุต 5.0V ดังนั้นการหาร 5.0V / 4095 = 0.0012210012210012V
ดังนั้นการเปลี่ยนแปลงบิต 1 หลักจะเท่ากับการเปลี่ยนแปลง 0.001V (โดยประมาณ) ทำได้ในฟังก์ชั่นหลักที่แสดงด้านล่าง
โมฆะ main (โมฆะ) { int adc_data; ติดตั้ง(); lcd_com (0x01); ในขณะที่ (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ข้อมูล ADC:"); adc_data = ADC_read (); lcd_print_number (adc_data); แรงดันไฟฟ้า = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "โวลต์:% 0.2fV", แรงดันไฟฟ้า); lcd_com (0xC0); lcd_puts (str_voltage); ตัวจับเวลา 0_Delay1ms (500); } }
ข้อมูลจะถูกแปลงจากค่าบิตเป็นแรงดันไฟฟ้าและใช้ฟังก์ชัน sprintf เอาต์พุตจะถูกแปลงเป็นสตริงและส่งไปยัง LCD
กะพริบรหัสและเอาต์พุต
รหัสส่งคืนคำเตือน 0 และ 0 ข้อผิดพลาดและกะพริบโดยใช้วิธีการกะพริบเริ่มต้นโดย Keil คุณสามารถเห็นข้อความกระพริบด้านล่าง หากคุณยังใหม่กับ Keil หรือ Nuvoton โปรดดูการเริ่มต้นใช้งานไมโครคอนโทรลเลอร์ Nuvoton เพื่อทำความเข้าใจพื้นฐานและวิธีการอัปโหลดโค้ด
การสร้างใหม่เริ่มต้น: โครงการ: ตัวจับเวลา สร้างเป้าหมาย 'เป้าหมาย 1' การ ประกอบ STARTUP.A51… รวบรวม main.c… รวบรวม lcd.c… รวบรวม Delay.c… การ เชื่อมโยง… ขนาดโปรแกรม: data = 101.3 xdata = 0 code = 4162 การสร้างไฟล์ฐานสิบหกจาก ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Error (s), 0 Warning (s) เวลาสร้างที่ผ่านไป: 00:00:02 โหลด "G: \\ n76E003 \\ Display \\ Objects \\ timer" Flash Erase เสร็จสิ้น Flash Write Done: โปรแกรม 4162 ไบต์ Flash Verify Done: ยืนยันแล้ว 4162 ไบต์ การโหลดแฟลชเสร็จสิ้นเวลา 11:56:04 น
ภาพด้านล่างแสดงฮาร์ดแวร์ที่เชื่อมต่อในแหล่งจ่ายไฟโดยใช้อะแดปเตอร์ DC และจอแสดงผลกำลังแสดงแรงดันไฟฟ้าที่กำหนดโดยโพเทนชิออมิเตอร์ทางด้านขวา
หากเราหมุนโพเทนชิออมิเตอร์แรงดันไฟฟ้าที่ให้กับขา ADC ก็จะเปลี่ยนไปเช่นกันและเราสามารถสังเกตเห็นค่า ADC และแรงดันอนาล็อกที่แสดงบนจอ LCD คุณสามารถดูวิดีโอด้านล่างสำหรับการสาธิตการทำงานทั้งหมดของบทช่วยสอนนี้
หวังว่าคุณจะสนุกกับบทความและเรียนรู้สิ่งที่เป็นประโยชน์หากคุณมีคำถามฝากไว้ในส่วนความคิดเห็นด้านล่างหรือคุณสามารถใช้ฟอรัมของเราเพื่อโพสต์คำถามทางเทคนิคอื่น ๆ