Sari la conținut
ELFORUM - Forumul electronistilor

Solutie memorare RAM la inchidere


nickrvl

Postări Recomandate

Ai înţeles bine. Funcţia ar fi ceva de genul:

if (port.pin == 1){  counter = 0;}else{  counter++;  if (counter > timeout)  {    eeprom_write(address, data);  }}
Rezistenţa şi dioda se leagă ca în schemă.[attachment=0]detector.png[/attachment]
I-mi pare rau dar nu cunosc limbajul, nu inteleg precis ce face "counter", cunosc doar Bascom iar zenerul + rezistenta am inteles de prima data insa unde anume se leaga "monitor" fata de schema mea intrebam, intre timp o sa incerc o varianta ceva mai stufoasa dar e cu led si alte ruperi in figuri, iar citirea se face in curent alternativ direct de pe iesirea trafului de alimentare a Mc-ului astfel sper eu ca timpul de reactie sa fie mult mai rapid.
Link spre comentariu
  • Răspunsuri 20
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nickrvl

    8

  • ratza

    6

  • iulian2010

    2

  • Stefan

    1

Top autori în acest subiect

Imagini postate

Monitor vine pus pe linia pe care trebuie s-o monitorizezi ca să nu dispară. Codul e scris în C, dar e pus doar pentru a exemplifica algoritmul de decizie. Counter e o variabilă, poate avea orice nume, iar counter++ reprezintă incremetarea ei cu 1. Poţi scrie şi counter=counter+1, e fix acelaşi lucru. Acoladele reprezintă un grup de instrucţiuni.EDIT: Counter creşte de fiecare dată cînd pinul e în 0 logic, adică atunci cînd nu e tensiune pe linia monitorizată. Timeout e numărul de verificări peste care se decide că alimentarea a dispărut. Dacă tensiunea revine, timerul e resetat şi programul îşi vede în continuare de treabă. Spune-mi ce vrei să faci, îţi pot desena o schemă logică şi-ţi va fi mai uşor să-ţi scrii codul.

Link spre comentariu

In final am folosit aceasta modalitate:post-9441-139829604208_thumb.jpgE mai mult decit "complicata" fata de modalitea prezentata mai sus insa oricum trebuia facuta o placuta in plus si alaturata montajului deja existent.Este probata si functioneaza bine, citeste tensiunea direct de pe secundarul trafului de alimentare si raspunde prompt la comanda. Trebuie totusi sa mai "umblu" la alimentarea mc-ului, daca e lasat pe alimentare doar el si LCD-ul e totul Ok, la comutarea butonului de alimentare a montajului si implicit la disparitia tensiunii alternative se face scrierea in EEPROM, la pornirea montajului initializarea se face exact de unde a ramas prin citirea datelor din EEPROM cea ce inseamna ca ramine destula energie pentru a face scrierea insa daca intercalez si alti consumatori, doua ventilatore care trebuie incluse in montaj, scrierea nu se mai face, curentul e consumat rapid, asa ca urmeaza sa intercalez pe alimentarea mc-ului o dioda pentru sens si dincolo de ea un condensator tampon doar pentru Mc.Citirea respectiv scrierea se face astfel:............................Config Portb.6 = Input Memorare Alias Pinb.6............................Readeeprom Encodernr , 0............................Do...................If Memorare = 0 Then Writeeeprom Encodernr , 0....................LoopO sa incerc sa implementez un protocol prin care sa-mi roteasca adresa din memorie pas cu pas crescator (sau invers) la fiecare pornire/oprire montaj in idea de a folosi memoria toata si a nu uza doar o singura locatie din adresa, nu stiu precis cite locatii pot fi folosite fiind vorba de Atmega8 si datele care vor fi scrise or sa fie un nr de maxim trei cifre plus memorarea vechii adrese care nu stiu cum va arata si din ce se va compune, probabil tot un numar format din maxim trei cifre, daca ma poate ajuta cineva in acest sens, cite locatii sint disponibile?

Link spre comentariu

Salutare,Adaug si eu metoda folosita de mine, am avut nevoie sa salvez starea unui numarator de bobinaj in caz ca ramane fara alimentare.Montajul avea un regulator de 5V pentru alimentare uC si un condensator de 470u(trebuie experimentat), am folosit comparatorul intern (atmega88) si referinta interna, cand alimentarea de 5V cadea sub 4.5 aveam o intrerupere, atunci imediat opream orice consumator (aveam un display 7segmenti, buzzer, releu) taiam tot, si salvam in eeprom datele 8-10 bytes.Nu mi-am batut capul cu algoritm de ware leveling, celula de eeprom rezista cam pana la 1000000 de cicluri de erase, am calculat ca nu o sa ating nici 100.000 de porniri-opriri. Pentru ceva industrial ar fii fost nevoie de ware-leveling, back-up data, integrity check(crc).

Link spre comentariu
  • 2 săptămâni mai târziu...

In final am folosit aceasta modalitate:[attachment=0]m.jpg[/attachment]E mai mult decit "complicata" fata de modalitea prezentata mai sus insa oricum trebuia facuta o placuta in plus si alaturata montajului deja existent.Este probata si functioneaza bine, citeste tensiunea direct de pe secundarul trafului de alimentare si raspunde prompt la comanda. Trebuie totusi sa mai "umblu" la alimentarea mc-ului, daca e lasat pe alimentare doar el si LCD-ul e totul Ok, la comutarea butonului de alimentare a montajului si implicit la disparitia tensiunii alternative se face scrierea in EEPROM, la pornirea montajului initializarea se face exact de unde a ramas prin citirea datelor din EEPROM cea ce inseamna ca ramine destula energie pentru a face scrierea insa daca intercalez si alti consumatori, doua ventilatore care trebuie incluse in montaj, scrierea nu se mai face, curentul e consumat rapid, asa ca urmeaza sa intercalez pe alimentarea mc-ului o dioda pentru sens si dincolo de ea un condensator tampon doar pentru Mc.Citirea respectiv scrierea se face astfel:............................Config Portb.6 = Input Memorare Alias Pinb.6............................Readeeprom Encodernr , 0............................Do...................If Memorare = 0 Then Writeeeprom Encodernr , 0....................LoopO sa incerc sa implementez un protocol prin care sa-mi roteasca adresa din memorie pas cu pas crescator (sau invers) la fiecare pornire/oprire montaj in idea de a folosi memoria toata si a nu uza doar o singura locatie din adresa, nu stiu precis cite locatii pot fi folosite fiind vorba de Atmega8 si datele care vor fi scrise or sa fie un nr de maxim trei cifre plus memorarea vechii adrese care nu stiu cum va arata si din ce se va compune, probabil tot un numar format din maxim trei cifre, daca ma poate ajuta cineva in acest sens, cite locatii sint disponibile?

Eu am folosit asa:
$eepromLabel1:Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8Label2:Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8$dataReadeeprom Kmt , Label1Readeeprom Kmr , Label2doMAIN PROGRAM......If Pine.0 = 1 ThenWriteeeprom Kmt , Label1Writeeeprom Kmr , Label2end ifloopend
Acum ca am prins ceva experienta, ma gandesc la acest LABEL1 si LABEL2 care vad ca defapt am configurat aceasi adresa de DATE, ciudat fapt ca atat in simulare cat si in realitate cele 2 valori sunt diferite chiar daca are aceasi adresa de DATE, cred ca defapt in adresa de date memoreaza si numele LABEL1 si LABEL2 pe langa valorile date.La treaba cu citirea rapida a lipsei tensiuni as fi folosit un releu AC pus direct pe secundarul trafului daca e 12v sau 24V, deoarece cand sa luat curentul, instant releul declanseaza, folosit contactul NO sau chiar si NC care pune un PORT la masa sau la +5V, dar mai bine as folosi sa il puna la masa si aici sa intre aceasta functie de a salva datele.L.E nu cred ca isi are rostul sa folosesti toata memoria EEPROM prin rotatie din cauza ca MCU nu tine cont ca ai sters jumate din ea sau un sfert sau toata, tot O DATA stearsa e luat in considerare.In datele tehnice zice ca suporta 100k de rescrieri, se vorbeste de toate mameria EEPROM, daca ar fi sa poti folosi memoria de mai multe ori , aparea 100k de rescrieri pentru fiecare adresa din EEPROM.Daca vrei sa folosesti o alta adresa de date poti scrie asa
$eepromLabel1:Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8Label2:Data 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80$data
Link spre comentariu

..........................................La treaba cu citirea rapida a lipsei tensiuni as fi folosit un releu AC pus direct pe secundarul trafului daca e 12v sau 24V, deoarece cand sa luat curentul, instant releul declanseaza, folosit contactul NO sau chiar si NC care pune un PORT la masa sau la +5V, dar mai bine as folosi sa il puna la masa si aici sa intre aceasta functie de a salva datele..................................

Sint multe metode posibile insa "placuta" cu montajul de mai sus mi-a fost mult mai usor de atasat/pozitionat in cutia sursei si functioneaza excelent, ce a trebuit sa fac in plus a fost sa inseriez strict pe alimentarea cu montajul Mc-ului + LCD o dioda si sa pun un condensator electrolitic tampon de valoare mai mare, acesta pastreaza destula energie din momentul intreruperii alimentarii pentru a scrie in eeprom. Varianta cu "rotirea" locatiilor de memorie nu am implementat-o inca.
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări