Микроконтролери и електроника
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 и бързо :) Поне за мене в един момент когато свикнах с някакви си ns и случайни us да чуя 1000 * 400ns (10Мхз примерно ) = 400us

При различните модели PIC различно ли е ?

Къде мога да разбера стойността ?
(в datasheet-a не я намирам (поне не и на 16F84A , 16F628A) ).

Идеи :)


* - не мога да се сетя къде беше обаче.

Автор:  Dimitar [ Нед Ное 27, 2005 9:00 pm ]
Заглавие: 

Нормално е в тия памети да се записва бавно (понякога и милисекунди 8) ). Така, че няма какво да се чудиш. Май имаше някакъв бит, който показва кога записа е готов - можеш сам да си премериш времето 8) .

Автор:  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 :P
; тук се върши над 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 ]
Заглавие: 

@Димитар: не мисля , че ще ми е най-лесно с осцилоскоп да хвана мс закъснение, но сигурно защото малко съм работил с такива "джаджи" :lol:

@Цецо: Както казах търсих , но не намерих , в интерес на истината не съм се сетил да търся при електрическите х-ки на пика.
Но благодаря за отговора - 8мс е най-лошият случей.
~100 * 8 = 800ms и ми остават 200мс за обработка, които мисля ще ми стигнат.
(разбира се , ако не се наложи да презаписвам някоя друга стойност :evil: )

@Тони:

- затрит пост -> ctrl+z би трябвало да свърши работа :? , а ако си с firefox, той помни дори и вече подадени данни , така че просто дай back (ако става въпрос за крачка напред без да си я искал).

- да , ще правя проверка на записа в ЕЕПРОМ-а, разбира се , за да съм сигурен ,че всичко е наред. ;) :)

- може ли да дадеш още ключови думи по това за fail safe системи и генериран някакъв такъв сигнал от пика :???
не знам за какво става въпрос, знам само за boden (brown-out reset), което не виждам как ще ми запизи информацията :? :roll:

- относно измерването - горе го писах този вариант , и аз мисля , че той е най-лесният. (с 16бит таймер - TMR1).

- относно циклите - нещо не мога да те разбера.
Значи ти гледаш от точка на С , аз от асм (в случея)

Може би , ако имаме един истински for , тогава за пик-а става страшно, от такава гледна точка ли ?

Значи моята програма може да се каже, че е едно голямо for( ; ; ) :) което се върти непрестанно, като в него , което може също съм го направил на подфункции , чиито аргуметни - да ги наречем; се сменят и тъй като се викат за всеки аргумент примерно след incf , затова пак може да се каже ,че е някакъв 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 ]
Заглавие: 

Аз така и не можах да разбера - какъв е проблема при започване на запис да се пуска хардуерния таймер (съмнява ме ПИК-а да няма такъв) и при приключване да се спира. :) И после получената стойност - по RS232, на дисплейче или квото и да било друго.

Автор:  Цецо [ Пон Ное 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/