Elektronika.lt
 2025 m. liepos 9 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2025 07 09, 20:41. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » Išorinis EEPROM
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 12
Pereiti prie 1, 2  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 Išorinis EEPROM
PranešimasParašytas: 2006 01 30, 15:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Na štai vidinio EEPROM panaudojimą forumo dalyvių pagalba įvaldžiau, dabar noras pajungti ir išorinį.
Pradžiai norėčiau išmokti elgtis su 24Cxx EEPROM. Jungsiu prie Atmega8515.
Kiek išsiaiškinau galimi du jungimo variantai, tai aparatinis TWI ir programinis I2C. Kadangi Atmega 8515 aparatinio TWI neturi, lieka pasinaudoti programiniu I2C. Pirmiausiai domina, kaip sukurti failą, kurį reikės įrašyti į EEPROM ir kokį soft'ą tam naudoti. Sakykim, norėsiu įrašyti tokius duomenis, kurie dabar sąlyginai yra vidiniame EEPROM:
eeprom testas1[]="Vienas";
eeprom testas2[]="Du";
....
eeprom testas10[]="Desimt";

Antras klausimas, kaip įrašyti tą pagamintą failiuką į EEPROM. Domina ar galima įrašyti, kai EEPROM pajungtas prie AVR'o. Dabar naudoju PonyProg2000 ir programerį iš http://www.elektronika.lt/schematic/theme/67/21/. Tikriausiai reikalingas būtų kažkoks loaderis, kurį reiktų pirmiau perkelti į AVR'ą, o paskui jau reikiamą failą į EEPROM. Bet ar tą galima realizuoti turimom priemonėm?

Kitas klausimas ar galima ant tų pačių AVR kontrolerio išvadų pajungti RTC DS1307 ir EEPROM. Abu jungiami per I2C.

Na ir paskutinis klausimas, kaip realizuoti duomenų nuskaitymą ir rašymą su CodeVisionAVR C kompileriu.
Na va, nepasikuklinau, labai daug paklausiau, tikiuosi padėsite susigaudyti:)
 Re: Išorinis EEPROM
PranešimasParašytas: 2006 01 30, 16:07 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Gedass
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Citata:

Antras klausimas, kaip įrašyti tą pagamintą failiuką į EEPROM. Domina ar galima įrašyti, kai EEPROM pajungtas prie AVR'o. Dabar naudoju PonyProg2000 ir programerį iš http://www.elektronika.lt/schematic/theme/67/21/. Tikriausiai reikalingas būtų kažkoks loaderis, kurį reiktų pirmiau perkelti į AVR'ą, o paskui jau reikiamą failą į EEPROM. Bet ar tą galima realizuoti turimom priemonėm?


Siaip korektiskai veikianti programa pati turetu susirasyti pradinius inicializavimo duomenis i eeproma

Citata:

Kitas klausimas ar galima ant tų pačių AVR kontrolerio išvadų pajungti RTC DS1307 ir EEPROM. Abu jungiami per I2C.


Galima.Tam naudojama adresacija i2c irenginiu.
 Išorinis EEPROM
PranešimasParašytas: 2006 01 30, 16:37 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Nelabai įsivaizduoju, kaip PonyProg2000 programa gali atsirinkti, koks EEPROM prie Atmega8515 prijungtas. Atmega su programeriu šnekasi MOSI, MISO, SCK ir Reset išvadais, o EEPROM prijungtas prie kokio nors PORTB.0 (SCL) ir PORTB.1 (SDA)? Ar aš čia visai grybauju?
 Išorinis EEPROM
PranešimasParašytas: 2006 01 30, 17:11 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Dreifas
Moderatorius
Moderatorius
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Cia jis turejo omenyje, kad vidini isiraso. O isorinis rasomas atskirai su kitu programeriu. Arba programos vykdymo metu Smile
Vienas is variantu: http://www.lancos.com/prog.html#ludipipo
Nebandziau negaliu daugiau nieko apie ji pasakyti.
 Išorinis EEPROM
