Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   851 / 1319
(#) Gamedavid válasza szilva hozzászólására (») Dec 2, 2010 /
 
Holnap lerövidítem a kábelt és kipróbálom.
(#) Gamedavid válasza Hp41C hozzászólására (») Dec 2, 2010 /
 
Először csináltam egy új projektet és mindent beállítottam. Majd csatlakoztattam a Pk3-at, de a PIC nem volt rajt. Utána azt is csatlakoztattam, de ekkor sem ismerte fel, mert ugye alapból nem a Pk3 adja a tápot. Akkor beállítottam a kívánt feszültséget(3,5 V-nál többet nem is enged), majd újra konektálás a Pk3-hoz és akkor írta ki amit írtam. De működik a programozás, mint írtam és fut a led villogtatás, csak nem működik pár dolog és a Pk3 meg ilyen hibákat dob, debug módban meg semmi, nem ír és nem lehet semmit csinálni, de ezt is írtam. A lényeg, hogy 5V-ot sosem kapott és működik a kontroller csak valamiért a Pk3 nem akarja az igazságot.
(#) Hp41C válasza Gamedavid hozzászólására (») Dec 2, 2010 /
 
Szia!

Láthatnánk a programod elejét. Itt írtam arról, hogy probléma lehet, ha a programozási lábakat kimenetnek használjuk fel és túl hamar be is állítja a program.

A debuggoláshoz az MpLab -ban a bedug módot kell beállítani az ablak közepén felül.

A config bitekre vonatkozó kérdésedre az adatlap 3-1 blokkvázlata megadja a magyarázatot.
pl: PLLDIV - A külső oszcillátor / kvarc frekvenciójából az USB órajel előállításához 4MHz-es jelet kell előállítani a PLL bemenetére. A leosztást lehet a PLLDIV értékével állítani. Ha pl. 20MHz kvarcot alkalmaznál, 5 -ös leosztás kellene.
(#) fokti Attila válasza Gamedavid hozzászólására (») Dec 2, 2010 /
 
Én most az MPLAB-al együtt frissítettem. Egyébként régebben automatikusan frissítette ha a programmer-> settings->configuration-nál az auto download firmware be volt pipálva. Persze ehhez az kell hogy internet legyen a gépen. A másik verizó hogy megkeresed az új firmware-t és a manual download-ra kattintva feltöltöd neki.
(#) Gamedavid válasza Hp41C hozzászólására (») Dec 2, 2010 /
 
Olvastam amit írtál. Tettem is bele egy szoftveres várakozást, de ettől még sajnos nem változott semmi. A debug módot tudom, hogy ott kell átváltani. Olvastam az adatlapot, csak mivel sosem tanultam angolul elég nehéz megérteni és ezen a google fordító sem segített sokat.

program.txt
    
(#) Gamedavid válasza fokti Attila hozzászólására (») Dec 2, 2010 /
 
Átállítottam auto downloadra már kb 3 órája, azóta többször is megnyitottam az MPLAB-ot, de nekem nem frissítette. Próbáltam megkeresni az fw-t, de nem találtam semmit a Microchip oldalán, se googleban sem.
(#) icserny válasza Hp41C hozzászólására (») Dec 2, 2010 /
 
Nem láttam még PICkit3-at közelről, de úgy gondolom (vagy legalábbis az volna a logikus...), hogy itt nincs szükség arra a felismerésre, amit a PICkit2 csinál a saját kezelőprogramjával. Elvégre az MPLAB tudja, hogy milyen mikrovezérlőt állított be a felhasználó, tehát tudnia kell, hogy az mekkora feszültséget bír. Nem gondolnám tehát, hogy az 5V megjelenhetett a kimenetén.
(#) szilva válasza icserny hozzászólására (») Dec 2, 2010 /
 
Arról nem is beszélve, hogy az MPLAB üzenetekből kiderül, hogy a 18FJ firmware van éppen az eszközben, és az tudja, hogy mit szabad csinálni ezekkel a chipekkel. Igaz, még én sem láttam PK3-at közelről.
(#) fokti Attila hozzászólása Dec 2, 2010 /
 
Sziasztok!
Az alábbi késlelető csak akkor jár pontosan ha a változó unsigned long, mihelyst átírom pl. unsigned int -re elromlik. Valaki tudja hogy miért? Spórolni szeretnék a memóriával, mert a híváskori max érték 48 felesleges a long.

delay10us(48);

  1. void delay10us(unsigned long T)
  2. {
  3.         unsigned long t;
  4.         for(t=0; t<T; t++)
  5.         {
  6.         Delay10TCY();
  7.         }
(#) icserny válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Rossz a koncepció! A szubrutinhívás, a paraméterátadás és a for ciklus szervezése összemérhető a 10 TCY késleltetéssel (szerintem jóval több is annál), így a késleltetés idejét az szabja meg, hogy hány utasításciklusba telik a késleltető eljárás meghívása - ami az optimalizációs paraméterek és az átadott változó hosszának is függvénye.

Ehelyett a Delay10TCYx(n), vagy Delay100TCYx(n) eljárást kellene használni, utasításciklusokban számolva.

Ha ragaszkodsz az eleganciához (hogy 10us egységben legyen megadva a késleltetés), akkor pedig makróként kellene definiálni. Pl. Fosc = 40 MHz-en, Fcy = Fosc/4 = 10 MHz, tehát 10 us = 100 TCY, ekkor
  1. #define Delay10us(n) Delay100TCYx(n)
(#) fokti Attila válasza icserny hozzászólására (») Dec 3, 2010 /
 
Igen ez jó ötlet, lehet át is alakítom így. De attól hogy a változó típusát megváltoztatom miért borul fel az egész?
(#) tardis válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Az int (fordítótól függően) általában 4 byte-os.
A long (fordítótól függően) általában 8 byte-os.

Ha megnézed a lefordított asm-et meglátod, hogy a long léptetése/vizsgálata a ciklusodban több utasításból áll ergo lassabban fut le.
(#) tardis válasza Gamedavid hozzászólására (») Dec 3, 2010 /
 
Az MPLAB debug módban van? PK3 eszerint állítja be a DEBUG bitet. Plusz tölt is le valami saját kódot a programod végére talán.

Próbáld ki különböző firmware-ekkel! Én 16F818, 16F819-cel jártam úgy, hogy csak akkor tudtam debuggolni, ha régebbi firmware (1.25.10) volt a PK3-ban.
Ide tettem fel néhány firmware-t

Próbáld kis egy pár soros assembly progival is, mert már úgy is jártam, hogy a HI-Tech fordított baromságot.

Ja, és minden letöltés előtt fordíts. Ha több file-ból áll a forrásod akkor teljeset (rebuild).
(#) p_istvan válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Szervusz!
Mindkét változó módosítottad? T és t
Ha nincs szükség 255 nél nagyob értékre akkor használj Char típust
(#) fokti Attila válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
És hol látom az .asm-et? Mert a project könyvtárában nincsen.
(#) Beachway hozzászólása Dec 3, 2010 /
 
Szeretnék építeni egy PICKITT2-t ,vagy klónt. Átnéztem párat, és rátaláltam a Szilva -féle klónra. Nagyon kicsi, és ügyes szerkezet. Hobby célra kifejezetten megtenné. Szerintetek a hozzá való 18F2550 mennyire nehéz programozni? Az LTP portos pogramozómmal érdemes nekikezdeni? Előre is köszi a hozzászólásokat!
(#) Hp41C válasza Beachway hozzászólására (») Dec 3, 2010 /
 
Szia!

Felprogramozható az LPT -s programozókkal. Ld. Watt féle LPT mini.
Egy olyan klón, amin a Vdd-t állítható, jobb lenne - azzal a nem 5V-os kontrollerek is programozhatók, debuggolhatók: 12F1xxx, 16F1xxx, 18FxxJyy, 18FxxKyy, dsPIC30F, dsPIC33F, 24F, stb...(Egyre több lesz belőlük...) A különbség egy 8 lábú erősítő és egy-két fet...
(#) tardis válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Idézet:
„És hol látom az .asm-et? Mert a project könyvtárában nincsen.”

Fordító függő. Lehet, h nem asm a kiterjesztése. Rosszabb esetben nem is szöveges állomány.

A program memóriát viszont meg tudod nézni fordítás után.
(#) trudnai válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Ha a max ertek 48 akkor nyilvan egy 'char' vagy egy 'unsigned char' is megteszi, az csak egy byte-ot fog alfoglalni a memoriaban.

Masik, hogy felesleges ehhez egy argumentum is es egy lokalis valtozo is. En igy csinalnam:

  1. void delay10us ( unsigned char t )
  2. {
  3.     while ( t-- ) {
  4.         Delay10TCY();
  5.     }
  6. }


Amugy mit jelent az 'elromlik'? Tobbet var? (Mennyit?) Vagy kevesebbet? (Mennyit?) Vagy vegtelen ciklusba kerul? (Vagy csak nem varsz eleget?) Vagy nem fordul le? (Mi a hibauzenet?)
(#) fokti Attila válasza trudnai hozzászólására (») Dec 3, 2010 /
 
Nincs külön hibaüzenet. Egy DS1820-al kommunikálna a PIC. A reset jel úgy néz ki hogy 480us-re lehúzza a pic az adatvonalat, majd elengedi és vár 70us-t. Ekkor az érzékelő (ha van) lehúzza földre az adatvonalat. Ezt lesi a pic hogy ez az állapotváltozás bekövetkezik-e. Ha long-ot használok válaszol az érzékelő, ha átállítom int-re akkor nem. Azt nem tudom megmondani hogy akkor siet vagy késik, csak azt tudom hogy nem jó. De most átírtam makróra, így jelentős a spórolás memória terén. Este kipróbálom hogy ezzel válaszol-e.
(#) bbalazs_ válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Ha az idozites kritikus, akkor hasznalj assemblyt vagy assy betetet.
Ha szabadna egy vitatott, de plasztikus hasonlattal elnem: a Porschemmal is hordhatnek tragyat a mezore, megsem arra hasznaljak a legtobben...
(#) p_istvan válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Azt azért elárulhatnád, hogy melyik változóról beszélsz (vagy mindkettőről?), mert kettő van a függvényedben és következetesen egyes számban beszélsz a konkrét változó megnevezése nélkül!
Ahhoz hogy segíthessenek neked, ahhoz Neked is több információt kellene megadnod!
Ha megváltoztatod a változok hosszát a kód hossza is változik, ezzel az időzítésed is, és lehet hogy ez elég a sikertelen kommunikációhoz...
(#) Gamedavid hozzászólása Dec 3, 2010 /
 
Sziasztok!
Lerövidítettem a kábel hosszát kb 6cm-re és így már hiba nélkül megprogramozza és rendesen fel is ismeri a PIC-et. Viszont a debug továbbra sem működik, ezt írja az OUTPUT ablakban:
Running...
PK3Err0040: The target device is not ready for debugging.
Please check your configuration bit settings and program
the device before proceeding.
Természetesen a fenti fül debugra van állítva. Van valakinek valami ötlete? Köszönöm az eddigi segítségeteket!
(#) watt válasza Gamedavid hozzászólására (») Dec 3, 2010 /
 
Szerintem a dugdosós panel szórakozik veled. Ugye jól emlékszem, hogy ilyen próbapanelen van összedobva a kapcsolás?
(#) Gamedavid válasza watt hozzászólására (») Dec 3, 2010 /
 
Jól emlékszel. Kimértem és minden érintkezik rendesen.
(#) watt válasza Gamedavid hozzászólására (») Dec 3, 2010 /
 
Nem erről van szó. A párhuzamosan húzódó, egyenként elég hosszú vezetők kapacitása és induktivitása lehet a baj. Ezt a vezeték rövidítése okozta javulás is megerősíteni látszik.
(#) icserny válasza Gamedavid hozzászólására (») Dec 3, 2010 /
 
Idézet:
„Van valakinek valami ötlete?”
Hát persze!
1. ötlet: Légy szíves becsatolni a konfigurációs beállításaidat! A program elejére írd be a jelenlegi beállításaidat ebben a formában:
  1. #pragma config PLLDIV   = 5         // PLL osztó 20 MHz-es kristályhoz
  2. #pragma config CPUDIV   = OSC1_PLL2  
  3. #pragma config USBDIV   = 2         // órajel forrása a 96MHz PLL/2
  4. #pragma config FOSC     = HSPLL_HS  // HS oszcillátor és PLL az USB-hez is
  5. #pragma config FCMEN    = OFF       // Fail Safe Clock Monitor tiltása
  6.    ... stb.


2. ötlet: A lehetséges konfigurációs beállításokat listáztasd ki a fordítóval:
  1. mcc18 -p18f27j53 --help-config > lista.txt

(ide is becsatolhatnád, mert nálam a fordító még nem ismeri ezt a típust)
(#) trudnai válasza fokti Attila hozzászólására (») Dec 3, 2010 /
 
Igy nehez segiteni. Tudni kellene mi az abra - pl az idozito rutint meghivod 1000x es egy LED segitsegevel lemered siet-e avagy kesik... Vagy leszimulalod.
(#) fokti Attila válasza p_istvan hozzászólására (») Dec 3, 2010 /
 
Mindkettőre értettem a dolgot. De időközben okafogyottá is vált dolog mert Icserny mester javaslata alapján makróként definiáltam a késleltetést, és így remekül működik. Sőt a kód is rövidebb lett. Ezer köszönet érte.
Majd egyszer ha jobban ráérek eljátszom a dologgal, de most inkább haladok a projekttel. Mégegyszer kösz mindenkinek.
(#) levi18 hozzászólása Dec 3, 2010 /
 
Sziasztok!
AN1310 bootloadert használok, asm - programjaimmal működik is szépen, de az mplab c18-at nem tudom rábírni,
hogy csak a 0x400-as címtől kezdődjön a programom.
Próbáltam ezt:


  1. #include <p18f6622.h>
  2.  
  3.      void high_isr(void);    
  4.      void low_isr(void);    
  5.  
  6.      extern void _startup (void);
  7.      
  8.  #pragma code AppVector = 0x400
  9.      void AppVector(void)
  10.      {
  11.           _asm GOTO _startup _endasm
  12.      }
  13.  
  14.      
  15.    #pragma code AppHighIntVector = 0x408  
  16.       void AppHighIntVector(void)
  17.        {
  18.         _asm GOTO high_isr _endasm
  19.        }
  20.  
  21.  #pragma code AppLowIntVector = 0x418  
  22.       void AppLowIntVector(void)
  23.        {
  24.         _asm GOTO low_isr _endasm
  25.        }  
  26.  
  27.  #pragma code
  28.  
  29.      void high_isr()
  30.       {
  31.       }  
  32.      
  33.      void low_isr()
  34.      {  
  35.      }
  36.  
  37.  
  38. void main(void)
  39.    {
  40.    TRISD = 0;
  41.    LATD = 0xff;
  42.    for(;;)
  43.         {
  44.          ;
  45.         }
  46.    }


Lefordítom, letöltöm a processzornak, de semmi sem történik. Azt figyeltem még meg, hogy ha megnézem a generált hex fájlt, akkor azt látom, hogy a 0-s címtől a 0x400-as címig is vannak FFFF-től különböző értékek.
Valakinek van ötlete ezzel kapcsolatosan?
Előre is köszönöm.
Üdv!
Következő: »»   851 / 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