www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ne najdem napake v enostavnem programu za pic16f627
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
egomez
Član
Član



Pridružen-a: Sob 03 Apr 2004 18:49
Prispevkov: 517
Aktiv.: 2.18
Kraj: Ljubljana/Sežana

PrispevekObjavljeno: Čet Maj 18, 2006 6:26 pm    Naslov sporočila:  ne najdem napake v enostavnem programu za pic16f627 Odgovori s citatom

Č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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Čet Maj 18, 2006 6:30 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
egomez
Član
Član



Pridružen-a: Sob 03 Apr 2004 18:49
Prispevkov: 517
Aktiv.: 2.18
Kraj: Ljubljana/Sežana

PrispevekObjavljeno: Čet Maj 18, 2006 6:33 pm    Naslov sporočila:   Odgovori s citatom

Hvala Sokrat. Tega sploh nisem opazil Rolling Eyes
Bom takoj popravil, pa poročam, če so težave odpravljene.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
egomez
Član
Član



Pridružen-a: Sob 03 Apr 2004 18:49
Prispevkov: 517
Aktiv.: 2.18
Kraj: Ljubljana/Sežana

PrispevekObjavljeno: Čet Maj 18, 2006 6:46 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Čet Maj 18, 2006 6:55 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
egomez
Član
Član



Pridružen-a: Sob 03 Apr 2004 18:49
Prispevkov: 517
Aktiv.: 2.18
Kraj: Ljubljana/Sežana

PrispevekObjavljeno: Čet Maj 18, 2006 7:09 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 17.03
Kraj: Črnuče

PrispevekObjavljeno: Pet Maj 19, 2006 7:12 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pet Maj 19, 2006 7:32 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Pet Maj 19, 2006 9:49 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
egomez
Član
Član



Pridružen-a: Sob 03 Apr 2004 18:49
Prispevkov: 517
Aktiv.: 2.18
Kraj: Ljubljana/Sežana

PrispevekObjavljeno: Pet Maj 19, 2006 7:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Pet Maj 19, 2006 7:33 pm    Naslov sporočila:   Odgovori s citatom

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 Cool

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 ... Laughing
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 60.07
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Sob Maj 20, 2006 12:18 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pon Maj 22, 2006 3:03 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
kavelj22
Član
Član



Pridružen-a: Tor 23 Jan 2007 23:56
Prispevkov: 465
Aktiv.: 2.08
Kraj: Ljubljana

PrispevekObjavljeno: Sob Jan 27, 2007 9:47 pm    Naslov sporočila:  zacetnik Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pon Jan 29, 2007 10:32 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
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