PranešimasParašytas: 2006 01 30, 17:23 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Su ludipipo viskas ten aišku. Norisi šiek tiek universalesnio būdo, kad nereikėtų EEPROM iš schemos išlupinėti ir atskirai programuoti:)
 Išorinis EEPROM
PranešimasParašytas: 2006 01 31, 14:46 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Matau, kad per daug paklausiau:). Nelabai kas nori patirtimi dalintis:(
Pamėginsiu tada pasidalinti, kiek pavyko išsiaiškinti, tikiuosi sulaukti komentarų.
Kuriame failiuką *.eep, kurį reikės perrašyti į 24c16 EEPROM. Ten turėtų būti sekanti informacija(analogas su vidiniu EEPROM):
eeprom char menu1[]="Pirmadienis";
eeprom char menu2[]="Antradienis";
eeprom char menu3[]="Treciadienis";
eeprom char *menu[]={menu1, menu2, menu3};
eeprom char moon[]={0xee, 0xee, 0xaa, 0xaa};
EEPOM'e viskas atrodyt7 taip:
Adresas:
000000: 50 69 72 6D 61 64 69 65 6E 69 73 00 41 6E 74 72
000010: 61 64 69 65 6E 69 73 00 54 72 65 63 69 61 64 69
000020: 65 6E 69 73 00 EE EE AA AA FF FF FF FF FF FF FF
000030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Pvz: Pirmadienis -> 50 69 72 6D 61 64 69 65 6E 69 73 00
žodis baigiasi 00 simboliu.

Išorrinio EEPROM reikšmės nuskaitymas 0x10 adresu (CodeVisionAVR):
/* the I2C bus is connected to PORTB */
/* the SDA signal is bit 3 */
/* the SCL signal is bit 4 */
#asm
.equ __i2c_port=0x18
.equ __sda_bit=3
.equ __scl_bit=4
#endasm
#include <i2c.h>

#define EEPROM_BUS_ADDRESS 0x10

/* read a byte from the EEPROM */
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}
void main(void)
{
unsigned char i;
i2c_init();
/* read the byte from address 10h */
i=eeprom_read(0x10);
while (1);
}

Su įrašymu dar nesigauna. Bet kaip man nuskaityti duomenis esančius ne vienoje skiltyje, o keliose? Sakykim "Pirmadienis" prasideda adresu 000000 ir baigiasi 0 simboliu adresu 00000b. Kaip nurodyti programai, kad man riekalingas užrašas yra kažkokiu pradiniu adresu ir kaip ji supras, kokio ilgio tas užrašas, nes kiekvienu atveju jis gali skirtis. Suprantu, kad 0 simbolis lyg ir apibrėžia eilutės pabaigą, bet kaip tai atrodo programiškai?
 Išorinis EEPROM
PranešimasParašytas: 2006 01 31, 23:23 Pranešti apie taisyklių pažeidimą Atsakyti su citata
vakaras
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Domantas rašo:

Bet kaip man nuskaityti duomenis esančius ne vienoje skiltyje, o keliose? Sakykim "Pirmadienis" prasideda adresu 000000 ir baigiasi 0 simboliu adresu 00000b. Kaip nurodyti programai, kad man riekalingas užrašas yra kažkokiu pradiniu adresu ir kaip ji supras, kokio ilgio tas užrašas, nes kiekvienu atveju jis gali skirtis. Suprantu, kad 0 simbolis lyg ir apibrėžia eilutės pabaigą, bet kaip tai atrodo programiškai?


Joo... Prisisvajojei Tu ten žiūriu... Ok:

a) Jei nori sužinoti pradžią-pabaigą kiekvieno įrašo (kaip kad parašei), vienintelis būdas - pradėti skaityti nuo adreso 0x00 ir analizuoti kiekvieną nusiskaitytą baitą;
b) Jei nori daryti taip kaip visi daro - naudok fiksuoto ilgio duomenų eilutes (bei kitą įrašo informaciją), ir tada tiksliai galėsi žinoti kokiu adresu yra Tavo norimi duomenys (nebereikės visos atminties per I2C perkratyti ieškant reikiamo duomens).
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 11:47 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kai nieko neišmanai, tai ir prisisvajoji:)
Supratau, kad paprasčiausias būdas yra naudoti fiksuoto ilgio eilutes, t.y
mano atveju žodį "Pirmadienis" įrašysiu 0x00 adresu, sekantį 0x10, dar sekantį 0x20 ir t.t. Tik tokiu atveju nelabai efektyviai išsinaudoja atmintis, bet čia turbūt kompromisas tarp efektyvumo ir paprastumo.

Dabar užstrigau ties kita problema: 24C16 adresacija I2C magistralėje. Iš aprašymo supratau, kad EEPROM išrinkimas I2C magistralėje aprašomas taip: 1 0 1 0 P1 P2 P3 R/W, kur P1-3 yra atminties blokai (pages), kurių yra aštuoni. Jeigu nustatau adresą: 10100010, tai vadinasi turėčiau skaityti duomenis iš pirmojo atminties bloko, kur adresai yra nuo 0x0000 iki 0x01FF, jeigu reikia paskutiniojo bloko, tai adresas turėtų būti 10101110 ir adresai nuo 0x0700 iki 0x07FF. Atitinkamai rašant duomenis į EEPROM pirmas bitas keičiasi į 1. Problema, kad niekaip negaliu įrašyti duomenų į EEPROM. Darau viską pagal pavyzdį, kuris yra CodeVision help'e, tik ten skirta 24C02, bet tai turėtų atitikti pirmą 24C16 duomenų bloką. Štai ištrauka iš help'o:
/*Example how to access an Atmel 24C02 256 byte I2C EEPROM:*/
/* the I2C bus is connected to PORTB */
/* the SDA signal is bit 3 */
/* the SCL signal is bit 4 */

#asm
.equ __i2c_port=0x18
.equ __sda_bit=3
.equ __scl_bit=4
#endasm

#include <i2c.h>
/* function declaration for delay_ms */
#include <delay.h>
#define EEPROM_BUS_ADDRESS 0xa0 (10100000)

/* read a byte from the EEPROM */
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

/* write a byte to the EEPROM */
void eeprom_write(unsigned char address, unsigned char data) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(10);
}

void main(void) {
unsigned char i;

/* initialize the I2C bus */
i2c_init();

/* write the byte 55h at address AAh */
eeprom_write(0xaa,0x55);

/* read the byte from address AAh */
i=eeprom_read(0xaa);
while (1); /* loop forever */
}

Ką darau ne taip?
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 13:39 Pranešti apie taisyklių pažeidimą Atsakyti su citata
vakaras
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Domantas rašo:
Dabar užstrigau ties kita problema: 24C16 adresacija I2C magistralėje.
Ką darau ne taip?

Na visų pirma apsispręsk, kas yra "pirmas bitas"... Nes vienu atveju tai skamba lyg vyriausias bitas, kitu - lyg jauniausias, paskui lyg nulinis arba pirmas...

Antra, kiek rašei - visur naudojai "write" operaciją. Tad skaitymas ir negali veikti. Jauniausias bitas apsprendžia skaityti ar rašyti.
Trečia - ar bent mikroschema kalbasi su Tavim? T.y., ACK atsako?

Domantas rašo:

Jeigu nustatau adresą: 10100010, tai vadinasi turėčiau skaityti duomenis iš pirmojo atminties bloko, kur adresai yra nuo 0x0000 iki 0x01FF


Ir vėl - kas yra "pirmas"? Šiuo atveju inicijuoji įrašymą į pirmą bloką, bet ne adresu 0x00-1FF, o nuo 0x100-0x1FF. (puslapio dydis 256 baitai!!!) Jei nori adresuoti nuo 0x00, tai kreipkis į nulinį bloką, o ne į pirmąjį
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 15:24 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Ačiū už komentarą.
Pirmas bitas turėjau minty jauniausią, t.y. R/W bitą, o kad naudoju "write" operaciją, tai ten taip procedūros parašytos. Nuskaitymas gaunasi su data=i2c_read(0) komanda.
Būtent skaitymas (aš darau tokią prielaidą) lyg ir vyksta. Metodas gal ir kreivas, bet aš pasijungęs LCD į kurį išvedinėja nuskaitomą EEPROM adresą ir duomenis esančius tuo adresu. EEPROM'as kažkada buvo įrašytas ir nėra tuščias. Nuskaitant duomenys tuo pačiu adresu, gaunu tuos pačius rezultatus. Vadinas nuskaitinėja ne betką. Atjungus maitinimą nuo EEPROM nuskaito tik 0xFF, vadinasi tada nieko nenuskaito. Jeigu tik mėginu rašyti nurodytu adresu kokią nors reikšmę, tai vėliau aš jos tuo adresu nerandu:(
Ten būna ta pati reikšmė, kokia buvo prieš įrašymą.
Dėl blokų truputį suklydau rašydamas, ten viską suprantu teisingai: 000 yra nulinis blokas (žmogiškai pirmas), o 111 septintas (arba žmogiškai aštuntas).
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 15:35 Pranešti apie taisyklių pažeidimą Atsakyti su citata
vakaras
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Domantas rašo:
111 septintas (arba žmogiškai aštuntas).

"Žmogiškų" terminų elektronikoje nenaudok, nes liksi nesuprastas.

Domantas rašo:

Jeigu tik mėginu rašyti nurodytu adresu kokią nors reikšmę, tai vėliau aš jos tuo adresu nerandu:(


Kaip supratau, paprogrames pasiskolinai nuo 24C02....? Šiaip, ji skiriasi nuo 24C16. Pasitikrink ką veikia i2c_write() ir i2c_read() paprogramės. Geriausiu atveju, jei turi galimybę, pažiūrėk kokie konkrečiai signalai vaikšto ant I2C šynos, ir pamatysi koks bitas netinkamoje vietoje yra atsiradęs (skaitmeninis oscilografas tam reikalingas).
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 16:04 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Paprogramė nėra būtent 24C02 skirta. Ji skirta I2C įrenginiams. Pavyzdys tik, kaip pajungti 24C02. Štai kopija I2C.h:
/*
CodeVisionAVR C Compiler
(C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.

Prototypes for I2C bus master functions

#ifndef _I2C_INCLUDED_
#define _I2C_INCLUDED_

#pragma used+
void i2c_init(void);
unsigned char i2c_start(void);
void i2c_stop(void);
unsigned char i2c_read(unsigned char ack);
unsigned char i2c_write(unsigned char data);
#pragma used-

#endif
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 16:17 Pranešti apie taisyklių pažeidimą Atsakyti su citata
vakaras
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Ar gerai pajungtas EEPROM plokštėje? T/y/. A0-A2, WP?

Ir sakau - pažiūrėk kas dedasi ant I2C šynos...
Galų gale, gal kreipiesi į EEPROM dar nebaigus įrašymo ciklo....
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 16:21 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
A0-A2 į žemę, o WP +5V. Tiesa pasakius, nuo kažkokios schemos nužiūrėjau.
O skaitmeninio oscilografo neturiu, tai su pažiūrėjimu problema.
 Išorinis EEPROM
PranešimasParašytas: 2006 02 01, 20:36 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Domantas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Jo, WP į +5 ir yra write protect. Nuo žioplumo vaistų nėra:)
Grįšiu reikės patikrinti ar veikia.
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

„Mokslo sriuba“

www.matuok.lt - Interneto spartos matavimo sistema

Programuotojas Tautvydas – interneto svetainių-sistemų kūrimas

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Football Training Kit
Football Training Equipment, Football Skills, Football Training
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Ets2 mods, Ats mods, Beamng drive mods
allmods.net
„MokslasPlius“ – mokslui skirtų svetainių portalas
www.mokslasplius.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – lietuviškų tinklalapių vitrina
www.ltv.lt/technologijos/
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama