 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
egomez Član


Pridružen-a: Sob 03 Apr 2004 18:49 Prispevkov: 517 Aktiv.: 2.18 Kraj: Ljubljana/Sežana
|
Objavljeno: Čet Maj 18, 2006 6:26 pm Naslov sporočila: ne najdem napake v enostavnem programu za pic16f627 |
|
|
Če se komu da, bi ga prosil, da pogleda, kaj delam narobe. Ob pritisku na eno od tipk, bi se mi mogle ustrezne vrednosti na izhodu spremeniti. Vendar so spremenjene le, če tipko držim. Pa še takrat ne dobim lepega signala na izhodih, ampak je polno "glitchev".
Koda: |
LIST P=16F627 ;prevajalniku povemo za kateri procesor gre
#INCLUDE P16F627.INC ;nahajališce datoteke *.INC
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
; _CP_OFF code protect off
;_WDT_OFF watch dog timer off
;_PWRTE_ON power-on timer : poskrbi, da se oscilator stabilizira, preden zacne mikrokontroler izvrševati program.
;_BODEN_ON broun-out detect : pri prenizki napetosti se mikrokontroler resetira in se ponovno vklopi, ko je napetost primerna
;_LVP_OFF low voltage programming
;_MCLRE_OFF RA5/MCLR pin function is digital Input, MCLR internally tied to VDD : onemogoci rocno resetiranje
;_INTRC_OSC_NOCLKOUT vkljucimo interni oscilator in izkljucimo uro da gre na pin.
;vhodi
#define gor_tipka PORTB,3
#define dol_tipka PORTB,0
#define zaustavi_tipka PORTB,2
#define stop_tipka PORTB,1
#define gornje_stikalo PORTB,4 ;zaustavi motor in da v stanje standby
#define spodnje_stikalo PORTB,5 ;obrne stran vrtenja motorja
#define varnostna_stikala PORTB,6
;izhodi
#define zaustavi PORTA,0 ;CLOCK DISABLE
#define gor_dol PORTA,1 ;SMER VRTENJA MOTORJA 1=pozitivna smer, 0=negativna smer
#define standby PORTA,7
#define izklopi PORTA,6 ;izklopi krmilnik koracnega motorja, ko je postavljen na 0
org 0x00
goto GLAVNI
org 0x04
GLAVNI ; Glavni program
bsf STATUS,RP0 ; bank 1
bcf OPTION_REG,7 ;vkljuci notranje pull up upore na portu B
movlw 0x00
movwf TRISA ; PORTA je izhodni
movlw b'01111111'
movwf TRISB ; PORTB :vsi pini razen RB7 so vhodni
bcf STATUS, RP0 ; bank 0
movlw 0xff
movwf PORTA ; postavi vse izhode na 1, kar pomeni da je ura izklopljena in krmilnik v Standby nacin
zanka ; beremo tipke v zanki
btfss dol_tipka ; ta tipka ima NORMALY OPEN kontakt
call smer_dol
btfss dol_tipka ; ta tipka ima NORMALY OPEN kontakt
call smer_gor
btfss zaustavi_tipka ; ta tipka ima NORMALY OPEN kontakt
call zaustavi_se
btfsc stop_tipka ; ta tipka ima NORMALY CLOSE kontakt
call izklopi_se
btfss gornje_stikalo ; ta tipka ima NORMALY OPEN kontakt
call standby_se
btfss spodnje_stikalo ; ta tipka ima NORMALY OPEN kontakt
call smer_gor
btfsc varnostna_stikala ; ta tipka ima NORMALY CLOSE kontakt
call izklopi_se
goto zanka
;call
smer_dol
bsf gor_dol ;pozitivna smer vrtenja
bcf zaustavi
bcf standby
return
smer_gor
bcf gor_dol ;negativna smer vrtenja smer vrtenja
bcf zaustavi
bcf standby
return
zaustavi_se
bsf zaustavi
return
izklopi_se
bsf zaustavi
bcf izklopi
return
standby_se
bsf zaustavi
bsf standby
return
END |
|
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Čet Maj 18, 2006 6:30 pm Naslov sporočila: |
|
|
A to si opazil, da imas dvakrat preverjanje ali je gor_tipka bit prizgan in da potem izvedes razlicno stvar (smer_gor & smer_dol) ? Takole na hitro izgleda, da bi to povzrocalo toglanje signala gor_dol, namesto da bi ta ostal v izbranem stanju (najbrz gor, glede na oznake visje v programu). Pri kateri tipki pa se pojavi tvoja tezava ? |
|
Nazaj na vrh |
|
 |
egomez Član


Pridružen-a: Sob 03 Apr 2004 18:49 Prispevkov: 517 Aktiv.: 2.18 Kraj: Ljubljana/Sežana
|
Objavljeno: Čet Maj 18, 2006 6:33 pm Naslov sporočila: |
|
|
Hvala Sokrat. Tega sploh nisem opazil
Bom takoj popravil, pa poročam, če so težave odpravljene. |
|
Nazaj na vrh |
|
 |
egomez Član


Pridružen-a: Sob 03 Apr 2004 18:49 Prispevkov: 517 Aktiv.: 2.18 Kraj: Ljubljana/Sežana
|
Objavljeno: Čet Maj 18, 2006 6:46 pm Naslov sporočila: |
|
|
Hm, tam je bila sicer napaka. Sedaj mi dela tudi druga tipka, vendar tudi tista nepravilno. Če npr pritisnem tipko dol, mi ta na izhodu postavi pozitivno smer vrtenja(vrednost high na enem izhodu), vendar to drži le eno mikrosekundo, potem pa pade spet na 0. Če pa tipko držim se po približno 25us vse spupaj ponovi. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Čet Maj 18, 2006 6:55 pm Naslov sporočila: |
|
|
Najboljse bo, da objavis popravljen program in bolj natanno razlozis v cem je tezava (pri katerih tipkah pride do tezave in kaksne).
Pa se to: program lahko v MPLABu izvajas po korakih in sproti spremljas (in nastavljas) stanje registrov. Tako je najlazje najti napake.
Se en popravek: tvoj program za spodnje_stikalo ne pocne tistega, kar pise da naj bi pocel v opisu.
Nazadnje urejal/a Sokrat Čet Maj 18, 2006 7:10 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
egomez Član


Pridružen-a: Sob 03 Apr 2004 18:49 Prispevkov: 517 Aktiv.: 2.18 Kraj: Ljubljana/Sežana
|
Objavljeno: Čet Maj 18, 2006 7:09 pm Naslov sporočila: |
|
|
Sokrat je napisal/a: |
Najboljse bo, da objavis popravljen program.
Pa se to: program lahko v MPLABu izvajas po korakih in sproti spremljas (in nastavljas) stanje registrov. Tako je najlazje najti napake. |
Ja, saj zato sem vprašal v drugi temi, ker nisem mogel debugirati. Sem sedaj šel po korakih skozi in spreminjal vrednosti tipk, pa dela pravilno.
Najbrž je nekaj narobe z mikrokontrolerjem. Moram poiskati kakšnega drugega. |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Pet Maj 19, 2006 7:12 am Naslov sporočila: |
|
|
Mislim, da je glavni problem odskakovanje tipk.
Stanje tipke bi moral preverjati vsaj 2x med preverjanjema pa moraš imeti nekaj 10 ms pavze. Tipka, ko jo skleneš nekaj časa odskakuje in ker ima procesor visoko hitrost lahko eno samo tipko večkrat prebere kot pritisnjeno / spuščeno čeprav si jo ti pritisnil samo enkrat. Čas odskakovanja je odvisen od samih tipk. Če imaš možnost preveri v Datasheetu, velikokrtat to piše. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 19, 2006 7:32 am Naslov sporočila: |
|
|
egomez,
Variant branja tipk je veliko odvisno od načina rabe.
Najenostavnejša metoda je sedeča:
Glavni program ti stalno teče v zanki ter istočasno bere tipke.
Koda: |
G_ZANKA
btfsc TIPKA_DOL ;je tipka dol stisnjena?
goto TIPKA2 ;ne branje sledece tipke
call IZVEDI ;kaj naj se izvede ce je tipka stisnjena
btfss TIPKA_DOL ;je tipka spuscena?
goto $-1 ;ne nazaj v zanko
TIPKA2
..............
.............. ;sledi branje druge tipke enako kot je to narejeno za prvo
goto G_ZANKA
|
Dostikrat tipke "obešamo" na pine, ki so istočano uporabljeni kot izhodi. Pred vsem je to uporabno tam, kjer recimo izhode uporabljamo za pogon led dispejev v muliplex načinu.
Takrat je najbolje v proceduri, ki jo uporabljamo za multipleksiranje displejev v trenutku ko vršimo preklop (vsi displeji so izključeni) port preklopit na vhode. Prebrati stanje na portu v nek register. Potem pač beremo stanje iz tega registra enako kot v zgoraj navedeni proceduri, kjer čitamo posamezne pine porta direkt. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pet Maj 19, 2006 9:49 am Naslov sporočila: |
|
|
V tem primeru je program napisan tako, da (vsaj za tipki gor in dol, ki sta ocitno povzrocali tezave) tudi ob odskakovanju tipke ne naredi nic neprijetnega - stanje gor_dol se spremeni le, ce je relevantna tipka pritisnjena, ne pa tudi takrat, ko ni pritisnjena. Ce oz. ko bi program ugotovil, da je bila "pritisnjena" 10x zaporedoma, bi samo nastavil isto vrednost kot prej in izhod bi moral ostati v enakem stbaju (ce se vems z drugo tipko nic ne dogaja seveda). Ce pa bi bil uporabljen samo en vhod in stikalo, potem bi bilo za pricakovati tezave z odskakovanjem in nepredvidenim spreminjanjem smeri zaradi napacne interpretacije. |
|
Nazaj na vrh |
|
 |
egomez Član


Pridružen-a: Sob 03 Apr 2004 18:49 Prispevkov: 517 Aktiv.: 2.18 Kraj: Ljubljana/Sežana
|
Objavljeno: Pet Maj 19, 2006 7:07 pm Naslov sporočila: |
|
|
Včeraj z debuggiranjem na računalniku nisem našel nepravilnega delovanja, ko pa sem program vpisal in dal mikrokontroler v vezje, ni delalo prav. Zato sem pomislil, da je kaj narobe z mikrokontrolerjem. Enkrat med preizkušanjem sem ga dal narobe v ohišje.Nato nekaj zavoham in gledam kaj smrdi. Se dotakmen mikrokontrolerja in se opečem. Še sedaj se mi pozna opeklina. Na moje začudenje pa mi ga je tudi po tem dogodku programator uspešno prebral in ponovno zapisal in to večkrat brez napake. Na žalost pa sem imel na rezervi samo 16f627a, ki pa mi jih programator ni hotel zapisati, pa čeprav pred tem z njim nisem imel nobenih probemov z različnimi mikrokontrolerji. Grr ta JDM.No saj imam tudi p16pro, vendar ga na žalost nisem imel pri sebi.
Danes zjutraj sem šel v trgovino in kupil novega 16f627. Ga sprogramiram in veselo vstavim v vezje. Na moje začudenje dela ravno tako, kot s prejšnjim. Še malo spreminjam program, pa ne uspem nič izboljšati.
Zato vzamem protoboard, 2 tipki in ledico. V programu vse zakomentiram razen branja dveh tipk. Program še vedno ne deluje. Potem ugotovim, da je problem v podprogramih. Če so bili napisani na ta način:
Koda: |
smer_dol
bsf gor_dol ;pozitivna smer vrtenja
bcf zaustavi
bcf standby
return |
ni delalo pravilno. Bit postavljen z bsf je ostal na logični 1 le za 1us(gledano na osciloskopu). Po nekaj 10 us se je spet postavil na 1, če sem tipko držal. Verjetno zato, ker je program v tem času prišel ravno enkrat okoli.
Ko sem v podprogramu imel le en bsf oz bcf, pa je delalo normalno. Potem spremenim podprograme v tako obliko, da nastavljam vse bite enega porta istočasno. npr:
Koda: |
smer_dol
movlw b'01000010'
movwf PORTA
return |
Na tak način mi vezje na protoboardu deluje normalno. Mislim, da sem odpravil napako(čeprav še vedno ne vidim zakaj bi bila napaka) in dam mikrokontroler v vezeje. Pa še vedno ne deluje. Nato premerim še enkrat vse pine mikrokontrolerja z osciloskopom. Pri napajalni napetosti pomanjšam časovno bazo in vidim, da so špičke, ki so zgledale precej nedolžne, kar velike. V glavnem je bila napajalna napetost kar konstantna, le periodično so se pojavljale nekaj voltne negativne špičke. Takoj dam en kondenzator ob napajanje pica, pa so težave odpravljene. Vezje deluje kot je mišljeno. Ker sem ga že od začetka napajal z laboratorijskim napajalnikom, prej nisem sumil napajalne napetostil.....no, pravzaprav zgleda, da mi tiste špičke povzroča NE555, ki ga imam tudi na vezju. Zgleda da mi je padec napetosti vsakič resetiral mikrokontroler, čeprav sem imel nastavljeno & _BODEN_OFF in _MCLRE_OFF.
Tako, vezje mi sedaj deluje. Še vedno pa mi ni jasno, zakaj mi na protoboardu ni delal program pravilno, dokljer sem imel več bsf oz bcf -jev v podporgramih. Bom poskušal še enkrat, da ni bilo tudi tam kakšnih drugih vplivov.
Nazadnje urejal/a egomez Pet Maj 19, 2006 7:40 pm; skupaj popravljeno 2 krat |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pet Maj 19, 2006 7:33 pm Naslov sporočila: |
|
|
Mislim, da bi program moral delovati tudi v "razsirjeni" obliki, za tezave je pa ocitno res bilo krivo resetiranje. Zaradi nacina delovanja (C)MOS vezij se vecina motenj (in konic porabe) pojavi ob preklopu; ce se napetost pretirano sesede, je reset (ali latchup) cisto verjeten pojav, njegove posledice pa bi bile tocno take, kot si opisal (noben del programa ne resetira stanja pina, ce ni prisoten ustrezen stimulus).
Pregrevanje je zanimiva rec - specifikacije ponavadi omenjajo 85 (ali 125) stopinj junction temperature (clovek v vecini primerov ne more drzati pri ~60 stopinjah C, ker je prevroce in povzroci opeklino), nikoli pa ne bos vedel ali je kaksen del cipa unicen ali ne ce si ga "segrel" do mejne temperature ali cez, zato mu ne bos vec mogel zaupati (vsaj ne cesa pomembnejsega od utripajoce LEDice). Nekoliko ironicno je, da si mu s tem, da si se opekel, tudi nekoliko pomagal (odvesti toploto namrec) in morda tako preprecil popolno unicenje
Sicer se pa najlepse opeces na elementih, ki dobro odvajajo toploto, kjer sele nekoliko kasneje opazis, da je nemarno vroc, takrat pa je vroc cel element in ne le del na sredini - npr. napetostni regulatorji ...  |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.07 Kraj: Divača (Kačiče)
|
Objavljeno: Sob Maj 20, 2006 12:18 am Naslov sporočila: |
|
|
NE555 je čip, ki resnično mnogokrat povzroča težave. Včasih tudi nerešljive. Odkar sem se enkrat opekel z njim, ga gledam zelo z rezervo. Dokler se gre za logiko na 5 ali 3,3V se njegove motnje da zatreti z blokirnimi kondenzatorji. Problem nastane če imamo NE555 na istem vezju, kot recimo sprejemnik z 0.3 uV občutljivosti.
Pri NE555 torej POZOR ! _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pon Maj 22, 2006 3:03 pm Naslov sporočila: |
|
|
Meni je večkrat uspelo okoli obrniti pic16f84 narobe. Vedno je zasmrdelo, občasno je opeklo prst, pa je vedno preživel (chip). Zasluga gre regulatorju napetosti (7805), ki omeji tok. 10 A izvor napetosti je nalašč narobe priključen chip uničil.
Blokada motenj (če je ni) je izvor motenj. Blokada (kondenzator 100 nF) mora biti prilotana povsem zraven napajalnih pinov PICa. Pa še ustrezen elko pri napajalniku, pa še kondenzator 100 nF pri napajalniku, pa še kondenzator 100 nF pri monostabilu ali astabilu (555).
BSF/BCF problem je mogoče tisto, kar datasheetu imenuje read/modify/write problem:
"Reading the PORT register reads the status of the pins, whereas writing to it will write to the port latch. All write operations are read-modify-write operations. Therefore, a write to a port implies that the port pins are read, the value is modified and then written to the port data latch." Ta zadeva povzroči, da program ne deluje tako, kot bi moral. Zgleda pa tako, kot da je defekten chip.
Lahko pa gre za napako v programu...
Jur |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Sob Jan 27, 2007 9:47 pm Naslov sporočila: zacetnik |
|
|
a mi lahko kdo pove kaj pomeni ta napaka!
Error[152] C:\PROJECTS\PIC\TEST\TEST.ASM 6 : Executable code and data must be defined in an appropriate section
hvala |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pon Jan 29, 2007 10:32 am Naslov sporočila: |
|
|
Premalo podatkov za diagnozo. Lepo bi bilo, če bi bil priložen program. Razlaga teksta diagnoze je v helpu od assemblerja. Za odpravljanje napake pa je potrebno napako videti.
Uporabi google: "Executable code and data must be defined in an appropriate section" (poudarek je na narekovajih)
Jur |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|