|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 2:41 pm
PIC EEPROM време за запис ?
| Автор |
Съобщение |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
 PIC EEPROM време за запис ?
Колко време или по-точно колко цикъла отнема записването в EEPROM-а на един 8 битове регистър ?
За четенето ясно - 1 цикъл - след bsf EECON1,RD информацията е в EEDATA , но за записването ?
Някъде четох* 1000 цикъла , което умножено по времето за един цикъл/инструкция става страшно все пак говорим за micro и бързо  Поне за мене в един момент когато свикнах с някакви си ns и случайни us да чуя 1000 * 400ns (10Мхз примерно ) = 400us
При различните модели PIC различно ли е ?
Къде мога да разбера стойността ?
(в datasheet-a не я намирам (поне не и на 16F84A , 16F628A) ).
Идеи
* - не мога да се сетя къде беше обаче.
|
| Нед Ное 27, 2005 8:38 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Нормално е в тия памети да се записва бавно (понякога и милисекунди  ). Така, че няма какво да се чудиш. Май имаше някакъв бит, който показва кога записа е готов - можеш сам да си премериш времето  .
|
| Нед Ное 27, 2005 9:00 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Не се чуди колко е. Колкото, толкова. Има такъв бит, както ти казаха. Преди всеки запис / четене трябва да провериш дали е готов и чак тогава да извършиш операцията.
|
| Нед Ное 27, 2005 9:03 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
Флаг има, а освен флаг има и прекъсване, ако прграмата ти е state machine не виждам какво те смущава това, освен ако не искаш да пишеш с по висока скорост, тогава ти трябва нещо друго за памет. Изобщо при програмирането на микроконтролери не може да се подхожда като при РС, то и там е хубаво да имаш добре структурирана и гъвкава програма но и д ане е не се усеща много, но при контролера ... не можеш да си позволиш да чакаш някой бавен процес, или го слагаш на прекъсване, или което според мен е по добре, програмара ти е един безкраен цикъл в който няма нито for нито while, или ги ползваш много ограничено.
|
| Нед Ное 27, 2005 9:12 pm |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
Абе момчета , че флаг има - има, че прекъсване има - има , това ми е пределно ясно.
Ама колко време отнема записа ме интресува ?
Казвате мога да разбера , ми честно да си кажем , аз се сещам за два начина, като не съм сигурен колко точни ще са и двата:
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:
забравих да кажа , че където може се използва цикъл и унифициране , примерно за четенето на входовете много ясно ще е цикъл, а и за доста други неща , така че програмата не само работи, но ми и харесва как става
компактна и удобна.
|
| Нед Ное 27, 2005 11:11 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
охххх мразя я тая клавиатура, току що затрих дъъълъг пост, та сега по накратко...
Относно програмата и структурата и, цикли да но без for/do-while, и тях но само когато е крайно наложително, или когато пък прогрмаата е съвсем елементарна, но това си е избор на програиста и много зависи от задачата.
За EPROM, аз не бих го ползвал така, има си power fail схеми, и пика генерира такъв сигнал,ползвай него и само тогава пиши в EEPROM, той си има живот, и при 100 записа в секунда и ако приемем че живота е 1.000.000 цикъла това са 10.000 секунди или 3 часа, как ти се струва .... у-вото ти ще е с дста дълъг гарантиран живот  . Има начин да сменяш клетките переодично, т.е. да е динамично, ама това иска още код, малко забавя и е допустимо според мен в малко по други ситуации.
Да не забравяме че записа в EEPROM задължително е свързан с проверка, задължително ако искаш да работи надеждно, тя отнема време,а при евентуална грешка съо отива време. EEPROM не е оперативна памет, не е мислен за това, там се съхраняват друг тип данни, може да чете таблици от там, ама да пишеш по 100 пъти в секунда .......
едит: относно измерване на времето по просто не знам дали може да бъде, пускаш си таймер 1 примерно да с еинкрементва в момента в който разрешаваш ченето и го спираш в момента в който поучаваш прекъсване. Всики времена са ти твърди, т.е. просто от стойността на таймера вадиш времето за обслужване на прекъсването и две инструкции за старт и стоп на таймера и мисля си готов,, е екоа не си в съответната банка стрт и стоп може да са повеце от 2 но то винаги е известно колко са, имаш времто с точност не по лоша от 1 такт това е, после printf() и си го виждаш в терминала колко е.
|
| Нед Ное 27, 2005 11:51 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Значи на 16F818 времето за запис е между 4 и 8 ms. Зависи от захранващо напрежение, околна температура и пр. По принцип и на другите пикове трябва да е толкова. Има го в електрическите характеристики в дата шеета. На всеки микроконтролер е там.
ЕЕПРОМ паметта не е бърза. Това не е РАМ. Може и да има някой при които да е малко по бърза, но порядъка ще е същия, едва ли под 1мс.
Зарежи измерванията на това време. Ако работиш сериозно - гледай спецификацията. Ти и да го измериш 4мс, утре като му стане студено на говедото, току виж времето станало 7мс. И кво - после пика бил забивал. Щом пише максимум 8мс, значи работиш с най-лошия случай - това поне правя аз.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
Последна промяна Цецо на Пон Ное 28, 2005 1:05 am, променена общо 1 път
|
| Пон Ное 28, 2005 12:58 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Щтракай някакъв крак и гледай на скопа - така най-лесно ще измериш. Симулаторите (поне според мен) го симулират това време - т.е. не е реалното май.
|
| Пон Ное 28, 2005 1:02 am |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
@Димитар: не мисля , че ще ми е най-лесно с осцилоскоп да хвана мс закъснение, но сигурно защото малко съм работил с такива "джаджи"
@Цецо: Както казах търсих , но не намерих , в интерес на истината не съм се сетил да търся при електрическите х-ки на пика.
Но благодаря за отговора - 8мс е най-лошият случей.
~100 * 8 = 800ms и ми остават 200мс за обработка, които мисля ще ми стигнат.
(разбира се , ако не се наложи да презаписвам някоя друга стойност  )
@Тони:
- затрит пост -> ctrl+z би трябвало да свърши работа  , а ако си с firefox, той помни дори и вече подадени данни , така че просто дай back (ако става въпрос за крачка напред без да си я искал).
- да , ще правя проверка на записа в ЕЕПРОМ-а, разбира се , за да съм сигурен ,че всичко е наред.
- може ли да дадеш още ключови думи по това за fail safe системи и генериран някакъв такъв сигнал от пика  ??
не знам за какво става въпрос, знам само за boden (brown-out reset), което не виждам как ще ми запизи информацията
- относно измерването - горе го писах този вариант , и аз мисля , че той е най-лесният. (с 16бит таймер - TMR1).
- относно циклите - нещо не мога да те разбера.
Значи ти гледаш от точка на С , аз от асм (в случея)
Може би , ако имаме един истински for , тогава за пик-а става страшно, от такава гледна точка ли ?
Значи моята програма може да се каже, че е едно голямо for( ; ; )  което се върти непрестанно, като в него , което може също съм го направил на подфункции , чиито аргуметни - да ги наречем; се сменят и тъй като се викат за всеки аргумент примерно след incf , затова пак може да се каже ,че е някакъв for цикъл,но ти говориш за С , аз за асм.
|
| Пон Ное 28, 2005 1:45 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
Значи 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 2:13 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Аз така и не можах да разбера - какъв е проблема при започване на запис да се пуска хардуерния таймер (съмнява ме ПИК-а да няма такъв) и при приключване да се спира.  И после получената стойност - по RS232, на дисплейче или квото и да било друго.
|
| Пон Ное 28, 2005 10:50 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Проблема е че времето за запис не е константна величина, зависи от t, V и пр. Т.е и да измериш времето това не е гаранция, че при всякакви условия то е константно. Затова пройзводителя (Микрочип също) дефинира Ttyp (в случая 4мс) и Тmax (8мс) което е най-лошия случай. Добрата програмистка практика е да се съобразиш с максималното време, а не с типичното.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Ное 28, 2005 12:13 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Да, но човека искаше да мери. 
|
| Пон Ное 28, 2005 12:43 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
Ами нали това съм му писал, и после да си сендва резултата по RS-а .. но като цяло е добре да се откаже от тази си идея ... не е никак добра с толкова писания в ЕЕPROM
|
| Пон Ное 28, 2005 12:52 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Така де, аз се чудя кво му пречи?
|
| Пон Ное 28, 2005 1:01 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|