T.E.S.T.C.O.P.Y. • Просмотр темы - PortableProg v3.0. - полностью автономный программатор 24cXX

PortableProg v3.0. - полностью автономный программатор 24cXX

инструмент, переходники к программаторам, программаторы и т.д.

Актуален ли данный проект на сегодняшний день? Нужна ли этому проекту поддержка SPI Flash?

1. Да, возможно соберу себе такой
30 
60%
2. Да, но не для меня
6%
3. Нет, совсем не актуален все эти модели выкинули уже на помойку :(
14%
4. Нет, поддержка SPI Flash совсем не актуальна в данном проекте.
4%
5, Да , не мешало бы сделать поддержку SPI Flash в данном проекте (в комментариях можете написать с какой целью).
16%
 
Всего голосов : 50

Прилепить пост

Сообщение Krepton85 » Пт июл 14, 2017 5:06 pm

Не, корпус та все равно нужен.
Аватар пользователя
Krepton85   
Разработчик PortableProg

Прилепить пост

Сообщение brultary » Сб июл 15, 2017 12:26 pm

Все таки подумали бы об избавлении от LCD и лишних кнопок. Дописали код: считал модель с чипа, в корне карточки по имени нашел нужный дамп прошил...вот это автономность.

За это сообщение автора brultary поблагодарил:
Mihal
Рейтинг: 2.7%
 
Аватар пользователя
brultary   
Увидел чернила

Прилепить пост

Сообщение Krepton85 » Вс июл 16, 2017 12:18 am

brultary, как реализовывать все это? Прошивка (скетч) должен как то определять модель прочитанного дампа т.е. у каждого дампа должен быть уникальный идентификатор, где его будем хранить? В самом скетче? Это лишает универсальности по моделям и доставляет неудобство пользователю, если скажем он захочет добавить новую модель. Если хранить идентификаторы дампов на Sd card в одном файле, то нужно как им то образом одновременно читать и дамп и содержимое файла - оперативы не хватит (sd card их отжирает неимоверно). Либо идентификатор хранить в имени файла, но тут опять же неудобство для пользователя, он не поймет какой дамп от какой модели.
Для ваших целей проще отказаться вообще от sd card, кнопок, и дисплея - и этим самым жестко ограничить функционал.
Да такой рессетер был уже от Князя, но много ли людей смогут в его добавить новых моделей?
Так же был похожий программатор почти как у меня на МК PIC, тоже с кнопками и дисплеем, но вместо SD Card здаровенная внешняя EEPROM i2c флэш в которую слеплено 10 дампов от 10 разных моделей.
Ну и какой из этих всех программаторов удобней и функциональней?

А пока тем временем подоспела версия 4.0: https://yadi.sk/d/uZnN1_fa3L6FgE без lcd keypad shield пока, можете сами адаптировать для lcd keypad shield
Изменения: 1. убрал неработающий ресеттер для 921 флэшей
2. добавил функцию создания дампов с нового чипа на SD Card в папку Damps. Потратил массу времени на ее создание, самое сложное было создать функцию определяющую объем флэшки, так же данная функция лишена проблемы как у ponyProg (не верно определяет объем флэшек размером менее 24с16 и которые определяются по нескольким i2c адресам - как следствие дамп зеркалился что бы заполнить все 2048 бит), здесь же если в чип был залит такой зеркальный дамп (как заметил galavarez Crum повторяется 2 раза), то дамп будет слит нормально (crum только 1 раз).
В качестве имени файла используется автонумерация, например: 0.bin, 1.bin, и т.д. Вы можете себе в блокнот пометить с какой модели слит дамп, например: 24.bin - ricoh SP150. Далее при наличии компа и картридера, вы можете переименовать данный дамп и положить в нужную папку, но так же можно прошить дамп и прямо из папки damps/ (даже crum генератор сработает четко).
Аватар пользователя
Krepton85   
Разработчик PortableProg

Прилепить пост

Сообщение __Oleg__ » Вс июл 16, 2017 2:09 am

brultary писал(а):Все таки подумали бы об избавлении от LCD и лишних кнопок. Дописали код: считал модель с чипа, в корне карточки по имени нашел нужный дамп прошил...вот это автономность.

Поэтому в начале темы и писал, что нах не нужна CD-карта с файловой системой. Нужен сформированный на компьютере файл с образами дампов и встроенной небольшой базой (например: название картрига, смещение адреса дампа, сигнатура идентификатора, смещение адреса крум), данный файл можно хранить в какой не будь SPI flash (или I2C 1Mbit), что всяко-разно в разы дешевле CD-карты. Заливку (обновления) в SPIFlash можно организовать через USB.При этом исполняемая программа контроллера как и память программ живет своей независимой жизнью. Недостаток данного метода - нужна компьютерная программа для формирования файла и заливки в Flash. Универсальность, встроенный автопоиск, скорость обработки и простота использования - наверно того стоит?
Аватар пользователя
__Oleg__   
Познал картридж

Прилепить пост

Сообщение brultary » Вс июл 16, 2017 2:52 am

Krepton85, вы придерживаетесь идеи универсальности в том что каждый может добавить новый дамп.
Во-первых, сомневаюсь, что будет что добавлять, если сравнивать с ресетером от князя (кстати вышел сколько лет 10 назад, не помню) добавились clp-300, рико и все.
Во-вторых, не в обиду сказано будет, но во многом буду опираться на фирму где я работаю, заправщики скажем так, не блещат умом и для них чем проще тем лучше, и вряд ли они что-то будут добавлять сами или менять. Опять же не хочу никого обидеть, но не все будут заморачиваться.
Ну и последнее, ваш программатор я считаю для народа. Так как аналогичный если не ошибаюсь бесплатная версия с каким-то ограничением. От князя не поддерживается, да и я прошивку нашел на него на каком-то другом сайте. В любом случае из живых только ваш.
Аватар пользователя
brultary   
Увидел чернила

Прилепить пост

Сообщение Krepton85 » Вс июл 16, 2017 1:43 pm

__Oleg__ , возможно займусь, пока spi флэшки у меня нет, но прикуплю, конечно нужен еще конвертор логических уровней для spi флэшки как и sd card и питание 3,3 вольта.
Что касаемо идентификатора модели можно сделать так: 2 8 -ми битных буфера, в один считывается по 8 бит дампа из использованного чипа, а в др. читается по 8 бит spi флэшка, и далее 2 буфера сравниваются др. с др. если обнаружено совпадение всех 8 бит, то запоминается диапозон адресов spi флэш в котором обнаружено совпадение, каждому диапазону будет соответствовать свой дамп, который будет далее залит в чип, но эта процедура займет думаю много времени. Все же проще прописать статично ИД моделей в прошивке, но вот какие ИД у Ricoh? там что то непонятное, в новом чипе одно, а потом принтар перезаписывает на др. тут нужны мне использованные дампы из чипов ricoh (думаю сейчас я могу их насобирать своим программатором у которого появилась функция чтения на SD card, но на это уйдет массу времени). Да и что делать с цветными crum чипами там идентификатор модели расположен в одном месте, а идентификатор цвета (например crum начинается с: "k-", "c-", "y-", "m-")? Наверное нужно для этих моделей сделать 2-ую идентификацию, например если удалось определить что это, clp-300 то прочитать ИД цвета по такому то адресу в чипе.

В общем, всем, всем, всем кто обладает полной информацией про идентификаторы моделей Ricoh просьба отписаться тут!
Как я понял под одну и туже модель есть куча разных идентификаторов, которые х.з. от чего зависят, может от объема картрыджа, а может еще и от региона для которого предназначены. В общем нужна полная информация по всем моделям Ricoh только тогда можно приступать к изготовлению ресеттера для данных чипов.
Аватар пользователя
Krepton85   
Разработчик PortableProg

Прилепить пост

Сообщение __Oleg__ » Вс июл 16, 2017 3:42 pm

SPI flash - зачем покупать, можно выдрать с дохлой материнки.

По определению цветников типа CLP300 - принадлежность (Samsung - Xerox), ID и цвет содержится в первых 16 байтах.

Мой вариант программы, о которой я писал выше, правда до конца не доделана, тупо не хватило времени.
2481

И собственно небольшая кашка ID Ricoh, путаница возникает в связи с тем, что некоторые аппараты считывают идентификатор картриджа и на его место вписывают свой идентификатор аппарата (инфа не моя и мной не проверена), плюс у Ricoh прошла замена старых идентификаторов на новые.
Скрытый текст +
407648,406522, 406515 Принт-картридж Black type SP3400HE 5к Ricoh
407246 Принт-картридж Black type SP311HE 3,5к Ricoh
407249 Принт-картридж Black type SP311LE 2к Ricoh
407237 !!!Восможно!!! Принт-картридж Black type SP(311/???) 3,5к Ricoh


Список устройств

407490 SP 100
407491 SP 100SU
407415 SP 111
407418 SP 111SU
407419 SP 111SF
407600 SP 210
407691 SP 212w
407294 SP 202SN
407676 SP 210SU
407694 SP 210SUw
407683 SP 210SF
407692 SP 212SFw
407684 SP 212SFNw
407232 SP 311DN
407253 SP 311DNw
407238 SP 311SFN
407241 SP 311SFNw
406958 SP 3500N
406968 Aficio SP 3500SF
406972 Aficio SP 3510SF
407315 SP 3600DN
906365 SP 3600SF
906386 SP 3610SF
407313 SP 4510DN
407304 SP 4510SF
406922 Aficio SP 5200S
406924 Aficio SP 5210SF
406926 Aficio SP 5210SR
406723 Aficio SP 5200DN
406727 Aficio SP 5210DN
406719OI Aficio SP 6330N
407484 SP 6430
974032 SP C240DN
407520 SP C250DN
407522 SP C252DN
407524 SP C250SF
407526 SP C252SF
972489 Ricoh Aficio SP C320DN + OI
984410 Aficio SP C430DN
Аватар пользователя
__Oleg__   
Познал картридж

Прилепить пост

Сообщение Krepton85 » Вс июл 16, 2017 7:17 pm

__Oleg__, о спасибо, уже хоть что то. Но с этой кашкой Ricoh данный ресеттер будет работать через раз и не после каждого аппарата сможет опознать его модель. А у xerox 6100 ИД цвета в др. месте расположен.
Аватар пользователя
Krepton85   
Разработчик PortableProg

Прилепить пост

Сообщение ShamilSH » Вс июл 16, 2017 10:50 pm

Krepton85

По какому принципу обрабатываются нажатия клавиш? Смотрел примеры работ обработки нажатий кнопок и все примеры не похожи на Ваш код.
Я не программист и вообще от этого далек, подскажите в коде.:

if(analogRead(key_in) < 540 && analogRead(key_in) > 500){//кнопка вправо (analogRead(key_in) > 320 && analogRead(key_in) < 380)

Из чего обернуться значения 500 / 380-? (540 и 320 это допуск на случай разницы в резисторах, я понял)
Аватар пользователя
ShamilSH   
Чихнул от тонера

Прилепить пост

Сообщение Krepton85 » Пн июл 17, 2017 12:30 am

ShamilSH , да совершенно верно, необходимо указывать не точное значение АЦП для кнопок а диапазон, т.к. может быть разброс параметров резисторов, да и сам АЦП шуми и каждый раз может выдавать разные значения с небольшим отклонением. Узнать значения АЦП для каждой кнопки вы можите из моего тэстового примера, что я выше приложил.
Аватар пользователя
Krepton85   
Разработчик PortableProg

Прилепить пост

Сообщение galavarez » Пн июл 17, 2017 6:51 pm

Внесу свои 5 копеек.
На счет SPI flash идея интересная но:
+ не дорого (флешка стоит 50р или как писал __Oleg__ выдрать с мамки)
- надо заливать дампы чипов (образ) через программатор или писать скетч для заливки этого образа
- микруху надо по любому припаивать к ардуино (ножки маленькие и не удобные в отличии от sd ридера, причем ридер подсоединяется проводами просто)
- надо помнить адреса смещения где какой дамп чипа, что уж неудобно при программирование скетча
SD карту проще использовать да и не так уж и дорого (300-400р), зато не надо выпендриваться с адресами и дому подобному.

По поводу определения чипов, допустим можно сделать 3 кнопки (для чипов самсунг, зирокс и рико)
У самсунгов и зирокс в нутри есть маркеры по которым можно определить что за картридж, но вот у рико их нет, точнее они есть но не всегда.
Проще говоря надо найти маркер определения чипа в рико, ну а дальше можно и думать об автономности.


з.ы. Сборка ресеттера для народа: LCD Keypad Shield + arduino uno + 4 крокодила для чипов + кардридер + карта
Проще вроде некуда, все собирается на коленках за 15 мин в месте с пайкой и заливкой скетча и дампов на карту
Аватар пользователя
galavarez   
Собрал картридж

Прилепить пост

Сообщение ShamilSH » Вт июл 18, 2017 10:31 am

Krepton85

Не получается прикрутить LCD Keypad Shield

Снял показания при помощи Вашего скетча, ввожу их в код, но максимум чего добился это срабатывания клавиш Ок и назад (значения подставлял в 4 версии).
Работал в режиме бутерброда LCD Keypad Shield + arduino uno и переназначал выходы А0 и А3
Значения клавиш в этом видео https://youtu.be/er2waIZjB0U
Скетч выложенный специально для LCD Keypad Shield у меня вообще не обрабатывает нажатия клавиш.

Еще обратил внимание, что обработка нажатий в скетче для LCD Keypad Shield отличается от самопальной резистивной клавиатуры, с чем это связанно? (вопросы наверно дурацкие, но мне просто интересно.)

За возможность считывания прошивок, отдельная большая благодарность.

PS Если получится довести до рабочего состояния LCD Keypad Shield + arduino uno, то у фрилансеров закажу разработку корпуса для 3D принтера.
Аватар пользователя
ShamilSH   
Чихнул от тонера

Прилепить пост

Сообщение Krepton85 » Вт июл 18, 2017 1:38 pm

ShamilSH, да отличия есть в обработке моей клавиатуры и клавиатуры lcd keypad shield, это вызванно разными схемами клавиатур.
Например в моей, если не нажата ни одна кнопка, то на входе клавитатуры (АЦП) будет ноль сигнал (АЦП = 0), а если нажимать то будет др. значения для каждой кнопки.
У lcd keypad shield наоборот, если ни одна из кнопок не нажата то на входе АЦП максимальное напряжение близкае напряжению питания (АЦП максимум 1024), а если нажать кнопку то напряжение проседает, до определенного уровня для каждой кнопки.
А не работает 4 версия с lcd keypad shield потаму как вы не везде исправили уровни.
Тут у меня обработка нажатий происходит в 2 этапа. 1 - этап, определяется сам факт нажатия на любую из кнопок (а он разный для 2- х клавиатур, как я написал выше), 2 - этап, выполняется только если по 1- ому этапу определено, что что то нажали, определяет какая из кнопок нажата (тут вы верно наверное указали диапозоны для всех кнопок).
Аватар пользователя
Krepton85   
Разработчик PortableProg

Прилепить пост

Сообщение ShamilSH » Вт июл 18, 2017 4:09 pm

Меняю следующие значения, подскажите где ошибаюсь?

if(analogRead(key_in) < 10 && analogRead(key_in) > 0){//кнопка вправо ( значение на видео 0)
Serial.println(F(">"));
//key = 1;
if(menu == 1 && navigation == 0){
navigation = navigation + 1;
lcd_Read_damp();
}



if(analogRead(key_in) < 240 && analogRead(key_in) > 270){//кнопка Ок (значение на видео 257)
Serial.println(F("Ok"));
//key = 1;

if(menu == 3)menu = 4;
if(menu == 2)menu = menu + 1;

if(menu == 1 && navigation == 0){
menu = menu + 1;
}



if(analogRead(key_in) > 400 && analogRead(key_in) < 420){//кнопка влево (значение на видео 410)
Serial.println(F("<"));
//key = 1;

if(menu == 1 && navigation == 1){
LCD_24cXX();
navigation = navigation - 1;
}



if(analogRead(key_in) < 90 && analogRead(key_in) > 110){//кнопка назад (значение на видео 99)
Serial.println(F("back"));
//key = 1;

if(menu > 0 && menu < 5){
navigation = 0;
menu = menu - 1;

LCD_24cXX();
}
Аватар пользователя
ShamilSH   
Чихнул от тонера

Прилепить пост

Сообщение Krepton85 » Вт июл 18, 2017 5:01 pm

ShamilSH, там еще выше и ниже этого кода нужно исправить:
Выше:
if(analogRead(key_in) > 100 && key == 0){
key = 1;
delay(20);

if(analogRead(key_in) > 100){
//key = 1;
timer_out_power_off = millis();//сбрасывает таймер автовыключения питания при нажатии любой кнопки
update_batt = millis();//сбрасывает таймер для обновления процентов батареии
}

исправить на
if(analogRead(key_in) < 1000 && key == 0){//определение нажатия абсолютно любой кнопки
key = 1;
delay(20);

if(analogRead(key_in) < 1000){//определение нажатия абсолютно любой кнопки
//key = 1;
timer_out_power_off = millis();//сбрасывает таймер автовыключения питания при нажатии любой кнопки
update_batt = millis();//сбрасывает таймер для обновления процентов батареии
}

Внизу кода
if(analogRead(key_in) < 100){
key = 0;
if(key == 0)timer_long_press_key = millis();
}
if(millis() - timer_long_press_key > LONG_PRESS_KEY ){
key = 0;
}

исправить на

if(analogRead(key_in) > 1000){//определение не нажатых кнопок
key = 0;
if(key == 0)timer_long_press_key = millis();
}
if(millis() - timer_long_press_key > LONG_PRESS_KEY ){
key = 0;
}

Должно сработать
Аватар пользователя
Krepton85   
Разработчик PortableProg

Пред.След.

Вернуться в Своими руками

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

вверх
вниз
x

#{title}

#{text}