| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PIC EEPROM време за запис ? http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=1342 |
Страница 1 от 2 |
| Автор: | the_real_maniac [ Нед Ное 27, 2005 8:38 pm ] |
| Заглавие: | PIC EEPROM време за запис ? |
Колко време или по-точно колко цикъла отнема записването в EEPROM-а на един 8 битове регистър ? За четенето ясно - 1 цикъл - след bsf EECON1,RD информацията е в EEDATA , но за записването ? Някъде четох* 1000 цикъла , което умножено по времето за един цикъл/инструкция става страшно все пак говорим за micro и бързо При различните модели PIC различно ли е ? Къде мога да разбера стойността ? (в datasheet-a не я намирам (поне не и на 16F84A , 16F628A) ). Идеи * - не мога да се сетя къде беше обаче. |
|
| Автор: | Dimitar [ Нед Ное 27, 2005 9:00 pm ] |
| Заглавие: | |
Нормално е в тия памети да се записва бавно (понякога и милисекунди |
|
| Автор: | bateAz [ Нед Ное 27, 2005 9:03 pm ] |
| Заглавие: | |
Не се чуди колко е. Колкото, толкова. Има такъв бит, както ти казаха. Преди всеки запис / четене трябва да провериш дали е готов и чак тогава да извършиш операцията. |
|
| Автор: | ToHu [ Нед Ное 27, 2005 9:12 pm ] |
| Заглавие: | |
Флаг има, а освен флаг има и прекъсване, ако прграмата ти е state machine не виждам какво те смущава това, освен ако не искаш да пишеш с по висока скорост, тогава ти трябва нещо друго за памет. Изобщо при програмирането на микроконтролери не може да се подхожда като при РС, то и там е хубаво да имаш добре структурирана и гъвкава програма но и д ане е не се усеща много, но при контролера ... не можеш да си позволиш да чакаш някой бавен процес, или го слагаш на прекъсване, или което според мен е по добре, програмара ти е един безкраен цикъл в който няма нито for нито while, или ги ползваш много ограничено. |
|
| Автор: | the_real_maniac [ Нед Ное 27, 2005 11:11 pm ] |
| Заглавие: | |
Абе момчета , че флаг има - има, че прекъсване има - има , това ми е пределно ясно. Ама колко време отнема записа ме интресува ? Казвате мога да разбера , ми честно да си кажем , аз се сещам за два начина, като не съм сигурен колко точни ще са и двата: 1-ви смиулация с Proteus, PIC IDE Simulator (ама доколко реална е симулацията от страна на EEPROM-a не се знае ... 2-ро ... процедура по запис в ЕЕПРОМ-а , нали BANK0 clrf TMR1 BANK1 btfsc EECON1,WR goto $-1 BANK0 movfw TMR1 (16бит таймер т.е 65536 (цикъла) при PS1:1 = 26ms разбира се ще разчитам да не е повече, че тогава ще трябва да намеся и още един рег, коет въпреки всичко добавя още повече съмнение в точността на измерването) movlw SOMEREG записване на този SOMEREG отновно EEPROM-a след това - прочитане на чипа паметта и се гледа стойността в еепрома. ----- други идеи ? --- защо ме интерсува, защото искам да знам че ще се вместа в ПО-МАЛКО (!) от 1секунда = 1 000 000 микросекунди за прочитане на ~100 входа чрез 3на проверка на състоянието. Като някъде трябва да запазвам предварителното състояние - не искам да слагам всичко в RAM паметта, въпреки че засега не ми е проблем , но въпреки това искам да ползвам EEPROM-a , а и от друга гледна точка, че в друга част ще трябва да се помни състоянието дори и при загуба на напрежението няма наичн да не ползвма EEPROM-а и пак ми е важно да се вместя под секунда. Но второт ще е само установяване на състояние + запис , което е по-малко от тройно прочитане и запис. та нади идеята, ако ли пък не - интересува ме колко врме отнема запис на 8бит рег. в eeprom памета. Това е едит: Тони - да това ми е ясно. значи в основни линии програмата ходи в следният ред: main: read_m ; read states of the machines ; тук се върши над 60% от работата + различни подпрограми и от два макроса. ;в основни линии съдържа - четене състояние , запис, проверка, пращане на състояниеята като се вика подпрограма ) и т.н WAIT16MS ; so the contacts can change their state goto main int: обработва прекъсванята - всъщност само едно , когато пристига някаква команда по RS232 (което вика подпрогама която да разбере съобщението и от своя страна да извика подпрограма за изпълнение), това е. И цикъла се затваря както виждаш нещата са ок едит2: забравих да кажа , че където може се използва цикъл и унифициране , примерно за четенето на входовете много ясно ще е цикъл, а и за доста други неща , така че програмата не само работи, но ми и харесва как става компактна и удобна. |
|
| Автор: | ToHu [ Нед Ное 27, 2005 11:51 pm ] |
| Заглавие: | |
охххх мразя я тая клавиатура, току що затрих дъъълъг пост, та сега по накратко... Относно програмата и структурата и, цикли да но без for/do-while, и тях но само когато е крайно наложително, или когато пък прогрмаата е съвсем елементарна, но това си е избор на програиста и много зависи от задачата. За EPROM, аз не бих го ползвал така, има си power fail схеми, и пика генерира такъв сигнал,ползвай него и само тогава пиши в EEPROM, той си има живот, и при 100 записа в секунда и ако приемем че живота е 1.000.000 цикъла това са 10.000 секунди или 3 часа, как ти се струва .... у-вото ти ще е с дста дълъг гарантиран живот Да не забравяме че записа в EEPROM задължително е свързан с проверка, задължително ако искаш да работи надеждно, тя отнема време,а при евентуална грешка съо отива време. EEPROM не е оперативна памет, не е мислен за това, там се съхраняват друг тип данни, може да чете таблици от там, ама да пишеш по 100 пъти в секунда ....... едит: относно измерване на времето по просто не знам дали може да бъде, пускаш си таймер 1 примерно да с еинкрементва в момента в който разрешаваш ченето и го спираш в момента в който поучаваш прекъсване. Всики времена са ти твърди, т.е. просто от стойността на таймера вадиш времето за обслужване на прекъсването и две инструкции за старт и стоп на таймера и мисля си готов,, е екоа не си в съответната банка стрт и стоп може да са повеце от 2 но то винаги е известно колко са, имаш времто с точност не по лоша от 1 такт това е, после printf() и си го виждаш в терминала колко е. |
|
| Автор: | Цецо [ Пон Ное 28, 2005 12:58 am ] |
| Заглавие: | |
Значи на 16F818 времето за запис е между 4 и 8 ms. Зависи от захранващо напрежение, околна температура и пр. По принцип и на другите пикове трябва да е толкова. Има го в електрическите характеристики в дата шеета. На всеки микроконтролер е там. ЕЕПРОМ паметта не е бърза. Това не е РАМ. Може и да има някой при които да е малко по бърза, но порядъка ще е същия, едва ли под 1мс. Зарежи измерванията на това време. Ако работиш сериозно - гледай спецификацията. Ти и да го измериш 4мс, утре като му стане студено на говедото, току виж времето станало 7мс. И кво - после пика бил забивал. Щом пише максимум 8мс, значи работиш с най-лошия случай - това поне правя аз. |
|
| Автор: | Dimitar [ Пон Ное 28, 2005 1:02 am ] |
| Заглавие: | |
Щтракай някакъв крак и гледай на скопа - така най-лесно ще измериш. Симулаторите (поне според мен) го симулират това време - т.е. не е реалното май. |
|
| Автор: | the_real_maniac [ Пон Ное 28, 2005 1:45 am ] |
| Заглавие: | |
@Димитар: не мисля , че ще ми е най-лесно с осцилоскоп да хвана мс закъснение, но сигурно защото малко съм работил с такива "джаджи" @Цецо: Както казах търсих , но не намерих , в интерес на истината не съм се сетил да търся при електрическите х-ки на пика. Но благодаря за отговора - 8мс е най-лошият случей. ~100 * 8 = 800ms и ми остават 200мс за обработка, които мисля ще ми стигнат. (разбира се , ако не се наложи да презаписвам някоя друга стойност @Тони: - затрит пост -> ctrl+z би трябвало да свърши работа - да , ще правя проверка на записа в ЕЕПРОМ-а, разбира се , за да съм сигурен ,че всичко е наред. - може ли да дадеш още ключови думи по това за fail safe системи и генериран някакъв такъв сигнал от пика не знам за какво става въпрос, знам само за boden (brown-out reset), което не виждам как ще ми запизи информацията - относно измерването - горе го писах този вариант , и аз мисля , че той е най-лесният. (с 16бит таймер - TMR1). - относно циклите - нещо не мога да те разбера. Значи ти гледаш от точка на С , аз от асм (в случея) Може би , ако имаме един истински for , тогава за пик-а става страшно, от такава гледна точка ли ? Значи моята програма може да се каже, че е едно голямо for( ; ; ) |
|
| Автор: | ToHu [ Пон Ное 28, 2005 2:13 am ] |
| Заглавие: | |
Значи power faile, това е сигнал който се генерира при спадане на захранването, BOR има бит, аз досега съм го ползвал само като ресет защото е ненастройваемо в 16-ките, но ако го забраниш като ресет, бита му ак си работи, те. ако имаш там промяна може да с езапишеш, но това за мен не е много надеждно и ползвам външен чип, това може да е най-обикновен копаратор преди стабилизатора, така можеш да си осигуриш достатъчно време. Но относно писането във EEPROM просто според мен по добре да го забравиш, споменах ти какво е ограничението, и то това е по документи, броя записи зависи и от условията на експлоатация а и от много други. Относно програмата, за for и while ами ето това имам впредвид ; for movlw 0x05 movvw 0x22 ..... something to do decfsz 0x22 goto $-2 while btfss 0x05.1 goto S-1 |
|
| Автор: | Реконструктор [ Пон Ное 28, 2005 10:50 am ] |
| Заглавие: | |
Аз така и не можах да разбера - какъв е проблема при започване на запис да се пуска хардуерния таймер (съмнява ме ПИК-а да няма такъв) и при приключване да се спира. |
|
| Автор: | Цецо [ Пон Ное 28, 2005 12:13 pm ] |
| Заглавие: | |
Проблема е че времето за запис не е константна величина, зависи от t, V и пр. Т.е и да измериш времето това не е гаранция, че при всякакви условия то е константно. Затова пройзводителя (Микрочип също) дефинира Ttyp (в случая 4мс) и Тmax (8мс) което е най-лошия случай. Добрата програмистка практика е да се съобразиш с максималното време, а не с типичното. |
|
| Автор: | Реконструктор [ Пон Ное 28, 2005 12:43 pm ] |
| Заглавие: | |
Да, но човека искаше да мери. |
|
| Автор: | ToHu [ Пон Ное 28, 2005 12:52 pm ] |
| Заглавие: | |
Ами нали това съм му писал, и после да си сендва резултата по RS-а .. но като цяло е добре да се откаже от тази си идея ... не е никак добра с толкова писания в ЕЕPROM |
|
| Автор: | Реконструктор [ Пон Ное 28, 2005 1:01 pm ] |
| Заглавие: | |
Така де, аз се чудя кво му пречи? |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|