[ mm-tech @ 17.09.2009. 18:46 ] @
Pokusavam da realizujem projekat sa jednog Ruskog sajta. Dati su hex i c fajl za PIC16F628A. Kada ubacim hex fajl u Proteus i simuliram sve radi OK ( prikaz na LCD-u itd. ). Medjutim zeleo sam da nesto izmenim u programu ( pozdravna i odjavna poruka ), ali se tu javlja problem jer nece da se kompajlira ( cak ni onaj originalni c fajl ). MPLAB izbacuje gresku "Unknown flag -16F628A".
Da li neko zna u cemu je problem ?
[ enaB @ 18.09.2009. 07:58 ] @
Ako je C fajl onda ti treba C kompajler, a ne MPLAB
[ mm-tech @ 18.09.2009. 08:36 ] @
Koristim MPLAB sa instaliranim C kompajlerima. Prvo sam koristio neku stariju verziju kompajlera i on je izbacivao tu gresku.
Sada sam instalirao najnoviju verziju kompajlera : HI-TECH C PRO for the PIC10/12/16 MCU Family, i pri kompajliranju on izbacuje da neki simboli nisu definisani, sto opet nije tacno jer jesu definisani u programu.
Neka ideja ?
[ sokrad @ 20.09.2009. 10:23 ] @
Probaj ovaj kompajler.
http://www.mikroe.com/en/compilers/mikroc/pic/download.htm
[ mm-tech @ 20.09.2009. 21:25 ] @
U demo verziji max velicina hex fajla je 2KB, sto mi nije dovoljno. Kada se kompajlira ovaj program koji sam dao ima oko 11KB.
Da li mozda imas ovaj kompajler ( u ne demo verziji ) ? Ako imas mozes li mi bar reci da li hoce da se kompajlira ?
[ sokrad @ 23.09.2009. 20:33 ] @
Oni imaju dva kompajlera stari MikroC, i novi MikroC PRO.

Pretpostavljam da je pisano u MikroC.
Bacicu ti sutra na PM.

Probaj i sa novim:
http://www.sonsivri.com/forum/index.php?board=4.0
[ mm-tech @ 24.09.2009. 09:43 ] @
Ne vredi. Probao sam MikroC ( verzija 8.1.0.0 ), ali on uopste ne moze da prepozna fajl.
[ sokrad @ 25.09.2009. 20:36 ] @
Na tom ruskom sajtu, ima li kakav forum ili email da postavis pitanje koji je kompajler u pitanju.
[ mm-tech @ 26.09.2009. 12:03 ] @
Juce sam kontaktirao autora, koji mi je rekao da koristi Hi-Tech PICC kompajler. Covek je bio toliko ljubazan, i odradio mi ono sto mi je trebalo. Medjutim, i dalje ostaje pitanje zasto ja ne mogu da kompajliram program ?
[ sokrad @ 26.09.2009. 20:00 ] @
Pisi HI-Tech support-u :)
[ mnn @ 30.09.2009. 21:02 ] @
Da se ubacim ,a da ne otvaram novu temu pa da pitam što nije ispravno u ovome kodu pa
neće TMR0 da se inicializuje ,tj neće da se pokrene na simulatoru.
U pitanju je PIC16F628 i MikroC .U asembleru kada se TMR0 ovako podesi -radi .
Pozdrav

//...................................................................................................

unsigned cnt ;


void interrupt()
{

// neki kod
PORTB = 0;
Delay_ms(100);
PORTB = 0xFF;


}

init()
{
TMR0=0;
T0IF_bit=0;
}
void main(void)
{

init();
CMCON = 0x07 ; //disableKomparator
TRISA = 0x00 ;
TRISB =0b00000010 ; //PortB,1 RX ulaz ,ostali_izlazi
OPTION_REG = 0b00000000 ;
GIE_bit=1;
PEIE_bit=1;
T0IE_bit=1;
TMR0 = 0;
cnt = 0;

while(1) {
PORTB = ~PORTB ;
Delay_ms(10);


}

}
//..................................................................................
[ grabik @ 02.10.2009. 06:39 ] @
Ovako s neba pa u rebra da moras softverski svaki puta da u prekidnoj rutini ponistis T0IF_bit=0; , ne radim sa tim kompajlerom ali u vecini c kompajlera moras sam da to napravis. Uslov je da ti je inicijalizacija dobra.

