Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Le van. Nem a programban, hanem a configuration bits panelon átraktam disabled-re. Gondolom ez nem nagyon számít.
Milyen PIC?
A probapanel fem resze hova csatlakozik? Probald sima elemrol. Belso oszci sem megy, akkor nagy gaz van. Elso lepeskent CHIP ERASE, aztan egy "minden lab kimenet, minden labra HI szint, goto vegtelen ciklusba" tartalmu egyszeru programot beirni (ellenorizni, hogy jo-e) config biteket belso oszcira es ertelemszeruen beallitani. Erre lep-e valamit? Ha nem, masik PIC-el megprobalni, mert valoszinuleg ez rossz. Lehet ilyen. Ha ez jo, akkor irj egy egyszeru villogot, hogy meddig megy. Ha leall, akkor valami kapacitiv problema lehet, de szerintem olcsobb masik PIC-et venni. Ha megy a villogoval, akkor a hiba mashol van, valoszinuleg a programban...
Megírtam a villogót PORTC-re, szépen villog. Eredetileg is teljesítette a kezdőfeltételeket, meg a főprogramot, de megszakításban viselkedett hülyén. Mindjárt megírom a villogót timer0 megszakításra, aztán ha az is megy, akkor én vagyok a hülye...
Na megszakításban előjön a hiba. Ráadásul az az érdekes, hogy az OPTION_REG-ben az előosztó 011-re van beállítva, és kb 5 másodpercenként invertálódik a kimenet (4 MHz az órajel). Ha van igény, bemásolom a kódot.
Van Apróhirdetés részleg, oda legyen szíves mindenki írni az oda tartozókat!
Hat, akkor nezzuk...remelem, asm a kod.
De szerintem, ha atnezed meg egyszer, be fog ugrani a hiba. Vagy ha van keznel egy masik PIC, abba is betoltod es ha ott is rossz, akkor programhiba. Talan nem torlod a flaget vagy tul gyorsan jonnek a megszakitasok. A regiszterek mentese helyesen tortenik?
Itt a kód, amúgy 16F884
cblock 0x20 seged1 endc org 0x00 goto init org 0x04 bcf INTCON,T0IF ;T0IF törlés movlw b'11111111' xorwf seged1,W movwf PORTC movwf seged1 ;seged1&PORTC invertálás retfie init bsf STATUS,RP0 ;BANK1-be lapozás movlw 0x00 movwf TRISC ;PORTC kimenet bsf OPTION_REG,PS0 bsf OPTION_REG,PS1 bcf OPTION_REG,PS2 ;előosztó=011 bsf INTCON,GIE ;GIE 1 bsf INTCON,T0IE ;T0IE 1 bcf STATUS,RP0 ;BANK0-ba lapozás movwf PORTC ;PORTC=0 movwf seged1 ;seged1=0 goto loop loop nop goto loop end Szerk: a tabokat kiszedte a fórum motor, de benne vannak.
Config hogy nez ki? WDT, BOR stb ki van kapcsolva? Kellene bele tenned valami "debug"-ot, hogy resetelodik-e a chip-ed -- azaz ha barmi mas reset esemeny tortenik mint POR, akkor egy LED-et ki kellene gyujtanod.
Amugy az interruptban nincs context savings, ami jelen esetben elmegy hisz a fo ciklusban nem csinalsz semmit, azonban mar ideje-koran erdemes raszokni, hogy az interrupt korrektul van megirva. A masik aprosag, hogy letezik COMF utasitas is, tehat a
helyett azt irhatnad, hogy:
Idézet: „Szerk: a tabokat kiszedte a fórum motor, de benne vannak.” 1. Elsoszamu okolszabaly, hogy programozashoz sohase hasznalt TAB-ot! Az MPLAB editorjat allitsd at, hogy space-eket tegyen be TAB helyett... 2. Raboksz a "Kod" gomocskara a szerkeszto mezo alatt kozvetlen, az betesz neked egy (code) tagot, ill ha megegyszer raboksz akkor egy (/code) tagot -- nyilvan a kod elejet es veget jelolve... Az elso tagot kicsit meg kell szerkeszteni, es betenni, hogy (code=asm) legyen... Termeszetesen a normal zarojalak helyett szogletes van ott
Akkor most leírom, hogy mi az a context savings.
A fontos regiszterek mentése a megszakítás lekezelése előtt, majd visszaállítása a végén. Megtalálod a módját az adatlapban! A kódot pedig a legegyszerűbben úgy tudod megmutatni nekünk, hogy csatolod fájlként(tallózás), akkor nem marad le semmi.
Ki van belőle kapcsolva minden. Pontosabban a BOR- nál ki lehetett választani, hogy 2,1V-nál reseteljen, ne 4-nél. Az interrputba bele szoktam rakni a W mentést, csak most fölösleges volt. Mindjárt megpróbálkozom a reset jelzéssel.
Egyébként szerintem nem resetel, mert kezdeti feltételnek az van benne, hogy oltsa el a ledeket. Ha nem fogom a panelt, vagy a pic-et, akkor csak megáll, de nem inicializálja magát újra. Mindjárt meglátjuk. Idézet: „Az interrputba bele szoktam rakni a W mentést, csak most fölösleges volt.” Ez édeskevés. Mondom, hogy nézd meg, hogyan kell! Csatold akkor a programot teljesen, főleg, ha változtatsz rajta.
Na beleraktam egy olyat, ha a PCON BOR bit 0, akkor kigyújtja a ledet. Ki is gyullad. Előtte a config bitsben beállítottam a BOD-hoz SBOREN controls BOR fuction-t.
Nagyon ellenjavalt a programózóban megadni a config biteket. Add meg a program elején, ahogy azt kell.
Ha a BOR csináljaa történenet, akkor a LED-ed irreálisan terhel, vagy a tápod nagyon gyenge! Hogy van a LED bekötve?
Láb-led-200R-GND. Amúgy egy univerzális adapterről van hajtva, ami 3V-ra van lecsavarva. Üresjárásban így majdnem pontosan 5 voltot ad a multiméter szerint.
szerk.: Van itthon egy kiszerelt számítógép-táp, megpróbálhatom eseteg azzal is.
Azzal a táppal tönkre fogod tenni a PIC-et, valamint az a táp minden terhelésre beesik! Alkalmatlan!
PIC-et csak és kizárólag stabil és szűrt tápegységről szabad járatni! Használj az univerzális tápod után egy 7805-öt a gyári adatlap szerinti szűrésekkel! Az táp IC bemenő fesze legyen minimum 8V, max. 14V. Addig nem is érdemes többet kérdezned, amig ez nincs meg!
Pillanatnyilag nincs itthon 7085, és valószínűleg vasárnap nem tudok szerezni. Úgyhogy köszi a segítséget, majd valamikor a jövő héten folytatjuk.
Attol fuggetlenul, hogy Wattnak teljesen igaza van, szerintem nem ez lesz a gond. Ha elemrol jaratod, ezt is kikuszobolheted. De koss a leddel sorba egy akkora ellanallast, amilyen nagynal meg eppen meglatod a fenyet, talan az segit. De ha a foprogramban tud villogni, akkor a elbirja a terhelest.
Az interrupban is csak megerositeni tudom, szamos esetben ORIASI szivasok, hajtepeses teboly varhatnak rad egy egyszeru status flag el nem mentese miatt... A C portot en a helyedben nem teljes inverzionak vetnem ala, hanem siman egy 1-el novekvo incf seged1 utasitassal latnam el, aztan tapogatnam a portC labakat egy 330 Ohmmal sorbakotott es tapra vagy foldre huzott leddel. Ilyenkor atfogsz egy 256-os tartomanyt, amikor a led esetleg allonak latszik, de valojaban veszettul villog csak nagy frekivel. De mondom, tedd at egy masik ugyanilyen pic-be, ha ott is rossz, akkor a hardverhibat kizarhatjuk.
470R ellenállásokkal a helyzet változatlan. Ha fogom a panelt, akkor 5 mp-nként növeli a kimenet értékét. Kicseréltem egy szűz picre, de ugyanezt csinálja.
A PIC táplábain van 100n-s kondi? A 470ohm is nagy terhelést okozhat, ismerve az univ tápok terhelésre változó feszét. Tegyél 1k-t és tegyél a tápra 1000µF-ot, de mielőtt PIC-et tennél rá, mérd meg a feszt, mert lehet, hogy az univ tápban nincs pufferkondi, ami azt jelenti, hogy a fesz jelentősen emelkedni fog a jelenleginél is jobban.
Mindamellett magam ellen beszélek, mert a végén még tönkreteszel valamit azzal a táppal...
270ľF a legnagyobb kondim, az be van rakva tápszűrésnek (illetve van mellette még dísznek egy 22 nF). A 100nF-osok meg nem mennek bele a panelba, ezért 10nF van a lábakra rakva. 1k ellenállást beraktam, de most ha fogom a panelt, nem csinál semmit a BOR led kigyújtásán kívül.
Kis korrekció, azt csinálja, mint eddig. Csak nem vártam ki az 5 mp-t.
Akkor vegyél 100nanókat is, meg 7805-t és azokat az alkatrészeket, amiket az adatlapja ír.
Lehet, hogy a paneled is tele van hibás tervezéssel, azért csinál ilyen dolgokat...
Szia!
Nem a WDT van bekapcsolva?! Úgy láttam, hogy a segédváltozódat nem inicializálod induláskor! Steve
Már nem tudtam rajta változtatni
Láttam, hogy a w-t berakod a segédbe is, de addig már engedélyezted az INT-t, így a W felülíródhat! Steve
Elvileg pár utasítással később inicializálódik a segédregiszter, azalatt nem hiszem, hogy túlcsordul a timer. A WDT ki van kapcsolva.
Induláskor TMR0 határozatlan, akár rögtön átbillenhet ( bár ott az előosztó )!
Steve
Valaki megtudja mondani, hogy:
Fordító: Hi-Tech C Ez miért van!?
Egy egyszerű tranyó + LED. De ebben a pillanatban sikerült kibogarászni az adatlapból...
Az volt a baja, hogy a láb másodlagos funkciója AN5, és nullázni kelett az ANSEL regiszter vonatkozó bitjét. Mostmár jó. De akkor se értem miért... A TRIS bit természetesen 0 volt végig. |
Bejelentkezés
Hirdetés |