problem ne iskace mi iz petlje - ne radi delay

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

problem ne iskace mi iz petlje - ne radi delay

Post by zelja »

Pozdrav svima,

evo mene opet. Svaki dan naucim nesto novo oko Asemblera i PIC-a.

Sad radim automatizaciju nekih gluposti po kuci. Princip je jednostavan. Kod paljenja odredjenih ulaza pale se odredjeni izlazi. I to mi sve ok radi. Ali trebale si mi vremenske pauze. I kad sam to dodao PIC udje u petlju i ne vraca se.

Probao sam nekoliko rutina ali nijedna ne iskace. PIC je 16F628. Ulazi na RA a izlazi na RB.

Evo saljem kod pa ako neko ima vremena da pogleda.

LIST p=16F628 ;tell assembler what chip we are using
include "P16F628.inc" ;include the defaults for the chip
ERRORLEVEL 0, -302 ;suppress bank selection messages
__CONFIG _BODEN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_OFF & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
cblock 0x0C
TEMP1
TEMP2
count1
counta
countb
decrA
decrB
endc

bsf STATUS, RP0
movlw B'11111111'
movwf TRISA
movlw B'00000000'
movwf TRISB
bcf STATUS, RP0

movlw 0x07
movwf CMCON

CLRF PORTA
CLRF PORTB

MAIN CLRWDT

;L1 - prvi korak
L1 BTFSS PORTA, 0x07 ; Prskace narednu naredbu ako je PORTA.7=1
GOTO L1
BSF PORTB, 0x07 ; Pali Q1
BSF PORTB, 0x06 ; Pali Q2

CALL delay130
CALL Del250 ; Pauza 250mS

BSF PORTB, 0x05 ; Pali Q3
BSF PORTB, 0x04 ; Pali Q4

; L2 - drugi korak
L2 BTFSS PORTA, 0x06 ; Prskace narednu naredbu ako je PORTA.6=1
GOTO L2
BSF PORTB, 0x03 ; Pali Q6

CALL Del250 ; Pauza 250mS

BCF PORTB, 0x05 ; Gasi Q3
BCF PORTB, 0x06 ; Gasi Q2

; L3 - treci korak
L3 BTFSS PORTA, 0x05 ; Preskace narednu naredbu ako je PORTA.5=1
GOTO L3
BSF PORTB, 0x01 ; Pali Q8

BSF PORTB, 0x05 ; Pali Q3

;L4 - cetvrti korak
L4 BTFSS PORTA, 0x04 ; Prskace narednu naredbu ako je PORTA.4=1
GOTO L4
BCF PORTB, 0x05 ; Gasi Q3

BCF PORTB, 0x01 ; Gasi Q8

;L5 - peti korak
L5 BTFSS PORTA, 0x05 ; Prskace narednu naredbu ako je PORTA.5=1
GOTO L5
BSF PORTB, 0x02 ; Pali Q7

BSF PORTB, 0x05 ; Pali Q3

;L6 - sesti korak
L6 BTFSS PORTA, 0x03 ; Prskace narednu naredbu ako je PORTA.3=1
GOTO L6
BCF PORTB, 0x03 ; Gasi Q6
BCF PORTB, 0x04 ; Gasi Q4

BCF PORTB, 0x05 ; Gasi Q3
BCF PORTB, 0x07 ; Gasi Q1
BCF PORTB, 0x02 ; Pali Q7

GOTO MAIN

;****************************************************************
;Delay sub-routine - approx 130mS
;****************************************************************
delay130 movlw 0x80 ;load 80h into w
movwf decrA ;shift 80h into the file for decrementing
delx nop
decfsz decrB,1 ;decrement the file
goto delx
decfsz decrA,1 ;decrement the file
goto delx
retlw 0x00 ;return



Del0 retlw 0x00 ;delay 0mS - return immediately
Del1 movlw d'1' ;delay 1mS
goto Delay
Del5 movlw d'5' ;delay 5mS
goto Delay
Del10 movlw d'10' ;delay 10mS
goto Delay
Del20 movlw d'20' ;delay 20mS
goto Delay
Del50 movlw d'50' ;delay 50mS
goto Delay
Del100 movlw d'100' ;delay 100mS
goto Delay
Del250 movlw d'250' ;delay 250 ms
Delay movwf count1
d1 movlw 0xC7 ;delay 1mS
movwf counta
movlw 0x01
movwf countb
Delay_0
decfsz counta, f
goto $+2
decfsz countb, f
goto Delay_0

decfsz count1 ,f
goto d1
; retlw 0x00
Return

END
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

e svasta cudno mi se dogadja. Pokrenem u simulatoru i sve radi da valja.
Stavim na sklop sa relejima. I cudno mi radi. Prvo nece nista da radi dok ne postavim sve ulaze na 1. Pa onda tek kad oborim na 0 pocne raditi. Pa mi uopce ne prati rutinu.

To mi je najcudnije. Kako moze uopce iskociti iz onog slijeda? Jer kad puknem ulaze npr 4 ili 5 on pali puno releja. I koje treba i koje ne.

Da nije mozda do interupta? To nisam iskljucio. Ili nesto sam zajebao u postavkama tako da mi ne radi da valja. Napominjem kako u simulatoru radi da valja. Osim delaya.
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

a mozda je problem sto koristim kao ulaz i RA5 koji je MCLR, ali sam iskjlucio u konfiguraciji koristenje MCLR-a.

Ne znam vise sta bi moglo biti ali znam da je neka glupost...
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

@zelja nemoj koristiti RA5 i obavezno ovo cblock 0x0C promjeni u ovo cblock 0x20 posto je pocetni korisnicki registar kod 16F628 20h. I ostatak koda malo proanaliziraj sam :)

POZDRAV
buco

Post by buco »

goto $+2 ; definiraj ga nazivom pa si siguran ovko vidim da ide na
goto delay_0 ! sta su ti oni retlw 0x00 ali to ne ide tako !!!!!!!
kad imas return !
kad koristis formu : BSF PORTB , 7 ne treba 0x07 !!
nebi bilo lose da program zapocinjes naredbom .org xxxx
da se zna odakle startas !! tocno i da preskocis dio gdije su prekidni vektori [ ako ih MCU ima ] tj definiras naredbama reti [ ili kaoja je vec forma za PIC ].

Vidim da si koristio 01C7 kao bazu za brojanje za 1 miliS . Ali to ti se tako ne radi , pogledaj si petlju, to ti se najbolje odradi xoriranjem ili inverzijom lobytea i brojanje tad vrsis navise !!!! Probaj tako vidit ces da je lakse !! i drugo u 01 C7== FF + 1 + C7 !! kod tebe to ispada samo C7 .
Ako i treba bit 0xC7 sto ce ti onda 2 byta !?? Assembler programer taku "glupost" nikad nebi napravio !!!!!!! :D