Recimo ovako to treba da izgleda kod vecine c kompajlera(za ovaj tvoj ne znam):

void interrupt()
{

if(T0IF_bit)
{
T0IF_bit=0;
//tvoj kod

}
}


Takodje tu imas jedan jako veliki problem

void interrupt()
{

// neki kod
PORTB = 0;
Delay_ms(100); // ovo se ne smije raditi u prekidnoj rutini
PORTB = 0xFF;


}


ovaj delaj nema sta tu da trazi jer u prekidnoj rutini se obradjuju samo vrlo kratki procesi a takve funkcije mozes samo da pozivas iz main.
[ mnn @ 02.10.2009. 20:47 ] @
Ovaj deo koda
Delay_ms(100);
u interapt rutini je zalutao kada sam navodio primer.Problem je što do interapta i ne dolazi pošto se TMR0 i ne pokrene i T0IF se ne setuje.
[ bogdan.kecman @ 02.10.2009. 21:46 ] @
koji ti je pic u pitanju?
[ mnn @ 03.10.2009. 14:56 ] @
Pic16f628
[ bogdan.kecman @ 03.10.2009. 18:12 ] @
Code:

unsigned int cnt;
void interrupt(){
  if (T0IF_bit){
    cnt++;
    PORTB = ~PORTB;
    TMR0 = 0;
    T0IF_bit = 0;
  }
}

void main() {
    OPTION_REG = 0;
    CMCON = 0x07;
    TMR0 = 0;
    T0IF_bit = 0;
    TRISA = 0;
    TRISB = 2;
    GIE_bit = 1;
    PEIE_bit = 1;
    T0IE_bit = 1;
    T0IF_bit = 0;
    cnt = 0;
    PORTB = 0;
    while(1){
      //
    }
}


ovo radi .. imas i hex zakacen i sliku simulacije na 8MHz. TMR0 prescaler je 1:2 - dakle 8000000/4/256=7812.5 puta u sekundi tj. 0.000128sec tj 0.128ms treba TMR0 da bude trigerovan ... ako hoces da usporis to, povecaj prescaler (npr OPTION_REG = 7; ce ti dati 1:256).

[ mnn @ 04.10.2009. 19:42 ] @
Bogdane mnogo ti hvala na vremenu i trudu koji si uložio da mi pomogneš ali kod mene neće pa neće .Kada ovaj primer prebacim u Hi-Tech radi Ulazi u interapt ,odrađuje ,a ovde ....
[ bogdan.kecman @ 05.10.2009. 02:08 ] @
sta znaci nece pa nece ... kad uzmes ovaj moj primer i probas kod tebe - el radi ili ne?

drugo - kako znas dal radi ili ne? gledas ga u proteusu ili oshonsoft ili nekom drugom simulatoru ili na pravom uredjaju?

sta uopste pokusavas da izvedes? tebi se interrapt trigeruje nekoliko puta u jednoj milisekundi - to na pravom uredjaju bez osciloskopa ne da vidis, a i u simulatoru moras da okacis neki analyzer...

el koristis mikroC ili hitech?
[ mnn @ 05.10.2009. 17:29 ] @
U pravu si hex fajl radi u Oshonsoftu.Neće da mi radi simulacija u MikroC.Konkretno hoću da sa asemblera probam C i ovaj primer mi je da vidim kako to radi interapt i tajmer. Zašto MikroC ? Imam Mikroelektronikinu knjigu koja obrađuje C za Pic (konkretno 16F877 ) i to je razlog.
[ bogdan.kecman @ 05.10.2009. 17:41 ] @
nemam nista protiv mikroC-a .. radi ok .. doduse nisam nikad probao njegovu simulaciju ... ovaj hex je napravljen u mikroC-u tako da copy paste u mikroC i kazes projektu da je 8MHz i da je 16F628A i mora da radi.

