Измеритель разряда литиевых батарей
| |
ВитГо | Дата: Среда, 30.01.2013, 07:17 | Сообщение # 106 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну у любого режима есть ограничения.. потому и режимов так много :-)))
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Среда, 30.01.2013, 12:08 | Сообщение # 107 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот выясняю ответ на свой вопрос тут http://radiokot.ru/forum/viewtopic.php?f=20&t=84296&p=1560915#p1560915
ладно, что-то я от основной темы далеко ушел.... ну дак что? как мигать светодиодом? Цитата тогда придется вручную считать :-) "вручную" - это цикл задержки сделать - как я делал?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Среда, 30.01.2013, 19:36 |
|
| |
ВитГо | Дата: Среда, 30.01.2013, 22:07 | Сообщение # 108 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну либо как ты делал, либо считать периоды таймера..
в принципе можно сделать 3-4 процедуры мигания (кратенькие) и нужную вызывать в главном цикле после получения значения с АЦП главное чтобы места хватило в тиньке на это..
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Среда, 30.01.2013, 22:11 | Сообщение # 109 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ну тогда точно придется однократное АЦП настраивать ?
если делать задержку как я делал, то АЦП будет ее прерывать и мигания будут каждый раз разные ...
Ну хотя нам ведь точность не нужна - можно и так оставить...
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Среда, 30.01.2013, 22:45 | Сообщение # 110 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| почему будут разные ? ты же например прочитал значение АЦП из памяти и пошел мигать ! и пока не отмигаешь до конца (мигнул, выждал паузу) новое значение АЦП не читаешь из памяти..
а то что процесс мигания прерывается прерыванием АЦП - так это не важно при алгоритме который строкой выше !!, и просто в прерывании сохраняешь значение АЦП !!! а будет оно использовано или нет (например из за того что еще пауза между вспышками длиться) - это не важно !!!
так что ничего страшного ! пиши !! пора заканчивать проект :-)))
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 31.01.2013, 12:58 | Сообщение # 111 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата (ВитГо) почему будут разные ? ну если регулировать длительность свечения светодиода через задержку, то эта задержка будет увеличиваться во времени постольку, поскольку ее будет прерывать АЦП ... Но я думаю это не сильно будет заметно... Вечером начну городить....
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 31.01.2013, 13:01 |
|
| |
ВитГо | Дата: Четверг, 31.01.2013, 21:25 | Сообщение # 112 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну чтение АЦП это 10-15 команд - даже не заметишь задержку!
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 31.01.2013, 23:20 | Сообщение # 113 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот уже немного накидал ( осталось процедуру оповещения о текущем напряжении написать )
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Пятница, 01.02.2013, 16:32 | Сообщение # 114 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну в принципе глянул. нормально...
кстати, так ты все таки берешь 10 бит значения от АЦП ?
может быть проще все таки в 8ми битный режим перейти?
по поводу оповещения: если акк севший - то лучше просто зажечь светодиод и зациклиться.. чтобы явно было видно ошибку ! а то два мигания можно как и две банки понять
по поводу других сигналов - ты изменил сигналы что ли ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Пятница, 01.02.2013, 17:13 | Сообщение # 115 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата (ВитГо) кстати, так ты все таки берешь 10 бит значения от АЦП ? ага.
Цитата (ВитГо) может быть проще все таки в 8ми битный режим перейти? если нужно то можно и перейти... но мне придется все значения заново пересчитывать....
Цитата (ВитГо) по поводу оповещения: если акк севший - то лучше просто зажечь светодиод и зациклиться.. чтобы явно было видно ошибку ! а то два мигания можно как и две банки понять Хорошо - переделаю...
Цитата (ВитГо) по поводу других сигналов - ты изменил сигналы что ли ? Каких других ?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Пятница, 01.02.2013, 23:27 |
|
| |
uwrtey | Дата: Суббота, 02.02.2013, 10:29 | Сообщение # 116 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата например полностью заряжена батарея от 4 до 4.2 вольта - одна вспышка в 3 секунды частично разряжена от 3.7 до 4 вольт - 1 вспышка в 2 секунды разряжена от 3.4 до 3.7 вольт - вспышка каждую секунду критический разряд - 2 вспышки в секунду...
Добавлено (02.02.2013, 10:29) --------------------------------------------- Код ;***************************************************************************************** ; процедура вычисления разряда батареи ;*****************************************************************************************
; если 4 банки ;_____________
esli_4:
ldi Temp, 0b00000011 ; 4,0 V ldi Temp1,0b11001110
rcall compare ; сравниваем...
breq bolshe_40 ; переход на обработку когда X=Z brcs bolshe_40 ; переход на обработку когда X<Z rjmp menshe_40 ; переход на обработку когда X>Z
bolshe_40:
ldi Temp8, 4 ; флаг напряжения = 4
rjmp indikaciya
menshe_40:
ldi Temp, 0b00000011 ; 3,7 V ldi Temp1,0b10000101
rcall compare ; сравниваем...
breq bolshe_37 ; переход на обработку когда X=Z brcs bolshe_37 ; переход на обработку когда X<Z rjmp menshe_37 ; переход на обработку когда X>Z
bolshe_37:
ldi Temp8, 3 ; флаг напряжения = 3
rjmp indikaciya
menshe_37:
ldi Temp, 0b00000011 ; 3,4 V ldi Temp1,0b00111100
rcall compare ; сравниваем...
breq bolshe_34 ; переход на обработку когда X=Z brcs bolshe_34 ; переход на обработку когда X<Z rjmp menshe_34 ; переход на обработку когда X>Z
bolshe_34:
ldi Temp8, 2 ; флаг напряжения = 2
rjmp indikaciya
menshe_34:
ldi Temp8, 1 ; флаг напряжения = 1
rjmp indikaciya
сижу и думаю, а может вместо того, что бы писать три процедуры ( по возможному числу банок ) может проще написать процедуру для одной банки, но применить деление.. ? только я не знаю как это организовать... ( тем более, что в тини нет деления )
и второй вопрос - а можно в именах меток использовать запятые ? например "menshe_3,4:"
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 02.02.2013, 14:57 |
|
| |
uwrtey | Дата: Суббота, 02.02.2013, 15:52 | Сообщение # 117 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ну вот что то получилось.
Чуть позже проверю в железе
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 02.02.2013, 19:36 | Сообщение # 118 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| на сколько тебе нужно разделить ? на количество банок ?
чтобы делить на два - сдвинь число один раз вправо
чтобы разделить на 4 - сдвинь число 2 раза вправо
деление на 3 нужно посмотреть.. тоже должно быть не сложно
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Суббота, 02.02.2013, 20:10 | Сообщение # 119 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| придумал как поделить на 3 !!
исходное число (делимое) двигаем влево на 3 бита
сначала исходное число двигаем вправо на 2 позиции потом исходное число двигаем вправо на 3 позиции
потом сложить оба результата сдвига
результат сложения сдвинуть на 3 бита вправо
например, нужно поделить число 12 на 3
пишу в бинари 12 - 1100 сдвиг на 3 бита << 1100000 сдвиг на 2 бита вправо 11000 складываем 11000 + 1100 = 100100 сдвигаем на 3 позиции вправо - 100 (4)
например делим 7 на 3 7=111 сдвиг на 3 бита влево 111000 сдвиг на 2 бита вправо 1110 сложение предыдущего шага с исходным делимым 1110+111=10101 сдвиг на 3 бита вправо 10=2
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 02.02.2013, 22:27 | Сообщение # 120 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Виталий, принимай работу.
правда там не все так, как я хотел сделать... я хотел использовать деление, но на тот момент я не знал как его организовать.. погуглил и нашел ответ ( правда тут про умножение, но суть та-же http://radiogeek.ru/umnozhe....nstantu ) оказалось, что делить на число не кратное степени двойки сложно... ( например число 3 ) НО об этом чуть позже... я использовал десятибиный АЦП - это еще добавило трудностей к делению - вот по этому я отказался от деления... А теперь про то как делить число на 3 Во первых - нужно было использовать восьми битный АЦП а во вторых во флаг можно было записывать числа не 2, 3 и 4 - а 2, 4 и 8 это упростило бы написание кода с делением, что в свою очередь сократило бы весь код.. ( хорошая мысля приходит опосля )
в архиве лежит схема, ASM и HEX
на схеме указано как нужно выкрутить подстроечник ( 5,9 кОм между общим и АЦП ) для более точной настройки нужно крутить подстроечник
дисплей в конечной прошивке не используется...
я как мог так потестил, если кому эта штука принесет пользу - я только рад.
П.С.
вот кстати и само деление 1) http://radiogeek.ru/delenie-metodom-slozheniya 2) http://radiogeek.ru/delenie-na-assemblere-chast-1-obshhie-printsipyi
ссылка на файл для скачивания Индикатор заряда литиевой батареи
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 02.02.2013, 22:34 |
|
| |
|