kit Postat August 30, 2010 Partajează Postat August 30, 2010 n-am mai lucrat cu I2C pana acum. daca nu voi rezolva problema, foarte probabil ca nici nu o sa lucrez vreodata... partea hard: ST MICROELECTRONICS M24256-BWMW6G este cuplata : E0, E1, E2 la gnd. !WC la gnd. SDA la RB0/SDA, cu un pull-up de 4k7. SCL la RB1/SCL. crystalul este de 20MHz partea soft: #pragma config WDT=OFF#pragma config PBADEN=OFF#pragma config PWRT = OFF#pragma config PLLDIV = 5 //20MHz#pragma config FOSC = HSPLL_HS //20 MHz#pragma config CPUDIV = OSC1_PLL2 //20 MHz#pragma config MCLRE = ON#pragma config LVP = OFF#pragma config USBDIV = 2#pragma config VREGEN = ON/apoi, in initializarea sistemului unsigned char resp;//init TMR3T3CON=0x80;//0xA0;IPR2bits.TMR3IP=1;PIE2bits.TMR3IE=1;T3CONbits.TMR3ON=1;INTCON=0xC0;ADCON1=0x0f;//intreg PORTA este digitalCMCON=0x07;...TRISB=0x03; //RB1:0 intrari, pr memoria seriala...OpenI2C(MASTER,SLEW_ON);SSPADD=0x77;...resp=EEByteWrite_INT_Addr(0xA0, 0x0001, 0xA5);EEAckPolling(0xA0);scens_count=EERandomRead(0xA0,0x01);toate bune si frumoase, resp ramane 0xff, iar scens_count la fel, probabil din spirit de solidaritate. Am rescris unsigned char EEByteWrite_INT_Addr(unsigned char, unsigned int, unsigned char); if ( !SSPCON2bits.ACKSTAT ) // test for ACK condition received { if ( WriteI2C((unsigned char) (address >>8) ) ) // write word address for EEPROM { StopI2C(); return ( -3 ); // set error for write collision } if ( WriteI2C((unsigned char) (address & 0x00ff) ) ) // write word address for EEPROM { StopI2C(); return ( -3 ); // set error for write collision }...pornind de la vechea unsigned char EEByteWrite(unsigned char, unsigned char, unsigned char); tinand cont ca functia returneaza -1 in caz de Bus Collision error dar tipul returnat este unsigned char, poate fi asta? daca da, cum trebuie sa fac? daca nu... cam asta ar fi. are cineva rabdarea sa ma indrume cum sa ies din impas? multumesc. Link spre comentariu
Liviu M Postat August 30, 2010 Partajează Postat August 30, 2010 ST MICROELECTRONICS M24256-BWMW6G este cuplata : E0, E1, E2 la gnd. !WC la gnd. Eu as lega !WC la un pin al picului; din cate am vazut eu in data sheet, WC asta stabileste modul de adresare al memoriei (scriere - WC==0, citire WC ==1) SDA la RB0/SDA, cu un pull-up de 4k7. SCL la RB1/SCL. Eu as mai pune si la SCL o rezistenta pull-up (sau as activa weak pull-up pentru portul b). La soft nu ma pricep (nu stiu exact ce compilator e (c18?) si nici functiile nu-mi spun nimic), da' mi-a sarit in ochi ...TRISB=0x03; //RB1:0 intrari, pr memoria seriala Dupa parerea mea, SCL e iesire si trebuie configurat ca atare; tu l-ai facut intrare si s-ar putea ca problema ta sa fie de la lipsa clock-ului - pagina 209 din Data sheet Note 1: When enabled, the SDA and SCL pins must be properly configured as input or output. Link spre comentariu
kit Postat August 30, 2010 Autor Partajează Postat August 30, 2010 Dupa parerea mea, SCL e iesire si trebuie configurat ca atare; tu l-ai facut intrare si s-ar putea ca problema ta sa fie de la lipsa clock-ului - pagina 209 din Data sheet Two pins are used for data transfer: • Serial clock (SCL) – RB1/AN10/INT1/SCK/SCL • Serial data (SDA) – RB0/AN12/INT0/FLT0/SDI/SDA The user must configure these pins as inputs by setting the associated TRIS bits. asta-i din datasheet-ul 4550, exact de la I2C, asa ca TRISB pare ok... compilatorul pe care-l folosesc este C18, v3.35. am rescris ceva functii... pentru a putea adresa o plaja mai mare de 255 locatii, cat permiteau vechile functii (unsigned char l-am portat catre unsigned int). de fapt, pentru a adresa orice, ca memoria asta asteapta mai intai upper byte si apoi lower byte din adresa. ... intre timp (din momentul in care am inceput sa scriu postul si pana acum), tot sapand, am dat de hiba: am lasat WC in aer si a mers: "When unconnected, the signal is internally read as VIL, and Write operations are allowed." (din datasheet) bineinteles am facut pull up si la SCL, cu un 4k7 (fara nu prea merge). ca urmare, liviule, o mie de multumiri! Link spre comentariu
Liviu M Postat August 31, 2010 Partajează Postat August 31, 2010 Cu placere, desi se pare ca am cam "tras" pe langa cu sugestiile mele. Link spre comentariu
kit Postat Septembrie 1, 2010 Autor Partajează Postat Septembrie 1, 2010 @Liviu M: m-ai fortat sa mai citesc odata "the f..... manual" :dain plus, nu facusem pullup la SCL. fara se pare ca nu merge, desi am gasit in unele locuri ca trebuie facut pull-up doar la SDA. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum