Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   915 / 1319
(#) fejesg válasza icserny hozzászólására (») Feb 13, 2011 /
 
Köszi a választ; maradok a "jól bevált" "mindhárom-ds-hőmérőnek-külön-szubrutin" elvnél. Mondjuk a programtár jó nagy, lazán belefér (...).

Holnap 4:30-kor kelek, csörög a pizsama. Jó éjszakát Mindenkinek!
(#) misi93 válasza watt hozzászólására (») Feb 13, 2011 /
 
Nagyon köszönöm válaszodat majd kipróbálom és szólok hogy jó lett-e .
(#) BlackStar válasza icserny hozzászólására (») Feb 13, 2011 /
 
Köszönöm a kódot.
Kipróbáltam PIC18F4550 mikrovezérlővel. Tökéletesen működik az időzítés. Átváltottam az PIC18F97J60 mikrovezérlőre (mert ennél a mikrovezérlőnél tapasztaltam a hibás időzítéseket) szomorúan láttam, hogy a delay_ms(1) futásának ideje csak pár us ideig tart megint. Visszaállítom a PIC18F4550 akkor jók az időzítések. Megtennéd hogy kipróbálod 18F97j60 mikrovezérlővel, hogy nálad milyen időzítéseket produkál a programod. Előre is köszönöm.
(#) icserny válasza BlackStar hozzászólására (») Feb 14, 2011 /
 
Idézet:
„Átváltottam az PIC18F97J60 mikrovezérlőre”
Kipróbáltam azzal is, és nem működik! Nem az időzítéssel van baj, hanem a for ciklus nem működik: egyszerűen átugorja a ciklusmagot, mintha lejárt volna a ciklus.
(#) BlackStar válasza icserny hozzászólására (») Feb 14, 2011 /
 
Idézet:
„Kipróbáltam azzal is, és nem működik! Nem az időzítéssel van baj, hanem a for ciklus nem működik: egyszerűen átugorja a ciklusmagot, mintha lejárt volna a ciklus.”

Nálam is pont ez a helyzet. Akkor vettem észre, mikor egy függvény (amiben több for ciklus is van) végrehajtási idejét szerettem volna megtudni. Gyanúsan kevés időnek tartottam. Megnézem, hogy az assembly kód is hibás vagy csak az MPLAB viccelődik. Elég idegesítő hiba Több MPLAB verziót kipróbáltam, de mindegyiknél ugyan ezt produkálta.
(#) icserny válasza BlackStar hozzászólására (») Feb 14, 2011 /
 
Nem volt időm tüzetesen a körmére nézni, de az assembly kódban nem láttam különbséget, csak annak a végrehajtásában. Úgy tűnt, hogy a for ciklus feltételvizsgálatában siklott rossz ágra: a Carry vizsgálatánál egy bc utasítással kiugrott a ciklusból, amikor szerintem még nem kellett volna..
(#) watt válasza icserny hozzászólására (») Feb 14, 2011 /
 
Ezek szerint valószínű, hogy jó kódot fordít, csak nem jól szimulálja le... Nekem is van egy ilyen PIC, jó tudni ezt!
(#) szilva válasza icserny hozzászólására (») Feb 14, 2011 /
 
Ha a fordított kód valóban ugyanaz mindkét PIC típusnál (miért is lenne más, hisz ugyanaz a család, és itt nem periféria-beli különbségeket kell lekezelni...), akkor talán érdemes lenne egy lecsupaszított kódot csinálni, ami még produkálja a hibát. Talán még a Microchipnek is be lehetne jelenteni, ha egyértekműnek tűnik, hogy hiba.

Szerk: bocs, most látom, a lecsupaszítást megtetted. Azt nem vizsgáltad, hogy a for viselkedése függ-e a ciklusmag tartalmától?
(#) trudnai válasza BlackStar hozzászólására (») Feb 14, 2011 /
 
Es igy nem mukodik?

  1. void Delay_ms ( overlay unsigned int n )
  2. {
  3.     while ( n-- ) {
  4.         Delay1KTCYx(6);
  5.         Delay10KTCYx(25);
  6.     }
  7. }


(Lehet az overlay-el problemaik ha valami modon rekurzivan hivod meg ezt a fuggvenyt, vagy megszakitasbol, akkor vedd ki).

Optimalizalas is kozbe jatszhat, azt is probald meg allitgatni (hatha egyikkel jo).

Amugy nezdd meg, hogy csak a Delay-el csinalja-e ezt avagy ha pl LED billegtetest teszel bele akkor is?
(#) icserny válasza icserny hozzászólására (») Feb 14, 2011 /
 
Most találtam egy olyan összeállítást, ami jól szimulálja az időzítést és a for ciklust a PIC18F97J60-ra is:
MPLAB IDE v8.46
MPLAB C18 v3.35 Upgrade

Ezen a gépen a C18 fordító és tartozékai kivételesen a c:/MCC18 mappába lettek telepítve (nem tudom, hogy ennek van-e jelentősége)

A forráskód ebben a hozzászólásban található. A forrást kiegészítettem ennyivel (hogy ne kelljen a CONFOG-ot kézzel állítgatni): #pragma config WDT=OFF, XINST=OFF, DEBUG=OFF

Optimalizálás: DEBUG
Fordítás: normál (vagyis nem extended) módban
(#) icserny válasza szilva hozzászólására (») Feb 14, 2011 /
 
Idézet:
„Azt nem vizsgáltad, hogy a for viselkedése függ-e a ciklusmag tartalmától?”

Vizsgáltam, s nem függött a ciklusmagtól. A kivonás, vagy a státuszbitek kezelése körül lehet valami gubanc. De most olyan gép előtt ülök, amin nem reprodukálható a hiba.
(#) watt válasza icserny hozzászólására (») Feb 14, 2011 /
 
Ha az i változó int típusú, akkor teljesen megbolondul a szimuláció(nem áll meg a break-nél a ciklusmagban, valamint nem is hajtja végre a magban lévő utasításokat, viszont az i értéke növekszik.), ha char az i típusa, akkor mindent jól csinál. Én az n helyére literalt írtam(10-et).
(#) watt válasza watt hozzászólására (») Feb 14, 2011 /
 
Korrigálok: A magban lévő utasítás végrehajtódik, a kellő számossággal, de nem áll meg a magban a break hatására. A futási idő is rendben látszik...
Csatoltam egy képet is. Az a értéke helyesen 10 lett, de a szimuláció során nem állt meg az a=i; sornál egyszer sem.

code_1.png
    
(#) watt válasza watt hozzászólására (») Feb 14, 2011 /
 
Ismét korrigálok! Az a értéke nem lehetne 10! csak 9! Jópofa ez a SIM!

Közben a long-al is próbát tettem, azzal jó!
(#) watt válasza watt hozzászólására (») Feb 14, 2011 /
 
Sikerült ilyen érdekes értékeket kicsikarnom(kép). Ehhez előtte törölnöm kellett a GPRs memóriát. Ekkor az a=i; sorban is megállt a Break-nél a sim. Utána már csak átugrálta a ciklusmagokat, a=10 értéket hagyva a Watch ablakban maga után. Az i=0 volt ilyenkor. Ja és az időkkel is baj van, csak egy ciklusnyit számol ezután.

code_2.png
    
(#) trudnai válasza watt hozzászólására (») Feb 14, 2011 /
 
Figyi, az a==10 az elso ciklus utan -- ebol el arra kovetkeztetek, hogy mege a ciklus jo, 10-szer hajtodik vegre, csakhogy a break point a rakovetkezo "i=0" utan all be a for ciklus fejleceben, nem pedig a for ciklus elott. Vagy rosszul laom? Csak abbol ered ez, hogy nincs elotte az "a" inicializalva? Optimalizacio be van kapcsolva? (Azt nem szabadna, mert az ilyen butasagokat csinalhat a debuggolas kozben)
(#) misi93 hozzászólása Feb 14, 2011 /
 
Sziasztok! Most próbálok egy pic 12f629 be progit rakni ledes villogóba. de ezt írja ki (melléklet). be akartam olvasni a hex fájlt.

Névtelen.png
    
(#) watt válasza trudnai hozzászólására (») Feb 14, 2011 /
 
Nincs optimalizálás, viszont extended módban minden újra jól működik!!!
(#) watt válasza misi93 hozzászólására (») Feb 14, 2011 /
 
Tedd fel a hex fájlt! (Nem felel meg az intel szabványnak, vagy valamit én néztem el...)
(#) trudnai válasza watt hozzászólására (») Feb 14, 2011 /
 
Ok, tehat magyaran a forditas is jo es a szimulacio is, max a torespontok vannak rossz helyen, legyen az lepesenkenti vegrehajtas avagy beallitott torespont.
(#) BlackStar válasza trudnai hozzászólására (») Feb 14, 2011 /
 
  1. void delay_ms(unsigned int d)
  2. {
  3. unsigned int i;
  4. for(i=0; i<d; i++)
  5.         {
  6.         Delay1KTCYx(6);                           //
  7.         Delay10TCYx(25);              // 6000+250 TCY késleltetés (~ 1ms) 25MHz
  8.         }
  9. }
  10. void main (void)
  11. {
  12. PIC_init();
  13.  
  14. while (1)
  15.         {
  16.         delay_ms(1);
  17.         LATJbits.LATJ0 = ~LATJbits.LATJ0;
  18.         }      
  19. }


Kipróbáltam a fenti kódot. Az MPLAB szimulátora az 1ms időzítést 7,04 us számolta. A PIC-ben a program rendesen fut 1ms időközönként változtatva az RJ0 lábat. Az MPLAB szimulátora viccelődik velünk de csak a for ciklusnál lépi át a ciklusmagot.
(#) watt válasza BlackStar hozzászólására (») Feb 14, 2011 / 1
 
Állítsd be az extended módot.
(#) BlackStar válasza watt hozzászólására (») Feb 14, 2011 /
 
Idézet:
„Állítsd be az extended módot.”

Köszönöm. Az extended mód beállítása után az MPLAB szimulátora is helyesen működik.
(#) icserny válasza watt hozzászólására (») Feb 14, 2011 /
 
Idézet:
„Állítsd be az extended módot.”
Csak szólok: A C18 ingyenes változatában (a próbaidő leteltével?) nem támogatott az extended mód. Legalábbis hivatalosan...
(#) misi93 válasza watt hozzászólására (») Feb 14, 2011 /
 
ok a Vicsys oldaláról néztem el a kapcsolást és a picbe égetendő progit is.
(#) szilva válasza misi93 hozzászólására (») Feb 14, 2011 /
 
Vedd ki a két utolsó, pontosvesszővel kezdődő sort a hex-ből és próbáld úgy! Szerintem csak az zavarja meg az égetőprogit,
(#) watt válasza misi93 hozzászólására (») Feb 14, 2011 /
 
Igaza van szilvanak, csatoltam.
(#) szilva válasza watt hozzászólására (») Feb 14, 2011 /
 
Nem tudom amúgy, hogy az ilyen pontosvesszővel kezdődő sor szabályos komment-e ezekben a hex fileokban, de valószínűleg minden, nem kettősponttal kezdődő sort érdemes eldobni.
(#) misi93 válasza szilva hozzászólására (») Feb 14, 2011 /
 
Nagyon köszönöm mindkettőtöknek és köszönöm, hogy kijavítottad Watt.
(#) misi93 válasza misi93 hozzászólására (») Feb 14, 2011 /
 
Nagyon köszönöm még egyszer elsőre sikerült beleöltenem a picbe. De van egy kis gondom amikor beleteszem az áramkörbe nem csinál semmit, a pic belerakása előtt leellenőriztem az 5 voltot és nem volt seholrövidzár. Beletettem a picet és bekapcsolom (FBI os villogo és 3-3 led van a kimenetén sorbakötve). amikor hozzáérek a réz felülethez a tranzisztorok körül világítanak. de a pic lábain az 5 volton kívül nem "találok' semmit.
Következő: »»   915 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem