Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 14, 2007 5:58 pm
Мнения: 67
Мнение ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Здравейте,колеги,търся съвет от вас знаещите във връзка с теоретичното обяснение на изпълнение на такова задание в асемблер за ЕЕПРОМ на пик16ф88.

Понеже програмата ми работи добре ,но искам да се презастраховам от събитие при проблем в ЕЕПРОМ.
Записвам избирателно в едната клетка на ЕЕПРОМ памета десетични числа от 1 до 17,а във следващата клетка от памета записвам константи избирателно от 1 до 6.
При пускане на пика се чете от епрома и се задават посочените константи от всяка клетка,но ако се прецака записа в паметта,искам постоянно да се прави проверка чрез контролна сума и ако не съвпада да приема стойностти по подразбиране,а от там и да започва мигане на светодиод за авария
ВЪПРОС:
Как се прави такава контролна сума. къде се записва такова контролно число .Какво съдържа контролната сума.
Интересувам се от същинския алгоритъм ,а аз програмат ще я напиша(стига разбира се ако няма някъде готов пример,който мога да разгледам )


Вто Апр 14, 2015 2:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Ами най-разпространено е CRC / CRC8,CRC16,CRC32/ Гуглето ще ти каже как се прави.
2 байта CRC16 си е достатъчно сигурно


Вто Апр 14, 2015 3:24 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Обаче гълта доста рам и флаш, а 16ф88 няма чак толкова много.
Може с xor. Например ако имаш 8 баита, xor ги висичките и резултата го слагаш в 9тия байт на ЕЕПРОМа.

_________________
Warriors of the Night, ASSEMBLER!!!


Вто Апр 14, 2015 3:30 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 14, 2007 5:58 pm
Мнения: 67
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Търся на асемблер, ако имате предложения .Кога се пуска такава проверка .
Записването се извършва в еепрома на пика само когато се влезе чрез бутон за настроика на нови константи ,през другото време само и единствено се чете .След пускане на на пика ,с нормално ресетване (без чип) прочитам еепрома.
Може ли да се згафи положението когато само се чете .Устройството работи в автомобил.
Ще има само едно реле,което ще се опоределя дали да бъде постоянно включено без да с екомутира през процеса на използването на устройството,то се включва или не, само от първоначалното прочитане на еепрома.
Кога може да се обърка нещо по принцип.След като четем само и единствено .След монтажа на устройството и първоначална настройка ,после вече не се изисква никакво записване,Само и единствено при всяко пускане четем ..Затова ако има нещо по простичко алгоритъмче,не говориме за прецизни неща.Просто ще приеме първоначалана тстойност и ще мига светодиод за авария.


Вто Апр 14, 2015 3:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Когато се прочете кода от ЕЕПРОМ-а се дава старт на твоят алгоритъм а когато се прекъсне захранването например се зарежда наново кода ти. Няма място за притеснение. Само не го пускай постоянно да си търси кода от ЕЕПРОМ-а а само при промяна и старт. (примерно)


Вто Апр 14, 2015 5:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Ммм зависи каква надежност търсиш, за 7 к файл вероятността да се получат случайни грешки които да не ги детектне алгоритъма е сравнително малка, но я има. Примерно в определени индусстрии където е задължително да си проверяваш файловете както и да репортваш чексума CRC32 е недопустимо дори и за такива малки файлове, ако е просто за да си сигурен, мисля че ще ти е ОК, ако гониш стандарт, виж какво иска стандарта.


Вто Апр 14, 2015 6:13 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 14, 2007 5:58 pm
Мнения: 67
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Значи устройството при монтажа в автомобила се програмира за първи път ,след което всеки път при захранването му се чете ЕЕПРОМА и се настройва според зададените константи ,и така всеки път след рестарт чете само при пускането, и в процеса на работа няма никакво вземане даване с еепрома.Т.е. ако не що се е объркало собственика ще го усети при ненормалната работа и още при подаване на захранване се индицира с мигане нчколко път ина жълт диод ,а пък при нормално изпълннение с последователно светване на червен и зелен диод.
Малка част от програмата за четенето в началото : CIKAL_MIGANE_1 приема D'1' do D'17'; CHANGE_1 πριεμα D'1' do D'6'
EEPROM
MOVLW 0x2101
MOVWF REEADR ;In:F(REEADR)
CALL READE
MOVWF CIKAL_MIGANE_1


MOVLW 0x2102
MOVWF REEADR ;In:F(REEADR)
CALL READE

MOVWF CHANGE_1

Мога ли да ги записвам при настройката от бутона ми за програмирането например CIKAL_MIGANE_1 на две места в еепрома и CHANGE_CD_1 пак на две места ,а при нормална работа след стартирането да ги чета тези дублирани данни на на различните им адреси и след разлика между тях да алармирам за грешен код,или пък АКО ТРЯБВА ДА ЗАПИСВАМ ЕДНИ И СЪЩИ ДАННИ НА ТРИ РАЗЛИЧНИ АДРЕСА ,КАТО ТОГАВА ПРИ ЧЕТЕНЕ ЧЕТА ОТ ЕЕПРОМА ТРИ РАЗЛИЧНИ адреса с една и съща информация и дори само една от тях да е различна ,щом другите два адреса се препокриват еднакво да приемаме точно това за вярното.
EEPROM
MOVLW 0x2101
MOVWF REEADR ;In:F(REEADR)
CALL READE
MOVWF CIKAL_MIGANE_1

EEPROM
MOVLW 0Х21ХХ
MOVWF REEADR ;In:F(REEADR)
CALL READE
MOVWF CIKAL_MIGANE_12

EEPROM
MOVLW 0x21ХХ
MOVWF REEADR ;In:F(REEADR)
CALL READE
MOVWF CIKAL_MIGANE_13
И после да създам алгоритъм за тези 3 те : CIKAL_MIGANE_1, CIKAL_MIGANE_12 , CIKAL_MIGANE_13 като по нормално са еднакви по стойност и ги сръвнявам всеки път в началото...Какво мислите за този мой прост алгоритъм ...Все пак не е добре ако се налага от време на време да се влиза в програмиращ режим-няма да има лесен достъп до устройството


Вто Апр 14, 2015 7:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 9:27 pm
Мнения: 2011
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Няма никакъв смисъл освен ако не искаш да ползват даденото устройство различни потребители с различна идентификация както го има в повечето съвременни автомобили.
Няма как да си загубиш прочетеното от ЕЕПРОМ-а освен ако не ти работи програмата коректно. От този чип не очаквай чудеса но за твоята работа си е супер.
След промяна на кода пак повтаряш:
COD_1
MOVLW 0x2101
MOVWF REEADR ;In:F(REEADR)
CALL READE
MOVWF CIKAL_MIGANE_1
Примерно, приeма веднъж кода и затваря релето и го набутваш в спящ режим освен ако не искаш да го програмираш с нов код. Така релето ще е включено а при пускане ще е изключено докато не се идентифицира.
Варианти много.


Вто Апр 14, 2015 8:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Ето ти тествана стандартна CRC8 функция, която не ползва много флаш нито пък много рам.

Код:
uint8_t crc8(uint8_t *block, uint16_t length) {
    uint8_t b, xcrc=0;
    uint16_t t;
    for (t=0; t<length; t++) {
        xcrc^=block[t];
        for (b=0; b<8; b++) if (xcrc&1) xcrc=(xcrc>>1)^0x8c; else xcrc>>=1;
    }
    return(xcrc);
}

_________________
'просто' е технически синоним на 'красиво'


Вто Апр 14, 2015 11:03 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Яну 14, 2007 5:58 pm
Мнения: 67
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Значи разбрах,че не е нужно такава пловерка в моя случай, но предриема ли ще ползвам срс8.Затова има ли вариант да го плати някой в асемблер код Дори може готова примерна програма.


