כבר כמה זמן שאני "חם" על תצוגת LCD קטנה כדי שאוכל לחבר אותה ל- Raspberry Pi ולהציג מידע פשוט ממנו. כל מכשיר שאני רואה עם תצוגה כזו צריך לחשוש ממני...
היתה נותנת את התוצאה המתבקשת, "1234567890123456" על המסך.
הרצה:
אחרי שתצוגה אחת שכזו אכזבה אותי ופשוט לא עבדה, בסופו של דבר נפל לידי מכשיר פקס ישן (שזוגתי מצאה לי בשוק "קח-תן") עם תצוגת LCD בעלת שורה אחת של 16 ספרות. מצאתי הסבר פשוט ומעולה באתר rpiblog.com, שהסביר איך לחבר, ובאופן מפתיע זה עבד די בנסיון הראשון!
שנצלול לפרטים?
מסתבר שרוב התצוגות הללו משתמשות בתקן אחיד שנקרא HD44780. כיוון שכך, אותו קוד שפרסם Rahul Kar בבלוג המוזכר לעיל, עובד עם תצוגת אחרות. היו שני הבדלים שנדרשתי לתת עליהם את הדעת:
- פין 3, שאחראי על ה- contrast של התצוגה - ראול חיבר אותה ישר ל-GND. אצלי זה יצא חזק מדי והיה קשה לראות מה כתוב. אני השתמשתי בנגד של (10kΩ) אוהם.
- התצוגה שלי היתה בעלת שורה אחת של 16 תווים, אבל התנהגה כתצוגה של 2 שורות של 8 תווים כ"א. כלומר, הדפסה של
1234567890123456
היתה מציגה "12345678" על המסך. אבל הדפסה של
12345678\n90123456
אני מצרף את הקוד של ראול עם שינויים קטנים שלי. קודם כל הוספתי את ניקוי ה- GPIO בסוף (בהמלצת אחד המגיבים). בנוסף, שיניתי את שורת ההדפסה כך שהיא תדפיס את שני הארגומנטים משורת הפקודה ישירות.
#!/usr/bin/python import RPi.GPIO as GPIO import sys from time import sleep class HD44780: def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]): self.pin_rs=pin_rs self.pin_e=pin_e self.pins_db=pins_db GPIO.setmode(GPIO.BCM) GPIO.setup(self.pin_e, GPIO.OUT) GPIO.setup(self.pin_rs, GPIO.OUT) for pin in self.pins_db: GPIO.setup(pin, GPIO.OUT) self.clear() def clear(self): """ Blank / Reset LCD """ self.cmd(0x33) # $33 8-bit mode self.cmd(0x32) # $32 8-bit mode self.cmd(0x28) # $28 8-bit mode self.cmd(0x0C) # $0C 8-bit mode self.cmd(0x06) # $06 8-bit mode self.cmd(0x01) # $01 8-bit mode def cmd(self, bits, char_mode=False): """ Send command to LCD """ sleep(0.001) bits=bin(bits)[2:].zfill(8) GPIO.output(self.pin_rs, char_mode) for pin in self.pins_db: GPIO.output(pin, False) for i in range(4): if bits[i] == "1": GPIO.output(self.pins_db[::-1][i], True) GPIO.output(self.pin_e, True) GPIO.output(self.pin_e, False) for pin in self.pins_db: GPIO.output(pin, False) for i in range(4,8): if bits[i] == "1": GPIO.output(self.pins_db[::-1][i-4], True) GPIO.output(self.pin_e, True) GPIO.output(self.pin_e, False) def message(self, text): """ Send string to LCD. Newline wraps to second line""" for char in text: if char == '\n': self.cmd(0xC0) # next line else: self.cmd(ord(char),True) if __name__ == '__main__': lcd = HD44780() lcd.message(sys.argv[1] +"\n"+sys.argv[2])
הרצה:
sudo python lcd.py first second
על המסך אמורות הופיע שתי המילים first ו- second, אחת בכל שורה (או במקרה שלי, באותה שורה).
אין תגובות:
הוסף רשומת תגובה