 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Sre Mar 02, 2005 10:28 am Naslov sporočila: At+I2C |
|
|
Kako nasloviti 24C04 za vpis večih podatkov. Glede na to ,da sem že poiskušal nekaj različnih nastavitev, bi prosil za pomoč z konkretnim odgovorom, z preiskušeno verzijo naslavljanja, ki mi bo dokazala moje neizkušnje in bi jo lahko testiral.
Hvala!
LP, stursc |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.72 Kraj: Kranj - struževo
|
Objavljeno: Sre Mar 02, 2005 3:42 pm Naslov sporočila: |
|
|
to sem jaz uporabil, da mi vpisuje en podatek za drugim. Za vsak vpis kličem rutino. Pomerim, vpišem, pomerim, vpišem....
sicer uporabljam 24c512 ampak tudi za tvojega sigurno dela.
Koda: |
; zaporedno PISANJE V zunanji EEPROM
; naslov = EE_pointerH:EE_pointerL (auto-increment po vpisu)
; podatek = Rtemp
EXT_EEwrite:
ldi I2C_dataIO, I2C_EE_W
call I2C_TX_ADDR
lds I2C_dataIO, EEext_pointerH ; interni naslov lokacije HIGH
call I2C_TXd
lds I2C_dataIO, EEext_pointerL ; interni naslov lokacije LOW
call I2C_TXd
mov I2C_dataIO, Rtemp ; ta podatek se vpiše
call I2C_TXd
call I2C_stop ; sproži vpis poslanega podatka v EE
; INC naslova za 1 ; 16-bitno prištevanje 1
lds Rtemp2, EEext_pointerL ; LOW
ldi Rtemp, 1
add Rtemp2, Rtemp
sts EEext_pointerL, Rtemp2
lds Rtemp2, EEext_pointerH ; HIGH
clr Rtemp ; ne spremeni carry zastavice
adc Rtemp2, Rtemp
sts EEext_pointerH, Rtemp2
ldi BDlyC1, 70 ; čas za vpis 70 =.= 30 ms
call BigDelay1
RET
|
I2C_EE_W .. naslov eeproma za vpis (konstanta)
I2C_dataIO .. register, preko katega se prenaša podatek
I2C_TX_ADDR, I2C_TXd, I2C_stop .. rutine za komunikacijo preko I2C
Rtemp .. kr en register
EEext pointer .. dve lokaciji v RAM-u
LP, aly. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Čet Mar 03, 2005 10:37 am Naslov sporočila: |
|
|
Aly
Hvala, sicer najbolj ne razumem vse zadeve !
Poskušal sem tudi to, da sem pisam en podate na HIGH naslov , drugega pa na LOW. Iz tega ni bilo nič.
Sedaj sem spremenil lokacijo pisanja. pojavi se je prvi pozitiven rezultat, zato upam, da do rešitve ni več daleč
HVALA
LP, stursc |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.72 Kraj: Kranj - struževo
|
Objavljeno: Čet Mar 03, 2005 10:43 am Naslov sporočila: |
|
|
ammm, jaz nisem gledal datasheeta od tvojega eeprom-a, zato ne vem na pamet koliko lokacij ima za naslavljanje. Moj ima 65536 lokacij, kar je celih 16 bitov. Iz obeh poslanih bytov eeprom sam sestavi cel 16-bitni naslov, na katerega vpiše.
Mogoče rabiš ti poslati samo en naslov, ne pa dveh, če imaš 256 ali manj lokacij.
Poglej datasheet, kakšne podatke rabi.
LP, aly. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Ned Mar 06, 2005 8:19 pm Naslov sporočila: |
|
|
Hvala Aly
Dolgo sem rabil, da sem zadevo ugotovil oziroma našel problem
Našel sem problem, nisem ga pa še rešil !!
Kaj je problem ?
Kako med tekom programa spremenjivko spraviti v konstanto?
LP, stursc |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.72 Kraj: Kranj - struževo
|
Objavljeno: Pon Mar 07, 2005 7:14 pm Naslov sporočila: |
|
|
sicer te nisem ravno najbolje razumel, ampak bom odgovoril na to, kar sem zastopil...
stursc je napisal/a: |
Kako med tekom programa spremenjivko spraviti v konstanto? |
to se ne da.
Imaš 3 vrste "nalaganja" podatka. Recimo, da hočeš imet številko 129 v registru Rtemp.
1. konstanta -> register
Koda: |
.EQU konstanta1 = 129
.....
ldi Rtemp, konstanta1 |
2. register -> register
Koda: |
.EQU konstanta1 = 129
.DEF reg1 = r15
.....
ldi reg1, konstanta1
mov Rtemp, reg1 |
3. RAM -> reg
Koda: |
.EQU konstanta1 = 129
.DEF reg1 = r15
.DSEG ; podatkovni pomnilnik (SRAM)
sprem1 .BYTE 1 ; rezerviramo 1 byte v SRAM-u
.....
ldi reg1, konstanta1
sts sprem1, reg1 ; shranimo v ram
...
lds Rtemp, sprem1 ; preberemo iz ram-a |
sicer ti pa predlagam TOLE TEMO prebrati...
LP, aly. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Pet Mar 25, 2005 2:53 pm Naslov sporočila: Ubijanje I2C |
|
|
Končno sem spacal Ee 24C04 z AT89C4051
Zadeva deluje, vendar kratko, tako bom tudi kratko napisal
Pri zagonu programa naprogramiram željen čas ( z tipkama UP -DOWN), ki ga nato primerjem s spremenjivko, ki se nenehno spreminja v razponu 0-250 (as byte). to spremenjivko vpisujem v EEprom vsako sekundo. Eeprom berem samo ob ponovnem zagonu, oziroma izpadu napajanja.
Kaj se dogaja, po nekaj izpadih napajanja mi eeprom "požre" , preprosto ga uniči, kar testiram s testnim programom. Med AT in I2C sem poskušal vstaviti upore 4K7, zadeva je ista.
Ker mi bo zaloga pošla, prosim za kak nasvet predlog, namig, kako rešiti problem
Hvala, za vsak nasvet
Obiskovalcem vesele praznike
stursc |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70831.17
|
Objavljeno: Ned Mar 27, 2005 12:24 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Ned Mar 27, 2005 11:32 am Naslov sporočila: |
|
|
Kako to misliš, da ti eeprom uniči? Je eeprom potem popolnoma neuporaben, ali samo na tej adresi??. Si upošteval, da v eeprom ne moreš neomejeno pisati ampak da ima 24c04 1mio vpisov. Torej bi teoretično deloval 277 ur, če vpisuješ vsako sekundo.
Sicer pa ne razumem zakaj bi spremenljivko želel spraviti v konstanto  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Mar 27, 2005 12:25 pm Naslov sporočila: |
|
|
Sicer bascoma ne poznam, tako, da ne vem kako deluje I2C procedura. Domnevam pa, da v eeprom vrednost vpisuješ ravno zato, da bi le to lahko prebral in videl kako stanje je bilo ob izpadu napetosti? Po moji presoji pri izpadu napetosti ne pride do motenega protokola i2c ampak se na eeprom pošlje napačna vrednost. Podobno težavo sem imel sam nekoč z pic-em. Zgodilo se mi je, da je porabnik priključen na isto napajanje kot pic povzročil sesedanje napetosti posledično se je zgodilo, da se je procesor resetiral. Reset pa je povzročil nekontroliran vnos v eeprom , če prav je bil pogoj za vpis pritisk na tipko, a na tipko se ni pritisnilo. Zgodilo se je to, da je ob sesedanju napajalne napetosti prišlo do preskoka programa na proceduro za vpis v eeprom. Vpisalo se je pač tisto kar je v tistem trenutku "čakalo" v EEDATA na trenutno lokacijo EEADR.
V tvojem primeru v koliko imaš na razpolago še kak pin na CPU priporočam hardverski nadzor izpada napetosti. Napetost tipaš takoj za stabilizatorjem brez elektrolita. Napajanje CPU ločiš z diodo ter večjim elektrolitom. Ko bo "padel" pin za kontrolo napetosti je to signal za vpis v eeprom - istočasno pa bo na elektrolitu še dovolj napetosti za vpis v eeprom. Po končanem vpisu program "zakleneš" zazankaš. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Ned Mar 27, 2005 1:27 pm Naslov sporočila: |
|
|
Najprej hvala vsem za komentar !
Da bi zadeva bila bolj razumljiva, želim razložiti namen programa in uporabo Eeproma.
Program je namenjen krmiljenju okenske rolete, in ta kot sam deluje bp.
I2C je dodan za primer ob izpadu napajanje, ki ob ponovni vspostavitvi napajanja prenese podatke UC-ju , ki so bili v času izpada. Vpisuje se vsako sekundo, vendar le ob obratovanju rolete, podatke pa bere le po resetu UC-ja.
Če je življenska doba I2C-ja 1 mio vpisov, potem nimam razlage zakaj ga uniči po 50, 100 ali xxx vpisih, kajti eden je vzdržal le dva izpada napajanja, kar je trajalo le dobro minuto in le eden je "preživel" 1 uro.
Silvo, tvoj predlog se mi zdi uporaben, hvala, bom ugotovil če imam te možnosti, kajti ne vidim druge rešitve, oziroma uporabo končnih stikal.
Če je še kak uporaben nasvet za rešitev tega problema, lepo prosim
Hvala vsem !
stursc |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Mar 27, 2005 3:04 pm Naslov sporočila: |
|
|
Citiram: |
Če je življenska doba I2C-ja 1 mio vpisov, potem nimam razlage zakaj ga uniči po 50, 100 ali xxx vpisih, kajti eden je vzdržal le dva izpada napajanja, kar je trajalo le dobro minuto in le eden je "preživel" 1 uro. |
Tega sicer ne razumem – iz napisanega sklepam, da je izpustil dušo? Programsko ga po moji presoji ni mogoče uničit… Uničila bi ga edino lahko prenapetost na vodilu ali na napajanju.
Skušal bom v par besedah opisat delovanje I2C protokola:
Gre za protokol, ki ga je razvil Philips pred kakimi desetimi leti. Namen protokola je bil na čim enostavnejši način izvesti komunikacijo med čipi. I2C vodilo tvorita dva signala SDA in SCL (dva pina) vsa periferija naj bi bila tipa odprt kolektor in bi znala vodilo potegniti le navzdol navzgor pa ga potegneta le zunanja pullup upora. (to potrjuje mojo zgoraj napisano trditev da softwersko teoretično ni možno uničiti periferije na vodilu.) Kako komunikacija pravzaprav poteka? 'Master' (gospodar – recimo procesor) najprej preveri, če je vodilo prosto. Torej čaka dokler nista SDA ter SCL visoka. Na kar potegne SDA navzdol (kar pomeni da si 'prilasti' vodilo in je to istočasno start bit) Na kar sledi še nizek SCL. Sedaj SDA postavimo stanje, ki ga želimo poslati kot prvi bit sprostimo SCL ter ga spet potegnemo navzdol. Po poslanih 8 bitih sledi 'potrditev' s stani 'sužnja'. Prvi osmi biti vsebujejo podatke o prejemniku (družina ter naslov) sledečih osem bitov je pri eepromu lokacija vpisa, sledečih 8 pa vrednost, ki se bo zapisala v to lokacijo. Vsak naslednji kompleten 8 biten paket se bo zapisal na naslednjo lokacijo vse dokler master ne bo poslal stop bita. Sproščen SCL kateremu čez čas sledi nizek SDA.
Vse to tudi potrjuje, da je vodilo zelo 'varno' ter neobčutljivo na zunanje motnje. Dostikrat slišim, da je statika ali neko 'prasketanje' zbrisalo vrednost z eeproma. To ni mogoče. Seveda pa se lahko zgodi, da se v eeprom zapiše napačna vrednost prav pri neki statični razelektritvi. A za to je krivec 'master' kateremu lahko moteno napajanje zmede oscilator ali pride do preskoka programa (kot v mojem primeru, ki sem ga opisal zgoraj) Ter mu nekaj 'uide' na vodilo. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70831.17
|
Objavljeno: Ned Mar 27, 2005 10:57 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
stursc Član

Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.36
|
Objavljeno: Pon Mar 28, 2005 9:11 pm Naslov sporočila: |
|
|
Hvala obema za komentar!
Kot sem že opisal, zadeva deluje, kako dolgo, nemorem predvidevat, ker če bom ugotovil, da je problem število vpisov, bom vsekakor zadevo poskušal rešit po Silvo-novem predlogu.
Naprej nemorem testirat, zaloga EE-jev je pošla, zato bom nadaljeval po novi nabavi
Kaj sem ugotovil na testnem programu ?
Eeprom ki mi v aplikaciji ni več deloval, se ga vstavil v testni program. Pri posameznih eepromih so bili rezulteti različni. Največ primerov je da ni bilo novega vpisa, torej prebral je star podatek !!
Poseben primer je eeprom, ki je vpisal in prebral podatek, po nekaj sekundah (2,3, 5) se je pa ta podatek "postavil" na 0 (nič). Če pustim, da zadeva deluje naprej , se ta ničla občasno prstavlja na na različne vrednosti.
Skoraj nemorem verjeti, da bi bili vsi eepromi "fuč"
Torej trunutno sem na čakanju nove pošilke, verjetno pa podobno nadaljevanje nebo rentabilno !?
Hvala, vsak komentar je dobrodošel !
LP, stursc |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Mar 28, 2005 9:15 pm Naslov sporočila: |
|
|
Dvomim, da je "odletel" eeprom. Si ga poskuslil pisat ter brisat s programatorjem? _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
|
|
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 Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|