Zápis do externí EEPROMky

Zkoušel jsem to ale nešlo to.Nevim jestli to bylo hw konfiguraci nebo něčím jiným.Tím že tam nebyly žádné cykly a že to skákalo do těch podprogramu tak to jsem neřešil neboť se v tomto stavu ta chyba nevyskytovala.

Zdravím.
Pokúšam sa zapisovať a následne čítať dáta z eeprom 24C32,len tento môj program mi akosi nechodí.Xtal mám 4Mhz.Poraďte prosím kde robím chybu.
relatko.
I2C_16F877A.asm (6.06 KB)

Myslím si, že máš špatně vyřešenou komunikaci po I2C.
I2C.asm (4.48 KB)

Zdravím.
Použil som subrutiny od teba ale asi zle.Pozri sa mi prosím na tento program kde som ich použil ,lebo na konci mi namiesto očakávaného b’10101010’ na porte B zobrazí b’11111111’.X-tal mám 4Mhz.Pamäť som použil 24C16.
Nerozumiem tomu.Vopred vďaka.

Edit:Po vykonaní tohoto programu som prečítal eeprom a na pozícii kde som zapisoval naozaj bolo AAh,takže zápis je O.K.Ale prečo to neprečíta správne :frowning: ???
Relatko.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.
I2C_16F877A.asm (6.4 KB)

Nevyčte ti to, protože máš špatně R/W bit. 0 - zapis, 1 - čtení

Nerozumiem.Veď je tu,alebo sa mýlim?

call Start_I2C
movlw b’10100000’ ;adresa device
call Write_I2C ;zápis adresy dev.
movlw b’00000000’ ;adresa v eeprom 24c16
call Write_I2C ;zápis adr.do eeprom
call Start2_I2C ;druhý start
movlw b’10100001’ ;čítanie z eeprom
call Write_I2C ;zápis do eeprom
call Read_I2C_NoAck
banksel PORTB
movwf PORTB

call		Stop_I2C	;koniec čítania z eeprom 24C16

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Aha, jsem zase blbě koukal já. To je tak, když člověk děla 5 věcí najednou. Nemám holt chromozom XX. :smiley: :smiley: :smiley: :smiley:

EEPROMkám vadí,jak který výrobce, STOP a hned START . Zkus dát mezi stop a start menší pauzu, dle datasheetu 10ms.

Jinak by to mělo fungovat, máš to dobře. Co máš na PORTu B? LEDky? Jak zjištuješ, že to nevyčte?

epromk
call I2Cstart
movlw b’10100010’ ;ide o zapis do 24c64; adresa 24c64
call i2cW
movfw adresah ; adresa high
call i2cW
movfw adresal ; adresa low
call i2cW
call I2Cstart
movlw b’10100011’ ;ide o citanie z 24c64; adresa 24c64
call i2cW
;-----------------------
call i2cR
call stopI2C
return

I2C_16F877A.asm (6.95 KB)

Zdravím.
Chcel by som doplniť vyššie uvedené rutiny pre komunikáciu z eeprom
o vyhodnotenie prijatia resp.neprijatia ACK bitu od slave zariadenia po odoslaní bytu.
Skúšal som to touto rutinkou po odoslaní byte a nasetovaní SSPIF v PIR1

I2C_prijmi_ack
BSF STATUS,RP0 ; banka 1
BTFSC SSPCON2,ACKSTAT ; zkontroluj zda bylo přijato potvrzení ACK
BSF I2C_chyba,0 ; pokud ne, tak nastav bit chyba,0
BCF STATUS,RP0 ; banka 0
RETURN
ale márne.Aj keď “za jazdy” odpojím eeprom tak bit 0 v reg.I2C_chyba nenasetuje.Viete mi niekto poradiť kde robím chybu?Register I2C_chyba mám namapovaný v banke 1.
Relatko.

Taky jsem to kdysi zkoušel si “hrát” s I2C, aby mi to ukazovalo jestli to nebo ono a můžu ti říct, že jsem neuspěl. Když už jsem si myslel, že to funguje, tak to zase na něčím zkolabovalo.
Pokud EEPROM odpojíš za provozu, třeba jeden pin I2C a dáš ho zpět, na 99% se komunikace neobnoví.

Nazdar.
Ani nechcem aby to po probléme z pripojením pokračovalo.Len potrebujem info o tom že je nejaký problém z komunikáciu z eeprom.Pripájam (nateraz)finálny zdroják kde po zablbnutí z hodinovým al. dátovým pinom nasetuje PORTD,7.V ďalšom programe sa tento signál bude cyklicky sledovať a program sa podľa toho zariadi.Buď opakovanie zápisu,alebo kolabs z hláškou"error memory".
S pozdravom Relatko.
I2C_16F877A.asm (7.43 KB)

To můžeš udělat i tak, že budeš sledovat BF, WCOL,SSPOV, a stavy v reg SSPCON2 a podle se pak program zařídí.
A jediné, jak cela situace pak dopadne je reset I2C, tedy ji vypnout a znovu zapnout a nastavit. :smiley: