Общие сведения по лабораторной работе.




Отчет по лабораторной работе № 3

Вывод данных на жидкокристаллический индикатор

«Проверил» «Выполнили» Студенты кафедры «Электрические станции и автоматизация энергосистем» ИЭиТС:
(должность, фамилия и инициалы преподавателя)
_Терешкин А. В._______________

 

 

(подпись)
«___»______ 2018 г.____________

 

 
(Фамилия и инициалы студента)
_Кирсанова О. В._______________

 

(подпись)
«__»_______2018 г._____________

 
(Фамилия и инициалы студента)
_Чечко А. И.___________________

 

(подпись)
«__»_______2018 г._____________

«Принял»
(должность, фамилия и инициалы преподавателя)
_ Терешкин А. В.______________

 

 

(подпись)
«__»_______2018 г.____________

   
   

Общие сведения по лабораторной работе.

1.1 Цель работы:

  • Дальнейшее знакомство с системой команд AVR-микроконтроллеров;
  • изучение способов подключения и программирования ЖКИ, построенных на базе контроллера HD 44780.

1.2 Объект исследования:

Изучаемое семейство микроконтроллеров позволяет выводить данные на стандартный символьный жидкокристаллический индикатор (ЖКИ), построенный на базе контроллера HD 44780. Такой ЖКИ можно подключить при помощи имеющихся на отладочной плате разъемов, на которые выведены порты ввода/вывода AVR. В основе ЖКИ лежит матрица из жидких кристаллов, подавая напряжение на элемент которой мы можем «зажечь» точку на экране. В нашем случае матрица состоит из знакомест, сгруппированных в несколько рядов. Ими управляет встроенный контроллер HD44780. У контроллера есть однобайтные ячейки памяти (DDRAM), содержимое которых собственно отображается на экране согласно таблице записанной в CGRAM. Ячеек памяти обычно больше чем знакомест в ЖКИ, поэтому важна правильная адресация знакомест. То есть нам необходимо только в нужную позицию записать код нужного знака, а все остальное HD44780 сделает сам.

 

DDRAM — память дисплея. Все что запишется в DDRAM будет выведено на экран. То есть, например, записали мы туда код 0x31 — на экране выскочит символ «1» т.к. 0х31 это ASCII код цифры 1.

 

CGRAM — таблица символов, которую мы можем менять, создавая свои символы. Адресуется она линейно, то есть вначале идет 8 байт одного символа, построчно, снизу вверх — один бит равен одной точке на экране. Всего в CGRAM может быть 8 символов, соответственно CGRAM имеет 64 байта памяти. Эти программируемые символы имеют коды от 0х00 до 0х07. Пример таблицы символов представлен на рис. 1. Символы, содержащиеся в разных ЖКИ могут различаться, в том числе, потому что одни экземпляры русифицированы, другие нет. Кроме того, в наш ЖКИ были занесены также пользовательские символы, поэтому привести здесь точную таблицу именно для конкретного экземпляра затруднительно, но, в качестве примера, рис. 1 дает представление о встроенном знакогенераторе, поэтому рисунок заменять не стали.

LCD на базе HD44780 подключается к AVR микроконтроллеру напрямую к портам. ЖК принимает информацию с помощью D4-D7 (см. рис. 2), которая может быть данными (ASCII код выводимого символа), если на RS логическая единица или командой (очистить экран, перенести курсор и т.п.) если на RS логический ноль.

Рис. 1. Таблица символов, содержащаяся которая может содержаться в ЖКИ[ТАВ1]

  • Выводы DB7…DB0 это шина данных/адреса.
  • E — стробирующий вход. Изменением напряжения на этой линии определяется нужно ли забирать/отдавать данные с/на шину данных.
  • RW — определяет в каком направлении у движутся данные. Если 1 — то на чтение из дисплея, если 0, то на запись в дисплей.
  • RS — определяет что передается, команда (RS=0) или данные (RS=1). Данные будут записаны в память по текущему адресу, а команда исполнена контроллером.
  • GND — минус, он же общий.
  • Vcc — плюс питания
  • V0 — вход контрастности. Сюда нужно подавать напряжение от нуля до напряжения питания, тем самым задается контрастность изображения. А — это вход Анода светодиодной подсветки.
  • К — соответственно Катод

 

Система команд

На ЖКИ можно посылать команды, структура которых строится согласно таблице 1.

Таблица 1. Система команд контроллера HD44780

 

1.3 Элементная база:

В настоящей работе используется многофункциональная аппаратная платформа на основе микроконтроллеров семейства AVR, которые обладают несколькими отличительными особенностями:

  • возможность вычислений со скоростью до 1 MIPS/МГц;
  • FLASH-память программ объемом от 1 до 8 Kбайт (число цикловстирания/записи не менее 1000);
  • память данных на основе статического ОЗУ (SRAM) объемом до 512 байт;
  • память данных на основе ЭСППЗУ (EEPROM) объемом от 64 до 512 байт (число циклов стирания/записи не менее 100000);
  • возможность защиты от чтения и модификации памяти программ иданных (в EEPROM);
  • программирование в параллельном (с использованием программатора) либо в последовательном (непосредственно в системе через последовательный SPI-интерфейс) режимах;
  • различные способы синхронизации: встроенный RC-генератор, внешний сигнал синхронизации или внешний резонатор (пьезокерамический или кварцевый);
  • наличие нескольких режимов пониженного энергопотребления.

Основными характеристиками центрального процессора микроконтроллеров рассматриваемого семейства являются:

  • полностью статическая архитектура; минимальная тактовая частота равна нулю[ТАВ2];

У AVR-микроконтроллеров существует одна важная особенность, которая позволяет реализовать пошаговый режим работы, что особенно удобно при отладке отдельных участков кода не критичных ко времени, так как все AVR полностью статические, их минимальная рабочая частота ничем не ограничена вплоть до пошагового режима. Так как в качестве источника тактирующих импульсов может быть применен внешний тактовый сигнал, то и частота этих импульсов может быть сколь угодно мала, в таких случаях считают, что минимальная частота равна Direct Current (DC). Это означает, что возможно использование МК в пошаговом режиме, например, для отладки.

  • АЛУ подключено непосредственно к регистрам общего назначения;
  • большинство[ТАВ3] команд выполняется за один машинный цикл;

Некоторые команды могут выполняться за разное количество циклов в зависимости от условий, если считать команды, которые в принципе могут выполняться за один цикл, то получается отношение α = 83/136 = 0,61. Здесь 83 – количество команд, которые при тех или иных условиях могут выполняться за один цикл, 136 – общее число команд. Так как больше половины команд могут выполняться за 1 цикл, то утверждение справедливо. Кроме того, в даташитах на микроконтроллеры в этой папке есть фраза «Most Single Clock Cycle Execution», смысл которой совпадает со смыслом фразы «большинство команд выполняется за один машинный цикл»

  • многоуровневая [ТАВ4] система прерываний; поддержка очереди прерываний;

Прерывания в микроконтроллерах представляет собой механизм, который позволяет микроконтроллеру реагировать на внешние события. Этот механизм работает таким образом, что при наступлении некоторого события в процессоре возникает сигнал, заставляющий процессор прервать выполнение текущей программы. Чтобы значительно уменьшить время реакции на внешние события, используются многоуровневые (векторные) прерывания. В векторных прерываниях каждому источнику прерывания соответствует свой, вполне определенный, адрес процедуры обработки прерывания, который принято называть вектором прерывания. Одноуровневая же система прерываний реализована таким образом, что при возникновении прерывания контроллер переходит к подпрограмме обработки прерываний, расположенной по некоторому фиксированному адресу. Все микроконтроллеры семейства AVR имеют многоуровневую векторную систему приоритетных прерываний. Совокупность адресов, задействованных системой прерываний, называют таблицей прерываний. Под таблицу прерываний по умолчанию отводят младшие адреса памяти программ начиная с адреса $0001 (зависит от самого контроллера, а в некоторых контроллерах можно даже менять положение таблицы прерываний).

  • от 3 до 16 источников прерываний3(из них до 2 внешних);
  • наличие программного стека4.1.4. Характеристики подсистемы ввода/вывода.

Основными характеристиками подсистемы ввода/вывода являются:

  • программное конфигурирование и выбор портов ввода/вывода;
  • каждый вывод может быть запрограммирован как входной или каквыходной независимо от других;
  • входные буферы с триггером Шмитта на всех выводах;
  • возможность подключения ко всем входам внутренних подтягивающих резисторов (сопротивление резисторов составляет 35...120 кОм);
  • нагрузочная способность всех выходов составляет до 20 мА, что позволяет непосредственно управлять светодиодными индикаторами.

А также ЖКИ на базе HD44780 со следующими основными особенностями:

  • размер знакоместа 5х8 или 5х10 точек
  • двухстрочный
  • возможность передачи/приема в 4-битном и 8-битном режимах
  • возможность задать собственные символы для отображения
  • напряжение питания 5 В

 

Выполнение работы.

В данной работе необходимо было реализовать программу, которая считывает число с кнопок и выводит на ЖКИ в 8-ой системе счисления. Ниже приведен листинг программы.

1. #include <avr/io.h>

2. #define DataAddress 0xc000

3. #define CommandAddress 0x8000

4. #define Delay40 40

5. #define Delay1000 1000

6. #define Delay1800 1800

7. Temp = 16

8. DataRegister= 26

9. CommandRegister=26

10. Counter = 27

11. DelayLow= 24

12. DelayHigh= 25

13..global main

14. main:

15. ldi r16,hi8(RAMEND)

16. out _SFR_IO_ADDR(SPH),r16

17. ldi R16,lo8(RAMEND)

18. out _SFR_IO_ADDR(SPL),r16

19.

20. init: ldi r18,0x00

21. out _SFR_IO_ADDR(DDRD),r18

22. ldi r18,0x7F

23. out _SFR_IO_ADDR(PORTD),r18

24.

25.

26. ldi r16,0b11000000

27. out _SFR_IO_ADDR(MCUCR),r16

28. ldi CommandRegister,0b00110000

29. rcall SendCommand

30. ldi DelayLow,lo8(Delay40)

31. ldi DelayHigh,hi8(Delay40)

32. rcall Delay

33. ldi CommandRegister,0b00001100

34. rcall SendCommand

35. ldi DelayLow,lo8(Delay40)

36. ldi DelayHigh,hi8(Delay40)

37. rcall Delay

38. ldi CommandRegister,0b00110000

39. rcall SendCommand

40. ldi DelayLow,lo8(Delay40)

41. ldi DelayHigh,hi8(Delay40)

42. rcall Delay

43. ldi CommandRegister,0b00000001

44. rcall SendCommand

45. ldi DelayLow,lo8(Delay1800)

46. ldi DelayHigh,hi8(Delay1800)

47. rcall Delay

48.

49.

50.

51.

52.

53. MainLoop:

54. in r17,_SFR_IO_ADDR(PIND)

55. com r17

56. mov r18,r17

57. andi r17,0b00000111

58. lsr r18

59. lsr r18

60. lsr r18

61. mov r19,r18

62. andi r18,0b00000111

63. lsr r19

64. lsr r19

65. lsr r19

66. andi r19,0b00000111

67. subi r17,-'0'

68. subi r18,-'0'

69. subi r19,-'0'

70.

71. rcall DDRAM_ProgramLoop

72. rcall Delay200000

73.

74. rjmp MainLoop

75.

76. DDRAM_ProgramLoop:

77. ldi CommandRegister,0b10000000

78. rcall SendCommand

79. ldi DelayLow,lo8(Delay40)

80. ldi DelayHigh,hi8(Delay40)

81. rcall Delay

82. mov DataRegister,r19

83. rcall SendData

84. ldi DelayLow,lo8(Delay40)

85. ldi DelayHigh,hi8(Delay40)

86. rcall Delay

87. mov DataRegister,r18

88. rcall SendData

89. ldi DelayLow,lo8(Delay40)

90. ldi DelayHigh,hi8(Delay40)

91. rcall Delay

92. mov DataRegister,r17

93. rcall SendData

94. ldi DelayLow,lo8(Delay40)

95. ldi DelayHigh,hi8(Delay40)

96. rcall Delay

97. ret

98.

99. SendCommand:

100. ldi YL,lo8(CommandAddress)

101. ldi YH,hi8(CommandAddress)

102. st Y,CommandRegister

103. ret

104. SendData:

105. ldi YL,lo8(DataAddress)

106. ldi YH,hi8(DataAddress)

107. st Y,DataRegister

108. ret

109. Delay200000:

110. ldi Temp,200

111. Delay:

112. sbiw DelayLow,1

113. brne Delay

114. ret

 

Комментарии по строчкам:

7-12: описание констант;

13: объявляем main как GLOBAL

15-18: настройка стека;

20-23: настройка портов ввода;

27: устанавливаем биты SRE, SRW регистра внешних прерываний MCUCR в лог. «1», установленный в 1 бит SRE разрешает обращение к внешней SRAM, при установленном в 1 бите SRW к циклу обращения к внешней SRAM добавляется один цикл ожидания.

28: устанавливаем 8 битный интерфейс, 1строка, шрифт 5 х7 точек (см. табл. 1);

29: вызов подпрограммы отправки данных в дисплей;

30-32: создание задержки для корректного обмена данными с дисплеем, т. к. выполнение очередной команды занимает время (см. табл. 1);

33: включить дисплей, курсор;

38: устанавливаем 8 битный интерфейс, 1строка, шрифт 5 х7 точек (см. табл. 1);

43: очистить дисплей и установить курсор в начальную позицию;

54: считываем данные с кнопок;

55: выполняем побитную инверсию;

56: копируем r17 в r18;

57: логическое умножение, оставляем только последние три бита в регистре значимыми;

58-60: выполняем логический сдвиг 3 раза, каждый из сдвигов делит значение на 2, таким образом выполняем деление на 8;

61-66: повторяем 56-60, получаем три разряда в 8-ой системе;

67-69: «прибавляем» к значениям в регистрах ASCII код нуля, чтобы получить ASCII код значений, находящегося в регистрах для корректного отображения на дисплее;

77: после этой команды данные записываются в DDRAM, начиная с адреса 0;

82-96: по очереди записываем в регистр данных байты, содержащиеся в регистрах r19,r18,r17 и отправляем данные на дисплей;

99-103: реализация передачи команд на дисплей;

104-108: реализация передачи данных на дисплей.

 

Выводы.

В ходе выполнения данной работы мы познакомились с возможностью совместной работы микроконтроллера AVR и ЖК экрана. ЖКИ выполнен на базе контроллера HD44780, что облегчает процесс обмена данными между этими устройствами, например, обмен может производится 4-битным способом, а может 8-битным, при этом, чтобы выбрать из двух вариантов, нужно послать команду дисплею, осталльное управление ЖКИ осуществляется также с помощью команд, кроме того, в ЖКИ «зашита» собственная таблица символов, поэтому для отображения того или иного символа достаточно просто передать его ASCII код в дисплей, где он сохраняется в собственной памяти. Нами были освоены базовые навыки работы с ЖК индикаторами, что подтверждается успешно реализованной программой, которая считывает информацию с кнопок и выводит значение в 8-ой системе счисления на ЖК экран.

[ТАВ1]Осторожнее со вставкой информации из источников. Эта таблица не соответствует этому ЖКИ. Он не руссифицирован.

[ТАВ2]Разве контроллер будет работать при нулевой тактовой частоте? Минимальное напряжение питания тоже равно нулю…

[ТАВ3]В https://1drv.ms/f/s!AismyeNLHxbq5nNPCD0E_scrzWHi в папке Литература\Data Sheets файл «AVR instruction set.pdf», стр. 11 и далее, правый столбец таблицы. Посчитайте число команд, выполняющихся за один цикл, и отнесите к общему числу команд.

[ТАВ4]Что это означает?



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-06-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: