16F628A a I2C EEPROM 24C08

Zdravim;
Potrebujem prepojit prosecor a sériovú pamäť 24C08. S touto I2C zbernicou nemám žiadne skúsenosti. Niečo som skúšal v emulátore “PIC Simulator IDE” ale tam mi vždy vyhodilo nejakú chybu. Podarilo sa mi odoslať štart a prvých sedem bitov. Pri ôsmom bite mi to vyhodilo chybu. Program som sa snažil spraviť presne podľa grafu z katalogového listu tejto pamäte.
Nemá niekto nejaký jednochuchý program na čítanie a žápis do tejto pamäte? Potreboval by som “odkukať” ako sa s touto pamäťou pracuje.
Ďalujem za odpovede.

16F628 nemá I2C protokol v sobě, takže ho musíš emulovat. Pokud máš v pořádku emulaci, tak si myslím, že by to mělo normálně fungovat, pokud dodržíš komunikační protokol dle datasheetu. Kdyby jsi měl procesor s I2C, tak bych něco možná sesmolil, ale emulaci I2C napsanou nemám.

Presne o to mi ide. Keby procesor podporoval I2C nebol by problém. Ja by som chcel niekoho poprosiť, čo už niečo takého riešil. Videl som dosť schém s 16F628 a 24C08 a fungovalo to. Len nikde nemôžem zohnať nejaký program pre pic aby som to mohol odkukať.

SKUS SE KOUKNOUT SEM sandiding.tripod.com/iicseeker.html ,NECO TAM JE SICE NE PRO 628 ALE MOZNA TI TO TROCHU POMUZE TO POCHOPIT MOZNA :bulb:

Zkus toto. Našel jsem to doma v nějakém programu. Je to pro 4Mhz.
I2C.asm (2.21 KB)

Čau, tady ti posílám svojí implementaci I2C pro 16F628, je to dělaný pro 4MHz (aby I2C běželo na 100KHz). Jina jsou tam dvě procedury I2C_WRITE_EEPROM a I2C_READ_EEPROM, ty nemaj na implementaci přímou návaznost, ale jsou to přímo procedury který čtou data z paměti, já jsem tam měl 64KB, takže tam posílám 3X adresu atd… ale jinak je to prakticky stejný jako pro 8KB paměť.

Jinak tu implementaci co posílal honza3 :smiley: tak bych prohlásil za extrémně pomalou, ptože tam furt ma to CEK5, zož CCA vychází že mu ta zběrnice běží přinejlepším na 32KHz (pro 4MHz), zatimco mě to běží téměř na oněch 100KHz (víc jak 3x rychleji (aspoň doufam :smiley:)).
i2C.asm (3.96 KB)

Nechci zbytečně hecovat, ale pro zajímavost.
Můj PICBasicPro má dva příkazy za něž se doplní parametry
(I2CREAD a I2CWRITE) a pomocí nich komunikace této pamětí s PIC16F628A funguje spolehlivě
Ale to Ti asi nepomůže.

Pak bych ale nechtěl vidět zpětnej překlad. Někdo to napsal za tebe a zneužíváš jen to co už někdo napsal a nazval to PBP.
Tím tě nechci urazit nebo nas…

Chtěl bych použít vyše uvedené programy pro DS1307 a 16f628 ,ale nějak se v tom pořád motám prosím ctěl jsem se zeptat jestli piny SCL a SDA má být nystaveny jako vstupní nebo výstupní,nebo mají být v 0 nebo 1 proč se přepínalí banky apod. prosím nevysvětlil by ni to někdo jsem začatečník

čau, je to jednoduchý:
I2C sběrnice funguje na principu otevřeného kolektoru, to znamená, že logickou jedna tam zaručují pull up odpory (4K7 nebo tak něco) a logickou 0 tam posílá procesor, z čehož vyplívá že když odesíláš data, tak neměníš na procesoru mezi 1 a 0, ale mezi 0 (výstup na pinu) a 1 (vstup na daným pinu). Je to s toho důvodu aby když vznikne konflikt na sběrnici tak aby nedošlo k poškození některého zařízení, protože daný zařízení v podstatě na sběrnici spíná akorát zem (log 0) a log 1 je tam pomocí odporů, což zaručuje že nikdy nevznikne situace že se zařízení “zkratují”. Jinak s tim přepínáním bank je to právé kvůli tomuhle, protože když jsi v bance 1 tak můžeš kontrolovat registr TRISx na kterým běží I2C. potom je odesílání jednoduchý, když pošleš jedničku, tak nastavíš port jako vstupní (bude se nacházet ve stavu vysoký impedance a hodnotu na sběrnici nastaví odpory), ale pokud chceš odeslat 0 tak nastavíš pin jako výstupní s LOG 0 . S tohohle je vidět že nelze říct kdy má jakej pin bejt nastavenej jako vstup a kdy jako výstup (záleží na stavu komunikace), ale jestli jde o úvodní inicializaci, tak je nastav jako vstupy (SCL i SDA).
Doufám že jsem to napsal aspoň trochu srozumitelně :slight_smile: .

honzo3
“Někdo to napsal za tebe a zneužíváš jen to co už někdo napsal a nazval to PBP”

Pochop, že PBP napsaly chytré hlavy a po přečtení čtyř stránek v manualu musí pochopit jak komunikovat s I2C pamětí pomocí jen dvou příkazů (včetně např. nastavení různých rychlostí) i takový průměrný člověk jako já. Abslolutně k tomu nepotřebuji asm mozek, nebo opisovat.

PBP počítá s průměrnými mozky a pro usnadnění je zde mnoho jednoduchých příkazů např. i pro seriovou komunikaci, komunikaci s LCD displeji, ovládání serv a pod. - vždy po doplnění parametrů vše funguje.
Vyzkoušel jsem to,bez opisování.
Nenapsal příkazy, které používaš v asm, také někdo za Tebe?

Nechtel jsem te nastvat.Slo mi o to, ze kdyz nekdo pise v asm,tak at pise v asm.
Az bude chtit psat v BPB, tak by napsal, “Neni tu nekdo,kdo by vedel,jak v BPB obsluhovat I2C?”

Omlouvam se za diatriku,ale pisu z mobilu. :stuck_out_tongue: