HD44780 บอร์ดอะแดปเตอร์ LCD เป็น I2C สำหรับ Bus Pirate: 9 ขั้นตอน
HD44780 บอร์ดอะแดปเตอร์ LCD เป็น I2C สำหรับ Bus Pirate: 9 ขั้นตอน
Anonim

LCD ตัวอักษรราคาถูกที่ใช้ชิปเซ็ต HD44780 มีหลายขนาด: 2x16, 4x20 เป็นต้น จอแสดงผลเหล่านี้มีโหมดอินเทอร์เฟซมาตรฐานสองโหมด คือ 4 บิตและ 8 บิตแบบขนาน 8bit ต้องการทั้งหมด 11 สายข้อมูล 4bit ต้องการ 7 (6 สำหรับการเขียนเท่านั้น) LCD บางรุ่นรองรับโหมดข้อมูลซีเรียลเพิ่มเติม เช่น VFD I ที่ครอบคลุมใน Hack a Day โดยทั่วไปแล้ว HD44780 LCD จะเป็นชิ้นส่วน 5 โวลต์ที่มีแหล่งจ่ายไฟแยกต่างหากสำหรับไฟด้านหลัง Bus Pirate มีพิน I/O ที่ทนทานต่อ 5 โวลต์เท่านั้น ดังนั้นเราจึงสร้างบอร์ดอะแดปเตอร์ขนาดเล็กที่มีพินเพียงพอสำหรับควบคุม LCD Bus Pirate ควบคุมบอร์ดอะแดปเตอร์ผ่านไลบรารีอินเทอร์เฟซ LCD อ่านต่อไปเกี่ยวกับบอร์ดอะแดปเตอร์ LCD ตัวละคร Bus Pirate HD44780 และไลบรารีอินเทอร์เฟซ ฉันสามารถมี PCB, ชุดอุปกรณ์ หรือชุดประกอบที่ผลิตโดย Seeed Studio ได้ในราคาประมาณ $15 รวมค่าขนส่งทั่วโลก และอื่นๆ ที่นี่ ฉันไม่สามารถรวมองค์ประกอบการจัดรูปแบบและตาราง HTML ใน Instructable คุณสามารถดูโพสต์ต้นฉบับได้ที่ Dangerous Prototypes บล็อก

ขั้นตอนที่ 1: ฮาร์ดแวร์

ภาพรวมในบทความนี้ เราจะสรุปเกี่ยวกับบอร์ดอะแดปเตอร์ I2C สำหรับ LCD ที่ใช้ HD44780 เราสาธิตด้วยอินเทอร์เฟซอนุกรมสากลของ Bus Pirate ซอร์สโค้ด Bus Pirate สำหรับไลบรารีอินเทอร์เฟซ HD44780 ที่ใช้ I2C เป็นสาธารณสมบัติ ดังนั้นจึงสามารถปรับให้เข้ากับโปรเจ็กต์ของคุณเองได้ฟรี ฮาร์ดแวร์อิมเมจวงจรขนาดเต็ม [PNG] วงจรและ PCB ได้รับการออกแบบด้วย Cadsoft Eagle เวอร์ชันฟรี ไฟล์การออกแบบสามารถดาวน์โหลดได้จาก Bus Pirate SVN ก่อนใช้บอร์ดอะแดปเตอร์ ตรวจสอบให้แน่ใจว่าได้ตรวจสอบแผ่นข้อมูลสำหรับ LCD ของคุณกับพินอะแดปเตอร์ LCD ทั้งหมดไม่เหมือนกัน PCF8574 I/O expander IC นี่คือชิปขยาย 8 I/O แบบธรรมดาที่ควบคุมผ่านอินเทอร์เฟซ I2C แบบสองสาย อินเทอร์เฟซ I2C สามารถเข้าถึงได้จากส่วนหัว JP1 PCF8574 ทำงานได้ตั้งแต่ 2.5 ถึง 5 โวลต์ พิน I/O ทำงานที่แรงดันไฟฟ้า ดังนั้นหากเราป้อน 5 โวลต์ พินจะเชื่อมต่อ LCD ที่ 5 โวลต์ C1 (0.1uF) แยกไอซีออกจากความผันผวนของแหล่งจ่ายไฟ PCF8574 หนึ่งพินควบคุม LED 3 มม. (LED1) ผ่านตัวต้านทานจำกัดกระแส R2 (1000 โอห์ม) ไฟ LED แสดงการสื่อสารที่ประสบความสำเร็จระหว่าง Bus Pirate และอะแดปเตอร์ PCF8574 ไม่สามารถจ่ายกระแสไฟได้เพียงพอที่จะจ่ายไฟให้กับ LED ดังนั้นเราจึงจ่ายไฟ LED จากแหล่งจ่าย 5 โวลต์และเปลี่ยนกราวด์ LCD บอร์ดอะแดปเตอร์จะสื่อสารกับ LCD แบบอักขระที่ใช้ HD44780 ในโหมดอินเทอร์เฟซแบบขนาน 4 บิต พินอินเทอร์เฟซ 4 บิต - RS, RW, EN และ D4-D7 - เชื่อมต่อกับพิน PCF8574 I/O เจ็ดพิน เราชอบที่จะใช้หัวพินตัวผู้ขนาด 0.1" เพื่อเชื่อมต่ออะแดปเตอร์กับ LCD โดยปกติแล้ว คุณสามารถพิง LCD กับหมุดเพื่อสร้างหน้าสัมผัสที่เพียงพอสำหรับการทดสอบอย่างรวดเร็ว ตัวต้านทานทริมเมอร์ R1 (10K) ให้แรงดันปรับความคมชัดที่พิน 3 ของ ส่วนหัวของ LCD เราไม่ได้เชื่อมต่อหมุดแบ็คไลท์เพราะมีรูปแบบแบ็คไลท์ที่แตกต่างกันมากมาย การจ่ายไฟให้กับไฟแบ็คไลท์ LED อาจทำให้หน้าจอที่ต้องใช้แรงดันลบเสียหายได้ แหล่งจ่ายไฟ LCD ส่วนใหญ่ต้องใช้ไฟ 5 โวลต์ โดยให้แหล่งจ่ายไฟภายนอกผ่าน ส่วนหัว JP2 เราจัดเตรียมพินพาวเวอร์ซัพพลายตัวที่สองเพื่อเชื่อมต่อตัวต้านทานแบบดึงขึ้นของ Bus Pirate PCB วงจรและ PCB ได้รับการออกแบบด้วย Cadsoft Eagle เวอร์ชันฟรี ไฟล์การออกแบบสามารถดาวน์โหลดได้จาก Bus Pirate SVN PCB คือ แบบด้านเดียวแบบเจาะรูทั้งหมดด้วยสายจัมเปอร์เส้นเดียว (แสดงเป็นสีแดง) เราสามารถมี PCB, ชุดอุปกรณ์ หรือชุดประกอบที่ผลิตโดย Seeed Studio ได้ในราคาประมาณ $15 รวมค่าขนส่งทั่วโลก ดูรายละเอียดเพิ่มเติมได้ที่นี่ ทั้งหมด รูหยาบ) C10.1uF/10volts+R110000 (10K) ohm single-turn trimmer/potentiometer, 6mmR21000 (1K) ohm resistor, 1/4 wattLED13mm (T1) LED, redJP1+JP20.1" male header, 5 pinsIC1PCF8574N, 8bit I2C I/O expander DIP16ICS116 pin DIP socket สำหรับ IC1I ไม่สามารถรวมองค์ประกอบการจัดรูปแบบและตาราง HTML ใน Instructable คุณสามารถดูโพสต์ต้นฉบับได้ที่บล็อก Dangerous Prototypes

ขั้นตอนที่ 2: การเชื่อมต่อ

อุปกรณ์: LCD อักขระ HD44780 บัส: ขนาน 4 บิต พร้อมบอร์ดอะแดปเตอร์ PCF8574 I2C ข้อกำหนดด้านพลังงาน: 5volts. References:example datasheet [PDF], HD44780 command reference, HD44780 LCD uber-site. Complete Bus Pirate session log สำหรับการสาธิตนี้เรา ออกแบบอะแดปเตอร์สำหรับไลบรารี LCD ของอินเทอร์เฟซอนุกรมสากล Bus Pirate แต่จะใช้ได้กับทุกอย่างที่สามารถพูดโปรโตคอล I2C ได้ ดูซอร์สโค้ด Bus Pirate สำหรับตัวอย่างการใช้งาน I2C->HD44780 เชื่อมต่อ Bus Pirate กับบอร์ดอะแดปเตอร์ตามที่แสดงในตาราง ตารางนี้ยังแสดงการเชื่อมต่อแบบ raw กับ PCF8574 IC หากคุณติดตามโดยไม่มีบอร์ดอะแดปเตอร์เชื่อมต่ออะแดปเตอร์กับแหล่งจ่ายไฟที่เพียงพอสำหรับ LCD โดยทั่วไปคือ 5 โวลต์ การเชื่อมต่อ I2C ระหว่างอะแดปเตอร์และ Bus Pirate ต้องใช้ตัวต้านทานแบบดึงขึ้นระหว่าง 2 ถึง 10K ต่อไปนี้เป็นข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมต่อแรงดันไฟฟ้าผสมกับ pull-ups และตัวต้านทานแบบดึงขึ้นบน Bus Pirate ฉันไม่สามารถรวมองค์ประกอบการจัดรูปแบบและตาราง HTML ใน Instructable คุณสามารถดูโพสต์ต้นฉบับได้ที่บล็อก Dangerous Prototypes.

ขั้นตอนที่ 3: ขั้นตอนที่ 1. ตั้งค่าไลบรารี

การเชื่อมต่อ เราได้ครอบคลุมการออกแบบอะแดปเตอร์และวิธีเชื่อมต่อกับ Bus Pirate ตอนนี้ก็ถึงเวลาเขียนบางอย่างไปยัง LCD แล้ว HiZ>m <<11 <<1 <<ว <

พี <<2 <<v <<<รับรายงานแรงดันไฟฟ้าVOLTAGE MONITOR: 5V: 4.9 | 3.3V: 3.3 | VPULLUP: 5.0 <<กด 'm' ในเทอร์มินัล Bus Pirate และเลือกไลบรารี LCD ปัจจุบันรองรับเฉพาะ LCD แบบอักขระ HD44780 โดยใช้อะแดปเตอร์ PFC8574 ที่อธิบายไว้ในครึ่งแรกของบทความนี้ (ตัวเลือกที่ 1) เปิดใช้งานแหล่งจ่ายไฟ ('W' ขนาดใหญ่) และตัวต้านทานแบบดึงขึ้น (เมนู 'p') ตรวจสอบตัวตรวจสอบแรงดันไฟฟ้า (เมนู 'v') และตรวจสอบว่าแรงดันดึงขึ้น (Vpullup) อ่านได้ประมาณ 5 โวลต์

ขั้นตอนที่ 4: ขั้นตอนที่ 2. รีเซ็ตและเริ่มต้น

ตารางนี้สรุปคำสั่งแบบไบต์เดี่ยวที่ควบคุม HD44780 LCD ต่อไปนี้คือข้อมูลอ้างอิงโดยละเอียด คำสั่งเหล่านี้สามารถป้อนได้จากบรรทัดคำสั่ง Bus Pirate แต่เราได้สร้างมาโครสำหรับคำสั่งส่วนใหญ่เพื่อประหยัดเวลา LCD>(0) <<<แสดงเมนูมาโคร0.เมนูมาโคร <<<เมนูนี้1.รีเซ็ต LCD << <รีเซ็ต LCD2. Init LCD <<< รีเซ็ตและเริ่มต้น LCD3. Clear LCD <<< LCD ชัดเจน เลื่อนเคอร์เซอร์กลับไปที่ 04.ตำแหน่งเคอร์เซอร์ เช่น:(4:0) <<<กำหนดตำแหน่งเคอร์เซอร์5.เขียนข้อความทดสอบ <<Macro 0 แสดงเมนูมาโครสำหรับโหมด Bus Pirate LCD>(2) <<< เริ่มต้นมาโคร LCD Display lines:1. 1 <<< การแสดงบรรทัดเดียว2. หลายรายการ <<2 ' RESET <<<มาโคร 2 รวมถึงลำดับการรีเซ็ตINIT <<เริ่มต้นมาโคร LCD (2) กำหนดค่าหน้าจอสำหรับโหมดอินเทอร์เฟซ 4 บิต เปิดใช้งานการแสดงเคอร์เซอร์ และตั้งค่าตัวเลือกที่เป็นประโยชน์อื่นๆ กำหนดค่าจำนวนบรรทัดแสดงผล เลือก 1 สำหรับการแสดงบรรทัดเดียว หรือ 2 สำหรับจอภาพอื่นทั้งหมด หลังจากเริ่มต้น หน้าจอควรมีความชัดเจนโดยมีเคอร์เซอร์ปรากฏอยู่ที่มุม หากไม่ได้ผล ให้ตรวจสอบการเชื่อมต่อ I2C ตัวต้านทานแบบดึงขึ้น และแหล่งจ่ายไฟ แล้วลองอีกครั้ง LCD HD44780 จำเป็นต้องรีเซ็ตด้วยลำดับสัญญาณพิเศษก่อนจึงจะสามารถเริ่มต้นสำหรับโหมดอินเทอร์เฟซ 4 บิตหรือ 8 บิตได้ Macro 1 สร้างลำดับนี้ มาโคร 2 มีลำดับการรีเซ็ต ดังนั้นจึงไม่จำเป็นต้องใช้มาโคร 1 ก่อนมาโคร 2

ขั้นตอนที่ 5: ขั้นตอนที่ 3 เขียนอักขระทดสอบ

จอแอลซีดี>(6:80) <<มาโครการเขียนตัวเลขจะเติม LCD ด้วยตัวเลขทดสอบระหว่าง 0 ถึง 9 ตัวเลขหลังเครื่องหมายทวิภาคบอก Bus Pirate ว่าต้องเขียนหมายเลขทดสอบกี่หมายเลข เราใช้ 4x20LCD ดังนั้นเราจึงเขียนตัวเลข 80 ตัวเพื่อเติม สังเกตว่าเคอร์เซอร์สิ้นสุดที่ตำแหน่ง 0 ใต้ '0'. LCD>(7:80) <<มาโครอักขระเขียนจะเติม LCD ด้วยอักขระ ASCII ป้อนปริมาณหลังเครื่องหมายทวิภาค สังเกตว่าเส้นกำปั้นจะดำเนินต่อไปในเส้นที่สาม เส้นที่สามในเส้นที่สอง และเส้นที่สองในเส้นสุดท้าย อักขระไม่ต่อเนื่องเนื่องจาก LCD อักขระไม่ตัดจากบรรทัดหนึ่งไปยังบรรทัดถัดไป เราจะพูดถึงเรื่องนี้อีกเล็กน้อยในภายหลัง

ขั้นตอนที่ 6: ขั้นตอนที่ 4 ล้าง LCD

จอแอลซีดี>(3) <<มาโคร LCD ที่ชัดเจนจะส่งคำสั่ง HD44780 ที่จะลบหน้าจอและคืนเคอร์เซอร์ไปที่ตำแหน่งแรก คุณยังสามารถดำเนินการใดๆ เหล่านี้ได้โดยไม่ต้องใช้มาโคร โปรดดูตารางคำสั่งที่ตอนต้นของส่วนนี้ ป้อน '[0b1' ใน Bus Pirate เพื่อตั้งค่าอินเทอร์เฟซเป็นโหมดคำสั่ง ([) และส่งคำสั่งล้างหน้าจอ HD44780 (0b00000001) โดยไม่มีมาโคร]

ขั้นตอนที่ 7: ขั้นตอนที่ 5. พิมพ์ Text

LCD>(8) <<<ใส่ข้อความผู้ใช้ป้อนข้อความที่จะแทรกที่ตำแหน่งเคอร์เซอร์การสาธิต LCD HD44780 <<หลังจากล้าง LCD ในขั้นตอนที่ 4 เคอร์เซอร์จะอยู่ที่บล็อกแรก เราสามารถตั้งค่าด้วยมาโคร (4:0) ซึ่งย้ายเคอร์เซอร์ไปที่อักขระตัวแรกได้ แทรกข้อความที่แมโครเคอร์เซอร์จะขอป้อนข้อความ จากนั้นคัดลอกไปที่ LCD เมื่อคุณกด Enter. LCD>(4:0x40) <&lt

LCD>(8) <<<ใส่ข้อความป้อนข้อความที่จะแทรกที่ตำแหน่งเคอร์เซอร์ Bus Pirate v2go <<การเขียนบรรทัดที่สองนั้นซับซ้อนกว่าเล็กน้อย จริงๆ แล้วเริ่มต้นที่อักขระ 64 บน LCD 4x20 ถ้าคุณเขียนต่อจากท้ายบรรทัดที่ 1 (อักขระที่ 20) คุณจะจบลงที่จุดเริ่มต้นของบรรทัดที่สาม! หน้านี้มีคอลเลกชันแผนที่หน่วยความจำที่ดีสำหรับขนาด LCD ของตัวละครส่วนใหญ่ อันดับแรก เราวางเคอร์เซอร์ไว้ที่บรรทัดที่สอง (4:0x40) ถัดไป มาโคร 'แทรกข้อความ' จะจับอินพุตของเราและคัดลอกไปยัง LCD. LCD>(4:0x14)(8)(4:0x54)(8) <<<ไวยากรณ์มาโครหลายรายการป้อนข้อความที่จะแทรกที่ตำแหน่งเคอร์เซอร์ Firmware v2.0+ <<<เราพิมพ์ข้อความนี้เพื่อแทรกที่ตำแหน่งเคอร์เซอร์DangerousPrototypes <<Bus Pirate ยอมรับมาโครหลายตัวในบรรทัดเดียวกัน จึงสามารถเขียนทั้งหน้าจอพร้อมกันได้ เราเขียนถึงสองบรรทัดสุดท้ายด้วยไวยากรณ์บรรทัดเดียว เราสามารถใช้ '(3)(4:0)(8)(4:0x40)(8)(4:0x14)(8)(4:0x54) (8)' เพื่อล้าง LCD และเขียนทั้งสี่บรรทัดด้วยรายการไวยากรณ์เดียว

ขั้นตอนที่ 8: ขั้นตอนที่ 6 การอ่านจาก LCD

บอร์ดอะแดปเตอร์ Bus Pirate และ LCD สามารถอ่านได้จาก LCD เราจะอ่านข้อความที่เราเขียนบนหน้าจอ (DDRAM) แต่คุณยังสามารถอ่านการตั้งค่าและ RAM อักขระที่กำหนดเอง (CGRAM) ได้ด้วยการตั้งค่าที่อยู่ที่ถูกต้อง LCD>[0b10000000 '''<<<set the read pointer'' ']HD44780 RS LOW, COMMAND MODE <<<ลงทะเบียนเลือกพิน lowCMD WRITE: 0x80 <<ขั้นแรก เราบอกให้ Bus Pirate ส่งข้อมูลไปยังรีจิสเตอร์คำสั่ง LCD ([) ต่อไป เราใช้คำสั่ง set DDRAM address (0b1xxxxxxx) เพื่อตั้งค่าตัวชี้การอ่านเป็นจุดเริ่มต้นของ DDRAM (xxxxxxx=0000000)]LCD>]rrrrrrr <<<read data memoryHD44780 RS HIGH, DATA MODE <<<ลงทะเบียนเลือก ปักหมุดสูงอ่าน: 0x48 <<< 'อ่าน: 0x44 <<< 'อ่าน: 0x34 <<< '4' อ่าน: 0x34 <<< '4' อ่าน: 0x37 <<< '7' อ่าน: 0x38 < << '8'READ: 0x30 <<< '0'LCD>สุดท้าย บอก Bus Pirate ให้อ่านจากหน่วยความจำข้อมูล (]) แล้วอ่านสองสามไบต์ (rrrrrrr) เราได้รับ "HD44780" ข้อความที่เราเขียนไปยังหน้าจอในขั้นตอนที่ 5 คุณควรสามารถใช้ทางลัด r:7 เพื่ออ่านเจ็ดไบต์ได้ แต่มันไม่ทำงานในเฟิร์มแวร์ปัจจุบัน - เราจะแก้ไขปัญหานี้ก่อน รุ่นถัดไป

ขั้นตอนที่ 9: ทำมากขึ้น

ให้คำอธิบายทั่วไปเกี่ยวกับอแดปเตอร์ LCD อักขระ StepThe HD44780 เป็นอุปกรณ์เสริมที่มีประโยชน์สำหรับ Bus Pirate สามารถใช้สำหรับการทดสอบอย่างรวดเร็วหรือการพัฒนาลอจิกขั้นสูงได้ นอกจาก LCD แล้ว พิน I/O 2.5 โวลต์-5 โวลต์แปดตัวอาจมีประโยชน์สำหรับแอพพลิเคชั่น Bus Pirate ที่มีจำนวนพินสูงอื่นๆ เราสามารถมี PCB, ชุดอุปกรณ์, หรือชุดประกอบที่ผลิตโดย Seeed Studio ในราคาประมาณ $15 รวมทั้งการจัดส่งทั่วโลก เพิ่มเติมที่นี่ ฉันไม่สามารถรวมองค์ประกอบการจัดรูปแบบและตาราง HTML ใน Instructable คุณสามารถดูโพสต์ต้นฉบับได้ที่บล็อก Dangerous Prototypes