Сря Апр 15, 2015 8:14 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
ами не съм сигурен че CRC8 ще върши работа ако се очаква че е възможно да се счупи, при CRC8 редовно ми се е случвало да не открива по сериозно счупени данни. Зависи колко битови са ти данните, ако са 8 битови вместо да правиш CRC просто ги пиши по два пъти, ако са по големи вече има смисъл от CRC но отново за 32 битови данни CRC8 не е много надеждно, камо ли за по дълги. То и двойното записване не е гаранция, аз съм виждал грешка и при тройно записване, даже съм го виждал два пъти, т.е. и трите записа да са счупени по един и същ начин, какъв е шанса сигурно и сам можеш да сметнеш но се е случвало.


Сря Апр 15, 2015 11:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Специално при пик-четата единствения проблем за който знам е следния - когато влезе в brownout ситуация PC брояча може да скочи на случайно място. Когато това случайно място се окаже поредицата за запис, се записват неясни(случайни) данни в еепрома. Понеже обикновенно този участък е функция която се вика от някъде с параметри адрес и данни, а влизайки там случайно, адреса е последния от който си чел, там и се записват глупостите. В интерес на истина изглежда много отнесено като обяснение - такова е и обяснението от микрочип и най-интересното е че се случва. На мен ми се е случвало и решението пак според микрочип е : винаги след достъп до еепром, адреса (EEADR) да се сетва на адрес който не се ползва. Естествено включването на BOR си е задължително - така ще се избегне като цяло подобен ефект с подскачане случайно по програмата. В крайна сметка от как почнаха да правя това с адреса, повече не съм имал случай на скапани данни.

Правил съм и записване всеки път в различна клетка(циклично). Ама сега въобще не помня как го бях реализирал да пише равномерно в целия еепром и как точно беше номера да знае точно кой запис е последния.


Чет Апр 16, 2015 8:23 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Това за което аз споменавам се е случвало на съвсем различна архитектура, не е резултат на случайността а на съвсем умишлени действия, но индиректни, разбирай смущения някои от тях водещи може би до рестарт на проца.


Чет Апр 16, 2015 11:11 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Яну 24, 2006 6:34 pm
Мнения: 1753
Местоположение: Варна
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
ike написа:
...Може с xor. Например ако имаш 8 баита, xor ги висичките и резултата го слагаш в 9тия байт на ЕЕПРОМа.


Това с xor съм го правил , и съм го "счупвал" , в смисъл сумата е ок , ама байтовете не са... Та втора осигуровка , сумирал съм всички байтове , и квото се получи като 8 бит накрая , пиша в клетка...

_________________
За пари сичко праим,даже и работим...


Чет Апр 16, 2015 1:22 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: ЕЕПРОМ -ПИК16Ф88-КОНТРОЛНА СУМА ЗА ПРОВЕРКА-КАК СТАВА
Ето и функция за стандартно CRC16, но тя си заема повечко място в паметта.

Код:
uint16_t crc16(uint16_t seed, uint16_t length, uint8_t *block) {
    const uint16_t tCRC16[256] = {
        0x0000, 0xc1c0, 0x81c1, 0x4001, 0x01c3, 0xc003, 0x8002, 0x41c2, 0x01c6, 0xc006, 0x8007, 0x41c7, 0x0005, 0xc1c5, 0x81c4, 0x4004,
        0x01cc, 0xc00c, 0x800d, 0x41cd, 0x000f, 0xc1cf, 0x81ce, 0x400e, 0x000a, 0xc1ca, 0x81cb, 0x400b, 0x01c9, 0xc009, 0x8008, 0x41c8,
        0x01d8, 0xc018, 0x8019, 0x41d9, 0x001b, 0xc1db, 0x81da, 0x401a, 0x001e, 0xc1de, 0x81df, 0x401f, 0x01dd, 0xc01d, 0x801c, 0x41dc,
        0x0014, 0xc1d4, 0x81d5, 0x4015, 0x01d7, 0xc017, 0x8016, 0x41d6, 0x01d2, 0xc012, 0x8013, 0x41d3, 0x0011, 0xc1d1, 0x81d0, 0x4010,
        0x01f0, 0xc030, 0x8031, 0x41f1, 0x0033, 0xc1f3, 0x81f2, 0x4032, 0x0036, 0xc1f6, 0x81f7, 0x4037, 0x01f5, 0xc035, 0x8034, 0x41f4,
        0x003c, 0xc1fc, 0x81fd, 0x403d, 0x01ff, 0xc03f, 0x803e, 0x41fe, 0x01fa, 0xc03a, 0x803b, 0x41fb, 0x0039, 0xc1f9, 0x81f8, 0x4038,
        0x0028, 0xc1e8, 0x81e9, 0x4029, 0x01eb, 0xc02b, 0x802a, 0x41ea, 0x01ee, 0xc02e, 0x802f, 0x41ef, 0x002d, 0xc1ed, 0x81ec, 0x402c,
        0x01e4, 0xc024, 0x8025, 0x41e5, 0x0027, 0xc1e7, 0x81e6, 0x4026, 0x0022, 0xc1e2, 0x81e3, 0x4023, 0x01e1, 0xc021, 0x8020, 0x41e0,
        0x01a0, 0xc060, 0x8061, 0x41a1, 0x0063, 0xc1a3, 0x81a2, 0x4062, 0x0066, 0xc1a6, 0x81a7, 0x4067, 0x01a5, 0xc065, 0x8064, 0x41a4,
        0x006c, 0xc1ac, 0x81ad, 0x406d, 0x01af, 0xc06f, 0x806e, 0x41ae, 0x01aa, 0xc06a, 0x806b, 0x41ab, 0x0069, 0xc1a9, 0x81a8, 0x4068,
        0x0078, 0xc1b8, 0x81b9, 0x4079, 0x01bb, 0xc07b, 0x807a, 0x41ba, 0x01be, 0xc07e, 0x807f, 0x41bf, 0x007d, 0xc1bd, 0x81bc, 0x407c,
        0x01b4, 0xc074, 0x8075, 0x41b5, 0x0077, 0xc1b7, 0x81b6, 0x4076, 0x0072, 0xc1b2, 0x81b3, 0x4073, 0x01b1, 0xc071, 0x8070, 0x41b0,
        0x0050, 0xc190, 0x8191, 0x4051, 0x0193, 0xc053, 0x8052, 0x4192, 0x0196, 0xc056, 0x8057, 0x4197, 0x0055, 0xc195, 0x8194, 0x4054,
        0x019c, 0xc05c, 0x805d, 0x419d, 0x005f, 0xc19f, 0x819e, 0x405e, 0x005a, 0xc19a, 0x819b, 0x405b, 0x0199, 0xc059, 0x8058, 0x4198,
        0x0188, 0xc048, 0x8049, 0x4189, 0x004b, 0xc18b, 0x818a, 0x404a, 0x004e, 0xc18e, 0x818f, 0x404f, 0x018d, 0xc04d, 0x804c, 0x418c,
        0x0044, 0xc184, 0x8185, 0x4045, 0x0187, 0xc047, 0x8046, 0x4186, 0x0182, 0xc042, 0x8043, 0x4183, 0x0041, 0xc181, 0x8180, 0x4040
    };
    uint16_t xcrc16=seed;
    for (uint16_t t=0; t<length; t++) {
        uint16_t x=tCRC16[0xff&(xcrc16^block[t])];
        xcrc16=((xcrc16^x)>>8)|(x<<8);
    }
    return(xcrc16);
}

_________________
'просто' е технически синоним на 'красиво'


Чет Апр 16, 2015 1:45 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни