Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

SW I2C works while HW I2C doesn't - PIC24FJ64GB002

[es] :: Elektronika :: Mikrokontroleri :: SW I2C works while HW I2C doesn't - PIC24FJ64GB002

Strane: 1 2

[ Pregleda: 5500 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 12:16 - pre 137 meseci
Bogdan ti je gore naveo da ti PIC24 imaju problem sa I2C. Ja sam ti dao linkove ka nekim slicnim pitanjima na microchip forumu. Dakle, ima ljudi koji imaju isti ili slican problem kao ti. Koristi njihovo iskustvo.
I na kraju, za sve ovo tvoje izgubljeno vreme mogao si da uradis sledece:
1. Skines C30.
2. Nadjes source njihovih funkcija za I2C
3. Po uzoru na njihove funkcije (copy/paste) napises svoje funkcije koristeci mikroc.
4. Za sva vremena si otkacio zatvorene biblioteke od mikroelektronike (i moguce greske u njima) a nastavis da koristis njihov kompajler.
Za sve ovo ti ne treba vise od pola sata.
gorankg
 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 12:43 - pre 137 meseci
Citat:
goran_68: Bogdan ti je gore naveo da ti PIC24 imaju problem sa I2C. Ja sam ti dao linkove ka nekim slicnim pitanjima na microchip forumu. Dakle, ima ljudi koji imaju isti ili slican problem kao ti. Koristi njihovo iskustvo.
I na kraju, za sve ovo tvoje izgubljeno vreme mogao si da uradis sledece:
1. Skines C30.
2. Nadjes source njihovih funkcija za I2C
3. Po uzoru na njihove funkcije (copy/paste) napises svoje funkcije koristeci mikroc.
4. Za sva vremena si otkacio zatvorene biblioteke od mikroelektronike (i moguce greske u njima) a nastavis da koristis njihov kompajler.
Za sve ovo ti ne treba vise od pola sata.


Upravo ovo cu da uradim, samo da dodjem kuci...ali i dalje me muci to jer hocu da saznam sta je to u njihovoj biblioteci sto ne valja.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 13:04 - pre 137 meseci
pa vidi, sve vezano za i2c ti je tamo u init i odma posle toga on puca, dakle uzmes lepo i pogledas listing vidi se tacno sta radi njihov init, ako ti nije ocigledno baci ovde copy paste nije to veliko pa da gledamo svi zajedno :D ... verovatno neka konfiguracija (ako pogledas mcp biblioteke funkcije su drugacije, imas config koji trazi 2 16bitna parametra ako se dobro secam, mikroc uzima za parametar jedino brzinu) koju oni po default-u stavljaju koja se kosi sa tim bagom na tim nekim 24F cipovima ... ja ti rekoh da probas da "rekonfigurises" i2c rucno posle mikroc-ovog init-a cisto da probas dal ce to da resi problem, moguce da sa jednim/dva upisa u registar zaobidjes bag...


 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 14:09 - pre 137 meseci
E ljudi znate sta, hvala vam puno svima u pokusaju da odgonetnemo u cemu je kvaka ali definitvo prelazim na C30 i ne znam koji $%&/ sam koristio MikroC, jer posto imam Pickit3 sad mogu da koristim otvorene biblioteke i da debugujem na hardware-u uzivo.
Ljut sam na sebe ali eto..da se nije desilo, ovo sto se desilo, i dalje bi kao patka ostao zakovan sa MikroC-om.
Ne kazem da je los kompajler ali brate posto imam Pickit3 zasto ne iskoristiti ga za real-time debugovanje, dok za MikroC nemam njihov odredjeni HW za debugovanje.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 15:05 - pre 137 meseci
ovo bi trebalo da radi sa XC16 (to je sad novo ime / zamena za C30)

Code:

/* 
 * File:   main.c
 * Author: arhimed
 *
 * Created on December 18, 2012, 2:33 PM
 */

#include <p24FJ64GB002.h>
#include <i2c.h>
#include <uart.h>

/*
 * 
 */
int main() {
    unsigned char i2cbyte;
    unsigned char SlaveAddress = 0x90;
    int i;

    AD1PCFGbits.PCFG = 0x1fff;
    LATBbits.LATB8   = 0;
    TRISBbits.TRISB8 = 0;
    // U2TX -> RP15(pin 26)
    RPOR7bits.RP15R = 5;
    TRISBbits.TRISB15 = 0;
    // U2RX -> RP14(pin25)
    RPINR19bits.U2RXR = 14;

    ConfigIntUART2(UART_RX_INT_DIS | UART_TX_INT_DIS);

    OpenUART2(UART_EN & UART_IDLE_CON & UART_IrDA_DISABLE & UART_MODE_FLOW & UART_UEN_00 & UART_DIS_WAKE & UART_DIS_LOOPBACK
            & UART_DIS_ABAUD & UART_UXRX_IDLE_ONE & UART_BRGH_FOUR & UART_NO_PAR_8BIT & UART_1STOPBIT,
            UART_INT_TX & UART_IrDA_POL_INV_ZERO & UART_SYNC_BREAK_DISABLED & UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS
            & UART_RX_OVERRUN_CLEAR, 416); 

    
    //Enable channel
    I2C1CONbits.SEN    =0; //not in start
    I2C1CONbits.RSEN   =0; //not in rs
    I2C1CONbits.PEN    =0; //not in stop
    I2C1CONbits.RCEN   =0; //not receiving now
    I2C1CONbits.ACKEN  =1; //init ack and send ackdt
    I2C1CONbits.ACKDT  =0; //ack with ack
    I2C1CONbits.STREN  =0; //no clock stretching
    I2C1CONbits.GCEN   =0; //disable general call
    I2C1CONbits.SMEN   =0; //smbus trsh disabled
    I2C1CONbits.DISSLW =0; //enable slew rate
    I2C1CONbits.A10M   =0; //7bit addressing
    I2C1CONbits.IPMIEN =0; //do not play smart
    I2C1CONbits.SCLREL =1; //release clock
    I2C1CONbits.I2CSIDL=0; //continue in idle mode
    I2C1CONbits.I2CEN  =0; //disable
    
    I2C1BRG = 0x9D;         // 100khz
    I2C1ADD = SlaveAddress; //Slave Address
    I2C1STATbits.ADD10 = 0; // 7-bit address
    
    IFS1bits.MI2C1IF  = 0;  // Clear Interrupt
    I2C1CONbits.I2CEN = 1;  // Enable I2C Mode

    i2cbyte = I2C1RCV; // read buffer to clear buffer full

    IdleI2C1(); //Wait to complete
    StartI2C1(); //Send the Start Bit
    IdleI2C1(); //Wait to complete

    MasterWriteI2C1((SlaveAddress) | 0);
    IdleI2C1(); 
    MasterWriteI2C1(0x00);
    IdleI2C1();
    RestartI2C1();
    MasterWriteI2C1((SlaveAddress) | 1);
    IdleI2C1();
    i2cbyte = MasterReadI2C1();
    NotAckI2C1();
    StopI2C1();
    IdleI2C1();

    for (i=0;i<100;i++) WriteUART2('\n');
    WriteUART2(0x00);
    WriteUART2(i2cbyte);
    WriteUART2(0x00);
    for (i=0;i<10;i++) WriteUART2('.');

    return (0);
}


a okacicu i hex pa probaj dal sljaka (ja nemam pri ruci nista da probam tako da je ovo malo napamet)
Prikačeni fajlovi
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 15:08 - pre 137 meseci
javi dal radi :)

