Страница 1 из 3

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

Добавлено: Чт фев 20, 2014 18:28:45
ewrey
Добрый день форумчане! Сделал устройство: http://radiokot.ru/circuit/power/charger/20/ , но вот беда, индикатора с ОА не нашёл.
Зато был с ОК, но автор вежливо отказал мне в переделке прошивки. Сам я в прошивке не ам... :(. Исходники в прицепе. Электрически в схему и плату изменения под ОК уже внесены. Помогите пожалуйста, жаль бросать устройство, уже собрано.

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

Добавлено: Пт фев 21, 2014 10:14:02
Gudd-Head
Эх, там даже не исходник, а готовая прошивка!

Но в принципе переделать можно: дизассемблировать; найти упоминания PORTB, PORTD.5, PORTD.6, PORTD.7 и переделать их "1" на "0" и наоборот; снова скомпилировать.
Если никто не вызовется помочь, я могу попробовать.
ewrey писал(а):в схему и плату изменения под ОК уже внесены
Схему на всякий случай выложите.

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

Добавлено: Пт фев 21, 2014 10:23:59
ewrey
Вот схемка, пажалста... :)

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

Добавлено: Пт фев 21, 2014 10:43:35
WiseLord
Gudd-Head писал(а):Эх, там даже не исходник, а готовая прошивка!
Почему же? Там и исходники есть. Правда какие-то странные, не под avr-gcc, и с кучей лишних файлов (*.hci, *.cci, *.cob и прочие)

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

Добавлено: Пт фев 21, 2014 10:45:52
Gudd-Head
Не знаю, м.б. мы разные места смотрим?
http://radiokot.ru/circuit/power/charger/20/02.rar

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

Добавлено: Пт фев 21, 2014 10:52:41
WiseLord
Я про файл, приложенный топикстартером.

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

Добавлено: Пт фев 21, 2014 10:58:43
pyzhman
Может проще схемно инвертировать всё? Железно.

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

Добавлено: Пт фев 21, 2014 11:01:48
ewrey
Плата уже запаяна. Я думал автор без проблем переделает прошивку. А он посылает меня в мягкой форме.

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

Добавлено: Пт фев 21, 2014 11:03:12
pyzhman
Много предлагали?

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

Добавлено: Пт фев 21, 2014 11:05:54
Garin
ewrey писал(а):жаль бросать устройство
:0))))) еврей , всем будет хорошо если вы купите другой индикатор.

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

Добавлено: Пт фев 21, 2014 11:06:59
Gudd-Head
WiseLord писал(а):Я про файл, приложенный топикстартером.
А надо смотреть первоисточники.

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

Добавлено: Пт фев 21, 2014 11:07:42
pyzhman
Там же под CVAVR писано.
Сырцы от автора?

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

Добавлено: Пт фев 21, 2014 11:16:43
Martin76
В исходнике сегменты порт В, на схеме В и D :dont_know:

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

Добавлено: Пт фев 21, 2014 11:24:47
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В шло на них, а земля.

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

Добавлено: Пт фев 21, 2014 11:30:14
Martin76
Есть исходник на Си, зачем придумывать еще что то ?

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

Добавлено: Пт фев 21, 2014 11:33:07
Gudd-Head
WiseLord писал(а):Чтобы заработало с ОК, надо просто проинвертировать эти биты
...
Ну и общие вывод индикатора по-другому коммутировать транзисторами n-p-n, эмиттерами подключенными не к питанию, а земле.
Ага, и в проге заменить поджиг общего вывода не "0", а "1".
Т.е. не просто инвертировать биты в массиве.

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

Добавлено: Пт фев 21, 2014 11:40:20
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-коде так просто, "без поллитры", не разберёшься.

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

Добавлено: Пт фев 21, 2014 15:52:06
ewrey
Прошивка mini_ok1.hex пошла прямо с транзистрами. mini_ok2.hex не прошла, светятся 9.9.9. и ещё кракозябры мигают синхронно...
Щас погоняю во всех режимах.

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

Добавлено: Пт фев 21, 2014 17:30:33
WiseLord
ewrey писал(а): mini_ok1.hex пошла прямо с транзистрами
Странно. Принцип динамической индикации состоит в том, что в конкретный момент времени светятся только сегменты одного знакоместа.
То есть, на выходах PD5, PD6, PD7 контроллера по умолчанию единица, и по ним "бегает" по очереди активный 0, открывающий нужный транзистор, и пускающий ток по активным (лог. 0) сегментам.
В переделанной прошивке инвертированы уровни только выводов сегментов. По PD5-7 же по-прежнему бегает активный 0 на фоне единиц. То есть, фактически, с Вашей переделкой схемы (земля на эмиттерах транзисторов другой полярности) фактически ток должен течь сразу через сегменты двух знакомест (тех, у которых на базах транзисторов единица). Поэтому там могут быть и крякозябры, и всё что угодно. Нужно попробовать исключить транзисторы, как я писал выше.

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

Добавлено: Пт фев 21, 2014 17:35:42
ewrey
Так работает же вроде... :) Я ещё не проверил остальные режимы устройства...