|
Работа с EEPROM
| |
mimino | Дата: Суббота, 26.01.2013, 22:36 | Сообщение # 16 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир! Ну код программы я оценить не могу, к сожалению так до EEPROM у меня руки и не дошли Насчет кода EEPROM, как-то я не вижу, где именно там записаны цифры от 0 до 9. В каком они формате должны быть записаны?
С дисплеем там все несколько веселей. Рекомендую для начала подключать его по 8-проводной схеме, чтобы не мучиться с делением байтов на полубайты. Инициализация дисплея довольно хорошо описана и в его даташите, и в интернете, ничего особо сложного она не представляет. Да и вообще с этими дисплеями работать - одно удовольствие
|
|
| |
AVRик | Дата: Воскресенье, 27.01.2013, 10:05 | Сообщение # 17 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, код цифр произвольный из головы, а с ЖК дисплеем попробую поработать. В этом случае надо ипользовать упражнение SOS, записанные байты подряд ?
|
|
| |
mimino | Дата: Воскресенье, 27.01.2013, 12:11 | Сообщение # 18 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| В принципе, можно и записывать байты подряд. А можно просто загружать нужные байты командой ldi. Главное - инициализировать дисплей, для этого нужно подать последовательность то ли из 3, то ли из 4 байт. Поскольку это немного, можно и не городить сохранение их в flash-памяти. Ну а там, в итоге Вам решать
|
|
| |
AVRик | Дата: Понедельник, 28.01.2013, 22:31 | Сообщение # 19 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Хорошо Сергей, буду пробовать работать с дисплеем :yes:
Добавлено (27.01.2013, 19:40) --------------------------------------------- Сергей, результат нулевой с дисплеем, может что-то недописал ?
;#################################### ;# # ;# ATmega-8 # ;# # ;#################################### .include "m8def.inc"; Присоединение файла описания .org 0 ;Задание нулевого адреса старта программы rjmp reset ;Безусловный переход к метке reset reset: ;Начало раздела инициализации контроллера ldi r16,high(ramend) ; Загрузка в r16 верхней границы ОЗУ out SPH,r16 ; Копипрование значений в r16 верхней границы ОЗУ ldi r16,low(ramend) out SPL,r16 ser r17 ;Загрузка в регистр r17 единицы out DDRB, r17 ;Копирование из r17 в DDRB (РВ0 - выход) ldi r17,1|(3<<1) out DDRD,r17 ;Включение подтягивающего резистора на входе РВ2
rcall delay ;Инициализация дисплея cbi PortD,0 cbi PortD,1 ldi r17,0b00110000 ; Установка разрядности интерфейса out PortB,r17 ; В порт В rcall delay ; Задержка ldi r17,0b00110000 out PortB,r17 ldi r17,0b00110000 out PortB,r17 rcall delay ldi r17,0b00111000 ; Установка параметров out PortB,r17 ldi r17,0b00001000 ; Выключение дисплея out PortB,r17 ldi r17,0b00000001 ; Очистка дисплея out PortB,r17 ldi r17,0b00000110 ; Установка режима ввода данных out PortB,r17 rcall delay sbi PortD,1 ; Е=1 ldi r18,0x80 ; Адрес ячейка out PortB,r18 cbi PortD,1 ; Е=0 rcall delay sbi PortD,0 ; RS=1 запись данных sbi PortD,1 ; Е=1 ldi r18,0xA0 ; Запись буквы Б out PortB,r18 cbi PortD,1 ; Е=0 cicle: nop rjmp cicle
delay: ;Начало подпрограммы задержки ldi r19, 255 ;Загрузка значения в регистр r18 ldi r20, 63 ;Загрузка значения в регистр r19 del: ;Цикл задержки subi r19, 1 ;Вычитание 1 из регистра r18 sbci r20, 0 ;Вычитание 0 из регистра r19 с учетом переноса brcc del ;Если не было переноса вернуться к метке del ret ;Возврат из подпрограммы
Добавлено (28.01.2013, 21:28) --------------------------------------------- Сергей ! Прошу, помощи активации дисплея и вывода символов. Все сайты пишут на СИ хотелось бы ассемблере научиться.
Добавлено (28.01.2013, 22:31) --------------------------------------------- Немогу инициализировать дисплей, Displaytronic PCB-1602S-04. Даташит для него ненашел, у всех дисплеев информация разная, как быть
Сообщение отредактировал AVRик - Понедельник, 28.01.2013, 22:33 |
|
| |
mimino | Дата: Вторник, 29.01.2013, 02:20 | Сообщение # 20 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Простите, не сразу увидел Ваши сообщения. Меня несколько смущает инициализация дисплея. Во-первых, непонятно, зачем 3 раза в начале записывать в него один и тот же код.
Цитата ldi r17,0b00110000 ; Установка разрядности интерфейса out PortB,r17 ; В порт В rcall delay ; Задержка ldi r17,0b00110000 out PortB,r17 ldi r17,0b00110000 out PortB,r17 rcall delay Во-вторых, меня несколько смущает задержка. На сколько мкс Вы ее сделали? Там же для разных команд задержка несколько отличается.
Вот процедура инициализации, что я делал, с учетом того, что была несколько иная схема: ldi r18,0x38 out portb,r18 rcall delay
ldi r18,0x01 out portb,r18 rcall delay
ldi r18,0x06 out portb,r18 rcall delay
ldi r18,0x0C out portb,r18 rcall delay
delay: ldi r16,0x0F ldi r17,0xFF delay1: subi r17,1 sbci r16,0 brcc delay1 ret
|
|
| |
AVRик | Дата: Вторник, 29.01.2013, 23:05 | Сообщение # 21 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей ! Бьюс с этим дисплеем выбросить хочется. Пытаюсь вывести один символ на дисплей результат нулевой. Может Ассемблер не пригоден для работы с дисплеем ? Весь интернет завален кодами на СИ, но я их не понимаю ! Что -то не так я пишу или Ассемблер не пригоден для написания программы ? Задержки вставил для команды на выводе Е. Что не так ? Или дело во мне ?
;#################################### ;# Пример # ;# на ATmega-8 # ;# # ;#################################### .include "m8def.inc"; Присоединение файла описания .org 0 ;Задание нулевого адреса старта программы rjmp reset ;Безусловный переход к метке reset ;.org 4 ;Адрес, с которого начинается расположение констант ;.db 0b11010101, 0b11000100, 0b01000111, 0b01010111; Константы в памяти прогр. reset: ;Начало раздела инициализации контроллера ldi r16,high(ramend) ; Загрузка в r16 верхней границы ОЗУ out SPH,r16 ; Копипрование значений в r16 верхней границы ОЗУ ldi r16,low(ramend) out SPL,r16 ser r17 ;Загрузка в регистр r17 единицы out DDRB, r17 ;Копирование из r17 в DDRB (РВ - выход) ldi r17,1|(3<<1) out DDRD,r17 ;Копирование из r17 в DDRB (РВ0,1 - выходы) rcall delay sbi PortD,1 ; Е=1 rcall delay ldi r18,0x30 ; Установка разрядности дисплея 8 out portb,r18 cbi PortD,1 ; Е=0 rcall delay sbi PortD,1 ; Е=1 rcall delay ldi r18,0x38 out portb,r18 cbi PortD,1 ; Е=0 rcall delay sbi PortD,1 ; Е=1 rcall delay ldi r18,0x01 out portb,r18 cbi PortD,1 ; Е=0 rcall delay sbi PortD,1 ; Е=1 rcall delay ldi r18,0x06 out portb,r18 cbi PortD,1 ; Е=0 rcall delay sbi PortD,1 ; Е=1 rcall delay ldi r18,0x0C out portb,r18 cbi PortD,1 ; Е=0 rcall delay
sbi PortD,1 ; Е=1 rcall delay ldi r18,0x0E out portb,r18 ; Вкл дисплея cbi PortD,1 ; Е=0 rcall delay
sbi PortD,1 ; Е=1 rcall delay ldi r18,0x38 ; Установка разрядности out portb,r18 cbi PortD,1 ; Е=0 rcall delay sbi PortD,1 ; Е=1 rcall delay ldi r18,0x81 ; Выбор области DDRAM out portb,r18 cbi PortD,1 ; Е=0 rcall delay sbi PortD,0 ; RS=1 запись данных sbi PortD,1 ; Е=1 rcall delay ldi r18,0xA0 out portb,r18 ; Запись буквы Б;out PortB,r18 cbi PortD,1 ; Е=0 cbi portd,0 cicle: nop rjmp cicle
delay: ldi r16,0x0F ldi r17,0xFF delay1: subi r17,1 sbci r16,0 brcc delay1 ret
Сообщение отредактировал AVRик - Вторник, 29.01.2013, 23:06 |
|
| |
mimino | Дата: Вторник, 29.01.2013, 23:40 | Сообщение # 22 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Я думаю, что Ассемблер тут не при чем. У Вас тут много всего понамешано, видимо, от незнания, какая команда за что отвечает. Я Вам рекомендую почитать статью С.М. Рюмика "Микроконтроллеры AVR. Ступень 6" в журнале Радиоаматор, №6 за 2005 год, стр. 35-39. Там крайне доходчиво описано все, приведены таблички с кодами, диаграммы сигналов на выводах контролера для работы с дисплеем. Я до сих пор, когда надо работать с дисплеями, возвращаюсь к этой статье, лучшего я не находил.
|
|
| |
mimino | Дата: Суббота, 02.02.2013, 02:28 | Сообщение # 23 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Что-то вы давно молчите... Как Ваши успехи? Все получается или, наоборот, ничего не получается?
|
|
| |
AVRик | Дата: Суббота, 02.02.2013, 10:13 | Сообщение # 24 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей ! Все получилось, символы вывел на дисплей. Я хочу задать вопрос: в кирилице не все символы могу вывести т.к. там есть страницы 0 и 1. Ноль выводится, а страница 1 не получается, не могу найти команду для вывода Все бьюсь с бегущей строкой, теперь в дисплее. Написал в программе инкремент по адрессу символов, но происходит перезапись строк, надо их одновременно удалять следом за записью. Пока не нашел алгоритма. В СИ весь интенрет завален этим алгоритмом, но Ассемблере надо самому думать.
Добавлено (02.02.2013, 10:13) --------------------------------------------- Да забыл спросить. Микросхемы мне прислали ATtiny 13, хочу схемку спросить, как создать отладочный модуль. Меня волнует резистор на 10К, подключенный к порту РВ5. Нужна ли джамперная перемычка для программирования.
Сообщение отредактировал AVRик - Суббота, 02.02.2013, 10:14 |
|
| |
mimino | Дата: Суббота, 02.02.2013, 15:05 | Сообщение # 25 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Не совсем понял, о каких страницах Вы говорите. Я выводил символы просто, передавая в дисплей их коды от 0x00 до 0xFF. Соответствие кодов реальным символам приведено в той же статье Рюмика.
Алгоритм бегущей строки так сразу в голову и не приходит. Лучше всего создавать массив с количеством элементов, равным длине строки, и записывать в него часть нужной надписи, постепенно сдвигая ее вправо.
Что касается отладочной платы на ATtiny 13, я никаких перемычек не устанавливал, 10 кОм не мешают программированию.
И еще просьба: Вы лучше вместо добавлений к предыдущему кмментарию пишите новый комментарий, иначе не приходят уведомления о том, что на форуме появилось что-то новое, поэтому могу просто пропустить запись, я ведь не каждый день сюда захожу...
|
|
| |
AVRик | Дата: Суббота, 02.02.2013, 23:40 | Сообщение # 26 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| А для работы порта ?
Добавлено (02.02.2013, 19:59) --------------------------------------------- Сергей, я о русскоязычных дисплеях. Там есть 2 страницы, памяти кодов.
Добавлено (02.02.2013, 20:02) --------------------------------------------- Что -то не получается добавить коментарий.Добавлено (02.02.2013, 20:07) ---------------------------------------------
Цитата И еще просьба: Вы лучше вместо добавлений к предыдущему кмментарию пишите новый комментарий, иначе не приходят уведомления о том, что на форуме появилось что-то новое, поэтому могу просто пропустить запись, я ведь не каждый день сюда захожу... Новый комментарий.Добавлено (02.02.2013, 23:40) ---------------------------------------------
Цитата (AVRик) Да забыл спросить. Микросхемы мне прислали ATtiny 13, хочу схемку спросить, как создать отладочный модуль. Меня волнует резистор на 10К, подключенный к порту РВ5. Нужна ли джамперная перемычка для программирования. Попытка добавить отдельный коментарий
Сообщение отредактировал AVRик - Суббота, 02.02.2013, 20:02 |
|
| |
mimino | Дата: Воскресенье, 03.02.2013, 01:19 | Сообщение # 27 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Я посмотрел присланный Вами файлик. Честно говоря, я вижу подобное впервые. Поэтому не могу сказать, как перейти на вторую страницу кодов. Я же сам пользовался только первой. Недостающие буквы кириллицы я брал из латиницы, которые имеют одинаковое начертание, например, вместо русской буквы Р брал латинскую P и т.д.
Насчет резистора. Его можно не устанавливать. Внутри контроллера есть внутренняя схема сброса, поэтому внешний резистор может быть нужен только при наличии больших помех.
Насчет комментариев. Вы, видимо, не так меня поняли. Я имел в виду, каждую новую мысль писать в новом сообщении. Например, насчет предыдущего сообщения мне пришло только вот такое уведомление: Цитата Пользователь: AVRик Время добавления: Суббота, 02.02.2013, 19:03 Текст сообщения: ------------------- А для работы порта ? ------------------- А тут оказалась куча добавлений
|
|
| |
AVRик | Дата: Воскресенье, 03.02.2013, 09:28 | Сообщение # 28 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, первое сообщение раздельное, а последующие включаются в первое. Раздельно писать не получается. Добавлено (03.02.2013, 09:25) --------------------------------------------- Вот второе сообщение добавляю следом. Добавлено (03.02.2013, 09:28) --------------------------------------------- Что нужно делать, что бы они стали раздельными ?
|
|
| |
mimino | Дата: Воскресенье, 03.02.2013, 13:23 | Сообщение # 29 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Все, я понял, Владимир!
Видимо, это недостаток самого движка форума... Буду тогда просто проверять почаще форум, я не знаю, как их разделять
|
|
| |
AVRик | Дата: Воскресенье, 03.02.2013, 21:02 | Сообщение # 30 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей! Я пришел к выводу по поводу бегущей строки: Без сдвиговых регистров не обойтись. В них записывать байты и по очереди и сдвигать. А символы всетаки брать с ЕЕПРОМ.
Еще у меня новшество, отладочную плату собрал на Tiny-13A. Сергей, еще вопросик. Пожалуйста сообщите алгоритм электронных часов. Неплохо и календарь чтоб там был.
|
|
| |
| |