izgleda je dokumentacija za XC16 jos uvek malo stura, sve sa C30 radi ali u XC16 ima par novih stvari i biblioteke su sve nove + podrzavaju i stare tako da sam ja ovde malo copy paste tudjeg koda pa prepravio .. no trebalo bi da sljaka 1/1 (eventualno treba da promenis u vrhu pinout gde ti je seriski port)
 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 15:28 - pre 137 meseci
Kod mi izgleda ok i trebalo bi sve ici bez problema, daj mi 10min i javit cu ti =)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 15:31 - pre 137 meseci
ma i meni kod deluje ok :D ne bi ga slao da ne deluje a dal radi to je vec .. :D
 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 15:42 - pre 137 meseci
Sve je ok i prodje ali koliko vidim ne dobijem nazad podatak od slave-a, tj char i2cbyte ostane 0..
hmh daj mi vremena da provjerim sve ovo..
I da, promijenio sam I2C1BRG meni odgovarajuci, frekvencija protokola I2C
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 15:44 - pre 137 meseci
jbg da sad imas neki logic analyzer to bi za 2min videli sta se desava ...
 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 15:53 - pre 137 meseci
Citat:
bogdan.kecman: jbg da sad imas neki logic analyzer to bi za 2min videli sta se desava ...


Da ga imam ne bi se ni javljao na forum i vec bi resio u MikroC-u...ali onda ne bi presao na C30 :p
Sad cu ja polako otkriti sta je problem..hvala Bogu pa vremena imam
 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 17:40 - pre 137 meseci
!!!!! :@
Ok, konacno sve lepo radi u C30..
Prvo kod nije hteo da radi sa TMP75 pa sam povezao uC sa (I/O I2C) expander-om i lepo napisao kod da u loop-u pali-gasi LED preko expandera.
I pazi sad, ne radi ! Kod je tehnicki ispravan...naljutilo me to i poceo sam zice da cupam da vracam itd i odjednom magicno proradi i program radi to sto treba, znaci I2C konacno radi kako treba...

Ali aj nek' mi neko objasni ako zna, zasto I2C proradi tek nakon sto se uzme SDA linija, otkaci se i onda opet vrati na mjesto dok je program u toku ?! Pull-up otpornike nisam dirao tj. vadio, samo SDA linija.

Pokusao sam istu stvar da napravim sa hex-om od MikroC ali njemu nema pomoci, nije hteo ni tako da proradi I2C.


EDIT: Pronasao sam sta je na kraju krajeva....pull-up su bili od 4.7k i radilo je tako "na vadjenje SDA linije", zamenio sam ih sa 10k i sada sve radi perfektno....uf, patnje :\
Po meni tu imaju vjerovatno ulogu i kapacitivni ulazi od I2C slave-a ali opet jedan je uredjaj,a ne njih 10-20...moram se o ovome isto informisati :\

EDIT2: I TMP75 radi bez problema tj. citanje podatka preko I2C sa C30, sad ostaje samo viditi sta je sa MikroC ali taj posao ostavljam MikroElektronici da rijese, meni je puna kapa svega vise :v

[Ovu poruku je menjao sigi91 dana 18.12.2012. u 19:41 GMT+1]
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00218.12.2012. u 19:03 - pre 137 meseci
Na jednom od linkova koje sam ti pre dao lik je imao slican problem a resio ga je :) ovako:



The problem is I2C initialization.
Before enable the bus, low to high on SDA signal is necessary.


[Ovu poruku je menjao goran_68 dana 18.12.2012. u 22:05 GMT+1]
gorankg
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00219.12.2012. u 01:29 - pre 137 meseci
Citat:
sigi91:
pull-up su bili od 4.7k i radilo je tako "na vadjenje SDA linije", zamenio sam ih sa 10k i sada sve radi perfektno....uf, patnje :\
Po meni tu imaju vjerovatno ulogu i kapacitivni ulazi od I2C slave-a ali opet jedan je uredjaj,a ne njih 10-20...moram se o ovome isto informisati :\


imas tamo u configu u onom primeru sto sam ja nacukao "I2C1CONbits.DISSLW =0; //enable slew rate" probaj sa 1 (disable slew rate) mozda radi sa manjim pullup-om .. ako te zanima da juris sta je.

ovo sa "low to high on SDA" je cest bug na picovima na razlicitom hw-u, tako se valjda isprazni neki hw interno na pinu da bi to radilo ok.. dodaj to za svaki slucaj
 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00219.12.2012. u 12:05 - pre 137 meseci
Ljudi da podijelim RIJESENJE za slucaj MikroC-a.
Napisao sam im da i oni pokusaju da uzmu isti PIC i ostvare komunikaciju putem I2C-a, dobio sam odgovor da trebam podesiti pinove koje zelim da koristim za komunikaciju kao INPUT a ne kao OUTPUT, prije I2Cx_Init() procedure.
Uradio sam slusajuci savet i sve radi bez problema.

Sad me interesuje zasto se dogadja takva stvar ?
Zar ne bi bilo logicno da, PIC kao MASTER, koristi te portove kao izlazne a ne kao ulazne ?

Editovat cu i prvi POST sa rijesenjem.

Edit: Ili preciznije, dosta je samo SDA pin promijeniti kao ulazni i posao je rijesen...

[Ovu poruku je menjao sigi91 dana 19.12.2012. u 13:28 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00219.12.2012. u 17:04 - pre 137 meseci
hm, to je trebala da uradi njihova init procedura
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00219.12.2012. u 17:27 - pre 137 meseci
Eto jednog od silnih razloga zašto ne varim MikroE kompajlere. Em im BASIC liči na Pascal, em nisu u stanju da u softver koji podržava samo njihov programator, već 2+ godine ubace 12F617 (615 ima, sledeći 629 ), C (a i ostale) biblioteke zatvorene, ... Primeri za dodatni hardver koji prodaju KATASTROFA ...
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

sigi91

Član broj: 307017
Poruke: 39
..b.business.telecomitalia.it.



+3 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00219.12.2012. u 18:09 - pre 137 meseci
Gledao sam instrukciju po instrukciju u .lst i tacno se moze vidjeti da nisu pinovi inicijalizovani uopste, dok npr u MikroC PIC ( 12/16/18 ) to se moze vidjeti kako budu inicijalizovani, i za SPI i za I2C.

A evo i razloga zasto, PIC24F koji koristim ima mogucnost PPS-a (Peripheral Pin Select) i odnosi se na par periferika kao sto su UART, SPI, PWM, Interrupts itd. ali nema I2C-a, jer je jedna od periferika kojima se pinovi ne mogu odrediti po zelji i njih su zaboravili da inicijalizisu u I2Cx_Init().
Kada koristimo npr. SPI, UART itd. pinovi budu inizijalizovani sa PPS bibliotekom i tu se uredno podese, dok za I2C to ne postoji kao sto sam ranije rekao jer I2C ima default pinove.

Misli se da je sve ok i kako super radi dok neko ne pocne da se zali.
Ali aj evo drago mi je da sam stekao ovo iskustvo i naucio vise stvari o kojima treba paziti

EDIT: Vjerovatno ima koji PIC24F da im se moze i I2C podesiti preko PPS ali u mom slucaju to nije.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: SW I2C works while HW I2C doesn't - PIC24FJ64GB00220.12.2012. u 15:39 - pre 137 meseci
ako se ja dobro secam buspirate pic je neki 24f koji i i2c ima na pps-u
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: SW I2C works while HW I2C doesn't - PIC24FJ64GB002

Strane: 1 2

[ Pregleda: 5500 | Odgovora: 38 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.