ايران ويج

نسخه‌ی کامل: مشکل استفاده از eeprom داخلی در زمان قطع برق
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان
این برنامرو نوشتم می خوام فقط موقعی که برق میره .خروجی هایی که ال ای دی بهشون وصله را بریزه تو eeprom و موقعی که برق میاد دوباره از eeprom بخونه .
help بسکامو خوندم چیز زیادی متوجه نشدم .
نمی دونم چطور باید از دو دستور writeeeprom و readeeprom استفاده کنم

کد php:
$regfile "m8def.dat"
$regfile "m8def.dat"
$crystal 1000000

Config Pinb.0 
Output
Config Pind.7 
Output
Config Pind.6 
Output

Config Pinb.2 
Input
Config Pinb.3 
Input
Config Pinb.1 
Input


Do
Debounce Pinb.2 Sub
Debounce Pinb.1 
Sub
Debounce Pinb.3 
Sub


Loop

End 
'end program

Q:
Toggle Portb.0
Return

P:
Toggle Portd.7
Return

O:
Toggle Portd.6
Return 

من میخوام وقتی کلیدها زده میشن و مثلا همه led ها خاموش میشن اگه همون لحظه برق رفت و دوباره اومد خروجی ها حالت قبل از برق رفتن رو حضظ کنن یعنی خاموش بمونن.هر کاری می کنم نمیشه.فایل پروتیوسشم تو پیوسته
سلام.
ببین تو بسکام واسه دستور writeeeprom اینو گفته:
کد:
WRITEEEPROM var , address
خب این یعنی متغیر var رو در قسمتی از حافظه که آدرس اون address هست قرار بده.
مثلا :
کد:
Writeeeprom B,1
یعنی متغیر b رو تو حافظه ای دو پی رام بریز و در قسمت 1 قرار بده.
و تو هلپ بسکام برای Readeeprom گفته که:
کد:
READEEPROM var , address
یعنی هرچی در حافظه ای دو پی رام در آدرس address هست در متغیر var قرار بده.
مثلا:
کد:
Readeeprom B , 1
یعنی هر چی تو حافظه 1 از ای دو پی رام قرار داره درون متغیر b قرار بده.
حله داداش؟
(۲۵-بهمن-۱۳۹۱, ۲۱:۵۹:۱۰)h.unique نوشته است: [ -> ]سلام.
ببین تو بسکام واسه دستور writeeeprom اینو گفته:
کد:
WRITEEEPROM var , address
خب این یعنی متغیر var رو در قسمتی از حافظه که آدرس اون address هست قرار بده.
مثلا :
کد:
Writeeeprom B,1
یعنی متغیر b رو تو حافظه ای دو پی رام بریز و در قسمت 1 قرار بده.
و تو هلپ بسکام برای Readeeprom گفته که:
کد:
READEEPROM var , address
یعنی هرچی در حافظه ای دو پی رام در آدرس address هست در متغیر var قرار بده.
مثلا:
کد:
Readeeprom B , 1
یعنی هر چی تو حافظه 1 از ای دو پی رام قرار داره درون متغیر b قرار بده.
حله داداش؟
ممنون از اینکه توجه کردید و جواب دادید دوست عزیزولی یه چیزایی من نوشته بودم طبق گفته شما ولی جواب نداد .میشه این برنامرو یه چک بکنید ببینید درسته

کد php:
$regfile "m8def.dat"
$regfile "m8def.dat"
$crystal 1000000
Dim Z 
As Byte


Pinb.0 '1


Config Pinb.7 = Input


Config Pinb.0 = Output
Config Pind.7 = Output
Config Pind.6 = Output

Config Pinb.2 = Input
Config Pinb.3 = Input
Config Pinb.1 = Input


Readeeprom Z , 2 '
2

Waitms 5



Do


Debounce Pinb.2 Sub
Debounce Pinb.1 
Sub
Debounce Pinb.3 
Sub

If Pinb.7 0 Then '3


Writeeeprom Z , 2 '
4



Waitms 5

End 
If

Loop

End 
'end program

Q:
Toggle Portb.0
Return

P:
Toggle Portd.7
Return

O:
Toggle Portd.6
Return
خط هایی که جلوش شماره داره تازه اضافه کردم 
البته یه سر از vcc به pinb.7 متصل شده تا موقع قطع برقو تشخیص بده
نیازی نیس.
چون اصلا نمیتونه تشخیص درجا قطع میشه.
شما هرموقع تمام ال ای دی هات روشن بود مثلا مقدار 140 رو تو حافظه بنویس و وقتی همشون خاموش 10 رو تو حافظه بنویس.
و واسش تعریف کن که هر موقع اون قسمت از حافظه 140 بود همه ی ال ای دی هارو روشن کن و هر موقع 10 بود همه رو خاموش کن.
و این کارو هم هر 1ثانیه یک بار انجام بده(نوشتن در حافظه).
حافظه eeprom محدوده اگه بخواد هر یک ثانیه یه بار بنویسه یه مدت بعد پر میشه و قابل استفاده نیست .درسته؟
نه خیر این طوری نیست.
شما هر بار که میخوای بنویسی حافظه رو پاک کن و دوباره بنویس.
من میخواستم از مقایسه کننده آنالوگ میکرو استفاده کنم که اگه ولتاژ از یه حدی پایین تر اومد تشخیص بده و همون لحظه فلان خروجی میکرو تو eeprom ذخیره بشه و بعد از اینکه برق اومد دوباره بریزه تو خروجی .البته برای اینکه میکرو فرصت کافی برای انجام این کار داشته باشه یه خازن با ظرفیت زیاد موازی با تغذیه میکرو قرار می دیم .دوستان اگه در این زمینه تجربه ای دارند لطفا دریغ نکنند .
جدا از صحبتای شما دوستان، برا ذخیره کردن اصولاً باید بعد از هر دستور ذخیره 20 میلی ثانیه صبر کرد، یعنی:
کد:
Writeeeprom B,1
waitms 20