|
Работа с EEPROM
| |
mimino | Дата: Воскресенье, 03.02.2013, 22:55 | Сообщение # 31 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Цитата Я пришел к выводу по поводу бегущей строки: Без сдвиговых регистров не обойтись. В них записывать байты и по очереди и сдвигать. А символы всетаки брать с ЕЕПРОМ. Ну сдвиг регистров надо организовать все же программно. Алгоритм там довольно несложный, если разобраться. Рекомендую себе на листике нарисовать как именно должен происходить сдвиг для нескольких моментов времени, тогда алгоритм становится понятным. Цитата Еще у меня новшество, отладочную плату собрал на Tiny-13A. Поздравляю! И как, работает? Цитата Пожалуйста сообщите алгоритм электронных часов. Неплохо и календарь чтоб там был. Тут алгоритм довольно простой. Запускаете таймер, отсчитываете при помощи него секунды. Желательно при этом тактировать его от часового кварца на 32768 Гц, а таймер использовать 16-битный в режиме сброса по совпадению. Тогда можно сделать так, чтобы он срабатывал раз в секунду. А дальше дело техники. Наращиваете секунды, когда достигается 60, обнуляете секунды, добавляете одну минуту. С минутами так же, считаете до 60 и обнуляете. И с часами так же. Установку времени производить в прерывании по нажатию на кнопку. Вот тут придется повозиться, чтобы выводить на дисплей именно то, что требуется. Почитайте хотя бы мою статью про электронные часы. Там есть программа, можете в нее не вчитываться, а вот комментарии к каждой строке там очень подробные, и в них как раз алгоритм весь изложен очень подробно.
|
|
| |
AVRик | Дата: Понедельник, 04.02.2013, 09:05 | Сообщение # 32 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, с контроллера Tiny 13 успел только сосчитать память программ и ЕЕПРОМ, вторая очень маленькая, где то две строки с небольшим .
|
|
| |
mimino | Дата: Понедельник, 04.02.2013, 11:33 | Сообщение # 33 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Да, Владимир, к сожалению ATtiny13 не отличается большими объемами памяти. Если нужно больше при таком же малом размере корпуса, рекомендую обратить внимание на ATtiny45 или ATtiny85
|
|
| |
AVRик | Дата: Понедельник, 04.02.2013, 15:01 | Сообщение # 34 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, я еще прикупил дополнительно Mega-48PA -AU, может пригодится ?
|
|
| |
mimino | Дата: Понедельник, 04.02.2013, 21:50 | Сообщение # 35 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Да, хорошие контроллеры. Типа ATmega8, но с меньшим объемом памяти. Зато в нем появились другие полезные функции, которых нет в ATMega8, у него лучшие частотные и энергетические характеристики.
|
|
| |
AVRик | Дата: Понедельник, 04.02.2013, 22:29 | Сообщение # 36 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей ! Контроллер Tiny 13A испытал, загрузил в нее первую прогу. Начал с АЦП - работает, что интересно цена контроллера 28 р. Только ножек маловато, подойдет для небольших устройств. У меня задумка есть, написать программу прибора пожарного. Суть идеи такова: постоянно измеряя ток на входе контроллера и выдать единицу при увелечении тока более 7 мА. Я понимаю так ток порта привязан к напряжению соответственно чем больше, ток тем ниже напряжение на входе ADC. Но как реализовать контроль канала, что бы его можно было в нужный момент отключить и включить нажатием одной кнопки ? Контроль канала должен быть подпрограммой или в программе находится ? Как правильно реализовать ?
|
|
| |
mimino | Дата: Вторник, 05.02.2013, 23:33 | Сообщение # 37 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Не совсем понял Вашу идею. Но сразу скажу, что насчет тока Вы заблуждаетесь. Нужно измерять падение напряжения на каком-то образцовом сопротивлении, а затем делить это падение напряжения на величину сопротивления. Так по закону у Ома и получится ток. Соответственно, чем больше ток, тем больше падение напряжения. Насчет включения-выключения, возможно лучше использовать прерывание по изменению состояния вывода, чтобы более оперативно на него реагировать.
|
|
| |
AVRик | Дата: Среда, 06.02.2013, 14:35 | Сообщение # 38 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей! Идея этого прибора такова: к порту подключен датчик дыма, через делители он запитывается от 12 В, и подключается к порту контроллера, при попадании дыма в датчик его ток потребления повышается от 50 мкА до 5 мА. Контроллер должен бесконечно считывать порт, при увелечении тока больше максимума выдать команду на другой порт к которому подключено реле звукового оповещателя. Команду на звуковое оповещение выдавать в контрольном режиме, то есть по нажатию кнопки, а если ненадо звука то можно отключить порт реле, нажатием тойже кнопкой. Сергей, я так понимаю деление производить методом вычитания, что бы получить ток? А как это реализовать деление сопротивления на падения напряжения, подсказку если можно. Это должно происходить бесконечно ?Добавлено (06.02.2013, 14:35) --------------------------------------------- Ого, я стал сержантом !!!
|
|
| |
mimino | Дата: Среда, 06.02.2013, 22:02 | Сообщение # 39 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Ну Вы же будете знать величину сопротивления, на котором будете измерять падение напряжения. Например, если у Вас опорное напряжение АЦП будет составлять 5 В, то для тока 5 мА нужно иметь сопротивление 5/0,005= 1 кОм. Вот если поставите такое сопротивление, то численно ток в мА будет равен входному напряжению в В.
Насчет сержанта, ранг автоматически увеличивается при написании определенного количества сообщений
|
|
| |
AVRик | Дата: Четверг, 07.02.2013, 22:38 | Сообщение # 40 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей ! Алгоритм деления разработал такой: находится он в цикле программы clr r21 ; Сброс r21 minus: cpi r20,0 ; Сравниваем с константой нуль brne exit ; Если равно нулю, то выход subi r20,15 ; Вычитаем константу (15 - допустим что это и есть 1кОм) inc r21 ; Увеличивает r21 на единицу rjmp minus exit: В r20 записываем постоянно результат измерения С r21 получаем результат деления Далее определяем сколько будет 5 мА и создаем условие включения реле, если > или = 5 мА. Поделил и далее на следующий цикл и т.д. Вот такой фрагмент алгоритма работы моего будущего прибора.Добавлено (07.02.2013, 22:38) --------------------------------------------- Сергей, алгоритм пришлось доработать, вот этот вариант реально делит.
main: ;Основной цикл программы clr r21 ; Сброс r21 minus: cpi r20,1 ; Сравниваем с константой нуль brlo exit ; Если равно 1, то выход subi r20,10 ; Вычитаем константу (10 - допустим что это и есть 1кОм) inc r21 ; Увеличивает r21 на единицу rjmp minus ; Вычитаем exit: rjmp main ;Конец основного цикла,
|
|
| |
mimino | Дата: Четверг, 07.02.2013, 23:29 | Сообщение # 41 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Вот тут вот у Вас увидел несоответствие: Код brne exit ; Если равно нулю, то выход Условие "если равно" - это команда breq
|
|
| |
AVRик | Дата: Пятница, 08.02.2013, 23:31 | Сообщение # 42 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, как представить 1 кОм в цифровом коде, то есть от 0 - 255 ?
|
|
| |
mimino | Дата: Пятница, 08.02.2013, 23:46 | Сообщение # 43 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир!
Ну вот смотрите. Как я писал ранее, если сопротивление будет равно 1 кОм, то ток в мА будет численно равен напряжению в В. То есть если Вы будете использовать 10-битный АЦП и опорное напряжение 5 В, то ток датчика 5 мА будет равен коду 1024, а код любого другого тока будет определяться как "код = I * 1024/5" или приблизительно "код = I * 205". Тогда, чтобы найти ток, зная величину кода, полученного от АЦП, нужно его разделить на 205, и получится ток в мА.
|
|
| |
AVRик | Дата: Пятница, 08.02.2013, 23:58 | Сообщение # 44 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, а если 8 бит то 256, а как обработать младший и старший регистр ?
|
|
| |
mimino | Дата: Суббота, 09.02.2013, 00:15 | Сообщение # 45 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир, тогда выравниваете результат по левой границе, установив бит ADLAR. И считываете только старший байт результата, а младший просто игнорируете. А расчеты все аналогичные вышеприведенным, только подставляете не 1024, а 256
|
|
| |
| |