brojanje ulaza - Asembler i 16f628

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

brojanje ulaza - Asembler i 16f628

Post by zelja »

Pozdrav svima,
poceo uciti assembler, i napredovao sam, ali i dalje imam pocetnickih problema

Pravim program koji ce citati broj ulaza (pritiska na dugme) na RB0 i prikazivati izlaze na RB7,6,5 i 4

Htio sam kad se npr 100 puta pritisne da se upali RB7, pa nakon 500 RB6, 1000 RB5, 2000 RB4 i nakon 3000 da se sve ugase i ponovo.

E sada, nasao sam prog, ali pisan za 16c84, a u mene 16f628, kazem ja sebi, nema problema, prebacit cu ga ja, ali :-(



LIST p=16f628
#include c:\mplab\p16f628.inc
__CONFIG 11H

CONSTANT BASE_VAR=0CH ; pocetna adresa registara opce namjene

COUNTER EQU BASE_VAR+0 ;zasto +0???

ORG 000H

GOTO MAIN

ORG 004H

GOTO INT_SERV

MAIN:
BCF STATUS, RP1 ;
BSF STATUS, RP0 ; bank 1
MOVLW 1
MOVWF TRISB ;ovdje mi javlja gresku da to nije u bank 0??? a prebacih ga u bank1, jos sam i dodao ovaj RP1=0 da budem siguran
BCF STATUS, RP0 ; back to bank 0

CLRF COUNTER ; zero the counter
BCF PORTB, 4 ; zero the LEDs
BCF PORTB, 5
BCF PORTB, 6
BCF PORTB, 7

BSF STATUS, RP0 ; bank 1
BSF OPTION_REG, INTEDG ; interrupt on positive, i ovdje javlja gresku da u bank 0 nema takvog
BCF STATUS, RP0 ; back to bank 0
BCF INTCON, INTF ; clear interrupt flag
BSF INTCON, INTE ; mask for external interrupts
BSF INTCON, GIE ; enable interrupts

PT1: SLEEP
GOTO PT1

INT_SERV:
INCF COUNTER, F ; inkrementira counter, zasto je F ovdje? kakva razlika da nije samo 1

BTFSS COUNTER, 0 ; e ovdje bi mi trebala procedura za brojanje 100, 500, 1000, 2000, 3000... ali nisam siguran kako
BCF PORTB, 4
BTFSC COUNTER, 0
BSF PORTB, 4
BTFSS COUNTER, 1
BCF PORTB, 5
BTFSC COUNTER, 1
BSF PORTB, 5
BTFSS COUNTER, 2
BCF PORTB, 6
BTFSC COUNTER, 2
BSF PORTB, 6
BTFSS COUNTER, 3
BCF PORTB, 7
BTFSC COUNTER, 3
BSF PORTB, 7

BCF INTCON, INTF ; clear the appropriate flag
RETFIE ; this also set global interrupt enable

END


E ako neko ima vremena ovo malo pogledati. Trax, Buco, Sinner i ostali strucnjaci pa da me malo uputi. U komentarima su problemi...
buco

Post by buco »

Sta ti je to !! to sigurno nije pisano u assebleru !! jer ima odmah na pocetku nelogicnih stvari !!
Otvori si ti lijepo projekt u MPLABu , kazi ti njmu koji MCU zelis koristit
i pocni pisat program !
Prvo definiras assembleru koji MCU . zatim mozes [ opvdije i nemoras]
uvodit nazive sa portove .
Definiras koji su pinovi ulazni koji izlazni , ako oces sleep mode moras u konfiguraciji objasnit MCUu koji mod zelis a to ti pise sve u dokumentaciji
MCua kojeg koristis.
Moras definirat neke osnovne pocetne uvijete .
Najcesce i najbolje bi bilo da se odmat tome pocnes ucit je to da sve preduvijete rada i definicije postavis u tkzv. inicijalizcionu rutinu
mozes lako koristit nazin INI !! Tu definiras sve pocetne uvijete MCUa tj registre , smijerove pinova , definicije vektorskih prekida[ to kao naznaka] , sekundarne ili tercijane funkcije pinova i slicno.
Ja bar tako radim.

INCF COUNTER, F ; inkrementira counter, zasto je F ovdje? kakva razlika da nije samo 1
// to je naredba za uvecaj za 1 i pohrani u registar da je w bilo bi acc
assmbler za PIC registre naziva fileovima !!! zato je to F da naznaci gdije ide rezultat uvecanja za jedan !!

BTFSS COUNTER, 0 ; e ovdje bi mi trebala procedura za brojanje 100, 500, 1000, 2000, 3000... ali nisam siguran kako
ovdije testira bit 0 reg imenovanog sa counter !

to ti je najlakse ovako :
movlw 0x64 ; 64==100 isto je i sa testom bita 5
xorwf counter, w ; usporedjujes brojac sa 100 i rezultat stavljas u accc w
btfsc status,z ; testira dal je rezultat 0
bsf PORTB, 7 ' pali ledicu na PB7

nacin na test bita 5 :
btfsc counter, 5 ; to je 64H==100d
bsf PORTB, 7 ; pali ledicu na PB7
.
.
.
Onaj gornji je vezan na bilo koji broj do 256 [255] tj FF

Kuzis princip ?

Nije mi jasno sto ce ti sleep naredba !? dobro je za trening !
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

Mislim da ce ovdje trebati malo vise objasnjenja :)
Koliko sam ja skontao ovaj program sto si ti stavio je 4bitni(0-15) brojac, tako da tu nema nista od tvog brojanja do 3000, jedino mozes iskoristiti interrupt. Za svoj problem moras koristiti vise od jednog 8bitnog registra koji broji samo do 255, tacnije moras koristiti dva. Ako zelis mogao bi ti pomoci oko pisanja programa. Jos nesto config kod 628 je __Config 3F18h mada nisam 100% siguran :? , zavisi sta ti sve treba. BASE_VAR bi ti trebao biti 20H posto je to pocetna adresa za tvoje registre u 628. Ovo sto si napisao:
MOVWF TRISB ;ovdje mi javlja gresku da to nije u bank 0??? a prebacih ga u bank1, jos sam i dodao ovaj RP1=0 da budem siguran
BCF STATUS, RP0 ; back to bank 0
Jesi li siguran da ti javlja gresku ili samo upozorenje? Ako je upozorenje onda samo poslije config napisi ''ERRORLEVEL 0, -302'' (u liniji ispod) naravno bez navodnika i to je to :)