za 877 je drugacija inicijalizacija tako da ti ovaj primer nece raditi na 877

oshonsoft i proteus ti daju vise manje dobru simulaciju, proteus jos mozes da povezes sa mplab-om tako da ako ces da kucas asm - koristis direkt mplab ... mikroC nema asm (moras u c da ubacis asm keyword pa unutra da tuces asm) osim ako ga nisu dodali u mikroC pro (imam ga al ga nisam probao, ja uglavnom tucem C18 i C30 od microchipa).

ajde lepo taj projekat koji ti ne radi zipni pa zakaci da se ne bi igrali gluvih telefona
[ mnn @ 05.10.2009. 19:58 ] @
Kod je u redu ,neprikazuje simulaciju TMR0,a bez valjane simulacije ne znam kako dalje. U datom primeru samo je proba ,dali radi tajmer i interapt ,ako to ne radi šta ću dalje ?Naravno da je izabran pic16f628,a probao sam sa tvojim kodom copy,paste.
[ bogdan.kecman @ 05.10.2009. 20:03 ] @
pazi, kod "radi", dakle kada ga simuliras u oshon-u ili u proteusu radi kako treba .. to samo znaci da mikroC simulator ne radi kako treba ... sto gubis vreme sa njihovim simulatorom ako imas oshon ili proteus?
[ bogdan.kecman @ 05.10.2009. 20:21 ] @
evo sad sam probao ... dodas nesto u while petlju (npr aaa++; a dodas aaa gore na pocetku kao i cnt) i picis kroz njegov simulator a u watch drzis TMR0
... picis step po step i vidis da se TMR0 ne menja - dakle mikroC pro ne ume da simulira kako radi tpmr0

ono sto mozes je da fizicki ti iz debagera nasiljis T0IF_bit=1 pa kliknes u debageru na jump to interrupt (F2).

dakle kao sto rekoh ... uzmi neki valjan emulator (ako ces da teras asm - mplabov emulator navodno radi dobro - nisam probo - ja koristim hardwerski emulator, tj, pickit2 koji okacis na tvoj pic i teras ga kroz debuger - radi 1/1 - jedino, mikroC ne ume da radi sa standardnim hw-om tako da ako oces iz njega de debagiras treba ti mikroe oprema - easypic5 na primer)
[ mnn @ 05.10.2009. 20:58 ] @
E, pa mislim da ću da dignem ruke od MikroC.Hvala ti na uloženom vremenu i trudu,možda još nekome ovo pomogne.
Pozdrav.
[ bogdan.kecman @ 05.10.2009. 21:10 ] @
ako teras 18F ili vece serije, ja ti savetujem C18 ili C30 od microchipa .. skroz su fraj, (posle 60 dana nemas vise full optimizaciju, ali nemas limit na velicinu hex-a kao kod ostalih), savrseno se integrisu sa svim microchip alatima (mplab) ...

za 16F i manje, microchip podrzava samo asm, ja licno koristim csc picc ali osim mikroC-a i csc picc nisam nista drugo probao tako da ne mogu tu za sam C mnogo da ti pricam ... znam da dosta hvale neke druge al - ja nesam probo :D csc picc je odlican, ima veliki broj "biblioteka i drajvera" i sve je full u sorsu tak oda ako oces nesto da promenis - imas mogucnost (za razliku od mikroC-a gde mozes da pevas borbene ako bi nesto promenio) a csc c ne kosta nista vise od mikroC-a ... csc picc isto ume da se integrise u mplab (dakle programiranje, debaging koristenjem microchip alata - prvenstveno pickit2/pickit3 radi :) )

od simulatora - proteus je za pic keva :)... mozes da ga spojis direkt sa mplab-om te da teras step by step kroz mplab a imas full prikaz koji daje proteus ... doduse proteus 7 kosta bubreg i levo plucno krilo al ...