- ADC คืออะไร?
- ADC ใน ARM7-LPC2148
- ADC Pins ใน ARM7-LPC2148
- ADC รีจิสเตอร์ใน ARM7-LPC2148
- ลงทะเบียน ADxCR ใน LPC2148
- ADxGDR: ADC Global Data Register
- ส่วนประกอบที่จำเป็น
- แผนภูมิวงจรรวม
- การเขียนโปรแกรม ARM7-LPC2148 สำหรับ ADC
ในโลกของอุปกรณ์อิเล็กทรอนิกส์มีเซ็นเซอร์อะนาล็อกมากมายในตลาดที่ใช้ในการวัดอุณหภูมิความเร็วการเคลื่อนที่ความดันเป็นต้นเซนเซอร์แบบอะนาล็อกใช้ในการผลิตเอาต์พุตที่มีการเปลี่ยนแปลงอย่างต่อเนื่องตลอดเวลา สัญญาณเหล่านี้จากเซ็นเซอร์อะนาล็อกมักจะมีค่าน้อยมากตั้งแต่ไมโครโวลต์ (uV) ไปจนถึงหลายมิลลิโวลต์ (mV) ดังนั้นจึงต้องมีการขยายรูปแบบบางรูปแบบ สำหรับการใช้สัญญาณแอนะล็อกเหล่านี้ในไมโครคอนโทรลเลอร์เราจำเป็นต้องแปลงสัญญาณแอนะล็อกเป็นสัญญาณดิจิทัลเนื่องจากไมโครคอนโทรลเลอร์เข้าใจและประมวลผลสัญญาณดิจิทัลเท่านั้น ดังนั้นไมโครคอนโทรลเลอร์ส่วนใหญ่จึงมีคุณสมบัติที่สำคัญในตัวที่เรียกว่าADC (ตัวแปลงอนาล็อกเป็นดิจิตอล)ไมโครคอนโทรลเลอร์ARM7-LPC2148ของเรายังมีคุณสมบัติ ADC
ในบทช่วยสอนนี้เราจะดูวิธีใช้ ADC ใน ARM7-LPC2148โดยการจ่ายแรงดันไฟฟ้าที่แตกต่างกันไปยังขาอนาล็อกและแสดงบนหน้าจอ LCD 16x2 หลังจากการแปลงอนาล็อกเป็นดิจิตอล เริ่มกันด้วยการแนะนำสั้น ๆ เกี่ยวกับ ADC
ADC คืออะไร?
ดังที่กล่าวไว้ก่อนหน้านี้ ADC ย่อมาจาก Analog to digital conversion และใช้เพื่อแปลงค่าอนาล็อกจากโลกแห่งความเป็นจริงให้เป็นค่าดิจิทัลเช่น 1 และ 0 แล้วค่าอะนาล็อกเหล่านี้คืออะไร? สิ่งเหล่านี้คือสิ่งที่เราเห็นในชีวิตประจำวันของเราเช่นอุณหภูมิความเร็วความสว่างเป็นต้นพารามิเตอร์เหล่านี้วัดเป็นแรงดันไฟฟ้าแบบอะนาล็อกโดยเซ็นเซอร์ตามลำดับจากนั้นค่าอนาล็อกเหล่านี้จะถูกแปลงเป็นค่าดิจิทัลสำหรับไมโครคอนโทรลเลอร์
สมมติว่าช่วง ADC ของเราอยู่ระหว่าง 0V ถึง 3.3V และเรามี ADC 10 บิตซึ่งหมายความว่าแรงดันไฟฟ้าอินพุต 0-3.3 โวลต์ของเราจะถูกแบ่งออกเป็นค่าอนาล็อกแบบไม่ต่อเนื่อง 1024 ระดับ (2 10 = 1024) ความหมาย 1024 คือความละเอียดสำหรับ ADC 10 บิตในทำนองเดียวกันสำหรับความละเอียด ADC 8 บิตจะเป็น 512 (28) และสำหรับความละเอียด ADC 16 บิตจะเป็น 65,536 (216) LPC2148 มี ADC
ด้วยสิ่งนี้หากแรงดันไฟฟ้าอินพุตจริงเป็น 0V ADC ของ MCU จะอ่านค่าเป็น 0 และถ้าเป็น 3.3V MCU จะอ่าน 1024 และถ้าอยู่ระหว่างเช่น 1.65v MCU จะอ่าน 512 เราสามารถใช้ด้านล่าง สูตรคำนวณค่าดิจิทัลที่ MCU จะอ่านตามความละเอียดของ ADC และแรงดันไฟฟ้าที่ใช้งาน
(ความละเอียด ADC / แรงดันไฟฟ้า) = (ค่าดิจิตอล ADC / ค่าแรงดันไฟฟ้าจริง)
ตัวอย่างเช่นถ้าแรงดันอ้างอิงคือ 3v:
เราได้อธิบายรายละเอียด ADC ในบทความก่อนหน้านี้
ADC ใน ARM7-LPC2148
- LPC2148 ประกอบด้วยตัวแปลงอนาล็อกเป็นดิจิตอลสองตัว
- ตัวแปลงเหล่านี้เป็นตัวแปลงอนาล็อกเป็นดิจิตอลประมาณ 10 บิตต่อเนื่องกัน
- ในขณะที่ ADC0 มีหกช่องสัญญาณ ADC1 มีแปดช่อง
- ดังนั้นจำนวนที่มีอยู่ปัจจัยการผลิต ADC สำหรับ LPC2148 คือ 14
- จะแปลงแรงดันไฟฟ้าอินพุตในช่วง (0 ถึง 3.3V) เท่านั้น ต้องไม่เกิน 3.3V อ้างอิงแรงดันไฟฟ้า เนื่องจากจะทำให้ IC เสียหายและยังให้ค่าที่ไม่แน่นอนอีกด้วย
คุณลักษณะที่สำคัญบางประการของ ADC ใน LPC2148
- ตัวแปลงแต่ละตัวสามารถดำเนินการได้มากกว่า 400000 ตัวอย่าง 10 บิตต่อวินาที
- อินพุตอะนาล็อกทุกตัวมีการลงทะเบียนผลลัพธ์เฉพาะเพื่อลดค่าใช้จ่ายในการขัดจังหวะ
- โหมดการแปลงต่อเนื่องสำหรับอินพุตเดียวหรือหลายอินพุต
- การแปลงทางเลือกในการเปลี่ยนพินอินพุตหรือสัญญาณจับคู่ตัวจับเวลา
- คำสั่ง Global Start สำหรับตัวแปลงทั้งสอง
ตรวจสอบวิธีใช้ ADC ในไมโครคอนโทรลเลอร์อื่น ๆ ด้วย:
- วิธีใช้ ADC ใน Arduino Uno
- การเชื่อมต่อ ADC0808 กับไมโครคอนโทรลเลอร์ 8051
- การใช้โมดูล ADC ของไมโครคอนโทรลเลอร์ PIC
- การสอน Raspberry Pi ADC
- วิธีใช้ ADC ใน MSP430G2 - การวัดแรงดันอนาล็อก
- วิธีใช้ ADC ใน STM32F103C8
ADC Pins ใน ARM7-LPC2148
ตามที่บอกไว้ก่อนหน้านี้ใน ARM7-LPC2148 มีสองช่อง ADC0 พร้อมขาอินพุตแบบอนาล็อก 6 ขาและ ADC1 พร้อมขาอินพุตแบบอนาล็อก 8 ขา ดังนั้นจึงมี 14 พินสำหรับอินพุตแบบอะนาล็อก แผนภาพด้านล่างแสดงพินที่พร้อมใช้งานสำหรับอินพุตแบบอะนาล็อก
เนื่องจากพินอินพุต ADC ถูกมัลติเพล็กซ์กับพิน GPIO อื่น ๆ เราจำเป็นต้องให้พวกเขาโดยการกำหนดค่าลงทะเบียน Pinsel เพื่อเลือกฟังก์ชั่น
ตารางด้านล่างแสดงพินของ ADC และหมายเลขช่อง ADC ที่เคารพใน LPC2148 AD0 คือช่อง 0 และ AD1 คือช่อง 1
LPC2148 พิน |
หมายเลขช่อง ADC |
P0.28 |
AD0.1 |
P0.29 |
AD0.2 |
P0.30 น |
AD0.3 |
P0.25 |
AD0.4 |
P0.4 |
AD0.6 |
P0.5 |
AD0.7 |
P0.6 |
AD1.0 |
P0.8 |
AD1.1 |
P0.10 |
AD1.2 |
P0.12 |
AD1.3 |
P0.13 |
AD1.4 |
P0.15 |
AD1.5 |
P0.21 |
AD1.6 |
P0.22 |
AD1.7 |
ADC รีจิสเตอร์ใน ARM7-LPC2148
รีจิสเตอร์ใช้ในการเขียนโปรแกรมเพื่อใช้คุณสมบัติการแปลง A / D ใน LPC2148
ด้านล่างนี้คือรายการการลงทะเบียนที่ใช้ใน LPC2148 สำหรับการแปลง A / D
1. ADCR: Analog to Digital Control Register
ใช้: รีจิสเตอร์นี้ใช้สำหรับกำหนดคอนฟิกตัวแปลง A / D ใน LPC2148
2. ADGDR:การลงทะเบียนข้อมูลทั่วโลกแบบอะนาล็อกเป็นดิจิตอล
ใช้: รีจิสเตอร์นี้มีบิต DONE สำหรับตัวแปลง A / D และผลลัพธ์ของการแปลงจะถูกเก็บไว้ที่นี่
3. ADINTERN: Analog to Digital Interrupt เปิดใช้งานการลงทะเบียน
ใช้: นี่คือการลงทะเบียนเปิดใช้งานขัดจังหวะ
4. ADDR0 - ADDR7:การลงทะเบียนข้อมูลช่องสัญญาณอนาล็อกเป็นดิจิตอล
ใช้: รีจิสเตอร์นี้มีค่า A / D สำหรับแชนเนลที่เกี่ยวข้อง
5. ADSTAT:การลงทะเบียนสถานะอนาล็อกเป็นดิจิตอล
ใช้: รีจิสเตอร์นี้มีแฟล็ก DONE สำหรับแชนเนล ADC ตามลำดับและแฟล็ก OVERRUN สำหรับแชนเนล ADC ตามลำดับ
ในบทช่วยสอนนี้เราจะใช้เฉพาะการลงทะเบียน ADCR & ADGDR เท่านั้น มาดูรายละเอียดกัน
ลงทะเบียน ADxCR ใน LPC2148
AD0CR & AD1CR สำหรับช่อง 0 และช่อง 1 ตามลำดับ มันเป็นทะเบียน 32 บิต ตารางด้านล่างระบุช่องบิตสำหรับการลงทะเบียน ADCR
31:28 น |
27 |
26:24 น |
23:22 น |
21 |
20 |
19:17 น |
16 |
15: 8 |
7: 0 |
ที่สงวนไว้ |
ขอบ |
เริ่มต้น |
ที่สงวนไว้ |
กปปส |
ที่สงวนไว้ |
CLKS |
ระเบิด |
CLCKDIV |
SEL |
มาดูวิธีกำหนดค่าการลงทะเบียนแต่ละรายการ
1. SEL:บิตจาก (0 ถึง 7) ใช้เพื่อเลือกช่องสัญญาณสำหรับการแปลง ADC มีการจัดสรรหนึ่งบิตสำหรับแต่ละช่อง ตัวอย่างเช่นการตั้งค่า Bit-0 จะทำให้ ADC เป็นตัวอย่าง AD0.1 สำหรับการแปลง และการตั้งค่าบิต -1 จะทำให้ AD0.1; ในทำนองเดียวกันการตั้งค่า bit-7 จะทำการแปลงสำหรับ AD0.7 ขั้นตอนสำคัญคือเรามี PINSEL ตามพอร์ตที่เราใช้เช่น PINSEL0 สำหรับ PORT0 ใน PLC2148
2. CLCKDIV:บิตจาก (8 ถึง 15) ใช้สำหรับตัวหารนาฬิกา ที่นี่นาฬิกา APB (นาฬิกา ARM Peripheral Bus) หารด้วยค่านี้บวกค่าหนึ่งเพื่อสร้างนาฬิกาที่จำเป็นสำหรับตัวแปลง A / D ซึ่งควรน้อยกว่าหรือเท่ากับ 4.5 MHz ในขณะที่เราใช้วิธีการประมาณอย่างต่อเนื่องใน LPC2148
3. BURST:บิต 16 ใช้สำหรับโหมดการแปลง BURST
การตั้งค่า 1: ADC จะทำการแปลงสำหรับช่องทั้งหมดที่เลือกในบิต SEL
การตั้งค่า 0: จะปิดใช้งานโหมดการแปลง BURST
4. CLCKS:บิตจาก (17 ถึง 19) สามบิตใช้สำหรับเลือกความละเอียดและจำนวนนาฬิกาสำหรับการแปลง A / D ในโหมดถ่ายต่อเนื่องเนื่องจากเป็นโหมดการแปลง A / D แบบต่อเนื่อง
ค่าสำหรับบิต (17 ถึง 19) |
บิต (ความแม่นยำ) |
ไม่มีนาฬิกา |
000 |
10 |
11 |
001 |
9 |
10 |
010 |
8 |
9 |
011 |
7 |
8 |
100 |
6 |
7 |
101 |
5 |
6 |
110 |
4 |
5 |
111 |
3 |
4 |
5. PDN:บิต 21 ใช้สำหรับเลือกPower down Modeของ ADC ใน LPC2148
- A / D อยู่ในโหมด PDN
- A / D อยู่ในโหมดการทำงาน
6. เริ่มต้น:บิตจาก (24 ถึง 26) ใช้สำหรับการเริ่มต้น เมื่อโหมดการแปลง BURST ปิดโดยการตั้งค่า 0 บิตเริ่มต้นเหล่านี้จะมีประโยชน์ในการเริ่มการแปลง A / D START ใช้สำหรับการแปลงที่ควบคุมด้วยขอบด้วย นั่นคือเมื่อมีอินพุตใน CAP หรือ MAT pin ของ LPC2148 A / D จะเริ่มทำการแปลง ลองตรวจสอบตารางด้านล่าง
คุ้มค่าสำหรับ Bits (24 ถึง 26) |
พินของ LPC2148 |
หน้าที่ของ ADC |
000 |
ใช้เพื่อตั้งค่า ADC ในโหมด PDN ไม่เริ่ม |
|
001 |
เริ่มการแปลง A / D |
|
010 |
CAP0.2 / MAT0.2 |
เริ่มการแปลง A / D บน EDGE ที่เลือกบนพิน 27 (ขึ้นหรือลดลง) บนพิน CAP / MAT ของ LPC2148 |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: 27 THบิตสำหรับ EDGE จะใช้เฉพาะเมื่อบิตเริ่มมี 010-111 เริ่มการแปลงเมื่อมีอินพุต CAP หรือ MAT คุณสามารถดูตารางด้านบนสำหรับสิ่งนั้น
การตั้งค่า: 0 -บนขอบตก
1 - บน Rising Edge
ADxGDR: ADC Global Data Register
AD0GDR & AD1GDR สำหรับ ADC Channel 0 และ ADC channel 1 ตามลำดับ
เป็นรีจิสเตอร์ 32 บิตที่มีผลลัพธ์ของการแปลง A / D และบิต DONE ซึ่งระบุว่าการแปลง A / D เสร็จสิ้น ตารางด้านล่างระบุช่องบิตสำหรับการลงทะเบียน ADGDR
31 |
30 |
29:27 น |
26:24 น |
23:16 น |
15: 6 |
5: 0 |
เสร็จสิ้น |
OVERRUN |
ที่สงวนไว้ |
CHN |
ที่สงวนไว้ |
ผลลัพธ์ |
ที่สงวนไว้ |
1. ผลลัพธ์:บิตเหล่านี้ (6 ถึง 15) ประกอบด้วยผลลัพธ์ของการแปลง A / D สำหรับช่องสัญญาณที่เลือกในการลงทะเบียน ADCR SEL ค่าจะถูกอ่านหลังจากการแปลง A / D เสร็จสิ้นเท่านั้นและจะถูกระบุด้วยDONE bit
ตัวอย่าง:สำหรับผลลัพธ์ ADC 10 บิตค่าที่จัดเก็บจะแตกต่างกันไปตั้งแต่ (0 ถึง 1023)
2. CHANNEL:บิตเหล่านี้ 24 ถึง 26 มีหมายเลขช่องสัญญาณที่การแปลง A / D เสร็จสิ้น ค่าดิจิทัลที่แปลงแล้วมีอยู่ในบิต RESULT
ตัวอย่าง: 000 ใช้สำหรับ ADC channel 0 และ 001 สำหรับ ADC channel 1 เป็นต้น
3. ย่ำยี: 30 THบิตสำหรับย่ำยีถูกนำมาใช้ในโหมด BURST เมื่อตั้งค่า 1 ค่า ADC ที่แปลงก่อนหน้านี้จะถูกเขียนทับด้วยค่า ADC ที่แปลงใหม่ เมื่อรีจิสเตอร์ถูกอ่านมันจะล้างบิต OVERRUN
4. DONE:บิตที่ 31 ใช้สำหรับ DONE bit
ชุดที่ 1: เมื่อการแปลง A / D เสร็จสมบูรณ์
ตั้งค่า 0: เมื่อรีจิสเตอร์ถูกอ่านและเขียน ADCR
เราได้เห็นเกี่ยวกับการลงทะเบียนที่สำคัญที่ใช้ใน ADC ใน LPC2148 ตอนนี้ให้เริ่มใช้ ADC ใน ARM7
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์
- ไมโครคอนโทรลเลอร์ ARM7-LPC2148
- IC ควบคุมแรงดันไฟฟ้า 3.3V
- IC ควบคุมแรงดันไฟฟ้า 5V
- โพเทนชิออมิเตอร์ 10K - 2 Nos
- LED (สีใดก็ได้)
- จอ LCD (16X2)
- แบตเตอรี่ 9V
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
ซอฟต์แวร์
- Keil uVision 5
- เครื่องมือแฟลชวิเศษ
แผนภูมิวงจรรวม
ตารางด้านล่างแสดงให้เห็นว่าการเชื่อมต่อวงจรระหว่างจอแอลซีดีและ ARM7
ARM7-LPC2148 |
จอแอลซีดี (16x2) |
P0.4 |
RS (ลงทะเบียนเลือก) |
P0.6 |
E (เปิดใช้งาน) |
P0.12 |
D4 (พินข้อมูล 4) |
P0.13 |
D5 (พินข้อมูล 5) |
P0.14 |
D6 (พินข้อมูล 6) |
P0.15 |
D7 (พินข้อมูล 7) |
เรียนรู้เพิ่มเติมเกี่ยวกับการใช้ LCD กับ ARM 7 - LPC2148
สิ่งสำคัญ: ที่นี่เรากำลังใช้ไอซีควบคุมแรงดันไฟฟ้าสองตัวตัวหนึ่งสำหรับจอ LCD 5V และอีก 3.3V สำหรับอินพุตแบบอะนาล็อกซึ่งสามารถปรับเปลี่ยนได้ตามโพเทนชิออมิเตอร์
การเชื่อมต่อระหว่างตัว ควบคุมแรงดันไฟฟ้า 5V กับ LCD และ ARM7 Stick
IC ควบคุมแรงดันไฟฟ้า 5V |
ฟังก์ชัน Pin |
LCD และ ARM-7 LPC2148 |
1. ขาซ้าย |
+ จากแบตเตอรี่อินพุต 9V |
NC |
2. หมุดกลาง |
- จากแบตเตอรี่ |
VSS, R / W, K ของ LCD GND ของ ARM7 |
3. หมุดขวา |
เอาต์พุตควบคุม + 5V |
VDD, A ของ LCD + 5V ของ ARM7 |
โพเทนชิออมิเตอร์พร้อม LCD
โพเทนชิออมิเตอร์ใช้เพื่อปรับความคมชัดของจอ LCD หม้อมีสามพินขาซ้าย (1) เชื่อมต่อกับ + 5V และตรงกลาง (2) กับ VEE หรือ V0 ของโมดูล LCD และขาขวา (3) เชื่อมต่อกับ GND เราสามารถปรับความคมชัดได้โดยหมุนลูกบิด
การเชื่อมต่อระหว่าง LPC2148 และโพเทนชิออมิเตอร์กับตัวควบคุมแรงดันไฟฟ้า 3.3V
IC ควบคุมแรงดันไฟฟ้า 3.3V |
ฟังก์ชัน Pin |
แขน -7 LPC2148 |
1. ขาซ้าย |
- จากแบตเตอรี่ |
พิน GND |
2. หมุดกลาง |
เอาต์พุตควบคุม + 3.3V |
ถึงอินพุตโพเทนชิออมิเตอร์และเอาต์พุตของโพเทนชิออมิเตอร์เป็นP0.28 |
3. หมุดขวา |
+ จากแบตเตอรี่อินพุต 9V |
NC |
การเขียนโปรแกรม ARM7-LPC2148 สำหรับ ADC
ในการเขียนโปรแกรม ARM7-LPC2148 เราต้องใช้เครื่องมือ keil uVision & Flash Magic เราใช้สาย USB เพื่อตั้งโปรแกรม ARM7 Stick ผ่านพอร์ต micro USB เราเขียนโค้ดโดยใช้ Keil และสร้างไฟล์ hex จากนั้นไฟล์ HEX จะถูกแฟลชไปที่แท่ง ARM7 โดยใช้ Flash Magic หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้ง keil uVision และ Flash Magic และวิธีการใช้งานให้ไปที่ลิงค์เริ่มต้นใช้งานไมโครคอนโทรลเลอร์ ARM7 LPC2148 และตั้งโปรแกรมโดยใช้ Keil uVision
ในบทช่วยสอนนี้เราจะแปลงแรงดันไฟฟ้าอินพุตแบบอะนาล็อก (0 ถึง 3.3V) เป็นค่าดิจิตอลโดยใช้ ADC ใน LPC2148 และแสดงแรงดันอนาล็อกบนจอ LCD (16x2) โพเทนชิออมิเตอร์จะถูกใช้เพื่อเปลี่ยนแรงดันไฟฟ้าอนาล็อกอินพุต
หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมต่อ LCD กับโหมด 4 บิต ARM7-LPC2148 ตามลิงค์นี้
รหัสที่สมบูรณ์แบบสำหรับการใช้ ADC กับ ARM 7จะได้รับในตอนท้ายของการกวดวิชานี้ที่นี่เราจะอธิบายบางส่วนของมัน
ขั้นตอนที่เกี่ยวข้องกับการเขียนโปรแกรม LPC2148-ADC
1. PINSEL registerใช้เพื่อเลือกขาพอร์ตของ LPC2148 และฟังก์ชัน ADC เป็นอินพุตแบบอะนาล็อก
PINSEL1 = 0x01000000; // เลือก P0.28 เป็น AD0.1
2.เลือกนาฬิกาและความแม่นยำของบิตสำหรับการแปลงโดยเขียนค่าลงใน ADxCR (ADC control register)
AD0CR = 0x00200402; // ตั้งค่าการทำงานของ ADC เป็น 10 บิต / 11 CLK สำหรับการแปลง (000)
3.เริ่มการแปลงโดยเขียนค่าลงในบิตเริ่มต้นใน ADxCR
ที่นี่ผมได้เขียนถึง 24 ปีบริบูรณ์บิตของ AD0CR ลงทะเบียน
AD0CR = AD0CR - (1 << 24);
4.ตอนนี้เราต้องตรวจสอบบิต DONE (31) ของ ADxDRy (การลงทะเบียนข้อมูล ADC) ที่เกี่ยวข้องเนื่องจากเปลี่ยนจาก 0 เป็น 1 ดังนั้นเราจึงใช้ while loop เพื่อตรวจสอบอย่างต่อเนื่องว่าการแปลงเสร็จสิ้นในการลงทะเบียนข้อมูลที่ 31 บิตหรือไม่
ในขณะที่ (! (AD0DR1 & 0x80000000));
5.หลังจากเสร็จสิ้นบิตถูกตั้งค่าเป็น 1 การแปลงสำเร็จต่อไปเราจะอ่านผลลัพธ์จากการลงทะเบียนข้อมูล ADC เดียวกัน AD0DR1 และเก็บค่าไว้ในตัวแปร
adcvalue = AD0DR1;
ต่อไปเราจะใช้สูตรในการแปลงค่าดิจิตอลแรงดันไฟฟ้าและเก็บในตัวแปรชื่อแรงดันไฟฟ้า
แรงดันไฟฟ้า = ((adcvalue / 1023.0) * 3.3);
5.บรรทัดต่อไปนี้ใช้เพื่อแสดงค่าดิจิทัล (0 ถึง 1023) หลังจากการแปลงอนาล็อกเป็นดิจิตอล
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // แสดงค่า ADC (0 ถึง 1023)
6.บรรทัดต่อไปนี้ใช้เพื่อแสดงแรงดันอนาล็อกอินพุต (0 ถึง 3.3V) หลังจากการแปลงอนาล็อกเป็นดิจิตอลและหลังจากขั้นตอนที่ 5
LCD_SEND (0xC0); sprintf (โวลต์ค่า, "แรงดันไฟฟ้า =%. 2f V", แรงดันไฟฟ้า); LCD_DISPLAY (ค่าโวลต์); // แสดง (แรงดันไฟฟ้าอนาล็อกอินพุต)
7.ตอนนี้เราต้องแสดงแรงดันไฟฟ้าขาเข้าและค่าดิจิตอลบนจอ LCD ก่อนหน้านั้นเราต้องเริ่มต้นการแสดงผล LCD และใช้คำสั่งที่เหมาะสมเพื่อส่งข้อความไปแสดง
รหัสด้านล่างนี้ใช้เพื่อเริ่มต้น LCD
โมฆะ LCD_INITILIZE (โมฆะ) // ฟังก์ชั่นเพื่อเตรียม LCD { IO0DIR = 0x0000FFF0; // ตั้งค่าพิน P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 เป็น OUTPUT delay_ms (20); LCD_SEND (0x02); // เริ่มต้น LCD ในโหมดการทำงาน 4 บิต LCD_SEND (0x28); // 2 บรรทัด (16X2) LCD_SEND (0x0C); // แสดงเคอร์เซอร์ปิด LCD_SEND (0x06); // เคอร์เซอร์เพิ่มอัตโนมัติ LCD_SEND (0x01); // แสดง LCD_SEND ที่ ชัดเจน(0x80); // บรรทัดแรกตำแหน่งแรก}
รหัสด้านล่างนี้ใช้เพื่อแสดงค่าบน LCD
เป็นโมฆะ LCD_DISPLAY (char * ผงชูรส) // ฟังก์ชั่นในการพิมพ์ตัวอักษรที่ส่งหนึ่งโดยหนึ่ง{ uint8_t i = 0; ในขณะที่ (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // ส่ง IO0SET บนแทะ= 0x00000050; // RS HIGH & ENABLE HIGH เพื่อพิมพ์ข้อมูลIO0CLR = 0x00000020; // RW LOW โหมดเขียน delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS และ RW ไม่เปลี่ยนแปลง (เช่น RS = 1, RW = 0) delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((ข้อความ & 0x0F) << 12)); // ส่ง IO0SET ล่างแทะ= 0x00000050; // RS & EN สูงIO0CLR = 0x00000020; delay_ms (2); IO0CLR = 0x00000040; delay_ms (5); ผม ++; } }
ฟังก์ชันด้านล่างใช้เพื่อสร้างการหน่วงเวลา
โมฆะ delay_ms (uint16_t j) // ฟังก์ชันสำหรับการหน่วงเวลาเป็นมิลลิวินาที { uint16_t x, i; สำหรับ (i = 0; i
รหัสที่สมบูรณ์พร้อมวิดีโอสาธิตได้รับด้านล่าง