POZDRAV
Last edited by [SINNER] on 06-04-2006, 09:39, edited 1 time in total.
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

E dok sam ja smisljao sta odgovoriti i @buco odgovori :)

@zelja pogledaj:
http://www.talkingelectronics.com/Proje ... 28-P1.html
Mozda ti sta pomogne :wink:
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

@zelja evo napisao sam ti program, ali je za PIC16F84 sve sam koristio kako si ti mislio. Pin za brojanje ti je RB0 a pinovi za LED su RB4, RB5, RB6, RB7.

POZDRAV

http://www.elektronika.ba/forum/uploadz ... 1_TEST.rar
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

Ej sad sam vidio da sam napravio malu gresku! :? Kad ti prodje 100 primjeraka upalit ce se LED na RB4, na RB5 nakon 500, i tako dalje. Znaci suprotno od ovog kako si ti naveo. Pa prepravi to ili cu ja :)

P.S. @zelja ako si iz BiH gdje si kupio PIC16F628, ja ga ne mogu naci?!
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

[SINNER] wrote:Ej sad sam vidio da sam napravio malu gresku! :? Kad ti prodje 100 primjeraka upalit ce se LED na RB4, na RB5 nakon 500, i tako dalje. Znaci suprotno od ovog kako si ti naveo. Pa prepravi to ili cu ja :)

P.S. @zelja ako si iz BiH gdje si kupio PIC16F628, ja ga ne mogu naci?!
Jesam iz BiH.

Hvala puno. Testirati cu tvoj program. Ne moras se muciti sa prepravljanjem. Nije to strogo zadani program. Nego se ucim. Pa si zadajem neke zadatke.

628 je bilo u Orbiteru u Grudama. Ali trenutno nemaju. Rekao sam da naruce :) Isto tako ih ima u Banja Luci. U elektronika.rs.ba. Narucivao sam postom od njih i stiglo za 3 dana. Cijena je oko 8 maraka. Ali nakon 2-3 programiranja 2 pica su mi otkazala poslusnost??? Nece se vise programirati??? E sad ne znam je li to zbog lose kvalitete ili ja grijesim u necemu. Uglavnom jedan te isti program. U jedan normala a u drugi nikako. Stalno javlja gresku kod verifikacije. Probao ih brisati pa ponovo ali nista.
buco

Post by buco »

@Sinner Posto je na prijatelj @Zelja odlucio uciti programiranje u assembleru mislim da nije bas jako "korisno" za njegovo ucenje pisati mu cijele programe ili rutine jer se iz toga nece naucit jako puno vijeruj mi !!
Najbolje ga pusti da se sam "kuha" [ ko grah u loncu ] :D i kad mu zatreba pomoc , kad bas stane onda mu objasnit di je zapeo i kako se iz toga izvuc ! Ako si se vec odlucio na takav gest [ izrade programa kako god "mali" on bio] onda mu napisi program za MCU koji je trazio , jer ionako nemoras imat taj IC da bi za njega napisao program ! :lol:

Sto se onih piceva tice ja mislim da i oni kao i atmeli u configuracionom byteu imaju mode za iskljucivanje ISP [ srijskog] programiranja , ako nemaju [ ja vec dugo dugo nisam s njima radio ] tad vidi ovo
2 mozda si u polje ID coda upisao neke druge podatke [ to s einace da rijesit ] vidi sto ti programator javi koji ID imas !!
3 mozda ti je jednostavno zakljucan pobrisi ga algoritmom za otkljucavanje i brisanje .
Neki put nazalost radi nepaznja u rukovanju znaju stradat [ los spoj mase ] npr...
@Zelja budi uporan i isplatit ce ti se upornost , vidjet ces , jer su to mali
MCU tj imaju male programske memorije i ostale "pratece " sadrzaje pa je upotreba crosscompilera neprimjerene kad su te vrste controlera u "igri" !!
Ako zelis iole sta ozbiljnije radit s MCUima od 2--64K prg mem
bez poznavanja assemblera ce ti to ic tesko.
Razlog je banalan , racunalo na veliku zalost ljubitelja HPLa, je masina koja razumije samo 0 i 1 [ moze i u formi hex coda bit uneseno kao byte , word ,dword ...] a assembler je prakticki ostao jedini jezik koji radi na taj nacin , sibolicki "kod" text , direktno prevodi u izvrsni ! HPLi
nazalost ovise o kvaliteti crosscompilera koji je veoma cesto "krs" !!!! cak i za pare ! a da ne govorimo da neki novi HW natrzistu kad dodje nema u
"library"-ima , pa se mora cekat da to netko napise i jos platit , ako je public onda cekat..cekat... itd....!
Pa ako ti bude trebala pomoc javi se na ovaj board , a nebi bilo lose da krenes s nekim "zanimljivijim" zivotnim projektom koji ukljucuje rad s dodanim funkcijama , komunikacijama , emulacijama ...itd. !
Assembler je mozda najzimimljiviji vec kod nacina predstavljanja problema racunalu , definiciji i nacinu upotrebe registara , indexnih regisrara , srama .., podjeli na rutine !!
Moj savijet ti je uzmi si jedan slozeniji projekt od ovog "brojanja" !!!!!!
Da odmah na pocetku pocnes shvatat poantu programiranja u assembleru i zasto je on No 1 programski "jezik" u odnosu na sve ostalo cim se ljudi dice !
A tu smo mi da ti pomognemo , da u tome uspijes.
Steta sto se nisi odlucio za upotrebu puno kvalitetnijih modernih 8 bitnih MCUa kao mega seria Atmela , jer ima nekih stvari koje neces moc naucit s accumulatorski orijentiranim processorom [ kao pIC16 serija] koji odavno napusten kod modernih risc masina !
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

@Buco cilj mi je bio pomoci, a sad kad @Zelja ima jedan primjer lako mu je mijenjati ga i prilagodjavati ga sebi i na njemu uciti. Ja bih volio da sam imao primjera kad sam krenuo sa MCU-ima, a ne sam sve kopati i smisljati (plus dosadjivati @Trax-u, hvala mu za svu pomoc). :lol: Sto se tice PIC16F628 njega nemam pa nisam pisao program za njega, zato sto sam mislio testirati da li radi. Na kraju sam koristio simulator, tako da sam zaboravio @Zelji prilagoditi program, ali 100% sam siguran da ce on to sam uraditi! U svakom slucaju ako mu treba kakva pomoc tu smo zar nije tako? :D
Ej vidim da si pravo dobar sa Atmel-om pa me zanima koji mi mozes preporuciti kao pocetniku i gdje imam za skinuti dokumentaciju, instrukcije i assembler? Ja sam krenuo sa PIC-om posto sam sretao dosta primjera na netu za njega, a instrukcije i programatori nisu bili koplikovani. :)

@Zelja koji programator koristis za programiranje, mozda ti je problem u njemu! Kod nekih programatora prije nastupa napon VDD nego VPP pa tim PIC stavlja u aktivni mod a ne u prog mod!

POZDRAV
buco

Post by buco »

@sinner Naravno da mi je drago da pomazes covijeku ! Ja u to kao i ostali nisam posumljao ni trena ! :D
Onaj moj "elaborat" ti se svodi na to da je mozda pristup metodi ucenja
"pogresan" tj da bi bilo bolje da je onakav kakvog sam ga opisao . Ja vijerujem da ce i drugi imat toga rec stim u vezi .

Ono S PIC-em i nemogucnoscu programiranja sto si spomenuo Vpp moze veoma lako bit jedna od mogucih gresaka [ ja se toga nisam ni sjetio jer atmeli idu drugacije itd..] .
@zelja pogledaj si napon programiranja on mora bit min 12V preporuceni napon je 12,65 V od proizvodjatja . Ljude zna zavarat to sto se "novi MCUi mogu programirat na na puno manjim naponima cak i na 10V , mnogi programatori koriste napajanje za Vpp iz racunala sto nije dobro , ako nemas napravi si externo napajanje 12,65V
za Vpp !! i nemoj da stavljas neke "zastitne otpornike" na Vpp napajanje jer razliciti PICevi serije 16 ne vuku istu struju tj margina im je varijabilna i ona "zavede" covijeka. Osim napona bitan je i algoritam al on ti je dobar kad ti ostale moze programirat !!

@sinner Kao i kod PICa tako sve alate mozes nac na stranici od Atmela !! I MASM [ AVR Studio ] i brojne primjere . Posto Atmel sponzorira mnoge stranice naces na netu mnogo toga za Atmelove serije AVR i mega !
Kod AVR-a je prenosiv u mega seriju jer je podloga ista , dodane su bile neke novine kao BL zona [ kompletno samoprogramiranje svih registara cak i konfiguracionih ] kao i poseban rezim zastite , MCU se moze zakljucat tako da je dostupan za citanje /upis samo preko bootloadera ako je unesen , kao i NDA kartice Atmelove [ koje i jesu na toj podlozi radjene] . O brzini ti si vijerojatno cuo !?!
Instrukcije imas u svakom dokumentu . Assembler mozes skinut na njihovoj stranici ako budes imao problema ja ti posaljem !!
Ako budes uzeo jedan MCU za ucit i radit vidjet ces kolika je strukturna razlika izmedju tih 8 bitnih MCUa serije PIC16[17/18] i AVR/mega !
Ako ti zatreba pomoc tu smo !!
Preporuka, pa najbolje je ne gubit vrijeme i krenut s bilo kojim od mega serije jer su principielno svi isti ! gledajuci programerski ! :D
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

@Sinner - Hvala na pomoci. Stvarno cijenim trud ljudi koji nemaju nikakvih interesa a i dalje pomazu ljudima. A mozda je i bolje sto je drugi PIC posto cu se morati potruditi da ga prilagodim i tako nauciti neke stvari.

@Buco - I ti si u pravu. Moram se muciti i sto vise sam uradim to cu bolje nauciti ali pokusavam traziti neke programerske tehnike koje koristite posto mislim da sam hendikepiran poznavanjem visih programskih jezika pa razmisljam na drugacije nego sto asembler to radi. A sto se tice odabira cinilo mi se da su PIC-evi pristupacniji i jednostavniji za upravljanje pa sam krenuo s njima. Inace nemam nekog narocitog razloga.

Sto se tice programiranja imam AllPic i IcProg. Napajanje je vanjski ispravljac koji drzim na 12V ali cini mi se da mi daje nizi napon (mjerio sam prije a trenutno nemam tu instrumenta, oko 11,5V cini mi se). Ali nije mi jasno zasto neki radi a ova dva ne???
buco

Post by buco »

@zelja Onaj spomenuti napon je premali !!! i neki pogotovo visekratno
programirani ICi nece se dat vise programirat ili ce se to obavljat na nacin da ti ne upisuje sve bitove [ 0] . Radni napon Vpp-a nije 11,5 V i to me cudi da nisu znali procitat oni koji su to i radili nije cak ni 12,65 V ! Provijerio sam, napon je 12,75 V za koji Microchip garantira da ce svi bitovi bit pravilno upisani u flash/eve mikrokontrolera serije PIC 16 pod uvijetom da ga nisi "skurio " i da koristi dani algoritam za tu namijenu.

Ako te zanima vise o programibilnim ICima opcenito , o marginama Vppa nacinu rada istih i mnogih drugih odi na www.Willem.org i nadji Denisa [ usname DL ] on ce ti sve objasnit ili te uputit na ranije postove na tu temu . Covijek je radija nekad u TI na razvoju flash i cmos memorija i mos' mislit koliko zna o tome !

To sto ti znas HPLe nije hendikep !! :D to je prednost koja ce ti dobro doc
jedino sto je "percepcija" postavljanja problema zaista drugacija.
Dok se assembler programer bavi detaljima u ustavu , poznavanjem HW , interne strukture , registre na svim razinama , velicinu prostora memorijskog , nacin na koji zeli odradit neke rutine , dotle HPL programmer [ ovisi nesto i o kvaliteti alata] o tim stvarima uopce ne brine i one su mu manje vise strane.
Cesta je greska HPL programera sto se oni dice time da su kao orijentirani na problem a ne nekim tricavim registrima , internim arhitekturama i sl ali tu su percepciju pokupili kroz obrazovanje najcesce kao i reklamne "spotove" kompanija !!
Vi danas za neke mocne risc processore jednostavno necete [ ili veoma tesko] nac assembler alate. Sto je posljedica takvog stava a on je posljedica najprije komercijale [ svaku sitnicu prodaju ].
Nazalost program koji pocesto strukturno ne odgovara racunalu za koji je compiler generirao kod se prodaje kao vrhunsko dijelo i uce se ljudi kako je bas to sto oni trebaju .
A lakse je nesto malo [ veoma cesto] poznavat neki HPL i za njega nac alat s croscompilerom za ciljani processor i odmah ic radit programe za neki MCU nego malo tezim putem doc do necega sto je superiornije , vec i zbog same navedene "strukturne" razlike da ostale "greskice" koje generiraju sveobuhvatni crosscompileri ne navodim !! To mozes lako provijerit diassemblirajuci kodove generirane takvim alatom !
Dobro dodje u fazi ucenja da egzaktno vidis kako "nesmijes" radit , eto za to su zaista odlicni crosscompileri !! :D u procesu obrazivanja.

PIC 16 serije , to da je jednostavniji za "upravljanje" ne razumijem sto znaci !? jer je on i programerski i HWski gledano prevazidjene arhitekture i nacina rada u odnosu na modernije risc 8 bitne processore o cemu sam pisao .
Citajuci textove vidim da ga dosta ljudi koristi , mislim na pocetnike , takvih je jako puno [ dal se oni drugacije dozivljavaju , neznam] sto je razlog da mlad covijek odma krene radit s MCUima s "napustenom" arhitekturom !? cijena nije sigurno a sumljam da je i dostupnost i raznovrsnost . Meni je to gotovo ravno "fenomenu" !?
zelja
Pocetnik na forumu
Pocetnik na forumu
Posts: 25
Joined: 21-02-2005, 14:05

Post by zelja »

E hvala ti Buco.

Ali me nisi bas skuzio. Htio sam reci da mi je se ucinilo. Znaci nisam imao nikoga ko bi me uputio pa sam okrenuo prema njima. A veze nisam imao ni o arhitekturi a pogotovo ne o nacinima programiranja i mogucnostima. Pa sam okrenuo prema njima. I to je jedini razlog.

Ali vjerujem kad njih skuzim da mi i ostali mikrokontroleri nece predstavljati preveliki problem
buco

Post by buco »

@zelja Da se nebi krivo razumjeli ja cu te citirat najprije :
"Ali vjerujem kad njih skuzim da mi i ostali mikrokontroleri nece predstavljati preveliki problem.."

Pa vidis u tome i je poanta cijele price oko tipski definiranih ahitektura
o kojima tu trosim "papir" :D . Accumulatorski orijentirani processori
kao serija PIC 16 i su bas kod programiranja u assebleru ne bas malo razliciti od modernih risk 8 bitnih MCUa .
Naravno uceci i na njima naucit ces princip koji vazi za sve processore bez obzira na tip , arhitekturu , duzinu rijeci , dubinu stoga .......itd.
Jesi rijesia Vpp i probao one MCUIe koji neidu ?

Steta sto ranije nisi pitao malo oko tih stvari , pa da na osnovu tih podataka doneses odluku koja ti je najbolja.

Drugi put kad ti se nesto "ucini" pitaj, ima tu ljudi pa ce ti pomoc razrijesit dvojbu ! :D
User avatar
[SINNER]
Penjem se :)
Penjem se :)
Posts: 82
Joined: 18-09-2005, 21:44
Location: Bihac-Sarajevo

Post by [SINNER] »

@Buco proradit cu na Atmel malo kasnije, sad imam neke ispite pa ih moram rijesiti!
Znas kako je kad studiras :(
buco

Post by buco »

NOP !! [ no problem ] samo ti prodji ispite ostalo ce vec pomalo ic. ! :lol:
Jaiden682
Posts: 5
Joined: 24-05-2006, 03:54
Contact:

Confusion

Post by Jaiden682 »

buco wrote:@zelja Da se nebi krivo razumjeli ja cu te citirat najprije :
oh, ah, WHAT?
Post Reply