Ja mislim da se ti nazalost i dalje sluzis VBom ili C++ i sl alatima jer ti asm kod nije "normalan" tj nijedan programer u asemleru tako sto nebi nikad napisao !!!!! Ja ti to govorim prijateljski , ne moras se ti "bakcat" s asemblerom ako to nezelis ali ovo nije pisano u assembleru , nazalost
to ce ti rec ja se nadam i drugi decki kad vide "izvorni kod" koji si poslao !!!
To je nesto generirano nekim od alata ............ :( ; cak i po komentarima se da vidit !!!!!! Drugi put ih pobrisi !!!!
zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Post by zer0 »

Ovaj deo "delay 130mS" je verovatno copy/paste. Odatle nelogičnost.
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

@Buco - ma nemoj me obeshrabrivati. Ovo je prvi projekt koji radim samo u assembleru. Dosad sam radio paralelno sa Basicom. I stvarno se trudim da ga naucim. Za bazu sam koristio kod sto mi je prosli projekt slao Sinner. I onda je ostao dio njegovih komentara. A procedure za Delay sam kopirao iz tutoriala. I pokusavao ih prilagoditi. Zbog toga i imam onaj retlw koji sam komentirao pa dodavao Return

E stvarno ste silna ekipa. Idem sad ovo primijeniti pa javim rezultate.

Pozdrav
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

e stvarno vise ne znam.

Poludio skroz.

I dalje mi zajebava. Prvo radi nesto kad iz 1 prelazi u 0. I onda stavim BTFSC i onda mi radi kad ide iz 0 u 1???? Nelogicno ali tako je.

Pa onda mi nece pratiti proceduru. Radi skoro i dobro ali ako palim ulaze i ostavim ih upaljene. Cim ugasim npr RA7 onda mi ulaz na RA6 sve izlaze pogasi. A ako ostavim RA7 upaljen onda mi OK.

Poludio i uradio program u Basicu (iako sam bio sebi obecao da necu) i on jos gori. Sklop provjerio 10 puta. Ali je jednostava. Ulazi. Sa otpornicima. Izlazi na ULN. I nema nista vise.

:? :x :cry: :twisted:
buco

Post by buco »

@zelja ovako , ja neznam kakve si podloge koristio al je ocito da to nije asm rutina , program, odsijecak , nazavi rako hoces... pisana u assembleru 100% !!!!!
Meni je zao sto me nisi poslusao kad sam ti odmah na pocetku dao dobar savijet kako se uci assemblersko programiranja , cak sam napiso podosta texta , da bi bio uvijerljiviji .
Iz ovoga sto si poslao opet cu ti ponovit to nema nikakve veze s programom pisanim u assembleru , to je odradjeno alatom koji diasemblira kod generiran crosscompilerom , to ce potvrdit onaj koji ti je to poslao , ja se nadam !!! :?

Ako zelis ucit radit program u assembleru , zaboravi sve sto znas iz HPLa
ta pravila uopce ne vrijede , a uzet diasemblirani kod s crosskompilera kao podlogu :D zaboravi .

Pocni iz pocetka , neces zurbom nista uradit !!!!!!! Ako ti se zuri za nesto onda se ostavi ucenja , vec sam ti rekao to zahtijeva potpuno drugaciji nacin razmisljanja od onog koji ti poznas , i to nije pusta fraza.

Problem imas i zelis ga rijesit , za pocetak procitaj dokumentaciju o programiranju PICa u assembleru , zatim otvori dokument MCUa kojeg zelis koristit , prouci , i kreni na pistanje inicijalinh postavki sustava , definiranje varijabli , imenovanje registara [ nije nuzno] ali je korisno , naravno razlozi si problem strukturno prema mogucnostima chipa ...
Za pocetak dovoljno , i pomalo pocni pisat kod i definicije u assembleru !!
Pa se nece dogodit da neznas sto si napisao , to se ne dogadja assembler programerima , oni imaju drugu vrst problema !

BTFSC testira bit registara X i preskace slijedecu naredbu ako je testirani bit 0.
Samo externi prekide mislim da mozes definirat da reagiraju na promijenu
s 0 na1 ili obrnuto ali to se odredjuje configuracionim byteom ili postavkama statusnih registara [ malo sam off kad su PIC serije u pitanju no to ionako pise u dokumentu , pa ga procitaj ] !!
Ako ga ispravno odredis provijeri dal je pravilno isprogramiran !!

Ti si i prosli put imao problem s konfiguracionim byteom !? U svakom slucaju MORAS prvo procitat temejnu dokumentaciju a zatim pod obavezno dokumentaciju MCU koji koristis ako mislis bilo sta pocet radit u assembleru za dati MCU !!!!!

Tu brzina nije vrlina , uostalom ja neznam ni jedno C programera da je u par dana nesto naucija pametno !? ti ?
zer0
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 250
Joined: 05-08-2005, 21:10

Post by zer0 »

Nisi okačio šemu kako si spojio kontroler. Kod AVR serije ako na ulaz šalješ plus, obavezno moraš imati jedan otpornik vezan između ulaznog pina i mase (2k2-10k).
buco

Post by buco »

Ako meni govoris , ne naravno da ne moras posto vecina MCUa ima bit PUD [ pull up resistor define ] pa kao sto vidis isklucis pull up otpornik da ti ne smeta i ne treba ti nista prema masi , to je naravno vezano za ostale pinove u upotrebi pa procijenis sto ti vise treba !!!!
Dobar dio svih atmelovih dokumentacija je vezan na "nauk" o portovima
sto i kako i zasto !!
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

Ma glup sam. Radio sam testiranja na sklopu koji sam kao trebao ugraditi. Ali nisam dobro jedan otpornik vezao i PIC je blesavio. Sad sam napravio sklop za testiranje. Shema sa stranica winpicprog-a i to mi je puno pomoglo. Barem mogu utvrditi je li rijec do sklopa ili do programa.

@Buco - znam da brzam. I znam da trebam puno uciti i ispocetka. Ali previse sam nestrpljiv. Ali evo zbog ovog problema sam vidio da se brzina ne isplati. Problem je sto sam se navikao na copy-paste nacin rada. A mislim da nece ici tako :-(
buco

Post by buco »

"..Ali nisam dobro jedan otpornik vezao i PIC je blesavio.."

Netreba tebi @zelja nikakv HW tester ili kako ga vec nazivas upravo iz onog razloga kojeg ti rekoh da programer u assembleru tocno zna kako ce mu se racunalo ponasat jer je to dio "folklora" pri "pokusaju" izrade koda koji ce i radit !! I drugo, racunalo je sposbono izvrsit auto test ako ti tako zelis i podrzis ga rutinama za to.
Rukovanje greskom je inace jedan od navaznijih segmenata programiranja , cak i u HPLu , pa tako i u assembleru , i uvijek je dobro
predvidjet moguce "zastoje" i odgovarajucim testom sprijecit da racunalo ostane u beskonacnim petljama , nemoze definirat port i slicno !

Copy / paste radim i ja ali najcesce su to rutine koje sam pisao kao opce za neki komad HW koji cu koristit i kasnije , npr upravljanje SPI mem , I2C, UARTom , LCDom , neke inicijalne rutine , bootloaderi , algoritmi za dekripciju i enkripciju ... itd.
Ali kad pocinjes ucit izbijegavaj to , da ti se usijece u nacin razmisljanja
taj specifini programerski mod !! :D
Steta sto neces radit s Atmelima , no svejedno ti i za PICeve mogu pomoc prenijet neka iskustva . To je najlakse uradit ako pokrenes jedan projekt , definiras ga [ sto ce on radit ] i pocenes od predefinicija pa nanize . Vidjet ces da je zanimljivo i nije to tako strasno , u pocetku tako izgleda , ali ces zato vidjet koje su sve prednosti takvog nacina izrade izvornog koda !
Ja ti zelim uspijeh , a ti pitaj ima nas tu pa cemo ti pomoc jer su i nama drugi pomagali !! :D
Jednostavno pokusaj malo zaboravit HPLe i kreni u avanturu zvanu assemblersko programiranje. :lol:
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

@buco ja sam @zelji poslao jedan programom pisanim u assembleru, i vidim da je on ovdje koristio dijelove tog koda, pa me zanimam na koji se dio koda odnosi ovaj tvoj komentar:
Iz ovoga sto si poslao opet cu ti ponovit to nema nikakve veze s programom pisanim u assembleru , to je odradjeno alatom koji diasemblira kod generiran crosscompilerom , to ce potvrdit onaj koji ti je to poslao , ja se nadam !!!

Mada se vidi da je @zelja koristio fazon copy-paste iz vise razlicitih kodova i da je zaboravio kopirati neke stvari :!:

POZDRAV
buco

Post by buco »

To si ti pisao u assebleru ili si negdje nasao pa malo uredio! dio koda !? Pogledaj ukupno kod tamo se tobro vidi kako ide tijek programa , kako su definirane naredbe , i naravno neobicni komentari , tu vrst komentara ispisuju alati za HPLe kad s njih prebacujes u assemblerski ispis drugacije nije .
Koji bi assembler programmer ono napisao !?
i drugo koji assembler programmer bi isao onako "cudno" rijesavat kasnjenje na 1 miliS da koristi 2 registra a treba mu zapravo jedan !??
itd.... da ne pricamo o vektorskim postavkama prekida i sl .

Sad tko je sto kopirao , moze i to vidit , sto je pisano u assembleru [ koji dijelovi ] a koji reverzibilno diasembliranjem izvrsnog koda pisanog u HPLu !!!!! Al to nije potrebno posto je dobar dio koji je postavljen na stranicu diasemblirani kod s crosscompilera , taj model koriste "alati" sa HPL crosscompilera jer je tako samo i moguce dobit assemblersku listu naredbi tako radjenog programa.

Ja mogu komentirat sto je objavljeno , a posto je rekao da je to dobio ja sam mu i rekao nek to pojasni onaj koji je to poslao , ja nisam "prorok" pa cu sad pogodit sto je kome tko poslao !? razumijes ?
Ja sam komentirao ono sto je covijek postavio na stranicu , onaj "assembler" program .
Mislim da mu je najboje da poslusa savijet i krene putem koji ce dovest do pravog assembler programera , tu nema "shortcut"eva !!!!
Pa mu i ti pomozi da to shvati , slanje gotovih kodova covijeku koji uci
je "medvijedja" usluga , kao sto se da vidit , samo se zbuni i razocara !!
Pusti ga nek sam radi ti budi samo korektivni "faktor" koji ce ga uputit na greske i nacine postavljanja problema u assembleru koji nije isti kao u HPLu !!!
Tako sam ja pomagao drugima dok su ucili radit u assembleru , a i drugi meni !! Pa mi se neki put cinilo da meni oni zapravo nis nece rec , ali kasnije shvatis koliko su ljudi [ ucitelji ] bili u pravu sto to jisu cinili , mislim na davnje gotovih rutina , sekvenci , postavki sutava i sl.
I ja sam in zahvalan na tome , jer su stavili tezu na nacin razmisljanja i postavljanja problema vezanim na internu strukturu MCUa , processora koji zelim koristit , zato i je assembler "nepopularan" jer mu je "balast"
to sto moras znat sve o cipu s kojim radis dok kod HPL alata dio tih znaja ti netreba bas jer se ti programeri oslanjaju na rijesenja koje je netko drugi za njih napisao u formi crosscompilera sto cesto daje neobicna rijesenja i povelik utrosak prog memorije , a time su ujedno i rijesenja
"glomazna" i presporo se odvijaju , da ne govorimo o postavljanju komunikacije [ bolna tocka tih alata ] i nedaj boze real time operacijama s kriticnim vremenom [ tu se uvijek misli u odnosu na max brzinu rada MCUa ] .. Ima jos puno toga , i lako je to dokumentirat !
Tko zeli da se pozabavi tim "fenomenom" za pocetak nek disassemblira program pisan za Fun karticu za via2 za humaxa/nokiju , izvrsi analizu i malo kaze sto misli sto to tamo nije OK !? strukturno a i operativno i zasto. Program je pisan u C++ i s AVRGCC-om kompiliran za dati MCU [ AT90s8515] .Tamo se lijepo vidi kako to radi crosscompiler u praksi , iako su morale bit komunikacione rutine zamijenjene s emuliranima iz assemblera , to je odmah vidljivo jer funkcionalo nebi radilo !!!!
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

Pogledao sam cijeli kod i vidio sam da mog koda ima samo mali dio, veci dio koda @zelja je pokupio negdje drugo. I sam je rekao da voli fazon copy-paste, mada mu je moj savjet da kad to radi dobro prouci svaku naredbu i svaki fazan. I da proba sto vise optimizirati (skratiti) kod i prilagoditi ga sebi.

@Buco u pravu si kad si rekao da bi trebao prouciti taj MCU, posto sam skontao da on pokusava koristiti kodove pisane za PIC16(F-C)84, tako da pravi neke katastrofalne greske. I mora zaboraviti ono sto ga uce u skoli, a to je da nema koristenja GOTO naredbe, posto je ona po meni u assembleru vrlo bitna.

POZDRAV
buco

Post by buco »

@sinner da tocno ! Trebli bi mu pomoc , ako bude htio , da se prvo pokusa ufurat u nacin razmisljanja postavke problema blizak assembleru a ne HPLu ! I naravno ono sto je navedeno na pocetku , da prouci sam assembler za PIC njegova pravila i da se prije pocetka pisanja ikakve naredbe upozna s MCUom koji koristi . Bez toga ce mu bit tesko ucit a onima koji mu zele pomoc jos i teze shvatit sto zapravo to treba bit i za sto je to namijenjeno da bi mu pomogli valjano a ne parcijalno.
GOTO , pa naravno bezuvijetna i uvijetna granaja su jako bitna .
Bilo bi zanimljivo znat kolikon je upucen opcenito u rad racunala na razini interne arhitekture , da se razumiju razlike nacina upotrebe pojedinih registara , definicija registara za konfiguraciju samog MCUa .
HW implementi komunikacija ili nekih drugih funkcija , njihova emulacija SW i u cemu je razlika , pojam stoga , dubine stoga , upotreba srama ...
Post Reply