Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Eeprom

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
zuti
Mojster


Pridružen/-a: Tor Jun 2004 15:56
Prispevkov: 44

PrispevekObjavljeno: Sob Jun 05, 2004 11:29 am    Naslov sporočila: Eeprom Odgovori s citatom

lep pozdrav!

Imam en problem, ki ga ne znam rešit. Potrebujem števec impulzov z 2051, kateri bi hranil podatke ob ob prekinitvi napajanja, ali ob ispadu el. energije v eeprom 2404.
V njega ne spravim večjega števila od 255, rabil bi pa sedem mestno število, torej 9.999.999. Mi lahko kdo pomaga prosim?


zuti

_________________
L.P.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
bferlic
Začetnik


Pridružen/-a: Ned Apr 2004 10:36
Prispevkov: 11
Kraj: Brezula

PrispevekObjavljeno: Sob Jun 05, 2004 11:41 pm    Naslov sporočila: Odgovori s citatom

Zdravo

Kako pa imas v 2051 shranjeno tako veliko stevilo? Za taksno velikost mora zasedati vsaj 3 byte, tak da pac vse tri shranis. Kako pa se konkretno to naredi, pa ti ne morem pomagat. Upam da nisem zgresil z odgovorom.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jun 06, 2004 6:11 am    Naslov sporočila: Odgovori s citatom

No, ja, 2051 zna šteti višje od 255, če mu pomagamo z Basic programom, kjer spremenljivko definiramo z Long ali Single.

dim x as long

Za tako definirano spremenljivko rezervira bascom 4 bajte. Kako sedaj to zapisati v eeprom, bajt po bajt, je tezje razloziti. Jaz bi to naredil tako;

Neposredno izpred definicije spremenljivke x bi definiral indeksirano spremenljivko y recimo tako:

dim y(1) as byte
dim x as long

Če sedaj v programu napišemo y(2), bo program obravnaval prvi bajt izza spremenljivke y(1), to pa je prvi od 4 bajtov spremenljivke x

tako bi morda zapisal x v eeprom tako:

for i = 2 to 5

gosub zapisi, ta podprogram zapiše bajt y(i) v eeprom in

next


ALi ve kdo enostavnejše? bil bi mu hvaležen.

Vilko

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
zuti
Mojster


Pridružen/-a: Tor Jun 2004 15:56
Prispevkov: 44

PrispevekObjavljeno: Ned Jun 06, 2004 1:04 pm    Naslov sporočila: Odgovori s citatom

Lep pozdrav!

Vilko, v prvi vrsti , hvala za odgovor, vendar moram na žalost povedati, da mi ni najbolj jasno, kaj bi moral narediti. Veš, spadam še med bolj sveže uporabnike bascoma, pa si moram še neke stvari razjasniti. Ni mi namreč jasno, kako vse skupaj napisati. Da vse skupaj poenostavim, bom dal en čisto kratek program, pa če ti je (ali komu drugemu) bi prosil, da pripišeš tisto, kar bi bilo potrebno. Vzamimo za primer, da števec šteje samo do 9999.

dim števec as integer, ee_adr as integer,ee_byte as integer
config sda=p1.5
config sc1=p1.2
ee_adr=255
gosub berieprom

do
gosub pisieprom
if p3.7=0 then incr stevec
if stevec>9999 then stevec=0
loop

pisieprom:
i2cstart
i2cwbyte &B10101110
i2cwbyte ee_adr
i2cwbyte ee_byte
i2cstop
waitms 10
return

berieprom:
i2cstart
i2cwbyte &B10101110
i2cwbyte ee_adr
i2cstart
i2cwbyte &B10101111
i2crbyte ee_byte,9
i2cstop
return


Mislim, da je nekako tako prav, le kje zdaj vstaviti, oziroma kako, tvojo zamisel?

Hvala - zuti

_________________
L.P.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jun 06, 2004 1:55 pm    Naslov sporočila: Odgovori s citatom

Zuti,
prvo: tvoji rutini pisieeprom in berieeprom sta napisani tako, da piseta ali bereta en sam bajt iz eeproma, in to ta, katerega naslov najdeta v ee_adr. In to piseta iz bajta rama definiranega kot ee_byte in bereta v ta bajt. Torej bo potrebno za pisanje/ branje stevca, ki sedi na vec bajtih ti rutini klicati 4 krat in pri tem povecevati naslov ee-adr.
drugo: V tvojem glavnem programu vidim neskoncno zanko, in rutine za branje sploh niso klicane, tvoj program samo steje, in pise v eeprom in nic drugega.
tretje: Tudi stetje ni prav posreceno. Tako kot si napisal, bi program z veliko hitrostjo stel cim bi malo pritisnil na tipko. Ti enostavno ne mores tako hitro pritisniti na tipko in potem spustiti, da bi program pristel samo enojko. V ta namen je v Bascomu ukaz Debounce.
Nadalje: eeprom ima omejeno število pisanj. Le to je sicer zelo veliko, toda pisanje v eeprom veckrat na sekundo pa bo vseeno hitro provedlo do konca življenske dobe eeproma.

Naredimo recimo tako:

Štejmo pritiske na tipko v števcu X definiranem kot Single, torej v 4 bajtih in stanje števca prikažimo na LCD prikazovalniku (displayu. Če ga nimaš, priporočam nakup, zelo olajša testiranje programov, ker ti program pokaže, kaj se z njim dogaja. Več o LCD displayu poglej v Help)

Vsakih 10 pritiskov na tipko, prenesimo stanje števca X v bajte od naslov 128 dalje.


dim pomozni(1) as byte
dim x as single

dim ee_byte as byte
dim ee_adr as byte


do
debounce p3.7 , 0 , tipka , sub
pomozni(1) = x mod 10 ' funkcija modul da ostaneg pri deljenju
if pomozni(1) = 0 then
ee_adr = 128 'kam v eeprom pisati
gosub pisieeprom4
incr x
' to pocecanje stevca x sicer pokvari stanje, a prepreci, da bi
' mikro kar naprej v hitri zanki pisal po epromu
' lahko bi dali tudi wait ali kako drugače mislili na življenje eeproma
end if

loop
' Tudi ta program nikdar ne pride v branje eeproma. Vendar nadaljujmo!

tipka:
' podprogram, ki ga klice debounce, ce je tipka pritisnjena
incr x
cls 'izbrisi LCD
lcd x 'Prikaži Števec
return;
' Bascom bo drugic prisel v to rutino sele, ko bos tipko spustil in jo spet
' pritisnil


Pisieeprom4:
' je napisana tako, da pise stiri bajte:
dim I as byte
for I = 2 to 5
ee_byte = pomozni(i)
gosub pisieeprom
' tvojo rutino torej klicemo 4 krat vsakokrat z raclino vsebino in
' razlicnim naslovom
incr ee_adr
next i
return

Program sem 'izssesal iz prsta'. Nisem testiral, tako približno bi moralo iti.

Pozdrav
Vilko

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jun 06, 2004 2:28 pm    Naslov sporočila: eeprom Odgovori s citatom

LP!
No malo več podatkov o hitrosti štetja nebi škodovalo.Poskusi napisati kaj bo štel ta števec,ali bo vsaka sprememba vpisana v eeprom?
Če bo vpis v eeprom samo ob izklopu je potrebno napajanje kontrolirati z enim pinom in imeti dovolj velek elektrolit ki bo omogočil procesorju da v prekinitveni rutini obstoječe stanje vpiše v eeprom.
V prvem postu si povedal da je max.število pulzov 9.999999, razlika je ali je 9mil. ali pa 9999 ker 9999 gre v word.

Lahko pa narediš tudi takole:
Dim števecbyte1 as byte,stevecbyte2 as byte,stevecbyte3 as byte

stejes impulze in ko bo stevecbyte1 > 255 povecas stevecbyte2 in postavis stevecbyte1 na 0 (itn)
V eeprom posebi shranis vsak bajt.
Od teh treh bajtov na koncu naredis eno stevilko ki bo kazala število pulzov.
Vlado
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
zuti
Mojster


Pridružen/-a: Tor Jun 2004 15:56
Prispevkov: 44

PrispevekObjavljeno: Ned Jun 06, 2004 9:10 pm    Naslov sporočila: Odgovori s citatom

Lep pozdrav!

Fantje, hvala za izvirne odgovore, zdaj se mi že malo svita kako bi naj vsa stvar izgledala, čeprav bo potrebno še nekaj pisanja, da bom stvari prišel do dna. Zanke debounce in pisanje na LCD nisem uporabil v tem primeru zaradi pisanja (dolžine programa), drugače pa ta del obvladujem.
Vseeno hvala za opozorilo. Impulzi so različni (od 0 pa do 150 na minuto) in niso konstantni. To da bi shranil podatek samo ob ispadu el. energije pa ni slaba zamisel, ker če je količina vpisov v eeprom tako omejena, bi ga verjetno dokončno zakuril že v enem dnevu. Torej Vilko in Vlado še enkrat hvala za pomoč, če bom uspel - odlično - če pa ne, pa še bom prosil za nasvet.

zuti

_________________
L.P.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group