Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
computer:raspberrypi:displays [2013/07/22 22:35] ristigl [mini-Displays] |
computer:raspberrypi:displays [2018/03/16 21:11] (aktuell) |
||
---|---|---|---|
Zeile 12: | Zeile 12: | ||
{{ :computer:raspberrypi:raspberry-pi-display-aufbau.png}} | {{ :computer:raspberrypi:raspberry-pi-display-aufbau.png}} | ||
+ | <code python> | ||
+ | #!/usr/bin/python | ||
+ | import time | ||
+ | import RPi.GPIO as GPIO | ||
- | Kleines Skipt, um Daten von der Shell anzeigen zu können: | + | # Zuordnung der GPIO Pins (ggf. anpassen) |
+ | DISPLAY_RS = 7 | ||
+ | DISPLAY_E = 8 | ||
+ | DISPLAY_DATA4 = 25 | ||
+ | DISPLAY_DATA5 = 24 | ||
+ | DISPLAY_DATA6 = 23 | ||
+ | DISPLAY_DATA7 = 18 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | DISPLAY_WIDTH = 16 # Zeichen je Zeile | ||
+ | DISPLAY_LINE_1 = 0x80 # Adresse der ersten Display Zeile | ||
+ | DISPLAY_LINE_2 = 0xC0 # Adresse der zweiten Display Zeile | ||
+ | DISPLAY_CHR = True | ||
+ | DISPLAY_CMD = False | ||
+ | E_PULSE = 0.00005 | ||
+ | E_DELAY = 0.00005 | ||
+ | |||
+ | def main(): | ||
+ | GPIO.setmode(GPIO.BCM) | ||
+ | GPIO.setup(DISPLAY_E, GPIO.OUT) | ||
+ | GPIO.setup(DISPLAY_RS, GPIO.OUT) | ||
+ | GPIO.setup(DISPLAY_DATA4, GPIO.OUT) | ||
+ | GPIO.setup(DISPLAY_DATA5, GPIO.OUT) | ||
+ | GPIO.setup(DISPLAY_DATA6, GPIO.OUT) | ||
+ | GPIO.setup(DISPLAY_DATA7, GPIO.OUT) | ||
+ | |||
+ | display_init() | ||
+ | |||
+ | lcd_byte(DISPLAY_LINE_1, DISPLAY_CMD) | ||
+ | lcd_string("Schnatterente") | ||
+ | lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD) | ||
+ | lcd_string("Nak nak nak!") | ||
+ | |||
+ | time.sleep(5) | ||
+ | |||
+ | lcd_byte(DISPLAY_LINE_1, DISPLAY_CMD) | ||
+ | lcd_string("Dein Display") | ||
+ | lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD) | ||
+ | lcd_string("funktioniert! :)") | ||
+ | |||
+ | time.sleep(5) | ||
+ | GPIO.cleanup() | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | def display_init(): | ||
+ | lcd_byte(0x33,DISPLAY_CMD) | ||
+ | lcd_byte(0x32,DISPLAY_CMD) | ||
+ | lcd_byte(0x28,DISPLAY_CMD) | ||
+ | lcd_byte(0x0C,DISPLAY_CMD) | ||
+ | lcd_byte(0x06,DISPLAY_CMD) | ||
+ | lcd_byte(0x01,DISPLAY_CMD) | ||
+ | |||
+ | def lcd_string(message): | ||
+ | message = message.ljust(DISPLAY_WIDTH," ") | ||
+ | for i in range(DISPLAY_WIDTH): | ||
+ | lcd_byte(ord(message[i]),DISPLAY_CHR) | ||
+ | |||
+ | def lcd_byte(bits, mode): | ||
+ | GPIO.output(DISPLAY_RS, mode) | ||
+ | GPIO.output(DISPLAY_DATA4, False) | ||
+ | GPIO.output(DISPLAY_DATA5, False) | ||
+ | GPIO.output(DISPLAY_DATA6, False) | ||
+ | GPIO.output(DISPLAY_DATA7, False) | ||
+ | if bits&0x10==0x10: | ||
+ | GPIO.output(DISPLAY_DATA4, True) | ||
+ | if bits&0x20==0x20: | ||
+ | GPIO.output(DISPLAY_DATA5, True) | ||
+ | if bits&0x40==0x40: | ||
+ | GPIO.output(DISPLAY_DATA6, True) | ||
+ | if bits&0x80==0x80: | ||
+ | GPIO.output(DISPLAY_DATA7, True) | ||
+ | time.sleep(E_DELAY) | ||
+ | GPIO.output(DISPLAY_E, True) | ||
+ | time.sleep(E_PULSE) | ||
+ | GPIO.output(DISPLAY_E, False) | ||
+ | time.sleep(E_DELAY) | ||
+ | GPIO.output(DISPLAY_DATA4, False) | ||
+ | GPIO.output(DISPLAY_DATA5, False) | ||
+ | GPIO.output(DISPLAY_DATA6, False) | ||
+ | GPIO.output(DISPLAY_DATA7, False) | ||
+ | if bits&0x01==0x01: | ||
+ | GPIO.output(DISPLAY_DATA4, True) | ||
+ | if bits&0x02==0x02: | ||
+ | GPIO.output(DISPLAY_DATA5, True) | ||
+ | if bits&0x04==0x04: | ||
+ | GPIO.output(DISPLAY_DATA6, True) | ||
+ | if bits&0x08==0x08: | ||
+ | GPIO.output(DISPLAY_DATA7, True) | ||
+ | time.sleep(E_DELAY) | ||
+ | GPIO.output(DISPLAY_E, True) | ||
+ | time.sleep(E_PULSE) | ||
+ | GPIO.output(DISPLAY_E, False) | ||
+ | time.sleep(E_DELAY) | ||
+ | |||
+ | if __name__ == '__main__': | ||
+ | main() | ||
+ | |||
+ | </code> | ||
+ | |||
+ | Kleines Skipt, um Daten von der Shell anzeigen zu können: [[computer:raspberrypi:programme:display_from_shell|]] | ||
==== Datenblätter ==== | ==== Datenblätter ==== | ||
Zeile 31: | Zeile 139: | ||
Zwar werden die Monitore mit 12 von außen versorgt, der Betrieb erfolgt aber intern mit 5V. Also wird die 12V-Spannung, die auch unregelmäßiger sein kann als die Versorgung beim RaspberryPi auf 12V gedrosselt. Hierfür ist der kleine Chip XL1509 zuständig. Das Datenblatt (http://bbs.dianyuan.com/bbs/u/65/1617951209993662.pdf oder {{:computer:raspberrypi:xl1509.pdf|}}) ergibt, dass man 5V an den Pin 2 anlegen muss. | Zwar werden die Monitore mit 12 von außen versorgt, der Betrieb erfolgt aber intern mit 5V. Also wird die 12V-Spannung, die auch unregelmäßiger sein kann als die Versorgung beim RaspberryPi auf 12V gedrosselt. Hierfür ist der kleine Chip XL1509 zuständig. Das Datenblatt (http://bbs.dianyuan.com/bbs/u/65/1617951209993662.pdf oder {{:computer:raspberrypi:xl1509.pdf|}}) ergibt, dass man 5V an den Pin 2 anlegen muss. | ||
- | Zu beachten ist weiterhin, dass das Netzteil mehr Spannung liefern muss. Mein Pi läuft zwa mit dem Monitor, beim Hereinstecken in die USB-Buchse bootet der Pi aber neu. Ich nutzte 5V mit 1A. | + | Zu beachten ist weiterhin, dass das Netzteil mehr Strom liefern muss. Mein Pi läuft zwar mit dem Monitor, beim Hereinstecken in die USB-Buchse bootet der Pi aber neu. Ich nutzte 5V mit 1A. |
Quellen: | Quellen: |