Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1201 / 1319
(#) diablo válasza potyo hozzászólására (») Okt 6, 2015 /
 
Most sorba van két 1206-os smd (ezeknek elméletileg 200V az üzemi feszültségük), az eddig nem füstölt el, viszont más helyen igen ugyanígy sorba kötve, de szerintem csak a disszipáció miatt (előtét kondi előtét ellenállása). Én 2512-esre gondoltam kicserélni őket, azoknak 300V az üzemi feszültségük és 2W-osak (szintén sorba kötve, mert ugye 325 V-unk van). Fontos lenne az smd kialakítás. Vagy nagyon nem ajánlott smd ellenállást beépíteni ilyen helyre?
Bővebben: Link
(#) proba válasza diablo hozzászólására (») Okt 6, 2015 /
 
Normális tápegységekben 3-4 ellenállás van sorba.Az üzemi feszültség nagyon elméleti, mihelyst a panelre teszed, már romlott a helyzet, a folyasztószer, gyanta meg még ront rajta.
(#) diablo válasza proba hozzászólására (») Okt 6, 2015 /
 
Mármint SMD esetén? Furat szerelt esetén azért elég 1db is szerintem mondjuk egy 500V-osból.
Egyébként láttam már olyan gyári áramkört amin csak két 1206-os ellenállás gondoskodott a kondenzátor kisütéséről.
(#) Swarcy hozzászólása Okt 9, 2015 /
 
Sziasztok!

Lenne egy kérésem, aki MPLAB v8.92 verziót használ, futtassa már le nekem a következő asm file-t
az MPLAB szimulátorában. (A spec function regiszterek közt lehet látni mi történik.)
Az a gondom, hogy a TMR6 os időzítő elindul, megy, lejár de nem kér megszakítást. Pontosabban az összes megszakításjelző bit 1 lesz és engedélyezve is van, ennek ellenére nem ugrik magas megszakításba. Arra lennék kíváncsi, hogy valamit elcsesztem vagy az MPLAB nem tudja ezt a PIC típust rendesen szimulálni. A TMR 5 ös is ugyanezt csinálja , a TMR 0,1,2 viszont működik rendesen.
Ezeket már használom azért kell az 5 ős meg a 6 os TMR is !

Köszönöm előre is.
(#) Wezuv válasza Swarcy hozzászólására (») Okt 9, 2015 /
 
Látatlanban: nem támogatja a PIC-et. Nézd meg, amikor kiválasztod a szimulátort, milyen színű a támogatás pötty. Ha nem zöld, csak sárga, akkor részben támogatott.
Én már áttértem X-re, lehet használni a régi fordítókat és nem vészesen lassú, viszont sokkal jobb a szerkesztője és watch is jobban elhelyezhető, variálható, forrás megjelenítése klónozható stb. Próbáld ki, nem bánod meg!
(#) Swarcy válasza Wezuv hozzászólására (») Okt 9, 2015 /
 
Igen igazad lehet sárga a pötty a szimulátornál most néztem meg .
Már nézegettem én is az X-et de még nem tudtam zöld ágra vergődni vele.

Köszi
(#) Ven hozzászólása Okt 10, 2015 /
 
Sziasztok!
Gondoltam végre kihasználhatom az új XC32 free c++-os verzióját és csinálok vele egy projektet. Persze linker error kapok akármit is csinálok. Sikerül lebutítanom a hibát, az alábbi 3 sorral előjön:
#include <vector>
vector<int> temp;
temp.push_back(12);

Ez a hiba első pár sora, de amúgy szép hosszú:
xthrow.o: Link Error: Could not allocate section .text._ZSt15_Xruntime_errorPKc, size = 980 bytes, attributes = code
data_init: Link Error: Could not allocate section .dinit, size = 928 bytes, attributes = code keep
c:/program files (x86)/microchip/xc32/v1.40/bin/bin/../../lib/gcc/pic32mx/4.8.3/crtbegin.o: Link Error: Could not allocate section .text, size = 552 bytes, attributes = code
malloc.o: Link Error: Could not allocate section .text.malloc, size = 548 bytes, attributes = code
fputs.o: Link Error: Could not allocate section .text.fputs, size = 404 bytes, attributes = code

Nekem úgy tűnik, hogy a default linker script fileból mindenre panaszkodik. Olyan, mintha nem tudná linkelni a c++-os dolgokat.
Találkozott már valaki ezzel a hibával? Google nem mond erre semmit.
(#) Wezuv válasza Swarcy hozzászólására (») Okt 10, 2015 /
 
Ha elakadsz, kérdezz. Sokan vannak, akik kapásból válaszolnak. Az X-ben máshogy kell beállítani ugyanazt, főleg, ha maradsz a régi fordítóknál. Nem túl bonyolult szerintem, csak más.
(#) tottibence hozzászólása Okt 13, 2015 /
 
Hello mindenki!

Segítségeteket szeretném kérni a következő kérdésben: Egy optokaput építek melynek az lenne a feladata, hogy ha eltakarod akkor valamiféle hangjelzést ad (sípol). Intel 8051-re kellene assembly-ben megírni a kódot. Analóg jelet vizsgálnék vele, semmi extra. Valaki tudna ebben segíteni? Milyen oldalakon lehetne utána nézni ennek, vagy valakinek van valami hasonló programja?

üdv. B
(#) foxi63 válasza tottibence hozzászólására (») Okt 13, 2015 /
 
Szia!
Egyrészt ez nem 8051-es topic, másrészt beírhatnád a GOOGLE-ba, hogy 8051 assembler...
(#) m.joco hozzászólása Nov 5, 2015 /
 
Sziasztok!

Egy WiFi-s haletetőt fejlesztek éppen pic24fj64ga002 mikrovezérlővel mikroC-ben, ahol pont a legegyszerűbb résznél, egy nyomógomb megszakításánál akadtam el, jobban mondva egy érdekes jelenséggel találkoztam.
Az INT0-s láb fel van húzva egy 10k ellenállással tápra, a nyomógomb pedig földet kapcsol. Értelem szerűen az INT0 megszakítás lefutó élre aktív. Ha kihúzom a dugaszolós próbapanelból azt a vezetéket, amely a föld és a nyomógomb között van, majd visszadugom, akkor lefut ISR. Mindeközben a gomb nincs megnyomva. Tehát gyakorlatilag egy lógó vezetéket szúrok a földre, és ennek hatására INT0 megszakítás történik. Gondoltam, hogy valamilyen parazita kapacitásról lehet szó, majd tettem az INT0-ás láb és a föld közé egy 1-100nF-os kondenzátort illetve kihúztam a mikrokapcsolót a helyéről, de ez se segített. Ha logikai analizátorral figyeltem a lábat, akkor nem jött elő ez a hibajelenség. Mindazonáltal a megszakítás gombnyomásra hibátlanul működik, ahogy az áramkör/program többi része is. Az INT0/RB7 láb természetesen digitális bemenetnek van beállítva.
Megnéztem a kontroller erratáját, illetve rákerestem a hibajelenségre is, de nem találtam semmit. Van valakinek ötlete, hogy mi lehet a háttérben?

Üdv. m.joco
(#) proba válasza m.joco hozzászólására (») Nov 5, 2015 /
 
Lehet amit te földnek gondolsz az nem az...
(#) usane válasza m.joco hozzászólására (») Nov 5, 2015 /
 
A "gyakorlatilag" lógó vezetéknek és a nyomógombnak is van kapacitása. Esetleg még egy dióda segíthet rajta, de mivel ez nem olyan hiba ami a gyakorlatban előáll, úgy értem a kész áramkörben nem lesz vezeték dugdosás és az áramkör egyébként működik, nem kell vele foglalkozni.
(#) kaqkk válasza m.joco hozzászólására (») Nov 5, 2015 /
 
Én a bemeneten mindig 1k-t használok ,mindig gnd re van húzva vele a láb és + ra kapcsol a gomb vagy a kapcsoló . soha még az árnyéka sem jött elő ennek a dolognak amit leírtál ...
(#) Bakman válasza m.joco hozzászólására (») Nov 6, 2015 /
 
Talélkoztam már ilyennel, illetve hasonlóval. Nekem az oldotta meg a problémát, hogy 1k ellenállással húztam fel a lábat.
(#) The_Saint hozzászólása Nov 9, 2015 /
 
Üdv!

A segítségétekre lenne szükségem. Egy PIC18F46K22-vel küzdök egy ideje. Mind a két UART működik megszakításos bejövö adatkezeléssel hibátlanul. A következő lépés egy SD kártya interface lenne, amit be kellene illesztenem a programba. Az SD kártya kezelő részt 18F4580-on írtam először, ahol tökéletesen működött. Copy + Paste és a szükséges SFR-ek névmódosítása után az UART megszakítás megszűnik működni. A bejövő karakterek nem okoznak megszakítást. Eddig sikerült kinyomoznom, hogy a következő programrész részleges kikommentezése megoldja a megszakítás problémát, persze ettől meg az SD kártya nem működik....


Ha ez így van benn akkor nincs UART interrupt:
  1. ReadResponse
  2.         clrf    DummyCounter
  3.         lfsr    FSR2,SPI_RX_BUFF
  4. WaitValidData
  5.         movlw   0xFF
  6.         movwf   SpiTxByte
  7.         call    SendByteToSpi
  8.         movwf   SpiRxByte
  9.         xorlw   0xFF
  10.         btfss   STATUS,Z
  11.         goto    WaitValidData
  12.         call    StoreByte
  13. ReadValidResponse
  14.         movlw   0xFF
  15.         movwf   SpiTxByte
  16.         call    SendByteToSpi
  17.         call    StoreByte
  18.         bcf             STATUS,C
  19.         movlw   0x05
  20.         subwf   DummyCounter,w
  21.         btfss   STATUS,C
  22.         goto    ReadValidResponse
  23.         return


Ha így, akkor működik az UART interrupt:
  1. ReadResponse
  2.         clrf    DummyCounter
  3.         lfsr    FSR2,SPI_RX_BUFF
  4. WaitValidData
  5.         movlw   0xFF
  6.         movwf   SpiTxByte
  7.         call    SendByteToSpi
  8.         movwf   SpiRxByte
  9.         xorlw   0xFF
  10.         btfss   STATUS,Z
  11.         goto    WaitValidData
  12.         call    StoreByte
  13. ;ReadValidResponse
  14.         ;movlw  0xFF
  15.         ;movwf  SpiTxByte
  16.         ;call   SendByteToSpi
  17.         ;call   StoreByte
  18.         ;bcf            STATUS,C
  19.         ;movlw  0x05
  20.         ;subwf  DummyCounter,w
  21.         ;btfss  STATUS,C
  22.         ;goto   ReadValidResponse
  23.         return


Ha jól tippelek a kettőnek nem nagyon van köze egymáshoz. A fenti programrészlet még nem része a futó programnak, vagyis az SD kezelést még nem hívom meg sehol...

Jó volna valami ötlet, mert kicsit tanácstalan lettem.... Köszi előre is!
Üdv
The_Saint
A hozzászólás módosítva: Nov 9, 2015
(#) bbalazs_ válasza The_Saint hozzászólására (») Nov 9, 2015 /
 
Szerintem azokban a call-okban van valami...
Tobb commentelest nem tudsz visszavonni?
Tudni kellene, hogy hol vannak a memoriak, mi a BSR allapota, stb.

Masfelol sokat segithet, ha az MPLAB szimulatoraban futtatod, ott szimulalt modon latod, mit rontottal el, mikor modosul a megfelelo regiszter.
Egyeb megszakitasok mukodnek?
Ha atpakolsz par uj memoriacimet?
Ha az egesz szubrutin helyet valtoztatod?
Sok lehetoseged van, en egy led-et szoktam kigyujtani elesben (ha addig eljut, akkor jo), de mostanaban inkabb szimulator. Eppen tegnap fedeztem fel, hogy a tblrd*+ es a tblrd +* mast csinal...
Miutan egy napig szivtam, hogy miert hagyja ki az elso karaktert az olvasasnal...
A hozzászólás módosítva: Nov 9, 2015
(#) The_Saint válasza bbalazs_ hozzászólására (») Nov 10, 2015 /
 
Üdv,

Ok, szóval pakolásztam a dolgokat ide oda, nem sok minden változott. A LED-es trükköt én is használom, bár nálam egy kijelzó is rá van akasztva, hogy néha többet láthassak egy blinknél. A végeredmény az lett, hogy újraírtam egy részt az SD kártya kezelésben.
Ha nem volt bent az SD akkor egy végtelen ciklusba került a program, amiből az UART megszakítás ki kellene léptesse... Ezért megszakítás a megszakítás, de sajnos ez nem teszi. Az érdekesség az az, hogy ha nincs dolga a CPUnak akkor is egy LOOP..NOP..GOTO LOOP ciklusban kering és abból simán kilép és kezeli az UART-ot. Egyenlőre a két UART-on kívül meg nincs másik megszakítás benne.
Az újraírás alapvetően a problémát nem oldotta meg, hanem csak megkerülte. 2mp után így vagy úgy de kiléptetem a SD-re várakozásból.
Sajnos még mindig nem értem hogy miért tűnik el az UART megszakítás ebben az esetben. Szóval ez a rész még ötleteket vár
De találtam egy másik problémát..lásd köv. hozzászólás...
(#) Hp41C válasza The_Saint hozzászólására (») Nov 10, 2015 /
 
Megszakításai rutinban vár az SD kártyára vagy az uart -ra.
Nem olvasod ki a RCREGx -et, ezzel nem törlődik a megszakítás kérés. A ráfutás (OERR) vagy keretezési hiba (FERR) nincs lekezelve. Akkor is ki kell olvasni az RCREGx -et, ha letiltod a vételt a hibák törlésére.
(#) The_Saint hozzászólása Nov 10, 2015 /
 
Biztos mindegyikőtöknek megvan a Kónya féle PIC programozós könyv régebbi kiadása, az a fekete borítós... A tippek trükkök résznél van pár minta a 8 és 16 bites változók hasonlítására. Na eddig én ezeket sikerrel használtam, viszont a minap egy érdekes dolog történt:
Az alábbi kódrészlet a könyv 213. oldalán a RAM > x résznél található:

  1. movf RAML,w
  2. sublw XL
  3. movf RAMH,w
  4. btfss STATUS,C
  5. addlw 0x01
  6. sublw XH
  7. btfss STATUS,C
  8. goto true


Szóval ugrik ha a RAM > X

Ha X mindig 0 és a RAM értékét növelem 1-el, akkor PIC18F4580 esetében teszi is a dolgát egészen 0xFE10 értékig, utána viszont úgy ítéli meg, hogy az X > RAM....természetesen hibás működést okozva például egy LoadCell mérés esetében. Az okra eddig nem jöttem rá, nem volt időm foglalkozni vele. A problémát persze megoldattam egy másik hasonlítási eljárással.
Más is találkozott már ezzel?

Üdv
TheSaint
(#) The_Saint válasza Hp41C hozzászólására (») Nov 10, 2015 /
 
Üdv,

  1. _loop
  2.     nop
  3.     goto _loop


Ebben a loopban vár bármilyen megszakításra. UART1 és UART2 megszakítás esetén kezeli a bejövő charaktereket és törli a flaget... ahogy kell.
Aztán meghívom az SD inicializáló részt akkor eddig egy szintén végtelen ciklusban várt SD R1 válaszára. Mivel nem volt bent az SD ez ugye sose jött meg, de ennek ellenére ki kellett volna lépjen kezelni az UART-okat, de nem tette. Szóval itt tűnt el az UART megszakításra való reagálás.
Ha berakom az SD-t, mármint a kártyát magát, akkor inicializál, visszamegy a fenti loopra és utána minden normálisan működik.
(#) Hp41C válasza The_Saint hozzászólására (») Nov 10, 2015 /
 
Hogyan inicializálod az SD kártyát?
(#) Hp41C válasza The_Saint hozzászólására (») Nov 10, 2015 /
 
Ennyire higyj a "kész" megoldásoknak! Az addlw 1 utasítás okozhat átvitelt, amit a rutin nem kezel le.
X=0x0000 mellett működik RAM=0xFF00 -ig. Azonban, ha RAM=0xFF01 .. 0xFFFF, akkor az említett átvitel elveszik.
A hozzászólás módosítva: Nov 10, 2015
(#) The_Saint válasza Hp41C hozzászólására (») Nov 10, 2015 /
 
  1. SdInitSequence
  2.         bsf             LED
  3.         bsf             SPI_CS
  4.         wait    .1250
  5.         wait    .1250
  6.         movlw   0x0B
  7.         movwf   Retry
  8. SdWakeupLoop
  9.         movlw   0xFF
  10.         movwf   SpiTxByte
  11.         call    SendByteToSpi
  12.         decfsz  Retry,f
  13.         goto    SdWakeupLoop
  14.         bcf             SPI_CS
  15.         loadTable       CMD0
  16.         call    SendMessageToSpi
  17.         call    ReadResponse
  18.         call    SendResponseToUART1
  19.         loadTable       CMD8
  20.         call    SendMessageToSpi
  21.         call    ReadResponse
  22.         call    SendResponseToUART1
  23.         call    SetTimer02s
  24. WaitForCardReady
  25.         btfsc   INTCON,TMR0IF
  26.         return
  27.         loadTable       CMD55
  28.         call    SendMessageToSpi
  29.         call    ReadResponse
  30.         call    SendResponseToUART1
  31.         loadTable       CMD41
  32.         call    SendMessageToSpi
  33.         call    ReadResponse
  34.         call    SendResponseToUART1
  35.         movf    R1Response,w
  36.         xorlw   0x00
  37.         btfsc   STATUS,Z
  38.         goto    NextInitSdCommand
  39.         goto    WaitForCardReady
  40. NextInitSdCommand
  41.         loadTable       CMD58
  42.         call    SendMessageToSpi
  43.         call    ReadResponse
  44.         call    SendResponseToUART1
  45.         loadTable       CMD16
  46.         call    SendMessageToSpi       
  47.         call    ReadResponse
  48.         call    SendResponseToUART1
  49.         bcf             LED
  50.         return


A SetTimer02s miatt kerüli ki a varakozó ciklust ha nincs benn a kártya és lejárt a timer. Ha benn van akkor nincs gond.
Ha kiveszem a timert, akkor benn marad ebben a ciklusban és nem kezeli az UART megszakítást...
Igazából azt nem értem, hogy az UART szempontjából semmi nem változik és mégsem kezeli. Kipróbáltam a TIMER0-t polling helyett megszakítással és az rendben van... de így pollingal egyszerűbbnek látom...
A fura a dologban, hogy átraktam az egészet 18F4580-ra és ott hibátlan... Ha van SD kártya, ha nincs a megszakítást akkor is kezeli, kivétel nélkül.
(#) bbalazs_ válasza The_Saint hozzászólására (») Nov 10, 2015 /
 
Szerintem igy nagyon nehez hibat keresni, hogy a fele a programnak olyan call, amit nem is latunk.
Pollinggal lekezelni egy megszakitast elegge...hmmm...kezdetleges.
Erdemes kutakodni a ketfele proci regiszterei kozott, mert elofordulhat IGEN KONNYEN, hogy ugyanaz a regiszter mashol van es az a bitje is mast jelent. Adatlap a mervado.
Amennyiben az egyikben megy, a masikban nem, velemenyem szerint nem programhiba, hanem felepitesbeli kulonbozoseg miatti hiba lepett fel.
(#) Hp41C válasza The_Saint hozzászólására (») Nov 10, 2015 /
 
Állítsd be az MpLab Sim -et nyomkövetőnek és kövesd a SD kártya inicializálást lépésenként. Közben figyeld a RCIFx bitet... Tegyél egy töréspontot a megszakítás(ok) belépési pontjára. Nézd meg mitől jutott oda a program. Mi nem látjuk át a programodat...
(#) Hp41C válasza Hp41C hozzászólására (») Nov 10, 2015 /
 
Kimaradt az előzőből:
Készíts két szöveges állományt, amiben a két uart által fogadandó táviratokat léírod. A két állományt egy-egy register injection stimulussar rendeld az RCREG1 és RCREG2 -höz. A stimulosokat aktivizáld (Apply). fordítsd újra a programot és indítsd el. Tegyél egy töréspontot a megszakítás(ok) belépési pontjára (pontjaira). A vezérlés meg fog állni a megszakítás belépési pontjain.
(#) Attila86 hozzászólása Nov 10, 2015 / 1
 
Fejlesztek egy berendezést, ennek az első lépése hogy a PIC-kel adatokat kell beolvasnom SD-kártyáról. Korábban ezeket az adatokat a PIC programmemóriájába tettem de az sajnos véges, az SD-kártya viszont már kvázi korlátlan adattárolást biztosít. Amíg a PIC-ben voltak ezek az adatok addig jó volt mert a fordító szólt hogyha szintaktikai hiba volt benne mert véletlen elgépeltem valamit. Viszont ha az SD-kártyáról olvasom be az adatokat egy txt fájlból, akkor ott nincs semmiféle biztosíték arra hogy abban nincs hülyeség. Ezért kellett írnom egy függvényt ami megoldja mindezt. Szépen soronként beolvassa a szövegfájlt és kimazsolázza belőle a megfelelő adatokat majd feltölt vele egy elég bonyolult struktúrát. A probléma az hogy annyi féle adat lehet a szövegfájlban és a legkülönbözőbb variációkban hogy a lehetséges esetek száma szinte végtelen. Példaként mutatok két esetet, a legegyszerűbbet ("J001") és egy elég bonyolultat ("J002"). Mind két adatcsomagot ugyan az a függvény olvassa be és minden egyes kis adatot a megfelelő helyre pakol. A kommenteket (a "//" jel után) figyelmen kívül hagyja és ha hibát talál akkor megmondja hogy a szövegfájl hanyadik sorában van a hiba és milyen jellegű. 28 különböző hibaüzenetet tud adni, ezzel nagyon részletesen a tudtunkra adja hogy pontosan mi is a baja a sorokkal. Tulajdonképpen olyan mint egy fordító program.

Itt van róla egy kis videó, itt beolvastatom a kártyáról az összes programot amit talál és mindet leellenőrzi: Bővebben: Youtube

Nem túl látványos dolog, de nagyon-nagyon fontos amit csinál.
Négy napig ezt írtam.
(#) Attila86 válasza Attila86 hozzászólására (») Nov 11, 2015 /
 
Bocsi, ezt nem ide akartam írni csak áttették ide.

Viszont ha már ide kerültem:
Nem tudtok esetleg olyasmiről, hogy az MPLABX olyat tudna hogy számolja hogy a projekt hányszor lett elmentve, lefordítva vagy beégetve? Tök jó lenne ha ezt a számot valahogyan applikálni lehetne fordításkor a programba egy konstansként, így egyszerű lenne a verziókövetés.
(#) usane válasza Attila86 hozzászólására (») Nov 11, 2015 /
 
Az égetések számát szerintem nem tudja követni, de history-ja van azt tapasztalatból tudom. Mutatja a különbséget is az előzőleg mentett verziókhoz képest. Egyszer véletlenül elmentettem egy változtatást amit nem akartam, és több sor volt amit nem jegyeztem meg, history segített .
Azt nem tudom meddig tárolja az adatokat, de szerintem nem túl sokáig. 1 v. 2 hónap lehet max. utána kell nézni.
Következő: »»   1201 / 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