Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Pomoc oko upisa u interni eeprom 16f84a
#2
Rekao bih da je PicBasic u pitanju.

Najverovatnije da se upisuje ovako:

Code:
write lokacija,podaci

A čita ovako:

Code:
read lokacija,varijabla

Naravno, u helpu tvog Basic treba pogledati jer ima dosta verzija za PIC16 seriju.

16F84 ima svega 64 lokacije po 8 bita u svom EEPROM. Dakle lokacija (adresa u EEPROM) može biti od 0-63, a veličina podatka na svakoj adresi 0-255.

Postoji i grupni način čitanja iz EEPROM. Na primer:

Code:
;deklarisanje konstanti, varijabli, arrays i pina za led

param_depth con 10 ; na primer, potrebno ti je 10 lokacija u EEPROM
;promenom samo konstante param_depht resavas potreban broj param (0-63)

led var portb.7 ; led na na primer na pinu RB7, kroz otpornik od min. 330R

trisb = %01111111 ; proglasen samo RB7 kao izlaz, ostali na portu B su ulazi

i var Byte ; varijabla potrebna za for petlju

parametri var Byte[param_depth] ; radni parametri, konkretno 10 kom., u RAM, tokom programa ih menjaš, posle upišeš kad hoćeš
oldparam var Byte[param_depth]  ; privremeni u ram, za poredjenje

Clear  ; softverski reset MCU
    porta = 0 : portb = 0 ; inicijalizacija oba porta na sigurnu pocetnu vrednost

    For i = 0 To param_depth -1 ;0-9, tj. 10 komada
        read i,oldparam[i] ;iz eeprom u ram, oldparam niz se kasnije ne menja,sluzi za uporedjiv. sa nov.vred.
        parametri[i] = oldparam[i]  ;ovde si ih prepisao u radne koje ces menjati tokom programa
        pause 100  ;vreme koje odredjuje brzinu blinkanja led
        Toggle led ; sporo blinkanje led kao indikacija da je procitan EEPROM
    Next i

;posle ovoga radis neki tvoj program, a prvo si pokupio podatke iz eeprom, posle startovanja MCU

Ili grupno upisivanje, gde se upisuje samo onaj podatak koji je promenjen, radi štednje EEPROM.

Code:
upisi:      ; labela kojom pozivas upisivanje kada zelis, pomocu goto ili gosub itd...
    For i = 0 To param_depth -1 ;0-9, tj. 10 komada
        If parametri[i] <> oldparam[i] Then    ;upisi samo one koji se razlikuju od bivsih, tj. samo one koje si menjao
            write i,parametri[i]
            oldparam[i] = parametri[i] ;namesti promenjene oldparam za kasnije poredjenje
            Toggle led ; brzo blinkanje led kao indikacija upisivanja
            pause 20
        EndIf
    Next i

Mnogo godina nisam pisao u basic, ali po sećanju bi trebalo nešto ovako.
Kada se ovde piše kod u Basic, reči (naredbe) iz Basic nisu boldovane.
Tvoj editor za basic će to verovatno sam boldovati, ali evo za svaki slučaj šta bi trebalo da bude boldovano:
write, read, con, var, For, To, Next, If, Then, Endif, Toggle, pause, Byte

Pozz

P.S.

Zaboravih: Ako ti treba neki parametar za neku matematiku ili prikaz na displeju, ili šta god: neko_ko_prima_podatak = param[lokacija (od 0 do param_depht -1)], gde možeš upisati na način: param[lokacija]= neka_veličina (od 0-255).

Štediš eeprom tako što izvršiš upisivanje u njega tek kada nameravaš da isključiš MCU, na primer ručnim pozivom memorisanja.
To se takođe elegantno može napraviti i tako što detektiuješ nečim nestanak naizmeničnog napona na trafou kojim sve to napajaš, a elko ispred stabilizatora za 5V staviš dovoljno velikim da "izdrži" vreme za upis eeprom, dovedeš taj signal nestanka na neki pin MCU i napraviš maleni poziv da se upis izvrši automatski kod nestanka napajanja (nešto za dlaku pre nestanka). Naravno, taj metod zahteva da detekcioni signal bude prilagođen ulazu MCU (0-5V), obavezan brown-out zaštitni sklop, istovremeno sa detekcijom nestanka i zabranu led da ne troši elko i skraćenje vremena u for petlji na neophodnih svega 10mS.

Tada će potrošnja MCU biti beznačajna a upisivanje čak i svih 63 lokacija potrajati manje od sekundu, a to je dovoljno sa nekih možda 2200uF ispred 7805 i radnim naponom od možda 15-tak V ispred stabilizatora. Po nestanku napajanja 7805 će "držati" sigurnih 5V sve dok mu na ulazu napon ne padne na <8V.

Tako na primer rešavaš da ti se parametri tokom nekog rada uređaja ne izgube kod slučajnog nestanka napajanja.
Omogućenje automatskog upisa obeležiš nekim flag, koji kasnije upotrebiš za dozvolu automatskog upisa, da ne bi imao problema kod butovanja MCU, a taj flag postaviš tek kada se završi podizanje onog što si hteo (kada uđeš u glavnu petlju programa).
Naravno, ako ništa nisi u međuvremenu menjao, ništa se neće ni upisati, a ako si menjao biće upisano samo ono što si menjao, tj. samo ono što je potrebno upisati ponovo. Štednja eeprom je maksimalna i bez obzira što je kod 16F84 moguće čak milion upisivanja, u nekim situcijama se to brzo može potrošiti ako ne vodiš računa o tome. Posle toga eeprom postaje beskoristan.

Znam da ti ovo izgleda komplikovano sada, ali sačuvaj ovaj tekst negde jer će ti kad-tad zatrebati, a razumećeš kasnije.
Reply


Messages In This Thread
RE: Pomoc oko upisa u interni eeprom 16f84a - by Macola - 10-20-2014, 12:36 AM

Forum Jump:


Users browsing this thread: 3 Guest(s)