Кто сможет подправить прошивку ( сегментник с ОА на ОК )

Обсуждаем контроллеры компании Atmel.
Ответить
Электрический кот
Сообщения: 1006
Зарегистрирован: Пн мар 12, 2007 12:18:28
Откуда: Тюмень

Сообщение ewrey »

Добрый день форумчане! Сделал устройство: http://radiokot.ru/circuit/power/charger/20/ , но вот беда, индикатора с ОА не нашёл.
Зато был с ОК, но автор вежливо отказал мне в переделке прошивки. Сам я в прошивке не ам... :(. Исходники в прицепе. Электрически в схему и плату изменения под ОК уже внесены. Помогите пожалуйста, жаль бросать устройство, уже собрано.
Вложения
сырцы.rar
(93.62 КБ) 227 скачиваний
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20104
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Эх, там даже не исходник, а готовая прошивка!

Но в принципе переделать можно: дизассемблировать; найти упоминания PORTB, PORTD.5, PORTD.6, PORTD.7 и переделать их "1" на "0" и наоборот; снова скомпилировать.
Если никто не вызовется помочь, я могу попробовать.
ewrey писал(а):в схему и плату изменения под ОК уже внесены
Схему на всякий случай выложите.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Электрический кот
Сообщения: 1006
Зарегистрирован: Пн мар 12, 2007 12:18:28
Откуда: Тюмень

Сообщение ewrey »

Вот схемка, пажалста... :)
Вложения
Clip_41.jpg
(81.29 КБ) 382 скачивания
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Gudd-Head писал(а):Эх, там даже не исходник, а готовая прошивка!
Почему же? Там и исходники есть. Правда какие-то странные, не под avr-gcc, и с кучей лишних файлов (*.hci, *.cci, *.cob и прочие)
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 20104
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Не знаю, м.б. мы разные места смотрим?
http://radiokot.ru/circuit/power/charger/20/02.rar
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Я про файл, приложенный топикстартером.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Может проще схемно инвертировать всё? Железно.
Docendo discimus
Контактная информация:
Электрический кот
Сообщения: 1006
Зарегистрирован: Пн мар 12, 2007 12:18:28
Откуда: Тюмень

Сообщение ewrey »

Плата уже запаяна. Я думал автор без проблем переделает прошивку. А он посылает меня в мягкой форме.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Много предлагали?
Docendo discimus
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 351
Зарегистрирован: Пн сен 12, 2011 12:13:46

Сообщение Garin »

ewrey писал(а):жаль бросать устройство
:0))))) еврей , всем будет хорошо если вы купите другой индикатор.
Друг Кота
Аватара пользователя
Сообщения: 20104
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

WiseLord писал(а):Я про файл, приложенный топикстартером.
А надо смотреть первоисточники.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Там же под CVAVR писано.
Сырцы от автора?
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20183
Зарегистрирован: Пт фев 04, 2011 17:57:51
Откуда: Рыбинск

Сообщение Martin76 »

В исходнике сегменты порт В, на схеме В и D :dont_know:
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

По идее, можно, наверное, подправить и бинарник прошивки без дизассемблера. В ней встречается следующий код:

Код: Выделить всё

flash unsigned char number[] = 
{
0b00001010, //0
0b10111011, //1
0b10001100, //2
0b10011000, //3
0b00111001, //4
0b01011000, //5
0b01001000, //6
0b10111010, //7
0b00001000, //8
0b00011000, //9
0b01001110, //C 10
0b11001011, //u 11
0b11101101, //r 12
0b01001111, //L 13
0b11101111, //i 14
0b01001101, //t 15
0b01101001, //h 16
0b00011000, //g 17
0b00101000, //A 18
0b10001001, //d 19
0b01011000, //s 20
0b00101100, //P 21
0b01001100  //E 22
};
Или, что то же самое в шестнадцатиричном виде,

Код: Выделить всё

0A BB 8C 98 39 58 48 BA 08 18 4E CB ED 4F EF 4D 69 18 28 89 58 2C 4C
Очевидно, это константы для вывода цифр. Там, где бит 0 - цифра светится, где 1 - нет. То есть, коды эти для ОА. Чтобы заработало с ОК, надо просто проинвертировать эти биты.
То есть алгоритм следующий:
Переводим из hex в bin (можно не делать, но тогда надо пересчитывать контрольные суммы в hex)
Ищем последовательность этих байтов в hex-редакторе и заменяем на другую, в которой инвертированы биты. То есть, на

Код: Выделить всё

F5 44 73 67 C6 A7 B7 45 F7 E7 B1 34 12 B0 10 B2 96 E7 D7 79 A7 D3 B3
Переводим, если надо, bin в hex и прошиваем.

Ну и общие выводы индикатора надо по-другому коммутировать. Чтобы при 0 на базе через открытый транзистор не 5В шло на них, а земля.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20183
Зарегистрирован: Пт фев 04, 2011 17:57:51
Откуда: Рыбинск

Сообщение Martin76 »

Есть исходник на Си, зачем придумывать еще что то ?
Друг Кота
Аватара пользователя
Сообщения: 20104
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

WiseLord писал(а):Чтобы заработало с ОК, надо просто проинвертировать эти биты
...
Ну и общие вывод индикатора по-другому коммутировать транзисторами n-p-n, эмиттерами подключенными не к питанию, а земле.
Ага, и в проге заменить поджиг общего вывода не "0", а "1".
Т.е. не просто инвертировать биты в массиве.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Как вариант (не самый оптимальный, но самый простой) - просто убрать транзисторы, а выводы МК напрямую подключить на общие катоды.
При номиналах резисторов 470 Ом получается меньше 5мА на светодиод, то есть общий ток через вывод МК не будет превышать 40мА, что для МК вполне допустимо. А учитывая, что ток через каждый вывод течёт лишь 1/3 всего времени, то тем более.

P.S. Приложил два hex-файла: первый из переделанного hex из статьи, второй - из сообщения топикстартера. Переделано под ОК, только катоды (выводы 12, 8, 9 индикатора) надо подключать не к коллекторам транзисторов, а напрямую к выводам 9, 10, 11 МК. По идее, должно работать.
Martin76 писал(а):Есть исходник на Си, зачем придумывать еще что то ?
Исходник сам по себе страшный, да и под avr-gcc не подходит.

P.P.S. Кстати, так легко бы не получилось:
Gudd-Head писал(а):в принципе переделать можно: дизассемблировать; найти упоминания PORTB, PORTD.5, PORTD.6, PORTD.7 и переделать их "1" на "0" и наоборот; снова скомпилировать.
Потому как возможность работы с битами поштучно (PORTD.<номер>) - это, похоже, абстракция Codevision. Подозреваю, сказывающаяся на быстродействии ко всему прочему. Дизассемблированный код будет работать с байтами целиком.
А здесь сложность в том, что для управления индикатором для катодов (в оригинальной схеме) используются не один порт B, а мешанина выводов из разных портов (PORTB0-5, PD3, PD4). И в итоговом asm-коде так просто, "без поллитры", не разберёшься.
Контактная информация:
Электрический кот
Сообщения: 1006
Зарегистрирован: Пн мар 12, 2007 12:18:28
Откуда: Тюмень

Сообщение ewrey »

Прошивка mini_ok1.hex пошла прямо с транзистрами. mini_ok2.hex не прошла, светятся 9.9.9. и ещё кракозябры мигают синхронно...
Щас погоняю во всех режимах.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

ewrey писал(а): mini_ok1.hex пошла прямо с транзистрами
Странно. Принцип динамической индикации состоит в том, что в конкретный момент времени светятся только сегменты одного знакоместа.
То есть, на выходах PD5, PD6, PD7 контроллера по умолчанию единица, и по ним "бегает" по очереди активный 0, открывающий нужный транзистор, и пускающий ток по активным (лог. 0) сегментам.
В переделанной прошивке инвертированы уровни только выводов сегментов. По PD5-7 же по-прежнему бегает активный 0 на фоне единиц. То есть, фактически, с Вашей переделкой схемы (земля на эмиттерах транзисторов другой полярности) фактически ток должен течь сразу через сегменты двух знакомест (тех, у которых на базах транзисторов единица). Поэтому там могут быть и крякозябры, и всё что угодно. Нужно попробовать исключить транзисторы, как я писал выше.
Контактная информация:
Электрический кот
Сообщения: 1006
Зарегистрирован: Пн мар 12, 2007 12:18:28
Откуда: Тюмень

Сообщение ewrey »

Так работает же вроде... :) Я ещё не проверил остальные режимы устройства...
Ответить

Вернуться в «AVR»