Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   825 / 1210
(#) lastewer válasza Bakman hozzászólására (») Júl 14, 2016 /
 
Nincs átalakítóm.
(#) Bakman válasza lastewer hozzászólására (») Júl 14, 2016 / 1
 
Szerezz egyet (pl.: Bővebben: Link), különben az életben nem fogsz végezni. Ezzel kitapasztalhatod gyorsan, hogyan viselkedik a modul. Ha az megy stabilan, már csak ezeket a parancsokat kell átültetned a kontrollerbe.
(#) lastewer válasza Bakman hozzászólására (») Júl 14, 2016 /
 
Egyenlőre azt se tudom , hogy kell rákötni a Picre
(#) Bakman válasza lastewer hozzászólására (») Júl 14, 2016 /
 
Sehogy. A modult USB-n a gépre dugod és egy Terminal szerű programmal használod. Ez, első lépésként a PIC-et fogja helyettesíteni. Ezen keresztül beszélgetsz az ESP modullal. Egy dologra figyelj, az USB-UART modul 5 V-os jelszinttel dolgozik a kimenetén.

Pár infó az USB-UART átalakítóhoz: Bővebben: Link.
A hozzászólás módosítva: Júl 14, 2016
(#) lastewer válasza Bakman hozzászólására (») Júl 14, 2016 /
 
Ezt eddig értem , csak azt nem , minek kell ez az első lépés? Látom hogy működik a modul , szórja a wifit , tudok is hozzá csatlakozni , tápon van.

Csak rá akarom tenni a pic megfelelő lábára.
(#) Bakman válasza lastewer hozzászólására (») Júl 14, 2016 /
 
Azt írtad, nem tudod megváltoztatni az SSID-t... No mindegy. A modullal UART protokollal tudsz beszélgetni, a PIC RX és TX lábát kell használnod (HW-es UART esetén). PIC RX -> ESP TX és PIC TX -> ESP RX. C7 és C6 a kontrolleren.
(#) pajti2 válasza lastewer hozzászólására (») Júl 14, 2016 /
 
Ennél is egyszerűbb bekötést szerintem képtelenség találni. A TX / RX lábak egy pic esetében is ugyan azok. A pic lábkiosztását az adatlapján találod. Be kell állítani rajta az usartot, aztán írod / olvasod. De biztos menni fog?
(#) lastewer válasza pajti2 hozzászólására (») Júl 14, 2016 /
 
Akkor jól kötöttem össze. Tehát a programmal van valami , mellékeltem , rá tudna valaki nézni nekem ?

Menni fog , igen.
A hozzászólás módosítva: Júl 14, 2016

Új mappa.rar
    
(#) don_peter hozzászólása Júl 14, 2016 /
 
Srácok, már lassan 3hete kínlódok egy MX29LV640-es NOR Flash memória kezelésével.
PIC32MX795-el próbálom éleszteni. (saját topikjában ezzel kapcsolatban fel is tettem a kérdést. Sokan nem járnak arra, de most a PIC-es részére vagyok kíváncsi)
Mind kettő 3v-os, és mivel csak most kezdtem el 3v-os eszközökkel foglalkozni lehet nem veszek észre valamit ami fontos lehet.

29F800-as flash memóriát korábban már sikerrel alkalmaztam, de ügye az sima 5v-os rendszerről ment. (PIC18F442)

29F800-ra megírt és ma is jól működő rutinokat alkalmazom, kisebb módosítássokkal, hogy kompatibilisek legyen PIC32MX795-el.
A memória adatlapja azt mondja, hogy ugyan úgy kell használni 29LV640-et mint 29F800-at, csak több a cím bit.

Elvileg mindent jól csinálok, 3hét alatt ugyan is számtalanszor szedtem szét és vizsgáltam át a próba panelem, de hibát nem találtam.
Próbáltam 29LV640 és 29W128 több különböző új darabbal, de mindegyiknél ugyan az vagy is hibás értékelhetetlen adat.

Már mindent átnéztem és kiszűrtem, kivéve a PIC-et.

A címzésre sajna össze vissza tudtam csak kiosztani a címbiteket, de az adatok továbbítására a teljes BPORT-ot használom, kivéve a B5-ös bit-et mert azt USB használja.

Nem lehet, hogy a PIC feszültség szintje valamiért nem megfelelő a flash memóriának?
Lehet nem jól érzékeli a magas és alacsony szinteket?

Kell valamire figyelnem amire eddig nem figyeltem PIC32MX795 MCU-nál?

Használt lábak:
  1. /*MEMORI PIN DEF:
  2. PORTB 0-4, F5, 6-15 - DATA (B5 az RF5-re áttéve mivel az USB használja B5 lábat)
  3. A1 - OE
  4. F12 - CE
  5. C2 - BYTE/WORD
  6. E4 - RY/BY
  7. G13 - WP
  8. G14 - RESET
  9. E1 - WE
  10.  
  11. A0 - C3
  12. A1 - F13
  13. A2 - A9
  14. A3 - A10
  15. A4 - E7 (ideiglenesen áttéve A7-re mert a LED befolyásolja magas szintet)
  16. A5 - E6 (ideiglenesen áttéve G9-re mert a LED befolyásolja magas szintet)
  17. A6 - E5
  18. A7 - G15
  19. A8 - D5
  20. A9 - D6
  21. A10 - D7
  22. A11 - F0
  23. A12 - F1
  24. A13 - G1
  25. A14 - G0
  26. A15 - A6
  27. A16 - C1
  28. A17 - E2
  29. A18 - E3
  30. A19 - D4
  31. A20 - E0
  32. A21 - G12
  33. A22 - A7
  34. */


Hátha valakinek eszébe jut valami, vagy észre vesz valamit ami miatt szívok.
Előre is köszi.
(#) Zsora válasza don_peter hozzászólására (») Júl 14, 2016 /
 
Én csakis 3,3V-os rendszerekkel foglalkozok, és a feszültséggel még sosem volt gondom.
Ami gond lehet:
Ha nagy sebességgel kommunikálsz és sok cím vagy adatbit változik egyszerre, az elő tud idézni fals jeleket bármelyik közelben haladó vezetékben (egymásra is hatással vannak). Így ilyenkor szükség lehet a hírtelen áramlökések korlátozására, ill. Slew Rate szabályozásra.
Vannak mikrovezérlők, amik ezt hardveresen tudják, de használhatsz soros korlátozó ellenállásokat vagy induktív tagot is.
(#) don_peter válasza Zsora hozzászólására (») Júl 14, 2016 /
 
Próbálgattam az időzítést 100ms-ig lépésenként, de nem hozott eredményt.
Lehetséges akkor, hogy az összedugós próbapanel miatt nem működik a dolog?
6-10cm-es vezetékekkel van összedugdosva.
A címbitek beállításánál is alkalmazzak késleltetést?
80MHz-en megy a PIC, de gondolom az időzítések miatt az mindegy is.
(#) Zsora válasza don_peter hozzászólására (») Júl 14, 2016 /
 
Nem tudom hogy nálad mi a probléma, de ha olyasmi, amivel én is szívtam annakidején, akkor soros ellenállásokat kell használnod a cím- és adatbuszon, ill. a vezérlőbuszon.
(#) don_peter válasza Zsora hozzászólására (») Júl 14, 2016 /
 
Mekkora ellenállásról beszélünk és miért van arra szükség?
100R-1K és az áramkorlátozás? Áramlökések ellen?
(#) Zsora válasza don_peter hozzászólására (») Júl 14, 2016 /
 
max. 200-300ohm (Nálam már 33ohm segített)
Amikor több vezetékben egyszerre indul meg nagyobb áram, a szomszédos vezetékekben feszültség indukálódik, ami akár megváltoztathatja egy pillanatra annak logikai szintjét is. Ez hibás vezérlést eredményezhet. Meg még van egyéb következmény is, de abba most nem megyek bele.
A hozzászólás módosítva: Júl 14, 2016
(#) don_peter válasza Zsora hozzászólására (») Júl 14, 2016 /
 
Szerzek ellenállást és összerakom összedugós változatban, hogy tesztelni tudjam.
Jelen pillanatban 46bit-et állítok viszonylag egyszerre a memória kezeléséhez.
Akkor lehet ez lesz a gond...
(#) pajti2 válasza don_peter hozzászólására (») Júl 14, 2016 /
 
Az a 100msec ugye úgy van mérve, hogy az adat / cím és vezérlőjelek minden egyes elemi lépésben egyszerre csak egy valami változik, és minden alkalommal azok között van kivárva az a 100 msec? Mert ha úgy csinálod, hogy mindent egyszerre adsz ki, és utána vársz 100 msec-et, azt úgy megette a fene.

Akkora késleltetésnél egyébként nem tudnak játszani parazita tényezők. Gyakorlatilag infra hang frekin tolod. méteres drótokkal sem lehetnének gondjaid. Az mx795-nél is csak arra kell figyelni, amire mindenütt: az analóg jeleket digitbe kapcsolni, a confignál ha birizgálod a jtag, ice, wdt-t, akkor figyelj is rá, órajelet ellenőrizd is le, hogy normális-e (rakj rá egy ledet villogni, és ellenőrizd le az ütemét legalább szemre), nem kellene ott gond legyen.

Az a flash cucc tsop / bga tokos. Nem lehet, hogy valahol valami fémreszelék odakerült, esetleg eltört egy forrasztás? Vagy valamelyik drót van belül elszakadva? Működik az a cucc valami más meghajtással normálisan?
(#) don_peter válasza pajti2 hozzászólására (») Júl 15, 2016 /
 
Nem úgy van, hogy minden elemi lépéshez teszek 100ms késleltetést.
Az elemi lépések közé Nop() függvényt használtam, ez talán elégnek kellene lennie, de most megnézem elemenkénti 100ms-el.

A foglalat és a beforrasztás is jó, ez szinte 100% biztos. És csak azért szinte, mert ügye soha semmi nem lehet egészen biztos
De most együk fel azzal nincs gond. (nagyon sokszor ellenőriztem)
MCU órajelét ellenőriztem, egyelőre csak szemre, illetve mp-es időközöket LED-es visszajelzéssel.

Kipróbálom az elemenkénti nagyobb késleltetéssel.
(#) don_peter válasza pajti2 hozzászólására (») Júl 15, 2016 /
 
Nos ott tart a dolog, hogy minden elemi lépéshez tettem késleltetést, így azt hiszem az olvasás már működik is.
Sajnos a beírás illetve a parancs szekvenciákat továbbra sem fogadja.
Ezzel a résszel most vacakolok kicsit, hátha valami vezeték hiba van..
Köszi a tippet neked is és Zsora-nak is.

Remélem, ha így működik akkor sorba kötött ellenállásokkal is fog működni, mert szükségem lesz a sebességre.
(#) pajti2 válasza don_peter hozzászólására (») Júl 15, 2016 /
 
Ha a kiolvasás az elemenkénti késleltetéssel működik, akkor jó esélyekkel vezeték hiba nincsen (a #we vezetéked persze attól még lehet hibás), és a fő problémád a tényleges áramkör parazita jelenségeihez képest nem túl jól elhelyezett késleltetés volt.

Apropó a nop parancs nem lesz jó, a pic32-esek "lenyelik" a nop-ot, a prefetch automatán eldobja. Van delay.c pic32-höz is az sdk-ban, gondolom, a 100ms-hez is azt használtad. Vagy készíthetsz magadnak gépórát a kvarcfreki alapján, és mérheted ahhoz a főciklusban (az aszinkron, nem fogja meg a cpu-t).
(#) don_peter válasza pajti2 hozzászólására (») Júl 15, 2016 /
 
Az időzítéshez ezt használom:
  1. #define CPU_CLOCK_HZ             (80000000UL)    // CPU Clock Speed in Hz
  2. #define CPU_CT_HZ            (CPU_CLOCK_HZ/2)    // CPU CoreTimer   in Hz
  3. #define PERIPHERAL_CLOCK_HZ      (40000000UL)    // Peripheral Bus  in Hz
  4. #define US_TO_CT_TICKS  (CPU_CT_HZ/1000000UL)    // uS to CoreTimer Ticks
  5. #define MS_TO_CT_TICKS  (CPU_CT_HZ/1000UL)               // mS to CoreTimer Ticks
  6.  
  7. // Short Delay
  8. void ShortDelay(UINT32 DelayCount)      // Delay Time (CoreTimer Ticks)
  9. {
  10.   UINT32 StartTime;                    // Start Time
  11.   StartTime = ReadCoreTimer();         // Get CoreTimer value for StartTime
  12.   while ( (UINT32)(ReadCoreTimer() - StartTime) < DelayCount ) {};
  13. }
  14.  
  15. void ShortDelay(UINT32 DelayCount);

WE láb és az összes többi is tökéletes, ellenőriztem ismét.
Nop()-okat eltávolítottam.

A parancsokat még egyelőre nem nem fogadja..
FFFF-eket már rendben kiolvassa, vagy is üres a memória.
Én töröltem egy másik hardverrel.
(#) pajti2 válasza don_peter hozzászólására (») Júl 15, 2016 /
 
Az a readcore timer gondolom a cpu0,9-et olvassa. Van vele egy olyan bibi, hogy túl tud csordulni, és akkor kinulláz. Ha 80-on hajtod a cpu-t, a 40 milla ütemjel másodpercenként 107 másodperc után lenullázza. Az áramköröd persze nem attól nem működik.

Ha egy másik hardverrel írni is tudod a flash-t, adott pozíciókba be kellene írni 1-1 spec adatot, amiről tudod, hogy csak azon a címen van, és ellenőrizni kellene, hogy tényleg működik-e az olvasás.
(#) don_peter válasza pajti2 hozzászólására (») Júl 15, 2016 /
 
Az olvasás már biztos, hogy jó, azt teszteltem.
A szekvenciákat nem fogadja valamiért, de még nem jöttem rá miért.
Időzítést hiába csökkentem már, 100ms már több mint elégnek kellene lennie.
Most vissza tettem 1ms-ra így is szépen olvas.

Egyelőre tanácstalan vagyok.
Lehet, hogy még mindig problémás a sok vezérlés?
Egy egy szekvenciánál a címbitek minimum fele és az adat illetve vezérlő bitek használatban vannak:
Pl: cím 0x555, adat 0x90 + vezérlő bitek.
Lehet az áram felvétel lesz a gond.
(#) mrobi hozzászólása Júl 15, 2016 /
 
Kezdők hibája.
Vettem egy ultrahangos távolságmérő modult. Gondoltam kipróbálom. Írtam hozzá egy tesztprogramot. MikroC-t használok. Sima delay függvénnyel mértem az időt, hogy biztos ne legyen gond az időzítéssel. Azzal nem is volt gond. Kiadtam egy 15uS-es trigger jelet, majd while függvénnyel vártam, hogy megjöjjön a visszhang és kezdhessem a mérést.
  1. while(PORTB.B1==0)
Ennyit írtam be. Nem akart menni. Már mindent kipróbáltam. Semmi megoldást nem találtam.. Gondoltam ránézek már. hogy mit fordít a fordító.
  1. L_main4:
  2.         BTFSC      PORTB+0, 1
  3.         GOTO       L_main5
Ezt fordította. Egyből gyanús volt. Átírtam erre:
  1. while(PORTB.B1==0){
  2.    }
És mindjárt ezt fordította:
  1. L_main4:
  2.         BTFSC      PORTB+0, 1
  3.         GOTO       L_main5             
  4.         GOTO       L_main4

Gondolom aki már régóta c nyleven programoz, az tudja, hogy oda kell a kapcsos zárójel.
(#) mate_x válasza mrobi hozzászólására (») Júl 15, 2016 /
 
Ha pontosvesszőt teszel a kapcsos zárójel helyett úgy talán elegánsabb megoldás.
(#) Elektro.on válasza mrobi hozzászólására (») Júl 15, 2016 /
 
Delay el nem fogod pontosan mérni a távolságot. Ikább használj számlálót, valahogy így.
Bővebben: Link
A hozzászólás módosítva: Júl 15, 2016
(#) mrobi válasza Elektro.on hozzászólására (») Júl 15, 2016 /
 
Mint írtam ez csak egy teszt volt. 16f628-at használok. CCP és RB0/INT párossal fogom mérni, de most csak tesztelni akartam a szenzort, hogy mégis hogy dolgozik.
(#) Elektro.on válasza mrobi hozzászólására (») Júl 15, 2016 /
 
Jaa értem. Nekem indítás után volt egy elég nagy holtidő mire inította a modul a valódi mérést. Adatlapba nincs dokumentálva. De a kódomba kommenteltem, hogy legközelebb ne érjen meglepi.
(#) mrobi válasza Elektro.on hozzászólására (») Júl 15, 2016 /
 
Igen, az nekem is gond volt.
(#) pajti2 válasza don_peter hozzászólására (») Júl 16, 2016 /
 
Nem emlékszem olyasmire a pic32 doksikból, hogy ne változtathatnál egyszerre túl sok port bitet, de gondolom egyébként is maximum 8-asával változtatgatod őket (rossz esetben bitenként).

Lehet, hogy a parancs szerkezete lesz más annak a flash-nek, mint amit szeretnél. Nem kellene elhinni, hogy kompatibilis valami mással, explicite végig kellene kuksizni az adatlapjaikat, és kiírogatnod teszt perifériára, hogy ténylegesen milyen műveleteket hajt végre a programod - hátha csak elkallódott a vezérlés. Tűt a szénakazalban..
(#) don_peter válasza pajti2 hozzászólására (») Júl 16, 2016 /
 
A B port vagyis az adat portot, vagy is 16bit-et egyszerre állítom.
A cím és vezérlő biteket egyesével, mivel nincs olyan port amin összefüggően lenne 16bit, max 8, de az meg rossz helyen és össze vissza van szervezve.

A parancs szerkezete ugyan az mint amit már használtam, így azzal sem lehet gond.
Időzítéseket meg mostanra elég sok variációban kipróbáltam, de a parancs szekvenciákat egyszerűen nem veszi be.

Az olvasás is szerintem csak azért működik, mert automatikusan olvasó üzemmódban indul.

29F800-at tökéletesen kezelem, szerintem itt még mindig a PIC-el lehet valami gubanc amit nem tudok mi le lehet.
Lehet üresen bootloader nélkül is ki kell próbáljam, mert szerintem az USB kever be neki, legalább is remélem, mert utána már nincs több ötletem.
Következő: »»   825 / 1210
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