Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Аппаратные модули
  3. Экраны
  4. Подключение текстового экрана к Raspberry

Подключение текстового экрана к Raspberry

Запланировано Прикреплена Закрыта Перенесена Экраны
2 Сообщения 1 Posters 49 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано
    #1

    Подключил текстовый LCD по схеме представленной ниже. Как положено загораются нижние сегменты в виде закрашенных квадратов и на этом все. На запуск программы из терминала по рутом никак не реагирует. Если запускать через Python, то пишет ошибку Traceback (most recent call last):
    File "/home/pi/Desktop/lcd.py", line 107, in <module>
    main()
    File "/home/pi/Desktop/lcd.py", line 36, in main
    GPIO.setup(DISPLAY_E, GPIO.OUT)
    RuntimeError: No access to /dev/mem. Try running as root!

    Экспериментировал с доской, резисторами и с пинами (в том числе и в коде). Вот уже почти месяц бьюсь над таким пустяком. Нужно выводить на экран частоту ЦП и температуру.

    Код программы:
    import time
    import RPi.GPIO as GPIO
    import os

    DISPLAY_RS = 7
    DISPLAY_E = 8
    DISPLAY_DATA4 = 25
    DISPLAY_DATA5 = 24
    DISPLAY_DATA6 = 23
    DISPLAY_DATA7 = 18

    DISPLAY_WIDTH = 16
    DISPLAY_LINE_1 = 0x80
    DISPLAY_LINE_2 = 0xC0
    DISPLAY_CHR = True
    DISPLAY_CMD = False
    E_PULSE = 0.00005
    E_DELAY = 0.00005

    def get_cpu_temp():
    tempFile = open("/sys/class/thermal/thermal_zone0/temp")
    cpu_temp = tempFile.read()
    tempFile.close()
    return float(cpu_temp)/1000

    def get_cpu_speed():
    tempFile = open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")
    cpu_speed = tempFile.read()
    tempFile.close()
    return float(cpu_speed)/1000

    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(&quot;CPU Temp: &quot; + str(round(get_cpu_temp(), 2)))
        lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD)
        lcd_string(&quot;CPU Speed: &quot; + str(round(get_cpu_speed(), 2)))
    
        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()

    /><img

    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано
      #2

      А контрастность экрана настроена? Подключите к экрану переменный резистор для регулировки контраста. Может в этом проблема.
      Да и программа огромная какая-то. Для этого экрана куча библиотек, которые упрощают жить. В том же wiringPi вроде есть библиотека для управления таким экраном.

      1 ответ Последний ответ
      0

      • Войти

      • Нет учётной записи? Зарегистрироваться

      • Login or register to search.
      • Первое сообщение
        Последнее сообщение
      0
      • Категории
      • Главная
      • Документация
      • Последние
      • Пользователи