[ lm741 @ 03.01.2010. 13:57 ] @
Pozdrav,..

ako imam klasičan H most koji vrti mali DC motor,..
jasna mi je promena smera sa dva pina

RB.4=1
RB.5=0

suprotno tome

RB.4=0
RB.5=1



ali kako da na ta dva pina šaljem PWM a pritom da imam promenu smera

ne mogu da rešim problem,...pomagajte
[ _str_ @ 03.01.2010. 15:06 ] @
Treba jos dva and kola i izvor pwm-a.
[ lm741 @ 03.01.2010. 16:07 ] @
ajde molim te ako možeš da mi poijasniš za čega su ta dva and kola
[ _str_ @ 03.01.2010. 17:44 ] @
And kola sluze da bi dobio pwm 'modulaciju' na jednom od kanala h mosta. Evo slika pa ce biti jasnije:


[ lm741 @ 03.01.2010. 17:58 ] @
a,..sada mi je jasno
mislim da čak i imam jedno od TTL kola 74,..
a dali postoji način da se u programu invertuje oblik PWM-a pa sam mislio da na jedan pin šaljem ne invertovan a na drugi pin invertovan oblik PWM-a
možda je sad ovo teška odvala ali me baš zanima dali tako nešto može da se izvede

@ str hvala ti za odgovor
[ _str_ @ 03.01.2010. 20:09 ] @
Ako bi imao dva pwm izlaza mogao bi odraditi posao ali bi program bio nesto duzi.
Kada bi invertovao pwm signal dali bi mogao dobiti da motor miruje? :)
[ lm741 @ 03.01.2010. 21:01 ] @
da,.. u pravu si
radim sa pic 16f84 i nemam dva PWM kanala,..
ovo drugo za invertovanje,pretpostavljam da je odgovor NE
znači,..idem da proširim građevinu

ok. za sada mi ide dobro, kad dogradim AND kola očekujem da mi H most radi kako sam zamislio
zato što bez H mosta PWM radi onako kako treba
naime, promenljiva kojoj menjam vrednost preko tastera nalazi se u PWM rutini i to je ok

pwm h1,sp,100 '.......... (sp)je promenljiva

na motoru imam enkoder koji bi trebalo da mi kontroliše poziciju,..na osnovu zadatog broja impulsa trebalo bi da zaustavim PWM tu očekujem sledeću prepreku,... pa se javljam
[ VRadule @ 03.01.2010. 21:51 ] @
Uzmi PIC koji ima Enhanced CCP, on je upravo optimizovan za teranje H mosta.
Recimo 18F4520. Skini datasheet i pogledaj ECCP odeljak, mozda ti se svidi.
[ lm741 @ 03.01.2010. 22:03 ] @
@VRadule,...pozdrav

zahvaljujući svima vama, uspeo sam da uhvatim za kvaku vrata sveta mikrokontrolera,koja tek treba da otškrinem,.....hvala vam,..

trenutno da prelazim na drugi pic,...uf,..tek sam se odomaćio u 16f84
verovatno da će doći vreme kad ću SMETI da se upustim i korak dalje ali za sada ovaj piconja je za mene još uvek,...????
ali svakako moram pogledati njegov datasheet
[ lm741 @ 04.01.2010. 23:29 ] @
@ str,..
radi više nego odlično
koristio sam 7408

sada pokušavam da sve to uklopim u programče
malo mi je zapelo kod interapta ali ću da se još potrudim da sam skontam

[ Sepa011 @ 05.01.2010. 00:38 ] @
A da ti lepo promenis piconju? Uzmes, npr. 16f627 ili 16f628, oni imaju hardverski PWM, pa bi ti kod mogao da izgleda:
Code:
HPWM 1, Duty, Freq

gde je Duty odnos impuls/pauza (0 = 0% $FF = 100%), a Freq, veoma ocigledno, osnovna frekvencija
[ lm741 @ 05.01.2010. 00:49 ] @
zdravo Zorane,..
samo jednom prilikom sam koristio 16f628 u tom slučaju bi se i snašao ali trenutno imam drugi problem
sa regulacijo brzine kao i smera motora trenutno sam zadovoljan,..prelazak na drugog piconju možemo ostaviti za kasnije

problem je sada nastao kod brojanja impulsa sa enkodera
nisam siguran kako da te impulse smesetim u promenljivu (na koji način)
ili kako da aktiviram interni brojač


[ lm741 @ 05.01.2010. 00:54 ] @
tablicu istine sam napravio tako što sam na osciloskopu posmatrao naponske nivoe,..pa je to to

pun krug ima 100 impulsa,ako bi koristi samo pozitivne to znači da po krugu imam 20 impulsa

e sad, to bi trebalo smestiti u promenljivu ili kako dalje,...??

edit: izvinjavam se,..nisam bio jasan do kraja,..evo polako ću,..

znači da na osnovu broja zadatih impulsa, program treba da skoči na labelu kada se taj broj dostigne, broj impusa dobijenih sa enkodera
tom prilikom motor menja smer,..opet broji pa kad dostigne isti broj opet menja smer i tako u krug,..


nisam siguran na koji način to da izvedem
dali mi je potreban interni brojač koji će izazvati interapt pa skok na labelu (ali to ne umem za sada) ili
to mogu da uradim sa IF ...THEN ,...kao kad brojim ulaz za taster pa kad dostignem broj skok na labelu

[Ovu poruku je menjao lm741 dana 05.01.2010. u 02:17 GMT+1]
[ _str_ @ 05.01.2010. 11:23 ] @
Mozes koristiti i interni brojac ali bi to bio luksuz, ovako kreiras promenljivu npr. 'brojac' i to kao word (16bit). Bilo bi pozeljno da izlaz enkodera prikacis na interapt ulaz a program u interaptu bo mogao izgledati nesto kao 'brojac=brojac+1' ili ako ima komanda 'incr brojac' i na kraju komanda za povratak iz interapta.
U glavnom programu sa 'if..then' testiras stanje promenljive 'brojac' i dalje preduzimas korake zavisno od situacije. Brojanje bi mogao uraditi i bez interapta kao taster koji si pomenuo ali bi se u ovom slucaju moglo desiti da zbog brzine motora dodje do preskakanja izbrojanih impulsa.
[ lm741 @ 05.01.2010. 11:34 ] @
pozdrav _str_

kontam kako da uvećam brojač ali ne kontam sledeću rečenicu

ili ako ima komanda 'incr brojac' i na kraju komanda za povratak iz interapta.

šta je 'incr',.....

u suštini 'interapt' me jako zbunjuje, ako možeš da mi pojasniš

ja radim u PBP

[ lm741 @ 05.01.2010. 12:07 ] @
koristim 16f84
dali ulaz za interapt obavezno mora biti na pinu RB.0/INT

e to mene zbunjuje,..

ja kontam da je interapt 'prekid' programa iz bilo kog razloga da bi program napravio skok na neku od labela,..ili
da je RB.0 samo ulazni pin na kom se desi promena stanja 0 ili 1 gde program prati to stanje pina i da to izaziva interapt
nisam siguran u tu moju logiku
uf,..kad bi još to skonto bio bi kompletan


[ _str_ @ 05.01.2010. 13:31 ] @
Izraz koji koristis 'skok na neku od labela' nije prikladan jer se pod tim misli na naziv promenljive, prikladnije bi bilo reci skok na programsku adresu a da ne bi pamtio adrese (brojeve) programski dodeljujes nazive adresama vec po potrebi. Pin koji je oznacen sa INT (INT0, INT1...) se jedino i moze koristiti za pravljenje spoljnog prekida a ceo posao prekida se obavlja hardverski. Posle izvrsenog 'prekid' programa mcu se vraca gde je stao pre njega. Koristim avr kontrolere pa nisam siguran kako je na pic-u uradjen SP (stack pointer) tako da su mi odgovori onako vise okolo.
Incr ili increment je komanda za uvecanje neke promenljive za 1 a isto tako komanda decr (decrement) oduzima 1.
[ vukboban @ 05.01.2010. 20:28 ] @
Da probam malo da pojasnim:
Interapt je i napravljen bas zbog toga da program(programer) ne mora da prati stanje pina (govorim o eksternom interaptu).
Znaci program radi nesto,nije bitno sta,desi se promena stanja na pinu,i istog trenutka,bez obzira gde je program u tom trenutku i sta radi,kontroler prekida izvrsenje glavnog programa,skace na potprogram za obradu interapta,odradi ono sto si napisao u tom potprogramu i vraca se na isto ono mesto u glavnom programu gde je bio pre pojave spoljnog interapta(pre promene stanja na pinu).

Pre svega ovoga moras da odobris(enablujes) taj interapt,i da u toj interapt rutini (potprogramu) napises ono sto hoces da ti kontroler radi u tom trenutku.
Izvor spoljnog interapta moze da bude samo pin koji je oznacen sa INT-znaci RB.0 (mislim da je samo taj kod 16F84,nemam sad datasheet)

Ipak trudi se na sve nacine da promenis PIC,16F84 je istorija...
[ lm741 @ 05.01.2010. 21:05 ] @
@_str_
@vukboban

hvala vam jako puno sada mi je jasno ali još samo dve stvari vezane za interapt

1. ako bi omogućio obradu interapta, desila se promena na pinu, kako bi izgledala adresa tog podprograma koji teba da se obradi (možda kao labela?)
2. dali je u programu interapt, svaki skok na programsku adresu??

[ lm741 @ 05.01.2010. 21:33 ] @
evo moje programče koje za sada odlično fercera,..

molio bih sve vas koji ste raspoloženi,imate vremena da ovaj program prokomentarišete da uputite sve moguće kritike, šta bi i kako bi vi,....
trenutno šemu nemam
dobar deo svega tog mi se nalazi na proto ploči, napajanje pica standardno dok se motorče napaja sa aku(onaj sa gelom)
kada konačno završim onako kako sam zamislio,..kačim slike i program

sada me još zanima u vezi interapta,..
u ovom mom programčetu, kada promenljiva "brojač" dostigne 10,...dali je to interapt kad se dešava skok na adresu "vrh"

Code:
Sp var byte        'promenljiva za PWM
brojac var word    'promenljiva za brojac impolsa sa enkodera
sb var bit
nb var bit
ns var bit         'novo stanje tastera Up          'velicina promenljive
ss var bit         'staro stanje tastera Up
nnss var bit       'novo stanje tastera Down
ssss var bit       'staro stanje tastera Down

'******************** imenovanje pinova **********************


SYMBOL and2=portb.6   'and2                              
symbol h1=portb.4     'izlaz pwm
symbol and1=portb.5   'and1
symbol br=portb.3     'pin za brojac          
symbol Tp=porta.2     'taster plus
symbol Tm=porta.3     'taster minus

'******************* ***********************
input br         
input tp              
input tm
output and2
output h1
output and1
              
'***********************************************************

ss=tp     'taster nije stisnut pa ce ss biti 1
ssss=tm   'taster nije stisnut pa ce ssss biti 1
sp=5      'promenljiva sa 5 polazno stanje
sb=br

 
brojac=0
and1=1
and2=0

'********************* glavni program ******************************************
pocetak:  'labela

ns=tp     'moguce novo stanje tastera
nnss=tm   'moguce novo stanje tastera
nb=br     'novo stanje na pinu brojaca koje se smesta u promenljivu >nb<
 
if ns<ss and sp<250 then   'ispituje stanje tastera i velicinu promenljive
sp=sp+5                  'ukoliko su uslovi ispunjeni uvecava promenljivu za 5
  endif


if nnss<ssss and sp>10 then 'isto kao prethodno
sp=sp-5                     'isto,..
  endif                       

pwm h1,sp,10                'PWM rutina.......h1 pin na kom je signal 
                                             'Sp je promenljiva
                                             '10 je broj ciklusa,..
                                             
'*********************** brojac ******************************************                                            
if nb<sb then          'ipak je uzet negativni naponski nivo na enkoderu
  brojac=brojac+1
  endif
  
if brojac=10 then 
goto vrh
  endif
 
'ss=ns       'za sada ignorisem  
'ssss=nnss   'za sada ignorisem
sb=nb
goto pocetak

'******** potprogram **************************************

vrh:  
    
toggle and1         'promena stanja pina 
toggle and2
brojac=0            'vracanje brojaca na nulu 
gosub pocetak
                                                                           
end



[ _str_ @ 05.01.2010. 22:29 ] @
Skok na vrh nije interapt, u ovom slucaju je uslovni skok (if then) na programsku adresu 'vrh'. Interapti su rezervisani (ako se programski dozvoli) za predvidjena hardverska stanja mcu-a. Prvi i osnovni je 'reset', onda 'INT' spoljni prekid (interapt), brojac je pun (255+1), AD konverzija, UART ili vec sta drugo a zavisi od internog hardvera kontrolera.

Komanda 'gosub' uvek ide uz komandu 'return', dakle kada se izvrsi 'gosub vrh' podprogram ce terati dok ne dodje 'return' pa se programski brojac vraca na programsku adresu+1 pre 'gosub'. Ovako kako si napisao program nije ispravan zbog komade gosub na podprogramu 'vrh'.

Jedna od varijani je:

Code:
if brojac=10 then 
gosub vrh
endif
...
...
...
'******** potprogram **************************************

vrh:  
    
toggle and1         'promena stanja pina 
toggle and2
brojac=0            'vracanje brojaca na nulu 
return



ili druga:

Code:
if brojac=10 then 
goto vrh
endif
...
...
...
'******** potprogram **************************************

vrh:  
    
toggle and1         'promena stanja pina 
toggle and2
brojac=0            'vracanje brojaca na nulu 
goto pocetak







[ vukboban @ 05.01.2010. 23:10 ] @
Ajde malo da uprostim,jer vidim da ti nije bas 100% jasno sta je interapt:
Imas recimo ulazna vrata u stan!
Ti sedis u sobi i svakih 2 minuta otvaras vrata da vidis da nije slucajno neko dosao.To nije interupt.
Neko zvoni na zvono na vratima. To jeste interupt.
Malo je glup primer,ali...
ako program nadgleda stanje nekog pina,pa na njegovu promenu reaguje(bilo skokom na neku rutinu-potprogram,ili nekako drugacije) to nije interapt.Takodje ako program proverava da li je interni brojac-tajmer dostigao neku zadatu vrednost,to isto nije interapt.
Interapt je hardverski ili softverski izazvana promena nekog stanja pri kojoj program PREKIDA izvrsavanje bilo gde da se nalazi u tom trenutku(recimo imas u programu pauzu od 2 sekunde;posle prve sekunde desava se promena stanja na pinu RB.0,program prekida to sto radi-u tvom slucaju pauzu,odlazi na potprogram za obradu interapta,odradi to sto je tamo napisano,i vraca se na onu pauzu,odbroji onu sekundu sto mu je ostala i nastavlja dalje)
Znaci da je cela poenta interapta u tome da programer ne mora da zna kada ce se nesto desiti,ili da proverava da li se nesto desilo.Program jednostavno radi to sto radi,a kad naidje neki bitan dogadjaj kontroler sam prekida program i reaguje na taj dogadjaj.
Dogadjaj moze biti kao sto ti je rekao @str ili promena stanja na INT pinu,ili kada tajmer odbroji do 256 (osmobitni) ili 65536(sesnaestobitni),ili zavrsena A/D konverzija,kod novijih kontrolera ima i preko 10 izvora interapta.
Interapt je bas mocno oruzje u programiranju kontrolera (ja ih koristim kad god mogu a npr Sinisa samo kad je bas neophodno :))))) ) jer ne moze da se dogodi da recimo ti cekas jedan dogadjaj,a drugi ti prodje neprimecen .
Mislim da sam ti bar malo pojasnio.


P.S. Nadam se da se Sinisa ne ljuti sto ga spominjem....
[ lm741 @ 05.01.2010. 23:30 ] @
_str_ hvala ti zaista,..
sada je gotovo da bi se pravdao kako sam znao da je IF..THEN uslovni sko ali,...danas sam sav u interaptu pokušavajući da ga skontam
neznajući šta je interapt, mislio sam da uslov koji se ispuni da je tu i kraj sa uslovom, pa sam sve to malo zbrko,..sve u svemu
bitno je da si mi razrešio dilemu vezano za taj famozni interapt,...idemo dalje,..
a za RETURN ni neću da se pravdam,..nisam znao
još jednom hvala ti puno


[ lm741 @ 05.01.2010. 23:45 ] @
Bobane,..taj primer sa vratima,baš je dobar, sada mi je stvarno jasam taj INTRAPT
ostaje da već u sledećem programčetu i primenim to što ste mi pomogli da skontam
stvarno ne znam šta bih bez vas
hvala ti puno kao i svima koji su učestvovali,..

a primer sa pauzom je nešto što me je oduvek brinuolo kako bi to ja izveo prekid programa ako bi ta pauza bila naprimer 5 minuta,
imao sam već taj propali PROJEKAT baš zbog toga što nisam znao kako da ka prekinem,...e to je to

Pozdrav,..
[ rsinisa @ 06.01.2010. 02:34 ] @
@ vukboban
Taman posla da se ljutim, nema razloga.

@ lm741
Kod 8-bitnih kontrolera interapt vektor je na adresi 4 što znači da pri ispunjenju uslova za interapt program skače na adresu 4, ali kada koristiš PBP ne moraš o tome da vodiš računa, moraš samo da dodaš odgovarajuću DEFINE naredbu, i labelu od koje počinje interapt rutina. Pričam o asemblerskom interaptu, ne o PBP interaptu sa naredbama ENABLE INTERRUPT i DISABLE INTERRUPT - njih zaboravi jer najkraće rečeno nisu od velike koristi (da ne objašnjavam sve). Sve o tom načinu korišćenja interapta u PBP-u imaš objašnjeno u uputstvu za PBP i obavezno pročitaj. Imaš na mom sajtu na kraju teksta o PIC panelu osnovni program u kome se vidi primena interapta u PBP-u:
http://sinel.freehostia.com/picpanel/index.html

Suština je da dodaš naredbu "define INTHAND myint", da označiš pošetak rutine labelom (u ovom slučaju "myint"), da sačuvaš važne registre na pravilan način, da im pre povratka vratiš prvobitan sadržaj i da završiš naredbom "retfie".
Iako je pisana u asembleru, interapr rutina može da se piše i u PBP, ali samo deo posle čuvanja i pre vraćanja stanja važnih registara.

Pozdrav.
Sinisha
[ lm741 @ 06.01.2010. 18:40 ] @
Pozdrav Siniša,..
To što se nijam dugo javljao je samo dokaz da sam iscrpljen nakon pet besanih noći, danas ceo dan spavao,..
evo me dosta svež nastavljam radove

Sinisa hvala ti što si se javio i naravno, pomogao da rešim "misteriju" zvanu int.
Noćas do svanuća, između ostalog studirao sam registar INTCON i podešavanje njegovih bitova.Sada mi je mnogo lakše da pratim knjigu koju imam,malo je oskudna sa objašnjenjima, ali nakon vaše pomoći zadovoljan sam onim koliko sam shvatio,..

Pozdrav svima i od srca sretni predstojeći praznici

[ elektrostudio @ 06.01.2010. 18:48 ] @
Nazalost sam zakasnio. Imam negde prg gde sam resavao PWM na vise pinova 16F84 ali je u asm-u i ide preko tajmera T0 interrupte i nekoliko jos dodataka tako da se software brine o svemu. Ako to odgovara pusticu na PM. PBP nesto mi ne odgovara posto sam navikao na asm i njegovu brzinu. Jest malo teze ali radi bez greske
[ lm741 @ 06.01.2010. 19:46 ] @
@elektrostudio
Pozdrav,..
DObro došao, nisi nikad zakasnio, eto ako nije problem pošalji mi program, voleo bih da vidim kako je rešeno,..

Hteo sam u prošloj poruci da kažem da mi je asembler puno jasniji,možda je teži za tumačenje samog programa nama početnicima ali dok čitam knjigu uputa u programiranje korak po korak moram priznati da mi je mnogo razumljiviji svaki taj korak.Prvi put kada sam se susreo sa mikrokontrolerom to je bio program u asm-u.
[ elektrostudio @ 08.01.2010. 20:24 ] @
Kernel ide na tvoj private, asm i videces jednostavnost koriscenja PWM-a pod interruptima. Drugarima mogu takodje na PM jer iza koda lezi dobrih mesec dana rada i testiranja te nije bas za javno
[ Sepa011 @ 08.01.2010. 21:21 ] @
Auh, Vladimire, ako si vec nesto nekome poslao na PM, onda nisi trebao to javno da 'lanes' na forumu i jos da napominjes da 'nije bas za javnost'. Ono sto nije za javnost, nije za javnost i toj istoj javnosti se ne stavlja do znanja da ima nesto sto nije za nju.

Ovo sto si uradio spada u ono cuveno: 'Da komsiji crkne krava,...', odnosno, ja to znam, tebo sam sapnuo, a vas ostale ko j...

Najbolje bi bilo, da sada, onima koji pocinju da se bakcu mikrokontrolerima , JAVNO ovde postavis tvoj .asm

Poz,
Šćepa
[ Keez-a @ 08.01.2010. 21:42 ] @
@elektrostudio: Da li postiji mogucnost da se dobije generalni assemblerski kod za softverski PWM? Naime, pokusavam da napravim neku vrstu drajvera za jedan mali DC motor sa 16f84a mikrokontrolerom.

Unapred hvala.
[ bogdan.kecman @ 08.01.2010. 21:53 ] @
izvinjenje ako upadam sneba pa u rebra na pola teme al, obavezno pogledaj sledeca dva thread-a

http://www.electro-tech-online...-junebug-servo-c18-code-4.html
http://www.electro-tech-online...85601-software-pwm-10f200.html


moj omiljeni pwm kod je tu:
Code:

;M0 & M1 are the port numbers for the motors
;PWM1 is motor 1 speed (0-15)
;PWM2 is motor 2 speed (0-15)
DoPWM        bsf    Shadow,M0    ;turn motor 0 on
        bsf    Shadow,M1    ;and motor 1
        movlw    1        ;preload W
PwmLoop        subwf    PWM1,F        ;sub 1 from PWM1
        btfss    STATUS,DC    ;was there a borrow from bit 4
        bcf    Shadow,M0    ;yes so turn motor 0 off
        subwf    PWM2,F        ;now do second channel
        btfss    STATUS,DC
        bcf    Shadow,M1
        movfw    Shadow        ;copy shadow register
        movwf    GPIO        ;to I/O register
        movlw    1        ;reload W
        addwf    Count,F        ;inc count but set flags
        btfss    STATUS,DC    ;have we been around 16 times
        goto    PwmLoop        ;no, so go around inner loop
        btfss    STATUS,Z    ;have we done 256 times
        goto    DoPWM        ;no so repeat outer loop
        retlw    0        ;done


na 1MHz chipu tera 4.7KHz PWM.

ima jos dosta razlicitih korisnih primera u ta dva threada .. ako sam i omasio temu skroz, opet mislim da su korisni :)
[ Sepa011 @ 08.01.2010. 22:39 ] @
Mislim da nisi omasio, pocetnicima (a primecujem da ih ima) u svakom slucaju nece skoditi.
Prateci ovaj forum, primetio sam da si jedan od onih koji imaju volje i zelje da pomognu.
[ lm741 @ 08.01.2010. 23:12 ] @
Pozdrav Zorane,..
svako onaj ko bar malo pretura po starijim temama ovog foruma tačno zna ko je spreman da pomogne,..
zato hvala vam što ste tu,.
trenutno radim PCB,biće u blokovima, tako mora,..
mislim da ću ipak morati da menjam piconju, nedostaje mi pinova, kačim i LCD

@Bogdane pre svega pozdrav i hvala ti
kao što rekoh radim pcb pa trenutno nemam vremena da tumačim asm. ali mi je zanimljiv kao i linkovi

slažem se sa Sepom, početnika je puno takvih kao što sam ja i siguran sam da će i ostalim početnicima ova tema biti zanimljiva
[ lm741 @ 08.01.2010. 23:17 ] @
@elektrostudio
nema nigde ništa, ništa ne pristiže,..šta bi??
[ bogdan.kecman @ 08.01.2010. 23:55 ] @
nema na cemu ... od mene koliko mogu i kad mogu .. bar sto se sw strana tice nije problem :) ... za hw sam daleko od upotrebljivog, posebno ako je neka analogija u pitanju ..

elem .. lm, 16f84 je g**** koje se nije pravilo nekoliko godina, a onda posto je bilo dovoljno ljudi koji su zapekli za 16f84 onda je mikrochip resio da nastavi da ih pravi i da iste dere ko ovce te 16f84 koji je go*** od uC-a kosta ko mnogo ozbiljniji 18F ili cak neki manji dsPic-ovi ... baci to i ne gledaj ga vise ... to sto "ima puno primera za 16F84 na netu" je potpuno nebitno ... uzmi neki 18F i mozes da teras C na njemu (ili ako bas oces basic) i za 1000x manje vreme nacukas to isto sto bi morao da nedelju dana debagiras na 16F.... za mnogo manje pare nego je taj zardjali chip mozes da uzmes 18F sa hardware-om koji ti treba ... sa 18F vec mozes da slobodno koristis visi programski jezik (ja licno savetujem microchip C18 posto je dzaba i radi 1/1, mada ako oces mikroelektronika ili hitech ili csc prave isto tako lepe i dobre kompajlere, samo nisu bas dzaba).... i sve sto napises, radi na "svakom" 18F ... samo menjas bubasvabu i uzmes onaj koji ti za odredjeni posao ima dovoljno pinova i odgovarajuci hw ... os da teras 2 pwm-a, os 2 seriska porta, os usb, os ovo os ono ... sve bre ima .. a kosta manje od tog zardjalog 16F84 ....

dakle - jedini razlog za 16F84 je - neces da radis sam nego koristis tudji hex i treba da ti nesto "samo radi" i bas te briga "kako radi" ... ako ces sam da radis ... naj iskrenije - preskoci celu 10/12/16F seriju osim ako bas nemas potrebu za 8pinskim uC-om (ja koristim i dalje 12F508 -4MHz, 8pinova- i 10F222 - 8MHz i 6 pinova za externe uredjaje, daljince i slicno i sve to naravno u smd varijanti posto ako ces trough hole - onda ti ocigledno velicina nije bitna)..

ja sam izgubio cudo vremena sa 16F serijom (16F628, 16F877A, 16F887) dok nisam provalio da sam glup i da 18F kosta manje a daje vise .. tj, dok nisam provalio da sam budala sto uC kupujem u rad*o k*ubu gde jedan 16F877A kosta ko 10 komada u nekom co***u ili ta***u ...


sto se DC motora tice - ja iskljucivo teram hw pwm posto obicno taj uC koji tera te motore mora i nesto korisno da radi osim da generise pwm (cita razne senzore, donosi odluke sta da radi, koji motor na koju stranu kojom brzinom etc etc etc)... dodatno, da bi taj DC motor radio bez preteranog zujanja, frekvencija pwm-a mora da bude preko 25KHz imho a to sa sw pwm-om ima da pojede uC dok si reo keks - a sa hw pwm-om bez blama moz da teras 30KHz ili 300KHz i da ne osetis !!! ... da ne spominjem 8bitnu ili 10bitnu rezoluciju tog istog pwm-a ... a kod ti izgleda
Code:

...
PWM1_Setup(300000); // 300KHz pwm
PWM1_SetDC(1024/2); // 50% duty cycle (10bit DC resolution)
PWM1_On();
PWM2_Setup(300000); // 300KHz pwm
PWM2_SetDC(1024/2); // 50% duty cycle (10bit DC resolution)
PWM2_On();

....
PWM1_SetDC(varijabla);
PWM2_SetDC(varijabla2);
...


i taj isti kod ce da radi "na svakom 18F picu" ...

[ bogdan.kecman @ 09.01.2010. 00:05 ] @
Citat:
lm741:  trenutno nemam vremena da tumačim asm.


nemas sta da tumacis, sve pise u komentarima. ceo kod je "procedura/subrutina" (ili kako se to vec zove na srpskom) koja po zadatoj vrednosti PWM1 i PWM2 (od 0-15 su moguce vrednosti za 0-100% dc dakle 4bita rezolucija) tera 2 pina 256 ciklusa. Ako izmemo da PIC radi na 1MHz tih 256 ciklusa ce biti na 4.7KHz tj trajace 0.0544 sekundi. Ti sad iz tvog programa mozes da pozivas tu rutinu iz interapta ili iz petlje ili kako vec oces ... naravno, ako PIC radi na vecem taktu, frekvencija pwm-a ce biti veca (srazmerno).
[ Sepa011 @ 09.01.2010. 00:26 ] @
16f84? piconja koji se jos dosta koristi posto mu je Microchip oborio cenu, a i tona literature postijo za njega kako bi pocetnici mogli ponesto da prckaju i da shvate, brzo, nadam se, da je neophodno da predju na nesto bolje.

Nego nema ga elektrostudio, izgleda da se uplasio.

Sto se hardvera tice, tu bas nemam mnogo problema, osim ako nije nesto preterano specificno, Uglavnom osmislim hardver, napravim orijentacionu plocicu na kojoj bi to trebalo da radi (neki to zovu Namenski Razvojni Sistem ), i ondak udri po softveru.

Bas sam se krajem prosle godine malko z..... sa GSM/GPRS/GPS modulom od Telit-a
[ lm741 @ 09.01.2010. 00:56 ] @
@bogdane,..
istina je da nađem kojekud razne programčiće za 16f84 ali to i jeste meni pomoglo u mnogim primerima da nešto i naučim. Nevidim drugi način osim da tumačim program koji nađem pa da ga prilagodim mojim potrebama. U par postova ranije pomenuo sam da prvi susret sa MC bilo je program pisam u asm. pa sam kupio knjigu,pa tu knjigu u tom trenutku nisam baš naj bolje razumeo, e onda natrčim na PBasic, pa daj trč kupuj knjigu za njega. Tu sam se malo "ušlifovo" pa je pomalo i išlo, čitam knjigu, gledam primere, prevrtao stare teme i vaše komentare,...pa se opet vratim na asm. kad sam malo skontao kako to funkcioniše piconja, gde mi se u jednom trenutku asm. učinio prihvatljiviji i razumljiviji,..e sad sam opet na Basic-u
Naravno da svi vi vidite da je moje znanje na ovom polju oskudno. Znate kako je to, sa nedostatkom znanja naravno i prakse (a imam želju da napravim nešto što mi je veoma zanimljivo a to radim isključivo iz hobija) puno puta mi je veoma teško da sam shvatim neke stvari ili je potrebno da puno puta se vrtim oko istog problema da bih nešto pomakao a kada nemam kud ja se obratim vama,..
onda kad mi spomenete da bi trebalo da menjam piconju,.. bogami nije mi lako,..trenutno ih omam oko 30-tak komada(uplašio se da ih neće biti pa ih samo kupovo),...
Zaista bih voleo da imam i ja delić znanja koje vi imate, sad tu ima puno faktora, vreme,posao,porodica,...pa se eto tako stalno vrtim u krug,...
Verujem da bi mnogo lakše bilo da nešto naučim da sam pored nekoga dok piše program i radi, ali nemam nikog u blizini ovako to sporo ide zato što jedan odgovor prati 100 mojih potpitanja,...i eto tako raspisah se ja ali u svakom slučaju hvala vam za vaše strpljenje i želju da pomognete,..

ps: ono programče gore,..to sam ja pisao 100%,..vidi se
[ bogdan.kecman @ 09.01.2010. 01:00 ] @
ma koristi se samo zato sto ima gomila primera a ljudi vise vole copy paste nego da mucnu glavom ...

16F84A == $3.11
- 13 io pinova
- nema interni oscilator dakle 2pina manje + 2 kondenzatora + kristal
- max brzina 20MHz
- od dodatnog hw-a ima NISTA, tj ima jedan osmobitni tajmer i to je to .. ne ume cak ni sam po sebi da pise

18F2550 == $3.44
- 24 io pinova
- interni oscilator na 8MHz i na 32KHz
- max brzina 48MHz
- od dodatnog hw-a ima "sta oces" (A-E-USART, I2C, SSP, SPI, 1 osmobitni i 3 16bitna brojaca, 2CCP-a (dakle 2 PWM-a na istoj frekvenciji ali sa nezavisnim duty cycle), 10 komada 10bitnih analognih ulaza, 2 komparatora ...)

o kolicini flasha necu ni da pricam :D bedak je ..

a da ne spominjemo ove bez USB-a ... npr PIC18F23K20 za $1.23 dakle vise nego duplo jeftiniji
- 25 io pinova
- interni oscilator na 16MHz ili 32KHz
- max brzina 64MHz
- periferija kakva oces ...1-A/E/USART, MSSP/SPI/I2C, 1x CCP + 1xECCP, tajmeri 1 x 8-bit + 3 x 16-bit, ADC 10x 10-bit, 2 komparatora

i to bre radi na 1.8V i dolazi i u standardnom trough hole (pdip 28) kucistu ...

I aj sad neko da mi objasni zasto bi neko uzeo pateticni 16F84A koji svega ima manje, trosi vise struje, zahteva vise delova oko sebe i kosta vise nego duplo vise ?!?!?!?


bedak, ovo je skroz off-topic .. i to na kvadrat ... al malo sam alergican na 16F84 posto ako neces da radis copy/paste - nemas nikakav razlog, nijedan jedini da koristis danas u razvoju taj uC ... a ako oces da radis copy/paste, onda nema sta da pitas na forumu ... odradis copy/paste, napeces, koristis i sve super ..
[ lm741 @ 09.01.2010. 01:12 ] @
nije u pitanju samo copy paste
x primera sam radio baš zato da bi nešto naučio ali kažem sporo ide,..moram od nekud početi
[ bogdan.kecman @ 09.01.2010. 01:18 ] @
Citat:
lm741: @bogdane,..
istina je da nađem kojekud razne programčiće za 16f84 ali to i jeste meni pomoglo u mnogim primerima da nešto i naučim. Nevidim drugi način osim da tumačim program koji nađem pa da ga prilagodim mojim potrebama. U par postova ranije pomenuo sam da prvi susret sa MC bilo je program pisam u asm. pa sam kupio knjigu,pa tu knjigu u tom trenutku nisam baš naj bolje razumeo, e onda natrčim na PBasic, pa daj trč kupuj knjigu za njega. Tu sam se malo "ušlifovo" pa je pomalo i išlo, čitam knjigu, gledam primere, prevrtao stare teme i vaše komentare,...pa se opet vratim na asm. kad sam malo skontao kako to funkcioniše piconja, gde mi se u jednom trenutku asm. učinio prihvatljiviji i razumljiviji,..e sad sam opet na Basic-u


ma pazi .. ne treba ti meni da se pravdas ... ja sam mator konj koji se ovim bavi iz zabave .. i mnooooooogo smo otisli off topic, no moderatori ce vec da odluce koliko i kako ce da puste / koliko i kako je sta korisno .. sve u svemu, poenta je da je ono sto se meni extra svidja na microchip platformi je sto realno sve vise manje radi svuda ... taj isti kod za 16F84A koji nema nikakve perfierije ces iskopajlirati za bilo koji drugi osmobitni PIC ... biko koji 18F ce poterati taj isti kod, samo je potrebno da promenis zaglavlje / konfiguraciju kako bi hex odgovarao .. a to ce vec kompajler odratiti za tebe u 90% slucajeva ... tako da .. 99% programa za 16F84 mozes da, uz vrlo male prepravke, poteras na PIC18F23K20

Citat:
Naravno da svi vi vidite da je moje znanje na ovom polju oskudno.

jeste bre, mi smo se svi nauceni rodili ... ja sam pricao c i asembler pre nego sam propricao srpski a lemio sam smd pre nego sam naucio da hodam .... :D

svi smo mi to prosli, zato i hocemo da pomognemo, koliko i kada mozemo

Citat:

Znate kako je to, sa nedostatkom znanja naravno i prakse (a imam želju da napravim nešto što mi je veoma zanimljivo a to radim isključivo iz hobija) puno puta mi je veoma teško da sam shvatim neke stvari ili je potrebno da puno puta se vrtim oko istog problema da bih nešto pomakao a kada nemam kud ja se obratim vama,..


ah .. na zalost, mnogo dobro znamo kako je ... jos je gore kad nemas uopste koga da pitas ... ali ja kada ti kazem nesto ja ti kazem iz najbolje namere, rekoh ti - ja sam izgubio godinu dana sa 16F877 i 16F877A zato sto sam za njih imao gomilu primera ... i placao sam ih ko svetog petra kajganu ... drali me ko majmuna ... dok mi nije jedan lik rekao "a sto bre to radis, uzmi 18F jaci je i jeftiniji" ... pazi kad sam teo da porazbijam gomilu opreme i pobacam sve vezano za picove kad sam svatio koliko sam ispao glup ... zato kad neko spomene '84 meni izadju rogovi, to go*no nema bre ni seriski port

Citat:

onda kad mi spomenete da bi trebalo da menjam piconju,.. bogami nije mi lako,..trenutno ih omam oko 30-tak komada(uplašio se da ih neće biti pa ih samo kupovo),...


100kom 16F690
100kom 16F877A

veruj mi na kraju sam pravio od njih "drajvere za lcd" ... okacim na njih lcd a sa "glavnog" pica onda koristim i2c bus da posaljem ovom "seljaninu" sta da ispise / iscrta po lcd-u ... poklanjao sam ih, zabadao svuda ... imam jedan bre u lemilici ... to je moglo sa 2 tranzistora da se resi, ja sam stavio 16F877A + char LCD ... e .. u lemilicu !!! ... zgutas knedlu, kazes, jbg - zezno sam se uzeo sam 30 pogresnih picova, (zar ti nije bilo cudno da "bojim se da ih nece biti" - pa bre ako ih nema - to ti valjda nesto govori ... ne prave se bre vise), iskoristicu ih ponegde al ajd sad da uzmem par ozbiljnih i da krenem da radim kako valja....

Citat:

Zaista bih voleo da imam i ja delić znanja koje vi imate, sad tu ima puno faktora, vreme,posao,porodica,...pa se eto tako stalno vrtim u krug,...
Verujem da bi mnogo lakše bilo da nešto naučim da sam pored nekoga dok piše program i radi, ali nemam nikog u blizini ovako to sporo ide zato što jedan odgovor prati 100 mojih potpitanja,...i eto tako raspisah se ja ali u svakom slučaju hvala vam za vaše strpljenje i želju da pomognete,..

ps: ono programče gore,..to sam ja pisao 100%,..vidi se


ma .. znanje se stekne .. samo polako ... ja sam skoro burazeru objasnjavao (covek je elektronac, ali nikad nije koristio uC u zivotu) kako se tu sve svodi na "upali ledaru, ugasi ledaru", "procitaj digitalni i analgni ulaz" i "skontaj koje sve perfierije postoje, i za sta mogu da se upotrebe" ... to je kraj price .. sve se ostalo svodi na to da u data sheet-u procitas kako se koja periferija konfigurise (ako koristis asm) ili kako se zove koja biblioteka za koju perfieriju u kompajleru koji trosis (ako koristis neki visi jezik) ...
[ lm741 @ 09.01.2010. 01:35 ] @
upravu si, samo znaš kako, kontam daj da prvo savladam baš tu 84-u zato što je iz mog ugla gledano, jednostavan pa mi se čini da ću pre i lakše naučiti
nebunim se da uzmem nekog drugog piconju,moram probati,poslušaću tvoj savet pa šta bude, znam, to povlači nova pitanja zato što se otvaraju nova polja,..
Citat:
(zar ti nije bilo cudno da "bojim se da ih nece biti" - pa bre ako ih nema - to ti valjda nesto govori ... ne prave se bre vise), iskoristicu ih ponegde al ajd sad da uzmem par ozbiljnih i da krenem da radim kako valja....


u tom trenutku nije mi bilo važno dali ce za godinu dana biti istih na tržistu,samo da ih imam,tako je bilo
[ bogdan.kecman @ 09.01.2010. 01:47 ] @
znam tacno kako je bilo ... tako sam ja uzeo onih 100 jednih i 100 drugih (nasao papan za 20% jeftinije nego u klubu derikoza i odma seljo uzo po 100 kom ) ...

no fora je sot .. 84 moze da
- upali/ugasi ledaru
- procita digitalni ulaz
- ako se dobro secam ima 1 externi interrupt? mozda vise?
- ima jedan tajmer

sve to znaci sto on ima mozes da "probas" i "naucis" za 2 dana .. plus fore sa charlieplexed ledarama i slicno ... i to mu dodje to ... a svo budzenje (tipa ovog budzenja pwm-a na taj '84) ... super je to, al realno - cemu .. ako jeftiniji pic ima to u hw-u ... sutra kad budes teo da pravis line follower-a, uzeces PIC18F23K20 koji sa svojih 10 analognih ulaza u 2 pwm-a ima da prati liniju suludo brzo ... i da bude super precizan (imas po 5 senzora sa obe strane, mozes da ides na 5 napred + 5 nazad + imas cudo procesorske snage da obradis sve te periferije) ... i da jos svira 2 kanalnu muziku dok prati liniju ...

tako da .. sto se tice "da naucim ovaj" .. ja bi reko da si ga naucio i sad ga silujes, i njega i sebe ... moze on sa svojih 20MHz da odradi pwm iz interapta na solidno velikoj frekvenciji ... al zasto ? rece pre par postova da ti fali io pinova .. eto ga jos jedan razlog ...

sto se tice "koji", ja mislim da je za ucenje 18F + C18 idealna kombinacija ... odlican uC + odlican i dzaba C kompajler. E sad, tu je malo nezgodno ako nisi programer / ako ti taj deo nije jasan .. onda je potpuno nebitno koji pic koristis, uzmi neki simulator i radi sa njim, al nauci osnove programiranja ... danas si, nadam se, skontao sta je / kako sljaka interrupt (mada opet, 84 ni za to bas nije najidealniji za ucenje) :)
[ lm741 @ 09.01.2010. 02:00 ] @
inerapt jesam skonto,baš sinoć već u krevetu čitam knjigu za asm. i tačno znam da sam ga skonto i već planiram sledeće štaću

sad baš gledam taj 18f2550 njega nemam u programu micro code studio ali ga imam u picflashu, eto to je već problem sa kojim se moram suočiti,

dali sam te dobro razumeo, predlažeš da pređem na c (C kao jezik)

[ lm741 @ 09.01.2010. 02:18 ] @
nisam se dobro izrazi kada sam rekao " eto to je već problem sa kojim se moram suočiti"
da nemisliš da sam lenj, pa eto sad ja tu nešto kao moram,......ne,..
to su ona novo nastala pitanja otvaranjem novih polja, za koje odgovor trnovito pronalazim,...
[ bogdan.kecman @ 09.01.2010. 02:27 ] @
za 16F seriju je C "prejak" i mislim da tu bez asm-a nema nista ... mada moram da odam priznanje C kompajleru koji pravi mikoelektronika ... radi skroz solidno na 16F

za 18F seriju, ja predlazem C iz razloga sto
- c je ozbiljan jezik koji daje mogucnost brzog rada i lakog odrzavanja koda
- microchip pravi C18 koji je odlican C kompajler, koji je dzaba i koji je "standard" a pritom za njega isti aj microchip pravi biblioteke za kontrlu svih periferija na istim tim microchip uC-ovima tako da kad kazes pwm1_start() to ce na svakom picu koji ima pwm1 da "radi", a ti ne moras da gubis vreme i da citas za svaki od njih "kako se tacno konfigurise ovo i ono"... tako da kad sutra odlucis da ti je 18f2550 kratak za 3 pina, promenis u hederu da nije 2550 nego 4550 i eto novih 20 io pinova a kod i dalje radi 1/1

e sad .. basic, pascal, jalp i razne druge varijante mogu da budu ok, no ja nekako volem da ako ucim da se vatam za nesto probam da to bude "sto standardnija rucka moguca" tako da ja za 18F seriju savetujem C prosto zato sto je "najstandardniji" ... a da ne spominjem cenu :) (sorry ako preterujem sa spominjanjem cena kompajlera, al ja ne trosim "fixovan" sw, tako da 200$ za csc C, 500$ za hitech c i slicne cifre nisu bas male pare ako uporedis sa 0$ za kompajler nista losiji koji ima sve biblioteke podrzane od likova koji prave taj isti uC).

dodatno, ja uC programiram iskljucivo u asm / C ... nikad nisam ni probao nista drugo tako da mogu samo to da preporucim. ono sto mogu da kazem kao "preneseno iskustvo" je da su mi drugari rekli
- za basic ljubitelje picbasic pro ili boostBasic
- za one koji hoce C kompajler i za 16f i za 18f - boost c ( http://www.sourceboost.com/ )

ja nisam probao nijedan od 3 spomenuta (ja imam kuplje csc c za 10F, 12F i 16F - ne radi za 18f, imam kupljen mikroe c compiler za 16f i 18f al uglavnom koristim C18 free edition od microchip-a)

generalno, sve mu to dodje na isto ... sintaksa je vise manje ista, kada skontas "princip" potpuno je nebitno dal ces procedure da deklarises sa

Code:

void ledOn(){
  LATA=0xff;
  LATB=0xff;
  LATC=0xff;
  LATD.F1=1;
}


ili

Code:

void ledOn(){
  LATA=0xff;
  LATB=0xff;
  LATC=0xff;
  LATDBits.D1=1;
}


ili

Code:

Procedure ledOn
Begin
  LATA:=0xff;
  LATB:=0xff;
  LATC:=0xff;
  LATD.F1:=1;
End;


ili

Code:

SUB ledOn
  LATA=255
  LATB=255
  LATC=255
  LATD.F1=1
END SUB


ili

Code:

ledOn:
  LATA=255
  LATB=255
  LATC=255
  LATD.F1=1
retw


ko sto vidis ... princip je isti ... dal ce turis tackazarez ili ne .. dal ce cukas sub/endsub, labela/return, begin/end, {/} .. taj deo savladas za par dana ..
[ bogdan.kecman @ 09.01.2010. 02:35 ] @
ma nema veze lenjost .. ne bi sedeo sad u 03:28 (ako si u istoj vremenskoj zoni kao ja) i cukao poruke da si lenj ..

sto se tice tih "novih problema" .... ako trosis "fixovan" sw, proteus isis ima odlican simulator pic18F uC-ova .. C18 je dzaba za dl sa microchip sajta .. sve moz da testiras bez da uzmes lemilicu u ruku / omirises kiselinu .. ako se drzis podalje od tih fixovanih stvari, onda vidi http://www.oshonsoft.com/pic18.html ... to je jedan nas lik (ako se dobro secam, lik je iz munze konza) napravio ... i simulator je keva .. radi 1/1, satire, kida .. + mozes za njega da pravis module sam ... mislim da ti je to najboljih 30E koje ces da ulozis u hobi - nije tako mocan ko proteus isis - al em je domaci proizvod, em isis kosta "iljade"

tako da .. sa simulatorom mozes da isprobas svasta prilicno brzo, a iskreno, ovi "simulirani" osciloskopi su mnogo laksi za koristenje neko ovi pravi :D (posebno ovi sa cevkama)
[ lm741 @ 09.01.2010. 02:44 ] @
uf,..sad ne znam šta da kažem, sve to što pričaš mi tako lepo zvuči i primamljivo
zadao si mi puno zadaće, moram o svemu tome podebelo da razmislim
C... u životu nisam dotakao ni pogledao,..šta znam možda mi se i svidi

što se tiče simulatora, veruj do sada ni jedan nisam koristi, nekako sam to voleo da isprobam"na živo" a spržio sam samo dva komada i to nekom glupom greškom,..

ja sam kod Novog Sada na lokaciji

[ bogdan.kecman @ 09.01.2010. 03:01 ] @
ne znam sta da ti kazem :D ... od desetine jezika koje znam, ja i dalje najvolem C tako da sam tu (dodjavola, kako se kaze "biased" na srpskom???) .. al ko sto rekoh, prave ljudi ozbiljne stvari i u basicu i u pascalu...

sto se simulatora tice, ja sam progledao kada sam poceo da koristim simulatore. nije zezanje ... pazi i posle simulatora ti imas da isterujes bube ali druge vrste (evo ja se , na primer, vec od kad je pocela zima, borim sa statickim elektricitetom koji mi resetuje pic32MX440F256H ) ... pre toga me maltretirao SD card reader (cita fat16) "al samo na nekim karticama" dok nisam skapirao da su neke kartice prespore i da moram da smanjim brzinu SPI porta ...etc etc ... al eto to je isto odlican primer ... biblioteke koje dolaze uz microchip compajler izmedju ostalog imaju i kako da pricas sa SD karticom, i implementaciju FAT16 ... i gomilu drugih korisnih stvari

tako da ... simulator ti je po meni mnooooooogo iskusna alatka ... u mplab-u imas simulator (ja ga koristim za pic32mx posto nemam nikakav drugi) ... za pic18 i pic16 mi je istekao trial za oshonsoft i bas sam danas posao mail da ocu da kupim licence... isis je super al je malo preskup za moj ukus
[ lm741 @ 09.01.2010. 03:11 ] @
skinuo sam pic18 simulator,..sad se sećam da sam to već vrteo, na samom početku mog učenja programiranja ali tada još nisam znao šta je porta portb trisa,.....

što se tiče kupovine,verovatno da će mi se ovog puta svideti,..a bićemo u kontaktu da čuješ moje utiske i verovatno bulazna pitanja
[ bogdan.kecman @ 09.01.2010. 03:17 ] @
e da ... ako pogledas: http://www.oshonsoft.com/licenses.html

imas "specijalnu ponudu do 9tog januara" ... to mu dodje danas ... dakle valjda jos vazi ..

PIC & PIC18 Simulator IDE personal licenses - special offer
with add-ons included:
- PIC basic compiler 32-bit math support
- PIC basic compiler structured language support
- PIC18 basic compiler 32-bit math support
- PIC18 basic compiler structured language support

sve za 40E :)

ja i dalje mislim da je C mnogo bolje resenje ... ovaj njegov pic18 basic sa tructured lang support - nisam nikad video (verovatno ima mogucnost definisanja funkcija i procedura a ne samo subrutina) ... no, ko sto rekoh .. ja navijam za C al sam pristrasan (jeeeeeeeeeee setio sam se kako se kaze... ) ..

videcemo izjutra sta ce kolege koje su mnogo iskusnije od mene da kazu ... znam da je korak 100% za asm :) doduse onaj njegov stvarno skoro pa ko basic .. ako se ne varam ima i strukture ...

sve se generalno svodi na
- svrhu (ako to sve radis iz zabave - vidi sta ti je najzabavnije pa to radi, ako ti je cilj da dodjes do nekog cilja, vidi sta je najjeftiniji i najbrzi nacin da do tog cilja dodjes bez da zrtvujes kvalitet)
- TCO (total cost of operation) - generalno ovo ti je cela prica ... "koliko ti treba da naucis nesto novo", "koliko kosta dev tools", "koliko kosta sam uC", "koliko kosta periferija", "koliko ces vremena izgubiti", "koliko to vreme kosta"

zadnje dve stavke su uglavnom najbitnije... moj sat vremena rada kosta neke pare, ako koristim alat1 potrosicu X sati a sa alatom2 cu potrositi Y sati, nije bitan odnos cene alat1 i alat2 vec odnos alat1+cenaH*X i alat2+cenaH*Y... naravno ako moj sat kosta 50-100din i posao traje par desetina sati onda je cena alata mnogo vaznija od svega drugog, ali kako cena radnog sata raste tako cena samog alata gubi na znacaju a vreme utroseno na rad postaje znacajnije ....
[ lm741 @ 09.01.2010. 03:18 ] @
bogdane ,..pre no što nas pobrišu onako ko gumicom da ti se zahvalim i poželim laku noć,..odoh na spavanje
[ bogdan.kecman @ 09.01.2010. 03:23 ] @
nema na cemu ... dokle god si ti spreman da ucis potrudicemo se da ti pomognemo

a sto se brisanja tice - ne bi bio u kozi moderatorima :D, al mora se drzi nekakav red, koliko sam ja do sada skapirao, momci su extra korektni
[ Sepa011 @ 09.01.2010. 10:48 ] @
Axmmm, 'bro jutro

Koliko sam prometio, nisam ovde jedini 'matorac' ima i' jos (b.k)

Nece Jovancho ovo da cacka gumicom ima ovde dobre 'zvake' za one koji bi da citaju i da se edukuju. Sto se Oshone iz munze tice, paketla za nase ljude je manje od 40 evrica (barem je nekada imao 'debele' poouste za domaci zivalj, filozofija mu je da treba sj****i strance i ne kupovati njihove proizvode )

Ajd da nastavim sa prvom jutarnjom crnkom (plavuse cemo kasnije )
[ lm741 @ 09.01.2010. 11:24 ] @
dobro jutro,..dobar dan,..zaglavismo noćas
nakon mog poslednjeg posta nisam ni video da je Bogdan odgovorio,..samo sam uteko u krevet,..

kad završim ovaj moj "projekat" kačim kompletno sve, a posle ću imati vremena da pogledam šta mi sve treba za C18 pa da probam,...
jeste da mi je to hobi i volim,..ali bože moj, nebi bilo loše ni gepiti koju kintu na tome, zato nije to 100% samo zabava, nije da se pravdam ali mi je jako žao što nemam češće ovako vremena kao ovih dana da se bavim ovom temom,..
[ Sepa011 @ 09.01.2010. 11:40 ] @
Xe xe,

Pokusavam da iskopam Vladimirov (Oshon) telefon da vidim posto mu s' popus'. Koliko mi je poznato opn ima samo mobilni. Pasce obavestenje.

Nago Lalo, da li te je elektrostudio ispostovao i poslao ono sto je obecao? Vidim da imamo i novajliju (Keez-a) koji se interesovao za tako nesto.
[ bogdan.kecman @ 09.01.2010. 14:58 ] @
nisam ja zorane toliko mator :D :D :D nego sam jos uvek po utiskom :D :D :D

nego da se mi vrnemo malo na temu .. lm, cela ova prica je ok, ali ti ne savetujem da promenis pic sada "u pola projekta" .. ako se nisi bas preracunao pa ti fali pinova ... onda bezi odma na 18F, ako ti ovaj radi posao po broju pinova i ramu, onda privrsi ovo :)

no sad je tema malo "zamuljana" sa ovim off-topicom pa ne znam uopste gde si stao/zapeo sa generisanjem pwm-a. Iz mog iskustva ako ces da teras DC motore, teraj pwm na preko 20KHz inace ce da piste i zuje (zujace oni i ovako al ih neces ti cuti pa te bas briga). Software pwm na 20+KHz ce ta trazi da poteras taj 84 na max 20MHz ...
[ lm741 @ 09.01.2010. 15:15 ] @
elektrostudio,..nije mi se javljao niti slao bilo što,..???

ako se odlučim za eksternu memoriju fali će mi pinova zato što mi treba i LCD
ako ipak budem išao sa internom i uz par zahvata na tasterima ima dovoljno pinova
pwm mi za sada zadovoljava,radi kako treba,...ma piconja je to 16f84 i ha,..
koristim keramički rezonator 4 Mh i za sada nisam čuo zujanje,..
nebi ni ja sad na pola posla da prelazim na nešto totalno nepoznato, Sepa zna da sam ima nešto akcije sa 16f870 pa bi ukoliko zafali pinova, posao bi mi završio taj f870,..
danas sam samo malo radio na PCB-u ali već večeras trebalo bi da znatno uradim,...kad sve završim kačim slike,kod,pcb,...sve

[ bogdan.kecman @ 09.01.2010. 16:46 ] @
Citat:
lm741
ako se odlučim za eksternu memoriju fali će mi pinova zato što mi treba i LCD

zavisi koju ... imas 1wire eeprom, koji trosi samo jednu zicu, tj sedi na 1wire bus-u gde moze nekoliko uredjaja da sedi (na primer temperaturni senzor, rtc ..), imas i2c eeprom, on sedi na i2c bus-u koji trosi 2 linije, ali je isto bus, te mozes da stavis nekoliko uredjaja na isti bus (nekoliko eproma, rtc, temp senzor, pressure sensor, port extender ...)... onda imas SPI koji trosi ~4 pina (moze da se nagura i na manje) .... a imas i klasican paralelni ram koji trosi 8 pina za data i 4-16 pina za adrese ... zavisno za sta ces da koristis taj externi ram, ja ti savetuje i2c.

[ veselinovic @ 09.01.2010. 16:50 ] @
E ljudi,
ima jos matoraca koji doduse samo citaju, ali sa zadovoljstvom.
Nema razloga da se brise ista od ovoga, mali off je vrlo poucan.
Ako mi dopustite ( hehehe demokratija ) i ja bih malo u off.
Bogdane, razumijem tvoju pricu o osamdeset cetvorki ( volim je jos od 93 - hehehehe) ali ja preporucujem pocetnicima da krenu sa nekim takvim kontrolerom.
Pazi, ti ( i ja i Scepa - koji se podpisuje sa Sepa - ocoravio od sargarepe) znamo sta je PWM, znamo sta su protokoli, i jos hiljadu stvari. Mislim da neko ko zeli da radi elektroniku ( pa makar samo iz hobija ) mora imati sliku u glavi svih tih americkih skracenica, a istu najlakse ubaci u glavu negopraveci SW sve te skracenice.
Ako pocne o'ma sa hw IC2 pitanje je hoce li skontati zvaku o protokolima i hoce li umjeti napraviti neki svoj protokol, ako nekad bude imao zelju za tim.
Ne znam, ja sam predavao u srednjoj skoli ( dvije godine) i tjerao sam ucenike da skontaju te stvari, poslije je lako uzeti hw. Mora se znati sustina stvari, ili ja imam zastarjela misljenja.
Pozdrav za ekipu.
PS Zemunac je nekad davao fin popust za nase ljude - svaka mu cast.
[ lm741 @ 09.01.2010. 17:14 ] @
@veselinovic
hvala na podršci i razumevanju,..

@bogdane memorija mi treba isključivo da bi piconja pamtio koliko je zadat pwm i koliko impulsa treba odbrojati sa enkodera
memorija bi bila 24c01 preko i2c, ako se odlučim za to, nema pinova
ako idem internu, opet manjka pinova ali sa tasterima i programom mogu uštedeti dva ili tri pina što bi u tom slučaju bilo dovoljno
[ VRadule @ 09.01.2010. 18:20 ] @
KAd si naučio 16f84A, ti si u principu savladao kako radi jezgro (core) 16F serije. Svi ostali kontroleri 16F serije imaju isto jezgro uz dodatak
ram-a, flash-a i kojekakvog hardvera. Svako dodatno parče hardvera ima svojih dodatnih par registara za iniciranje i konfigurisanje.


Pretpostavljam da ćeš uskoro da dođeš do manjka programske memorije, ako do toga dođe, idi na 16F648, to je 84ka sa malo dodatne opreme i memorije.
Ko da sedneš iz golog Punta u Punto sa dodatnom opremom :)

Parametre možeš da smestiš i u programsku memoriju kao konstante (tabela iz koje biraš šta ti treba), prilikom samog programiranja. Jedino je problem ako hoćeš da po nestanku napona napajanja i ponovnom dolasku kontroler zadrži poslednja podešavanja.
Ukoliko ti ne treba back-up poslednjeg stanja trpaj sve u flash. (naravno 64 bajta internog EEproma su ti i dalje dostupni za manevrisanje).


[ lm741 @ 09.01.2010. 18:21 ] @
hdedoh da naručim simulator

Code:
(3) PIC & PIC18 Simulator IDE personal licenses - special offer (picpic18persspecial):       117.00
(1) PIC Simulator IDE personal license (picpers):     29.00
      
Sale Total ( EUR ):     €146.00


[Ovu poruku je menjao lm741 dana 09.01.2010. u 19:57 GMT+1]
[ veselinovic @ 09.01.2010. 19:06 ] @
Mladi covjece,
pisi Vladimiru mail i sigurno ce ti izaci u susret.
Ajde pa nam javi kako si prosao.
Imas dovoljno memorije u samom picu za te parametre. I mozes u interni eprom upisivati i tokom izvrsenja programa te parametre.
Za sada nema s potrebu za eksternom memorijom, a ako budes imao, poslusaj Bogdana pa predji na ozbiljniji PIC.
[ bogdan.kecman @ 09.01.2010. 19:09 ] @
za simulator, imas tamo "kontakt" pa kontaktiraj coveka ... sigurno je bolje da mu prebacis pare iz srbije u srbiju nego da mu uplacujes preko kreditne negde na net pa da on to dobije za mesec dana i da mu maznu xyz procenata razni ameri i razne banke ....

@veselinovic, hehe .. da .. samo .. ja nisam bas "toliko mator" :D (nemam jos ni 40), al pored ovih novih klinaca umem da se osetim kao da imam 70 :(

sto se tice '84 .. realno - cela 16F serija kosta koliko i 18F serija a nudi manje. Ok je da treba da se nauci asm, da treba da se nauci sw implementacija da ... ali iskreno .. mislim da preterujemo ... i da usporavamo "klince" ... zasto da sada izgubi 2 godine sa 16F serijom i asm-om ako to "nikad posle nece upotrebiti posto ce mu biti i jeftinije i brze da uzme 18F i C" ??? a to da ce "bolje da nauci i2c protokol ako ga bude implementirao u sw-u" .. ja se ne slazem. Pritom, ja spadam u zakerala koja ove nove .nemoj virtualne lelemudije ne zovu programiranjem i ove kliktace koji sebe zovu programerima ne priznajem .. i smatram da neko mora da zna osnove da bi mogao da se bavi nekim poslom ... i pored svega toga i dalje mislim da je bolje poceti sa 18F nego sa 16F.... a to sto "ima mnogo knjiga za 84", ima super knjiga za pic32 i c programiranje ? ima extra knjiga za dspic, ima i za 18F seriju .... a ima mnooooooogo knjiga o mehanickim kompjuterima, citacima busenih kartica i slicno - el treba da programiramo sa zumbalicom ? Kao sto rekoh, ja sam prvi koji misli da su osnove neophodne i da mora da se nauci da se hoda pre nego se ide na trke, al sad bas da usavrsavamo hodanje na sve 4 zato sto su nasi pretci to radili, malo je preterano imho.... :D

zamisli da jugo i audi kostaju isto para ... zasto bi ucio da vozis na jugu ??? zasto bi ikad seo u jugo ako audi kosta isto toliko a daje toliko vise ??? zasto bi "vezbao da pritiskas kvacilo celim telom" ili da treniras ruke okrecuci volan??? nece te to naciniti boljim vozacem, samo frustriranim ... cela kombinacija "to mogu da odradim i sa 16ticom" ... pa sta, el ta sesnestica jeftinija? nije, koji je onda razlog ??
[ grabik @ 10.01.2010. 10:12 ] @
Ako ti je elektronika struka, onda zaboravi 84-tvorku. To je samo gubljenje vremena mikrocip je napustio tu tehnologiju odavno. Da ne bude zabune ja sam poceo da radim sa 84 ali onom prvom flash sa oznakom C84.

A koliko sam shvatio da si sa basicom tek poceo, presjeci i predji na mikrocipov C i to najbolje odmah na 16 bitne , sto prije to napravis bice manje bolno.

Ova 16bitna serija ima hardverski ugradjeno vise manje sve sto ti padne na pamet da radis:).

PWM izlazi za BLDC , 3F motore itd. ulazi za quadrature opticke enkodere, vrlo brze ADC 10bitne i 12bitne itd itd. , memorijskog prostora i brzine koje pruza su vise od naucne fantastike za f84. Cijene dosta njih su jeftiniji od f84.

Podrsku samog proizvodjaca sto se tice C-a, primjera, uputstva, takodje neoptimizovana varijanta C-a potpuno besplatna. Takodje na netu primjera koliko hoces. Razmisli.


Jos malo EPP-a :) projekti sa 16 bitnim PIC , pogledaj malo, vise manje sve u C-u, slike objasnjenja itd.
http://www.circuitcellar.com/microchip2007/index.html

[ bogdan.kecman @ 10.01.2010. 10:35 ] @
grabik, ti si jos gori od mene :D :D :D .... ja sam preskocio dsPic skoro komplet i sa 18F presao na 32mx (mozda sam uradio 3-4 projekta samo sa dsPic) tako da radim ili 18F ili 32mx ... tako da ne znam koliko je 16bitna serija dobra za pocetnike ... sa celim konceptom (svaki funkcionalni pin moz bude de oces, advanced hw-om poput dma .. ) koji 16bitni donose mozda je previse za pocetnika ... ja bih ipak predlozio pocetak na 18F i C18, posle je prelazak na 16/32 bitne i C30 "prirodan". 32mx ne bih nikako predlozio za pocetak posto je smd malo zeznut za prototyping a to je u startu preko potrebno
[ lm741 @ 10.01.2010. 10:56 ] @
@gragik
Pozdrav,..elektronika mi je hobi a zanimanje,..viklovanje elektro motora,...servis bele tehnike,.. sve u svemu teška industrija,..
nevolim pecanje, nevolim fudbal ali zato volem elektroniku,..

Poslao sam pisamce zemuncu,..čekam odgovor,..
[ grabik @ 10.01.2010. 11:00 ] @
Citat:
lm741: @gragik
Pozdrav,..elektronika mi je hobi a zanimanje,..viklovanje elektro motora,...servis bele tehnike,.. sve u svemu teška industrija,..
nevolim pecanje, nevolim fudbal ali zato volem elektroniku,..

Poslao sam pisamce zemuncu,..čekam odgovor,..


Onda jedan razlog vise da radis sa dsPIC jer su i zamisljeni i pravljeni da rade kontrolu motora:)
A gotovo svi se proizvode u DIP varijanti a i slobodni softver za programiranje ih podrzava.

[ grabik @ 10.01.2010. 11:03 ] @
bogdan, ja sam preskocio 32bitne zbog pakovanja a ne zato sto to ne zasluzuju, nisam radio sa njima ali pretpostavljam da su jos laksi za upotrebu od dsPIC mc-a.
[ bogdan.kecman @ 10.01.2010. 11:12 ] @
grabik, sa 32mx .. sta znam .. nije uopste kao da programiras mikrokontroler ... toliko imas "vremena" na raspolaganju da sve standardne stvari o kojima naucis da vodis racuna (koliko sta traje i slicno) prosto nemaju smisla ... jedan obican 32mx440f256h na primer, opsluzuje oled display (graficki spi display na sw spi portu posto 256h ima samo jedan hw spi port), SD karticu (na hw spi portu) sa fat16 podrskom, cita komande sa sd-kartice, parsira ih, preracunava sve sto treba i vozi 5 steppera (vrlo precizno u 1/16 stepu), kontrolise 2 grejaca (dakle 2 analogna ulaza sa ptc-a + 2 digitalni izlaza za grejace) .... i ima "kolko oces" slobodnog vremena dok to sve radi :D + nekoliko slobodnih pinova :D ... ono sto je nezgodno je - nema ih uopste u dip-u i nisu dzaba kao 8 i 16bitni
[ grabik @ 10.01.2010. 18:05 ] @
bogdan , ne sumnjam u brzinu tih novih 32bitnih, kazu da su potrosili jako veliki novac da bi razvili 32 bitno jezgro, nisu hteli da licenciraju vec su razvili svoje, vrjeme ce pokazati da li ce im se to isplatiti.


[ bogdan.kecman @ 10.01.2010. 22:16 ] @
ne znam da li se njima isplati, ali ja sam licno odusevljen kako im radi 32bitno jezgro. Imao sam "vrlo kratak" skok u ARM 32bita i brrrrrrrrrzo sam se vratio picu posto sa 16->18->ds->32 ide sve linearno .. sve radi .. sve jasno ... onaj avr mi i majku i oca te sam odustao i vratio se na sta znam ... svaka armu cast al, nije to za mene :(

sve u svemu, odlicna sprava, ja se nesto mislim, imam jedan 32mx u rezervi (64 pinski) i razmisljam se da napravim neki mini break board da mogu da ga bodem u bread board za testiranje .. vudecemo .. imam sada bitnije stvari
[ lm741 @ 11.01.2010. 23:22 ] @
Pozdrav,..

evo nakon više časovne obdukcije ove moje ažbahe, došao sam do sledećih zaključaka,..

1.Neradi dobro!
2. _str_ je bio potpuno u pravu

Citat:
Brojanje bi mogao uraditi i bez interapta kao taster koji si pomenuo ali bi se u ovom slucaju moglo desiti da zbog brzine motora dodje do preskakanja izbrojanih impulsa.


uradio sam sledeće:
sa 4 MHz podignem na 20 MHz, interni oscilator
znatno se popravila stvar, sada sam pri manjim brzinama dobio precizno brojanje ali užasno pištanje iz motora (ono što je bogdan rekao)

3. skontao sam da se program previše zadržava oko izvođenja pwm rutine i zato u toku te radnje "nevidi" promakle impulse sa enkodera
dali sam u pravu?

4. ako se opet vratim na interapt, to znači da pri svakom impulsu sa enkodera, program će biti prekinut da bi uvećao promenljivu za 1
ako je to tako, to mi nešto baš i nije logično rešenje

ako jednim okretom osovine motora ima 20 impulsa a potrebno je 4000 impulsa da bi ozvršio jednu radnju to znači da će program biti prekinut 4000 puta,..?









[Ovu poruku je menjao lm741 dana 12.01.2010. u 01:38 GMT+1]
[ bogdan.kecman @ 12.01.2010. 11:43 ] @
Citat:

ako jednim okretom osovine motora ima 20 impulsa a potrebno je 4000 impulsa da bi ozvršio jednu radnju to znači da će program biti prekinut 4000 puta,..?


pa sta ako ce se prekinuti 4000 puta ... nije da program za to vreme radi nesto "extra bitno i da ne sme biti prekinut" ... u tome i jeste cela poenta interapta - da te prekine kada se desi nesto bitno (sto je u tvom slucaju taj impuls) ...

ako u interrupt rutini imas samo brojac++ prekid ce trajati nesto pateticno kratko (ako se dobro secam, u csc c-u za koji sam ti napisao primer, imas oko 8 komandi overhead i ovaj ++ je ako se dobro secam 2 komada dakle imas oko 10 komandi ukupno u interruptu sto ce reci 1/(20000000/(10*4)) sekundi = 0.000002sec dakle 2 mikrosekunde ako teras miska na 20MHz ... dal ce to stvarno da ti napravi problem ??

Code:

#include <16f84.h>
#include <defs_f84.h>  
#fuses hs,nowdt,put,noprotect //ne secam se dal bese hs fuse za 20mhz oscilator il se drugacije zove

word brojac;

#int_ext 
void iserv(void){    
    brojac++;
}

void main(){
   trisb0=1;    // interapt nam je na B0
   
   brojac = 0;
   enable_interrupts(INT_EXT); // upali externi interapt
   enable_interrupts(GLOBAL); // upali hendlanje interapta (sad pocinje da broji)

   while(1)   {
      while(brojac<4000){
          // radi sta radis u tih 4000 koraka
      }
      brojac = 0; // resetuj brojac na nula pa jovo nanovo
   }

}
[ bogdan.kecman @ 12.01.2010. 11:58 ] @
da, vezano za pistanje, ako ne mozes da teras pwm preko 24KHz (pa da malerise pse al ne i ljude), stavljanje blok kondenzatora direkt na motor (ne vredi da ih stavljas na pcb) od 15-33nF jedan izmedju + i -, jedan od + ka masi motora i jedan od - ka masi motora. Ima fora (sigurno, al je ja ne znam) da izracunas tacno idealnu vrenost tog kondenzatora u odnosu na frekvenciju pwm-a koju koristis, al ja obicno stavim "sta imam" i to obicno pomogne :D ... ( mozda neko bude dobar pa nam svima da formulu za racunanje te tacne vrednosti .. do tada, 15-33nF radi posao)
[ _str_ @ 12.01.2010. 13:06 ] @
Sto se tice pistanja, kada si promenio kristal dali si ponovo kopajlirao program sa novom postavkom kristala?
[ lm741 @ 12.01.2010. 13:32 ] @
bogdane pozdrav,..

uuu...tvoj odgovor me raduje,..

plašio sam se da taj ma koliko kratak prekid, može da ometa oblik signala PWM-a,..
na osnovu tvog i odgovora ostalih učesnika u ovoj temi, da probam ukratko ono šta sam ukapirao,..

interapt je PRIORITET nad svim mogućim dešavanjima u picu (naravno ako je omogućen)
dok se program izvršava i ako u nekom momentu neka radnja nesme da se prekine, u programu ispred te rutine int. mora biti onemogućen tek nakon izvršene radnje, int. se opet omogućuje. to je za slučajeve gde bi prekid programa bio značajno dug vremenski period (neki podprogram koji zahteva vreme izvršavanja)
u mom slučaju vreme prekida je veoma kratko pa se može primeniti interapt bez obzira na tok programa,.. dali je to ispravno ???

primer kada je interapt omogućen:
sedim u sobi i gledam TV, zvoni telefon, odazivam se pozivu(interapt), ali nisam prekinuo gledanje TV-a, završio se razgovor i dalje nastavljam da gledam TV

primer kada je interapt onemogućen:
sedim u sobi i naprasno u kupatilu puca cev sa vodom,trčim da turim prst u rupu,zvoni telefon ali ja se ne odazivam ignorišem poziv

malo su primeri šklj ali se nadam da će te razumeti šta sam hteo reći,..




[ lm741 @ 12.01.2010. 13:36 ] @
Citat:
_str_: Sto se tice pistanja, kada si promenio kristal dali si ponovo kopajlirao program sa novom postavkom kristala?


da naravno,..

a u programatoru podesio da je HS oscilator
[ _str_ @ 12.01.2010. 17:37 ] @
Citat:
lm741:
malo su primeri šklj ali se nadam da će te razumeti šta sam hteo reći,..

Mi jesmo ali nam je drago da si i ti razumeo :)

E sad sto se tice interapta ne postoje dva sa istim prioritetom, tj. ako se slucajno pojave dva zahteva za interapt uvek je jedan 'glavni' u odnosu na drugi a prioriteti su dokumentovani za svaki kontroler.
Da malo karikiram, ako ti u istom momentu zazvoni telefon, ulazna vrata a u kuhinji zapisti cajnik, sta ces prvo odraditi?

[ lm741 @ 12.01.2010. 19:36 ] @
evo me,.. (iznenadni gosti),..

mislim da u registru INTCON, jedan od bitova treba setovati kako bi tom interaptu dao prioritet, nisam sigura ali nemoj ni ti da daješ odgovor,da probam sam pa se javljam,..

a da ga nisi ti postavio budi siguran da mi je to bilo sledeće pitanje u sličnom paketu
[ grabik @ 12.01.2010. 20:06 ] @
Citat:
lm741: evo me,.. (iznenadni gosti),..

mislim da u registru INTCON, jedan od bitova treba setovati kako bi tom interaptu dao prioritet, nisam sigura ali nemoj ni ti da daješ odgovor,da probam sam pa se javljam,..

a da ga nisi ti postavio budi siguran da mi je to bilo sledeće pitanje u sličnom paketu


Ovaj mc ima samo jedan interapt vektor i mozes samo da ukljucis interapt, mislim hardverski nemozes da im dajes prioritet(koliko me sjecanje sluzi), za prioritet interapta moras da ides na pic18f.

Pogledaj onaj kod koji ti je postao bogdan, setujes pin na portu B kao ulazni , ukljuci eksterni interapt, ukljuci globalni interapt. Svaki puta kada se "okine" interapt preko pina , izvrsava se rutina za interapt, kompajler izbrise zastavicu eksternog interapta i vraca te nazad u glavnu petlju i tako u krug .... ponovo kad se desi interapt skace na rutinu za izvrsavanje interapta..... pa nazad u glavnu petlju itd.......




[ _str_ @ 12.01.2010. 20:35 ] @
Citat:
lm741: evo me,.. (iznenadni gosti),..

mislim da u registru INTCON, jedan od bitova treba setovati kako bi tom interaptu dao prioritet, nisam sigura ali nemoj ni ti da daješ odgovor,da probam sam pa se javljam,..

a da ga nisi ti postavio budi siguran da mi je to bilo sledeće pitanje u sličnom paketu


(Gosti iz microchip-a? :)

Odgovor je da ti ne mogu dati odgovor, jer ne koristim pic. Jedino mozemo razmeniti iskustva sa drugih platformi i kako su im interapt vektori reseni, naravno ako nekog interesuje....
[ lm741 @ 12.01.2010. 20:44 ] @
@grabik
malo si me preduhitrio ali svakako nebi dao takav odgovor na pitanje koje je postavio _str_
negde u mojim ćitabima stoji odgovor ali aj sad,...stigao sam da pogledam bitove registra INTCON,...tu se ne nalazi odgovor

@_str_
mislim da je grabik delimično dao odgovor

(Ovaj mc ima samo jedan interapt vektor i mozes samo da ukljucis interapt, mislim hardverski nemozes da im dajes prioritet)

na pinu RB.0 može ili nemože biti prekit i to je samo jedan pin
ako bi bilo dva pina sa int1,..int2,.. dali bi int1 bio prioritet

ali kako dati prioritet,..ne znam


[ lm741 @ 12.01.2010. 20:53 ] @
dobro,..da se ja ipak vratim na trenutni problem zato što za sada nemam potrebu za prioritetom ali je veoma zanimljivo,...
trebalo bi večeras da imam pravo stanje inpulsa sa enkodera upotrebom INTERAPTA,..
ako mi uspe, eto mene,..
[ bogdan.kecman @ 12.01.2010. 21:20 ] @
16F kao sto rece kolega nema prioritete. 18F imaju uglavnom "low" i "high" a oni veci imaju to u malo vise nivoa, tako da - u ovom slucaju - nemas sta osim da ukljucis interrupt na b0 i da ukljucis globalno interrupte. onaj primer od pre par postova u csc c-u ti radi tacno to (upali interapte i broji ih) .. ne verujem da je veliki problem da to prepises u basic
[ VRadule @ 13.01.2010. 00:07 ] @
Sto se tice prioriteta interapta kod picova sa jednim interupt vektorom on se dodeljuje softverski.
Jednostavno u interupt rutini prvo iskontrolises da li je RB0 interupt flag setovan i ako jeste izvrsis nesto, pa onda iskontrolises
da li je timer0 interupt flag setovan i ako jeste opet izvrsis nesto.
Ovako napisanom interupt rutinom ti si dodelio prioritet RB0 interuptu nad Timer 0 interuptom.(zato sto si prvo njega kontrolisao, tupavo zar ne? :))

Ako bi hteo da timer0 ima prioritet prvo bi kontrolisao da li je timer0 interupt flag setovan pa tek onda da li je RB0 interupt flag setovan.

[ grabik @ 13.01.2010. 06:45 ] @
Citat:
VRadule: Sto se tice prioriteta interapta kod picova sa jednim interupt vektorom on se dodeljuje softverski.
Jednostavno u interupt rutini prvo iskontrolises da li je RB0 interupt flag setovan i ako jeste izvrsis nesto, pa onda iskontrolises
da li je timer0 interupt flag setovan i ako jeste opet izvrsis nesto.
Ovako napisanom interupt rutinom ti si dodelio prioritet RB0 interuptu nad Timer 0 interuptom.(zato sto si prvo njega kontrolisao, tupavo zar ne? :))

Ako bi hteo da timer0 ima prioritet prvo bi kontrolisao da li je timer0 interupt flag setovan pa tek onda da li je RB0 interupt flag setovan.


Kako se ovdje hoce kontrolisati nekada vrlo brzi procesi, recimo motor vrti punom brzinom , broj impulsa treba multiplikovati sa cetiri da bi se dobio broj promjena stanja sa njega, do okidanja interapta moze dolaziti toliko brzo da se PIC "zaglavi" sa njima pogotovo sto se prioritet odredjuje softverski i dodje do neobradjenih interapta i gresaka kontrole, ako trebaju prioriteti kod interapta zaobidji 16f.

Za kontrolu optickog enkodera imas jedan vrlo jednostavan kod koji koristi jedan vanjski interapt i radi provjeru drugog pina(dva pina koristis za kontrolu interapta), ali kako sve to ide softverski i jos ako hoces i PWM softverski taj motor treba da se okrece jako sporo da ulaz za enkodera ne bi pogubio signale.

Postoji bolje rjesenje sa nekim PIC koji ima dva tajmera i hardverski PWM, onda ti za ulaz treba nekoliko 74xx IC kojima prethodno obradjujes signal sa enkodera i ako vrti u jednu stranu okida hardverski samo jedan brojac u picu a kad vrti u drugu stranu okida drugi brojac u picu.

Softverski samo usporedjujes stanja oba brojaca i kontrolises PWM izlaz.

Citanjem brojaca u picu znas na koju se stranu motor vrti i takodje polozaj motora.
Imas jedan primjer na mikrocipovom sajtu sa shemom ,pogledaj pod kontrola DC motora picom, kod je isto pisan u C-u.
[ grabik @ 13.01.2010. 06:56 ] @
Citat:
_str_: (Gosti iz microchip-a? :)

Odgovor je da ti ne mogu dati odgovor, jer ne koristim pic. Jedino mozemo razmeniti iskustva sa drugih platformi i kako su im interapt vektori reseni, naravno ako nekog interesuje....


Radis sa 8 bitnim atmelima, oni imaju vise interapt vektora, da li oni imaju prioritet kod izvrsavanja interapta ili ne, odnosno da li im mozes zadavati prioritet interapta po zelji?
[ lm741 @ 13.01.2010. 09:22 ] @
definitivno negde grešim,..
radi ali nije ni blizu kada sam ima IF...THEN
veoma slabo registruje impulse sa enkodera
kada na mesto enkodera stavim običan taster, broji do zadatog broja zatim okrene smer ali to uradi samo nekoliko puta,zatim nastavi da se vrti u jednom smeru i više nemože da promeni smer dok ne rasetujem pic pa sve ponovo

Code:
on interrupt goto pik    'pik je labela 
  
  INTCON.7=1
  INTCON.4=1
  OPTION_REG.6 = 1   
  
  pocetak:
  
     'glavni program
  
  goto pocetak
  
'   podprogram za obradu interapta

 DISABLE 
pik:
    INTCON.7=0
    INTCON.4=0
    
    if INTCON.1 THEN brojac=brojac+1
    INTCON.1=0
    
    INTCON.7=1
    INTCON.4=1
    
    
   RESUME   
[ lm741 @ 13.01.2010. 11:03 ] @
Citat:
Pogledaj onaj kod koji ti je postao bogdan, setujes pin na portu B kao ulazni , ukljuci eksterni interapt, ukljuci globalni interapt. Svaki puta kada se "okine" interapt preko pina , izvrsava se rutina za interapt, kompajler izbrise zastavicu eksternog interapta i vraca te nazad u glavnu petlju i tako u krug .... ponovo kad se desi interapt skace na rutinu za izvrsavanje interapta..... pa nazad u glavnu petlju itd.......


to je sve tako jednostavno i logično ali neide pa neide,..
[ lm741 @ 13.01.2010. 13:59 ] @
KONAČNO, provalio sam ga

kako je bogdan rekao za 16f877, e tako je i meni i oca i majku enkoder koji se nalazi na motoru,..
prvo motorče koje sam koristi(videli ste sliku) nisam bio zadovoljan pa ga zamenim sa drugim,ali na tom drugom motorčetu, perforirani disk na enkoderu ima 400 proreza, što je i problem svo ovo vreme i sa taktom od 20 MHz nije stizao da "vidi" te proreze, tek pri veoma malim obrtajima
kada sm došao na ideju da bi to moglo biti problem, na drugi kraj osovine istog motorčeta, stavio sam disk sa 64 proreza, malo se bolje pokazao ali opet jok.
stavim sledeći disk sa samo jednim prorezo i sada radi odlično, stiže da ga očita i pri velikim obrtajima

od sinoć do kasno, pa danas, za.......o sam se sa programom verujući da negde grešim,..gad eto,..
pitam se, sa koliko treba da se taktuje pic da bi mogao da vidi ovako sitne proreze i dali je uopšte taj enkoder za neke veće brzine

uslikao sam pa kačim slike tog diska, samo da spremim fotke
[ lm741 @ 13.01.2010. 14:38 ] @

foto,..
[ bogdan.kecman @ 13.01.2010. 14:49 ] @
Code:

    INTCON.7=0
    INTCON.4=0
    
    if INTCON.1 THEN brojac=brojac+1
    INTCON.1=0
    
    INTCON.7=1
    INTCON.4=1


ovo ti je interrupt ... to je 5 komandi + if + inc koje cemo pretpostaviti da su u basicu 4 komande .. dakle ukupno 9 .. neka bude 10 .. to je 40 taktova, na 20MHz to je 40*(1/20000000)sec = 2 usec.
ako ti se motor vrti 600RPM, dakle 10RPS, i enkonder ima 400 "rupa" imas 400*10=4000 impulsa u sekundi, dakle jedan impuls na 1/4000 = 0.00025sec = 250 usec.
iz toga ide da imas za svoj program dobrih 248 usec da radi izmedju dva interapta (podrazumevamo da motor ide na 600RPM i da je uC na 20MHz).

ako motor pici na 6000rpm stvari su malo drugacije i na svaki interrupt imas samo 23usec za rad .. i to je i dalje dovoljno.

ako oces da teras motor preko 6000RPM, onda ti stvarno ne treba 400 "rupa" na enkoderu :D

e sad, "normalno" bi ti to radio tako sto imas par CCP modula na picu (uglavnom imas bar 2), jedan ccp modul koristis da generises onaj PWM a drugi koristis za brojanje, tako da mu kazes da mu setujes vreme za brojanje i uvek imas vrednost "prosecna brzina u zadnjih x jedinica vremena" (obicno je to "prosecna brzina u zadnjih 10ms" na primer, mada ti nekad i 100-200ms radi posao a nekad ces da ga ganjas i na manje vrednosti od 10ms) ... no to sa '84 neces napraviti
[ lm741 @ 13.01.2010. 15:32 ] @
zdravo bogdane
poslao sam odgovor ali sad nešto i internet za....a

ako si pogledao zadnju foto "uspelo" tek sa tim diskom sam zadovoljan kako radi i taktujem pic sa 12 MHz
slažem se sa tvojom matematikom ali kod mene u praksi to nije tako
kada je bilo na 20 MHz i ubačen kod za interapt, motor nije hteo ni da mrdne
tek na 12 MHz i sa diskom od 63 proreza bilo je dobro ali ne dovoljno, pri brzini osovine od stotinak obrtaja, značajno je gubio korak tj. nevidi inpulse
sa 12MHz i jednim prorezom radi sasvim ok i pri velikim obrtajima

zašto je to tako,ne znam ali da ću upamtiti ove zahvate to znam!!!


da,.. treba i to pomenuti da ako disk ima 400 proreza to nije 400 inpulsa koji okidaju interapt, svaki 5(peti) prorez je inpuls za int.
OPTION_REG.6 = 1 znači da okida int. na rastućoj ivici
tablica istine odgovara i za ovaj enkoder kao za prethodni(tamo onaj gore sa početka ove teme)
to znači da još dobijam na vremenu ali jok,nećće

[ bogdan.kecman @ 13.01.2010. 16:57 ] @
ne bi trebalo da se tako ponasa .. sa stotinak rpm i 12mhz to bi moralo da radi .. da li imas function generator mozda?
[ lm741 @ 13.01.2010. 17:11 ] @
nemam generator,..
ali dobro, meni je za sada bitno da interapt rutina dobro radi i da sam to skontao da bi mogao dalje
ove motoriće koje sam koristo u eksperimentima zameniću onim koji mi odgovara na mašinici, taj budući motor sigurno nema nikakav disk na sebi pa ću morati praviti kako mi odgovara,..


[ Sepa011 @ 13.01.2010. 17:17 ] @
Malo OFF TOPIC (Lali ce da se svidi)

Citat:
-------------------------------------------------------
Za zainteresovane korisnike iz Srbije vaze povoljnije
cene od zvanicnih.

Ako ste zainteresovani samo za:
- PIC Simulator IDE personal license
ili samo za:
- PIC18 Simulator IDE personal license
ili samo za:
- AVR Simulator IDE personal license
cena licence je 1000 dinara.

Po ceni od 2000 dinara mozete dobiti sledeci paket:
- PIC Simulator IDE personal license
- PIC basic compiler 32-bit math support
- PIC basic compiler structured language support
- PIC18 Simulator IDE personal license
- PIC18 basic compiler 32-bit math support
- PIC18 basic compiler structured language support
- PIC10F Simulator IDE personal license
- Z80 Simulator IDE personal license
- 8085 Simulator IDE personal license
- OshonSoft.com Function Grapher personal license

Po ceni od 1500 dinara mozete dobiti sledeci paket:
- AVR Simulator IDE personal license
- AVR basic compiler 32-bit math support
- AVR basic compiler structured language support
- Z80 Simulator IDE personal license
- 8085 Simulator IDE personal license
- OshonSoft.com Function Grapher personal license

Cena za:
- PIC18 basic compiler USB support personal license
je 1500 dinara. Ova licenca podrazumeva posedovanje
PIC18 Simulator IDE personal license.

Vladimir Soso
064/2864833


Kraj OFF-a
Malopre pricao sa Vladom
[ lm741 @ 13.01.2010. 17:21 ] @
a jel možemo mi sa tobom,..


opet trčim ko magare pred rudu,.. jel to dole njegov broj direkt,...i njemu se obraćamo,..???

[Ovu poruku je menjao lm741 dana 13.01.2010. u 18:57 GMT+1]
[ Sepa011 @ 13.01.2010. 18:30 ] @
Sta bre samnom?

Ja samo preneo emajl sto mi je Vladimir poslao i uz njegovu saglasnost uturio njegov broj telefona.

(vidis da sam moj zbog zecova izbriso is potpisa).
[ grabik @ 13.01.2010. 18:51 ] @
Code:

pik:
    INTCON.7=0
    INTCON.4=0
    
    if INTCON.1 THEN brojac=brojac+1
    INTCON.1=0
    
    INTCON.7=1
    INTCON.4=1
    
    
   RESUME   


Nisam nesto na ti sa basicom ali koliko vidim ovo ukljucivanje-iskljucivanje globalnog interapta i eksternog interapta u interapt rutini je nepotrebno.

Code:

pik:
        
    if INTCON.1 THEN brojac=brojac+1
    INTCON.1=0
         
   RESUME   


Ovo bi trebalo da radi, globalni interapt se iskljucuje recimo upisujes u eeprom ili slicno, neki spori proces koji ne bi trebalo prekidati.

ili ako koristis samo taj jedan interapt mozes i if da izbacis
Code:

pik:
        
    brojac=brojac+1
    INTCON.1=0
         
   RESUME   


Ostali kod koji jos koristis u picu da li je provjeren?
Kazes da kod vece brzine se ne desava nista, da li imas dobar kristal i preporucenu velicinu kondenzatora za tu frekvenciju. Moguce da motor pravi smetnje i pic se zaglupi. Kako ti je pic spojen, kolika je duzina vodova napajanja?
Takodje sa enkodera bi trebala cista cetvrtka da dolazi na ulaz, recimo kod pritiska na mehanicki prekidac imas u trajanju od nekoliko ms i nekoliko desetaka ili cak i vise impulsa.

[ lm741 @ 13.01.2010. 19:59 ] @
dok nisam imao interapt, samo if, kristal 20 MHz je bez problema radio
kako sam ubacio int. neće ni da mrdne

napajanje pica, siguran sam da je dobro, maksimalno kratki kablobi, imam jedan blok 100n što bliže nožicama VDD i VSS


ali kao što rekoh bogdanu,meni i nije toliko bitna velika rezolucija tako da zadovoljava niža frek. pa nebih u ovom trenutku da patim piconju

a evo koda koji trenutno fercera,..

Code:
 on interrupt goto pik    'pik je labela 
  DEFINE OSC 12           'kristal 12 MHz
  INTCON.7=1              'dozvola za sve prekide
  INTCON.4=1              'dozvola za prekid na RB.0 
  OPTION_REG.6 = 1        'rastuća ivica
  trisb.0=1     
Sp var byte        'promenljiva za PWM
brojac var word    'promenljiva za brojac impolsa sa enkodera


ns var bit         'novo stanje tastera Up          'velicina promenljive
ss var bit         'staro stanje tastera Up
nnss var bit       'novo stanje tastera Down
ssss var bit       'staro stanje tastera Down

'******************** imenovanje pinova **********************


SYMBOL and2=portb.6   'and2                              
symbol h1=portb.4     'izlaz pwm
symbol and1=portb.5   'and1
symbol br=portb.0     'interapt          
symbol Tp=porta.2     'taster plus
symbol Tm=porta.3     'taster minus

'******************* ***********************
INPUT br         
input tp              
input tm
output and2
output h1
output and1

 
              
'***********************************************************

ss=tp     'taster nije stisnut pa ce ss biti 1
ssss=tm   'taster nije stisnut pa ce ssss biti 1
sp=5      'promenljiva sa 5 polazno stanje


 
brojac=0
and1=1
and2=0

'********************* glavni program ******************************************
pocetak:  'labela

ns=tp     'moguce novo stanje tastera
nnss=tm   'moguce novo stanje tastera

 
if ns<ss and sp<250 then   'ispituje stanje tastera i velicinu promenljive
sp=sp+5                  'ukoliko su uslovi ispunjeni uvecava promenljivu za 5
  endif


if nnss<ssss and sp>5 then 'isto kao prethodno
sp=sp-5                     'isto,..
  endif
                      

pwm h1,sp,10                'PWM rutina.......h1 pin na kom je signal 
                                             'Sp je promenljiva
                                             '10 je broj ciklusa,..
                                             
'*********************** brojac ******************************************                                            
  
if brojac=100 then        'ako je dostigao 100 skok na vrh
goto vrh
  endif
 
ss=ns       'za sada ignorisem  
ssss=nnss   'za sada ignorisem

goto pocetak

'******** potprogram **************************************

vrh:  
    
    toggle and1         'promena stanja pina 
    toggle and2
    
    brojac=0
               'vracanje brojaca na nulu 
    goto pocetak
   DISABLE
pik:
    INTCON.7=0    'zabrana svih prekida dok se trenutni obradi
    
    
                                       'ako je detektovana promena na pinu RB.0
    if INTCON.1=1 THEN brojac=brojac+1 'uvecaj brojac za 1
    INTCON.1=0                         'obrisan fleg 
    
    INTCON.7=1                         'omoguceni svi prekidi
    INTCON.4=1                         'omogucen prekid na RB.0
    
                                       'izlaz iz interapta
   RESUME                        

                                                                           
end



[ bogdan.kecman @ 13.01.2010. 21:16 ] @
grabik ti je dao vrlo bitan info - za cistu cetvrku sa enkodera. el imas osciloskop da pogledas sta je na ulazu b0? '84 ima "obicne" ulaze (nisu schmitt trigger) tako da moras da koristis hw debounce ili externi schmitt trigger (ja volem 74HCT14 schmitt trigger invertor na primer) tako da izbacis to kao problem. mozes i drugacije da odradis debounce. zakacio sam ti kako to ja radim (ne znaci uopste da je idealno resenje - verovatno ce grabik ili scepa moci da daju neko bolje resenje :D )

[ grabik @ 13.01.2010. 21:47 ] @
Citat:
lm741: dok nisam imao interapt, samo if, kristal 20 MHz je bez problema radio
kako sam ubacio int. neće ni da mrdne

Code:
 on interrupt goto pik    'pik je labela 

DEFINE OSC 12           'kristal 12 MHz

symbol br=portb.0     'interapt          

INPUT br         

if brojac=100 then        'ako je dostigao 100 skok na vrh
                                                                           
end



Kod koji sam ostavio a koji je sporan, nemas delay ili nesto slicno zasto ti treba definiranje kristala?


***************************
symbol br=portb.0 'interapt
INPUT br
***************************
Za interapt ti to ne treba, on radi hardverski, znaci pin je ulazni ukljucis interapt i to treba da radi.
Ono prije sto sam rekao za interapt, ne iskljucujes interapt dok je u interapt rutini to moguce vodi isto problemima.


Takodje ovakvi djelovi koda mogu biti problematicni "if brojac=100 then" , ovo trosi vise procesorskog vremena od recimo if brojac>99 then

Tvoj interapt radi to vrlo brzo a glavna rutina to radi sporije i sta se desava, ti recimo provjeravas brojac kod vrjednosti od 95 pa 102 i sta se desava tvoj program se nikad ne izvrsava.

Znaci ovakve linije prepravljas u if brojac>99 then , ucinak je isti ali se sada izvrsava kod u glavnoj petlji.

Takodje kod ukljucenja interapta moguce da imas interapte zbog smetnji i PIC se smrzne jer prakticno stalno ulazi i izlazi iz interapta.

Probaj prepraviti ove linije pa javi sta se desava.

[ Stojan Trifunovic @ 13.01.2010. 22:02 ] @
> '84 ima "obicne" ulaze (nisu schmitt trigger) tako da moras da koristis hw debounce ili externi schmitt trigger

Ne mora. RB0 ulaz kod '84 je schmitt trigger SAMO kada se koristi kao interapt. RA4 je to uvek, pa je bolje njega koristiti za proveru bez interapta.
[ lm741 @ 13.01.2010. 22:21 ] @
tačno je tako,...
uradio sam kako si rekao i sad mi i pri max. broju obrtaja registruje inpulse sa enkodera sa 400 proreza tj 80 inpulsa po krugu,...ooooo bogo moj,...
ovo je sada ono pravo i sada mi je mnogo draži zato što znam da radi ok.
a za brzine koje mi trebaju radiće i više no odlično

@bogdane ja sam prilikom pravljenja tablice istine posmatrao izlazni signal na enkoderu i čista je četvrtka
nešto me sećanje možda vara ali ovih dana puno tog sam pročitao i mislim da se spominje da RB.0 kada se konfiguriše kao ulaz da ima osobine šmit okidača
moram proveriti

pa ljudi, ovo je kanda sa ovim delom oko interapta za sada završeno ali ne i krej pisanja mog programa i sigurno da nije kraj mojim problemima kada ću vam se sigurno i obratiti,....hvala vam jako,jako puno


[ bogdan.kecman @ 13.01.2010. 22:26 ] @
@stojan, hm, mozda na ovom "novom nabudzenom" ... ako se ja dobro secam, original nije imao schmitt nigde ... mada, toliko sam davno prestao doticni da koristim da sam mozda pomesao

@lm .. da da .. evo sad gledam datasheet .. kaze da je schmitt kada se koristi kao interrupt ... gotovo sam siguran da nije tako bilo, al uopste nije bitno .. bitno da je ovaj novi schmitt sto znaci da imas osnovni nivo debouce-a

@grabik, odlican ulov za =100 :)
[ lm741 @ 13.01.2010. 22:27 ] @
zdravo Stojane

da i u tvom uputstvu za pic 16f84 , pročitao sam tako nešto, jeste


[ lm741 @ 13.01.2010. 22:31 ] @
@bogdane pa kažem ja tebi da je ovaj piconja ažbaha,..ha


@grabik,..zaboravih da kažem da je takt ostao na 12 MHz,..probaću i to,..
[ lm741 @ 13.01.2010. 23:13 ] @
jok, neće da radi kristal od 20 MHz, možda je krepo a nemam drugi, ali ko_ga šiša, može piconja lagano i na 12-tici,....mi lale nežurimo nigdi,...
[ rsinisa @ 14.01.2010. 03:09 ] @
@ lm741
Ovih dana sam u velikoj gužvi pa ne stižem da se uključim niit da pratim pažljivo, ali jedna stvar mi je zapela za oko, a to je ovaj deo programa, tj. interapt rutina koju si napisao:

Code:

pik:
    INTCON.7=0    'zabrana svih prekida dok se trenutni obradi
    
    
                                       'ako je detektovana promena na pinu RB.0
    if INTCON.1=1 THEN brojac=brojac+1 'uvecaj brojac za 1
    INTCON.1=0                         'obrisan fleg 
    
    INTCON.7=1                         'omoguceni svi prekidi
    INTCON.4=1                         'omogucen prekid na RB.0
    
                                       'izlaz iz interapta
   RESUME       


Kao prvo, nema potrebe za prvom naredbom jer to PIC automatski odradi kada nastupi interapt.
Kao drugo, ne vidim da na početku interapt rutine čuvaš, a na kraju vraćaš sadržaj bitnih registara.
Kao treće, izlaz iz interapt rutine je OBAVEZNO sa ASM naredom retfie (a ne RESUME) jer ona, pored povratka ujedno setuje GIE bit. To sam ti već rekao u ovom postu:
http://www.elitesecurity.org/p2484774
Znači, ovo što sam ti rekao je VEOMA VAŽNO za ispravan rad interapta i to što ti rutina radi kako treba u ovom slučaju je čista sreća, a radi kako treba jer se u njoj ne menja sadržaj ni W ni STATUS registra, a ti sam vodiš računa o GIE bitu. Da se ne menja W registar to je sasvim jasno, a status registar jedino bi mogla da promeni naredba uvećanja promenljive "brojac" kada predje sa 255 na 0, ali to se nikada ne dešava jer se u glavnom programu ne dozvoljava da ona predje 100. Kada bi se iz te rutine izbacile neke nepotrebne naredbe, izgledala bi kao da ju je pisao neko ko je svestan da se važni registri ne menjaju i zato ih ne čuva (lalo, bez uvrede :) ). Znači, u ovom slučaju int. rutina bi mogla da se napiše ovako:

Code:

pik:
  brojac=brojac + 1
  intcon.1=0 
  @ retfie


Ispitivanje intcon.1 bita ti ne treba ako su ti ostali izvori interapta isključeni jer je tada samo taj bit setovan, a čini mi se da ne koristiš drugi izvor.

Pozdrav.
Sinisha
[ rsinisa @ 14.01.2010. 03:33 ] @
Citat:
lm741: jok, neće da radi kristal od 20 MHz, možda je krepo a nemam drugi, ali ko_ga šiša, može piconja lagano i na 12-tici,....mi lale nežurimo nigdi,...

F84 je fabrički deklarisan do 10 MHz i sve preko toga kada radi stabilno je čist ćar :).

Pozdrav.
Sinisha
[ grabik @ 14.01.2010. 06:23 ] @
Citat:
lm741: tačno je tako,...
uradio sam kako si rekao i sad mi i pri max. broju obrtaja registruje inpulse sa enkodera sa 400 proreza tj 80 inpulsa po krugu,...ooooo bogo moj,...
ovo je sada ono pravo i sada mi je mnogo draži zato što znam da radi ok.
a za brzine koje mi trebaju radiće i više no odlično

@bogdane ja sam prilikom pravljenja tablice istine posmatrao izlazni signal na enkoderu i čista je četvrtka
nešto me sećanje možda vara ali ovih dana puno tog sam pročitao i mislim da se spominje da RB.0 kada se konfiguriše kao ulaz da ima osobine šmit okidača
moram proveriti

pa ljudi, ovo je kanda sa ovim delom oko interapta za sada završeno ali ne i krej pisanja mog programa i sigurno da nije kraj mojim problemima kada ću vam se sigurno i obratiti,....hvala vam jako,jako puno


Malo popravi program kako su ti ljudi koji pisu u basicu rekli.

I sad samo upotrebi PAUSE ili DELAY ili kako se vec zove u basicu i dodji da se zalis da ne radi kako treba , onda cu te usranom motkom:)

[ grabik @ 14.01.2010. 06:37 ] @
Kako ne radim sa basicom ne znam tocno kako on obradjuje interapt, C programi sa kojima sam radio rade pamcenje W, STATUS registra itd. Onaj koji pise program treba samo da izbrise zastavicu interapta ili ako ima vise izvora interapta da odredi koji interapt je aktivan.

Ovih dana pokusavam nesto sa atmelima i u njihovom avr gcc ne treba brisati cak ni zastavicu interapta, kompajler to sam odradi.

Ako ovaj basic ne cuva sadrzaj registara kod interapta mislim da ne vrijedi sa njim ni da pocinju raditi oni koji se uce programiranju u nekom visem programskom jeziku, kao alternativu imaju puno boljih kompajlera i laksih kompajlera za ucenje.

[ rsinisa @ 14.01.2010. 11:25 ] @
Citat:
grabik:Ako ovaj basic ne cuva sadrzaj registara kod interapta mislim da ne vrijedi sa njim ni da pocinju raditi oni koji se uce programiranju u nekom visem programskom jeziku, kao alternativu imaju puno boljih kompajlera i laksih kompajlera za ucenje.

Čuva sadržaj registra ako PIC ima preko 2K programske memorije, ali je opet potrebno "peške" vratiti njihov sadžaj pre povratka. Čuva W, STATUS i PCLATH, ali je neophodno definisati te promenljive i to na adekvatan način koji je, kao i sve što sam do sada rekao na tu temu, detaljno objašnjeno u uputstvu.

@ lm741
Poželjno je da interapt rutina bude na početku programa, odmah posle deklaracije promenljivih i DEFINE naredbi.

Pozdrav.
Sinisha
[ lm741 @ 14.01.2010. 13:58 ] @
uf,...evo me,zaglavio sam na nekom silosu,..
čitam vaše odgovore i kontam sve i da napomenem da ako i nisam prokomentarisao svaki vaš odgovor to neznači da sam ga ignorisao a i nebi imalo smisla ali zato se na mnoge vaše odgovore vraćam više puta, i svaki put mi je jasnija slika i priča o interaptu,...
da se ne zahvaljujem pojedinačno,...dugačka je lista
hvala vam puno, puno na volji i strpljenju da mi pomognete
da potsetim da ću kad sve bude gotovo, sve okačiti da se vidi
[ lm741 @ 14.01.2010. 22:51 ] @
Code:
    DISABLE
pik:                                   
    brojac=brojac+1 'uvecaj brojac za 1
    INTCON.1=0      'obrisan fleg 
@ retfie                 ;izlaz iz interapta     


@rsiniša
probao sam kako si rekao

Citat:
@ lm741
Poželjno je da interapt rutina bude na početku programa, odmah posle deklaracije promenljivih i DEFINE naredbi.


zaglavi mi fetove, ampermetar zakuca,obori napon

kada vratim dole gde je i bio radi ok. ali nevidim nikakvu promenu za razliku od napisanog kako mi je grabik rekao

Code:
   DISABLE
pik:    
                                       'ako je detektovana promena na pinu RB.0
    if INTCON.1=1 THEN brojac=brojac+1 'uvecaj brojac za 1
    INTCON.1=0                         'obrisan fleg 
    
   RESUME    




[ bogdan.kecman @ 15.01.2010. 00:13 ] @
Citat:
grabik
Ovih dana pokusavam nesto sa atmelima i u njihovom avr gcc ne treba brisati cak ni zastavicu interapta, kompajler to sam odradi.


na pic-u zavisi od kompajlera do kompajlera ... (pricam o c-u, ove basic-e ne trosim) .. negde moras da ocistis fleg sam, negde ne, u nekima (npr CSC C) kompajler sam "simulira" da imas za svaki interapt zaseban vektor tako da ti pravis posebno funkciju za tmr0, posebno za tmr1, posebno za ext a kompajler odradi "najbrzi moguci kod" pretpostavljajuci sta si radio, pritom na 16F koji ima samo jedan vektor ce da radi to sa branch-om a na nekom vecem picu sa vise interapt vektora ce ako moze da podesi tako da se rokaju direkt funkcije .. svejedno - ti ne moras ni o cemu da brines .. na csc c ne moras na primer da brises flag, na microchip c-u moras ...

Citat:

Ako ovaj basic ne cuva sadrzaj registara kod interapta mislim da ne vrijedi sa njim ni da pocinju raditi oni koji se uce programiranju u nekom visem programskom jeziku, kao alternativu imaju puno boljih kompajlera i laksih kompajlera za ucenje.


nikad nisam skapirao zasto iko koristi basic, al se trudim da to precutim :)
[ _str_ @ 15.01.2010. 00:31 ] @
Na atmelu (avr) se hardverski iskljuci interapt u statusnom registru pri izvrsenju skoka i na kraju pri izlasku se automatski setuje, dakle nevezano za vrstu kompajlera.


Citat:
bogdan.kecman: nikad nisam skapirao zasto iko koristi basic, al se trudim da to precutim :)


Ni ja ne kapiram zasto iko koristi pic kontrolere ;)
[ rsinisa @ 15.01.2010. 10:03 ] @
Citat:
lm741:zaglavi mi fetove, ampermetar zakuca,obori napon

kada vratim dole gde je i bio radi ok. ali nevidim nikakvu promenu za razliku od napisanog kako mi je grabik rekao


Ovih dana nemam vremena da to bolje pogledam, ali RESUME svakako nije za asmeblerski interapt. Ako pogledaš PBP dokumentaciju videćeš i sam. Kad izadjem iz gužve pogledaću gde je zapelo. A opet, ako radi kako tebi treba, onda OK.

Pozdrav.
Sinisha
[ rsinisa @ 15.01.2010. 10:05 ] @
Citat:
bogdan.kecman: nikad nisam skapirao zasto iko koristi basic, al se trudim da to precutim :)


Meni odgovara zato što sam PBP prilično savladao (ušao mu "pod haubu") i što mogu da pišem programe kao da ih pišem u ASM-u (a opet mnogo brže) što odgovara mom stilu programiranja.

Pozdrav.
Sinisha
[ bogdan.kecman @ 15.01.2010. 13:46 ] @
sinisa, fala za odgovor, al iskreno, nisam uopste trebao da napisem taj komentar .. nebitan je kompletno za ovu pricu i pre je za neki amiga vs pc forum nego za ovde ... tako da - izvinjenje od mene za to .. meni je kod vecih programa basic preterano skup za odrzavanje ... nemam nikakvu proceduralnost, nemam inline funkcije .. sa jedne strane, dok sa druge strane ako koristim basic koji ima te mogucnost (proceduralnost, inline i slicno) onda je to kao C sa ruznom sintaksom pa mu dodje na "cemu" :) ... a opet za ove manje stvari - nije mi problem da potrosim malo vise i nacukam to u asm-u

_str_ ... da, imaju par zgodnih fora .. al evo gledam msp430, ista je prica ko na picu sto se toga tice, moras da ocistis flag pre nego izadjes iz interapta. IAR ce na primer to da uradi za tebe dok ce GCC da trazi od tebe da to odradis ... meni se licno vise svidja varijanta da ja pocistim fleg za sobom posto mi to prosto daje mogucnost da trigerujem itnerrupt "samo jednom" ... tj, umesto u interapt rutini da ugasim interrupt (pitanje i to kako radi na avr-u ako ga on sam pali pri izlasku iz interrupt-a ??? kako ga ugasis ?? ako je unutar interrupta vec ugasen i sam se pali kad izadjes ?!?!?) ja samo ne ocistim fleg i on se ne trigeruje dok ne ocistim fleg iz glavnog programa ... mnogo primera za to .. koristim to na primer u mom "ultrazvucnom daljinomeru" ... etc etc .. no nije to tema .. a sto se tice zasto neko koristi pic ... mislim da spada u istu amiga vs pc kategoriju kao i moj komentar za basic
[ _str_ @ 15.01.2010. 21:37 ] @
Svaki pojedinacni interapt se moze iskljuciti ili ukljuciti podesavanjem registara ali u statusnom registru postoji bit za globalni interapt enable ili disable. U asembleru komanda 'reti' pri povratku setuje ovaj bit.
Dok cekamo lm741 sa rezultatima evo malo off(to)pic :) 8bit power
[ lm741 @ 15.01.2010. 22:08 ] @
Pozdrav,..

@_str_ novih rezultata na temu interapta nemam,zadovoljan sam kako sada radi na 12 MHz. trenutno radim na proširenju "projekta"
bogdan mi reče da je za moje potrebe dovoljna interna EEPROM memorija pa sada tumačim EECON1 i ostale registre,..pa se javljam,.. a vi ćaskajte
sve će to nekome dobro doći i značiti,..
[ grabik @ 17.01.2010. 09:14 ] @
Citat:
lm741: Pozdrav,..

@_str_ novih rezultata na temu interapta nemam,zadovoljan sam kako sada radi na 12 MHz. trenutno radim na proširenju "projekta"
bogdan mi reče da je za moje potrebe dovoljna interna EEPROM memorija pa sada tumačim EECON1 i ostale registre,..pa se javljam,.. a vi ćaskajte
sve će to nekome dobro doći i značiti,..


Taj arhaicni f84 je vrlo spor kod upisivanja u eeprom , treba mu mnogo vremena, malo savremenija verzija f84A je malo brza u tome i moze da radi do 20MHz , kako je vec sinisa rekao.

Da li mozda pravis neki uredjaj za mjerenje visine zitarica u silosima?

[ lm741 @ 17.01.2010. 14:08 ] @
pozdrav grabik,..
ja koristim taj f84A
nepravim uređaj za silos, pravim neku mašinicu,...jel imaš ideju za merenje visine žitarica u silosu? bilo bi zanimljivo,..

pravim nešto nalik stubnoj bušilici,samo neće biti bušilica već polirka. ona ručica koja služi za spuštanje i dizanje, meni ovo motorče oko kojeg se bakćem treba da radi to spuštanje i dizanje.
tu putanju gore....dole, možda će neko reći da bi jednostavnije rešio sa krajnim prekidačima ali to rešenje povlači za sobom druge tehničke probleme,pa pokušavam ovako
[ veselinovic @ 17.01.2010. 18:12 ] @
Citat:
lm741: pozdrav grabik,..
ja koristim taj f84A
nepravim uređaj za silos, pravim neku mašinicu,...jel imaš ideju za merenje visine žitarica u silosu? bilo bi zanimljivo,..



Najefikasnija metoda mjerenja zita ( i slicnog materijala ) u silosu je vrlo primitivna i zastarela, ali radi.
Uzmes optokapler ( par rupica po obrtaju-cak i jedna je dovoljna), preko optokaplera ( tj gumenog valjka koji je spregnut na opto) prebacis kanapce na cijem donjem kraju je obican teg.
Pazi sad, od hardvera ti treba jos mikroprekidac kojeg nateze konopac dok teg visi na kanapu.
Motorom ( od brisaca ili slicnim) spustas teg dok mikroprekidac ne detektuje da je teg pao na zito.
Naravno svo vrijeme brojis okretaje i preracunas u tezinu ili zapreminu.
Izvini, ja otisao na opto ( nesto drugo mi u glavi ) bolje je magnetic i neki magnetni senzor.
To sam pravio jos prije pocetka kontrolera ( sa TTL kolima )i radi jos uvijek.
Cak sam slicno realizovao vrlo precizan mjerac nivoa vode.
Umjesto tega sam stavio ultrazvucni senzor ( do 1 m) i motorom gadjao da je on od vode nekih pola metra. Imao sam sa optokaplera duzinu konopca + ono sto ocita senzor.

PS ovim ne zelim da "razljutim" ultramoderne konstruktore sa fensi idejama i senzorima od par kE, samo da ukazem na jednsotavno a nepokvarljivo i jeftino rjesenje.
Kod silosa i tako nema potrebe za pretjeranom preciznoscu zbog kupastog oblika lagerovanog materijala.
[ lm741 @ 17.01.2010. 18:56 ] @
baš zanimljivo rešenje,nije mi padala na pamet ideja sa tegom koji kad padne na čvrstu podlogu oslobodi pritisak na prekidaču koji se nalazi pored tog kotura,
možda jeste primitivna tehnika ali stvarno za uslove kakvi su u silosima tako nešto je odlično,..hvala ti za ideju
[ rsinisa @ 18.01.2010. 10:44 ] @
Citat:
bogdan.kecman: sinisa, fala za odgovor, al iskreno, nisam uopste trebao da napisem taj komentar .. nebitan je kompletno za ovu pricu i pre je za neki amiga vs pc forum nego za ovde ... tako da - izvinjenje od mene za to

Nema potrebe za izvinjenjem, ti si lepo pitao, ja sam dao svoje razloge i to je to. Ne sekiraj se :). A različitih mišljenja će uvek biti i tako treba i da ostane ;).

Pozdrav.
Sinisha
[ lm741 @ 21.01.2010. 20:33 ] @
pozdrav ljudi,..evo me nastavljm pa ukoliko ste raspoloženi,...zapelo,..
za početak
Citat:
Mladi covjece,
pisi Vladimiru mail i sigurno ce ti izaci u susret.
Ajde pa nam javi kako si prosao.


Prošao sam ekstra,..
nazvao Vladimira dan posle nakon što je Sepa011 okačio broj telefona,
čuli se,ja mu fino sve objasnim šta hoću i pitam ga kako da izvedemo da se plaćanje obavi kod nas,....kaže, pa ja sam u Novom Sadu,...


da pređem na moj problem,..
pic 16f84 zamenim sa 16f876
podesim i prilagodim sve starom programu koji se ispravno izvršava,zatim kačim LCD
LCD kačim na portu C
za sada,tokom izvršavanja glavnog programa na lcd-u prikazujem samo promenljivu za PWM(dutycycle)

skontam da prilikom instrukcije (GOSUB prikaži), podprogram za ispis na LCD-u, gubi puno vremena gde se dešava da za to vreme AND kola ostaju u jednom od stabilnih stanja što prouzrokuje povećanu brzinu na motoru bez obzira što je dutycycle 0,....to nevalja

16f876 ima dva pwm kanala
ako možete da mi date smernice kako da menjam smer motora na H mostu u ovom slučaju









[ bogdan.kecman @ 21.01.2010. 20:50 ] @
dovedes pwm na clock a koristis poseban pin za direction?

kakav h-bridge koristis?

[ lm741 @ 21.01.2010. 20:57 ] @
pozdrav čoveče,..
koristim četiri feta, irf 540 okidam ih preko dva opto 4n26,..
dva gejta u dijagonali okida jedan opto


Citat:
dovedes pwm na clock a koristis poseban pin za direction?


ali meni treba i promena smera ili te ja ne kontam
[ _str_ @ 22.01.2010. 00:38 ] @
Ajmo ispocetka, trebaju ti dva and kola... :)
Koristi jedan pwm izlaz a ostalo ostaje isto, ne kontam gde je zapelo?
[ lm741 @ 22.01.2010. 01:58 ] @
pozdrav _str_
kada uradim oovako
Code:

                                             
'*********************** brojac ******************************************                                            
  
    if brojac>9  then           
goto vrh
    endif
    
    ss=ns       'za sada ignorisem  
    ssss=nnss   'za sada ignorisem
goto prvi

end
'******** podprogrami **************************************

vrh:
    Lcdout $fe,1,"brzina  ",dec sp  
      
    toggle and1   'promena stanja pina 
    toggle and2
    brojac=0      'vracanje brojaca na nulu
    
    goto prvi
        
    disable
pik:                                   
    brojac=brojac+1 'uvecaj brojac za 1
    INTCON.1=0      'obrisan fleg 
@ retfie            ;izlaz iz interapta     



upis promenljive na LCD-u imam samo kada odem na adresu "vrh" pritom sve radi perfektno,
ne primećujem nikakvu promenu na instrumentima niti po zvuku motora
problem je u tome što mora da se čeka da brojač dostigne 10 pa da bi usledilo čitanje promenljive

a kada uradim ovako
Code:
  
                                             
'*********************** brojac ******************************************                                            
  
    if brojac>9  then           
goto vrh
    endif
    gosub prikazi
    ss=ns       'za sada ignorisem  
    ssss=nnss   'za sada ignorisem
goto prvi

end
'******** podprogrami **************************************

prikazi:
Lcdout $fe,1,"brzina  ",dec sp
return 

vrh:
   
      
    toggle and1   'promena stanja pina 
    toggle and2
    brojac=0      'vracanje brojaca na nulu
    
    goto prvi

tako bi mi odgovaralo da nemoram čekati na brojač, kako bi svakim uvećanjem promenljive Sp (tasterom) istog momenta video na LCD-u
ali se dešava kao da AND1 i AND2 budu setovani to kratko vreme dok se upis na lcd-u izvršava,pritom motor dobija ubrzanje i to znatno



barem mislim da je tu problem, molim te ispravi me ako grešim
[ pupuska @ 22.01.2010. 06:53 ] @
Pozdrav!
Početnik sam na 16f877. Uspeo sam da teram samo steper.
Pretraživao sam po netu i našao na Mikročipovom sajtu ovaj projekat.
Napisan je u Cu, za 18c452 i 16f877.

http://www.microchip.com/stell...deId=1824&appnote=en011782

lm741, možda ste ovo videli, al ako niste možda će pomoći realizaciju vašeg projekta.
[ _str_ @ 22.01.2010. 09:36 ] @
Na kom portu su 'and' izlazi? Generalno ispis na lcd dugo traje i da bi izbegao nepotreban ispis (ako je brzina nepromenjena) mozes pokusati nesto ovako:

Code:
if brzina<>brzina_temp then
brzina_temp=brzina
Lcdout $fe,1,"brzina  ",dec sp
endif


Prikaz na lcd-u ce biti samo onda kada dodje do promene vrednosti 'brzina'.
[ lm741 @ 22.01.2010. 09:53 ] @
svi ulazi izlazi su na portu B a lcd je na portu C

Code:
SYMBOL and2=portb.3   'and2                              
symbol and1=portb.2   'and1
symbol h1=portb.1     'izlaz pwm
symbol start=portb.4  'taster start       
symbol Tp=portb.5     'taster plus
symbol Tm=portb.6     'taster minus
symbol rid=portb.7     'rid kontakt


pokušaću to kako si predložio pa se javljam
[ lm741 @ 22.01.2010. 10:49 ] @
@_str_,..svaka čast za rešenje,..fercera samo tako
evo taj deo koda
Code:
prvi:    'pocetak glavnog programa

    brzi=sp  
    ns=tp     'moguce novo stanje tastera
    nnss=tm   'moguce novo stanje tastera 
    if ns<ss and sp<250 then   'ispituje stanje tastera i velicinu promenljive
    sp=sp+5                  'ukoliko su uslovi ispunjeni uvecava promenljivu za 5
    endif
    
    if nnss<ssss and sp>5 then 'isto kao prethodno
    sp=sp-5                     'isto,..
    endif
    brz=sp  'vrednost prom. Sp smestam u prom. brz
    if brz<>brzi then  'provera dali je došlo do promene,ako jeste
    brzi=brz
    Lcdout $fe,1,"brzina  ",dec brzi
    endif
     
    pwm h1,sp,10               'PWM rutina.......h1 pin na kom je signal 
                                             'Sp je promenljiva
                                            '10 je broj ciklusa,..
                                             
'*********************** brojac ******************************************                                            
  
    if brojac>9  then           
goto vrh
    endif
    
    ss=ns       'za sada ignorisem  
    ssss=nnss   'za sada ignorisem
goto prvi
[ _str_ @ 22.01.2010. 13:04 ] @
Sad gledam i nesto imam utisak da ti i dalje koristis soft. pwm? Jel imas deo programa sa inic. pwm-a?
[ lm741 @ 22.01.2010. 13:42 ] @
da, koristim samo softverski pwm tek sinoć sam uzeo da tumačim CCP1CON registar, trebaće mi sigurno za kasnije

nisam rekao da prilikom kupovine pica 16f876 kupio sam i kristal 20 MHz tako da sad ovog piconju taktujem sa 20MHz i za sada je sve odlično
tek sada mogu da pristupim pravljenju neke konačne varijante PCB-a i konačno postavljanje svega tog na mašinicu kada će se sve to pokazati u pravom svetlu,..

pretpostavljam da sa HPWM-om bi program radio mnogo bezbolnije zato što radi u pozadini ali i dalje bi morao zadržati AND kola,...ispravi me ako grešim
[ _str_ @ 22.01.2010. 15:59 ] @
Moze sa dva pwm kanala, svaki za po jedan smer ali ti ne bi preporucio jer usled "softverske" greske moze doci do spaljivanja H mosta. Video si probleme oko soft. pwm-a, hardverska resenja su mnogo pouzdanija.
[ lm741 @ 26.01.2010. 16:15 ] @
usledila je pauza a sad evome opet,..

pokušavam sam da skontam ali neide
modul CCP1
niži bajt CCPR1L i dva bita registra CCP1CON.....DC1B1 i DC1B0
zašto se u tih 10 bita upisuje rezolucija pwm-a, tj, zbog čega je podeeljeno u dva registra (dva i osam bita)
ako možete da mi pojasnite,..
[ grabik @ 26.01.2010. 19:02 ] @
Citat:
lm741: usledila je pauza a sad evome opet,..

pokušavam sam da skontam ali neide
modul CCP1
niži bajt CCPR1L i dva bita registra CCP1CON.....DC1B1 i DC1B0
zašto se u tih 10 bita upisuje rezolucija pwm-a, tj, zbog čega je podeeljeno u dva registra (dva i osam bita)
ako možete da mi pojasnite,..


Najkraci odgovor je zato sto je 8 bitni mikrokontroler. To vazi takodje i za ADC, 16 bitni tajmer ako ih posjeduju, sve sto ima neku vrijednost koja je veca od 8 bita.

Recimo, imas na gomili 4 vrece cementa od 50kg, ako si 8bitni:) imas snage da nosis jednu po jednu vrecu, ako je neko 16bitni onda najednom nosi dvije vrece, 32 bitni 4 vrece:) , ove 64bitne necemo ni spominjati:)
Znaci 8bitni da bi preneo sav cement mora to uraditi na 4 puta, 16bitni na dva puta i 32bitni to prenese odjednom, ako uzmes da su jednako brzi i ne zamaraju se, sta mislis, koji to uradi najbrze:)

O tome smo pricali prije , da odmah predjes na nesto misicavije:)

[ lm741 @ 26.01.2010. 20:00 ] @
dobro,da kažem da sam donekle shvatio,..ali
ako imam formulu po kojoj se izračunava pwm odnos
PWM=(CCPR1L;CCP1CON<5:4>)*Tosc*(TMR2)

(CCPR1L;CCP1CON<5:4>) ovaj deo nekontam, zašto ovih deset bita ako je osmobitni i kako da menjam vrednosti tih bitova


CCPR1L........niži bajt registra CCPR1, ako je nedostajalo slobodnih bitova zašto nije iskorišten viši bajt registra CCPR1
[ rsinisa @ 26.01.2010. 23:07 ] @
He, opet mi nije jasno šta ti nije jasno kad smo taj deo već prošli, kao što ti reče grabik. Konstruktori su napravili 10-bitni PWM i 2 bita jednostavno MORAJU da se nadju u nekom drugom registru. A zašto baš u CCP1CON, a ne u CCPR1H, to je već stvar konstrukora. Ako pogledaš blok shemu i pročitaš tekst videćeš da se CCPR1H u saradnji sa još dva interno dostupna bita koristi u stvari kao radni registar, da tako kažem, dok je CCPR1L u kombinaciji sa 2 bita iz CCP1CON zadužen za zadavanje vrednosti; znači nešto kao "predstavnik za komunikaciju sa spoljnim svetom" ili kako bi modernim (meni ne baš dragim) rečnikom rekli "PR za PWM". Ovo je uradjeno da ne bi izmena tih 10 bitova poremetila PWM koji je trenutno u toku; znači, ako promeniš trajanje PWM-a u sred jednog ciklusa, bez ovakvog rešenja sa duplim registrima ciklus koji je trenutno u toku bio bi nepravilno odradjen, tj. kao rezultat bi imao nešto što uopšte nisi hteo pa bi se pitao gde je greška.
Mislim, ovo tebi kao korisniku nije uopšte bitno (čak sam se i ja tek sada udubio u ovo, nisam ni ja ovo znao do malo pre) zašto je ovako ili onako, i zašto se ne koristi ovaj nego onaj registar, mada pozdravljam to što hoćeš da pronikneš u sve tajne konstrukcije PIC-a.
Vrednost tih bitova (CCPR1L;CCP1CON<5:4>) menjaš kao i vrednosti bilo kod drugog registra.

Pozdrav.
Sinisha


[Ovu poruku je menjao rsinisa dana 27.01.2010. u 00:23 GMT+1]
[ lm741 @ 27.01.2010. 00:06 ] @
dobro,..to gradivo sam prešao, bunilo me je TO ali sada bar znam da TO treba da prihvatim tako kako je,..
jasna mi je uloga SVAKOG bita u SVIM registrima CCP1 modula ali me i dalje buni kako da iz spoljašnjeg sveta menjam odnos

kada uradim ovako
Code:
CCP1CON.4 = SP.0
   CCP1CON.5=SP.1
   CCPR1L = SP>>2 

promenljiva Sp sa kojom menjam odnos

ili kad uradim ovako
Code:
HPWM 1,SP,3000

opet promenljiva sa kojom menjam odnos
pa sad nemogu da skontam koji od ta dva načina je ispravan

naravno pre glavnog programa izvršim podešavanja
Code:
CCP1CON = %00001100   'CCP1 modul sa dva bita(3-4)postavljen u PWM mod
  T2CON = %00000101    'treci bit ON t2 , preskaler 1:4
  trisc.2 = 0  'ccp1 modul se nalazi na pinu c2 pa se c2 postavlja kao izlaz
  PR2 = 250    'broj koji treba da dostigne brojac T2


sa softverskim PWM-om bilo mi je jasno,..





[ rsinisa @ 27.01.2010. 00:57 ] @
Ne, to nije isto. Druga varijanta je PBP-ova HPWM naredba koja najpre ima 8-bitnu vrednost za odnos signal/pauza (tzv duty cycle) dok je u direktnom pristupu ta vrednost 10-bitna. Ovde moraš da razumeš da se neke PBP naredbe prevode u samo jednu ASM instrukciju, dok se neke prevode kao potprogrami od čak par desetina instrukcija. Te naredbe su upravo zato i napravljene tako da bi korisnika poštedele nekih muka, kao što je preračunavanje raznih parametara i podešavanje registara u zavisnosti od frekvence oscilatora i željenih karakteristika. Jedna od njih je i HPWM koja za parametre ima 8-bitnu duty cycle vrednost i frekvencu. Sam kompajler preračunava i podešava sve potrebne registre čime oslobadja korisnika "ručnog rada" oko te matematike.
Kad sam ovo razjasnio, sad mogu da se ogradim da su možda obe tvoje varijante iste, ali ne mogu sada da preračunavam sve. Moja preporuka ti je da koristiš HPWM naredbu jer je mnogo jednostavnije i zaboraviš ručno podešavanje registara. Medjutim, ako ti je to zadovoljstvo, onda bolje batali PBP i predji na ASM ;). Možeš vežbe radi da ručno podešavaš registre i gledaš na osciloskopu šta se dešava ako želiš ovu materiju da rasturiš "na sitna crevca".

Pozdrav.
Sinisha
[ lm741 @ 27.01.2010. 01:08 ] @
e siniša hvala ti za odgovor puno mi znači
bitno mi je da sam ti preneo ono što mi nije bilo jasno, a sad ovim odgovorom si mi razbio tu dilemu
što se tiče podešavanja sigurno nisu tačna zato sam ih i ostavio tako da bude još očiglednije ono što mi brka lončiće,mada znam kako da proračunam po onoj formuli i kako da RUČNO podesim bitove, ali sad to batalimo,...
idemo dalje sa PBP pa se javljam
hvala ti još jednom i laku noć,....



[Ovu poruku je menjao lm741 dana 27.01.2010. u 02:20 GMT+1]
[ _str_ @ 27.01.2010. 22:10 ] @
Da malo prekratim pauzu, jel ima neki pic i kako se zove a da ima jedan brojac sa dva 'compare' pwm registra, tj. sa jednim brojacem a da opsluzuje dva pwm izlaza?
[ lm741 @ 28.01.2010. 00:29 ] @
ako je meni postavljeno pitanje kao test ili,...
16f876 samo što na oba kanala frekvencija mora biti ista
CCP1
CCP2
[ grabik @ 28.01.2010. 06:31 ] @
Citat:
_str_: Da malo prekratim pauzu, jel ima neki pic i kako se zove a da ima jedan brojac sa dva 'compare' pwm registra, tj. sa jednim brojacem a da opsluzuje dva pwm izlaza?


@str, ti radis sa atmelima, da li postoji neki atmega da PWM moze da radi 10bita na 20kHz?
[ grabik @ 28.01.2010. 06:36 ] @
Citat:
lm741: ako je meni postavljeno pitanje kao test ili,...
16f876 samo što na oba kanala frekvencija mora biti ista
CCP1
CCP2


Sta ne konsultujes uputstvo za tvoj basic kako se setuje PWM, nego razglabas o teoriji rada PWM-a na ovom tipu PIC-a , ako hoces da prosiris znanje to je ok, rsinisa ti je rekao setuj kako je to zamislio pisac basica.
Pretpostavljam da postoji neki, forum za taj basic ili upostvo gdje to mozes procitati itd. , nisi valjda prvi koji to koristi:)
[ grabik @ 28.01.2010. 07:05 ] @
Evo slike kako PWM radi ovo je slika nevezana sa picevima vec koju sam prvu nasao da shvatis kako to radi.

http://img39.imageshack.us/img39/3206/screenshotco.png

Sad umjesto onih crta zamisli brojace i registre.

[ _str_ @ 28.01.2010. 09:42 ] @
Citat:
grabik: @str, ti radis sa atmelima, da li postoji neki atmega da PWM moze da radi 10bita na 20kHz?


Nema 10bit ali ima 8 i 16bit a izlazna frekvencija se podesava postavljanjem preskalera brojaca (1, 8, 64, 256, 1024). Za postizanje 20kHz se moze koristiti samo 8bit verzija.
[ lm741 @ 28.01.2010. 22:39 ] @
@_str_
moj odgovor, dali je ispravan?
[ branko_g @ 29.01.2010. 08:54 ] @
_str_ je pisao:
Code:
Nema 10bit ali ima 8 i 16bit a izlazna frekvencija se podesava postavljanjem preskalera brojaca (1, 8, 64, 256, 1024). Za postizanje 20kHz se moze koristiti samo 8bit verzija.


To naravno nije tačno. 16-to bitna Timer1 Periferija se može koristiti za generisanje PWM signala u 16 modova!
Neki modovi su sa fiksnom rezolucijom(8, 9, 10 i 16bita) a kod nekih modova je "rezolucija" određena
vrednošću jednog 16-bitnog registra. Uostalon treba pogledati Datasheet i to poglavlje "16-bit Timer/Counter1 with PWM".
Za taj zadatak 10bit, 20Khz bi odgovor bio:
Čip Atmega168 ili drugo do 20MHz.
Preskaler =1
PWM mod 4 ili 12 (CTC, Clear Timer on Compare Match).
S tim da ne bi dobio "čistu" rezolucio od 10bita(0-1023) nego nešto manju(0-999) određenu vrednošću u
OCR1A(mod 4) ili ICR1 registru(mod 12). Kod ovog drugog moda postoji mogućnost generisanja 2 nezavisna PWM signala,
jer oba (OC1A i OC1B) registra ostaju slobodna za PWM vrednost.

Pozdrav
[ _str_ @ 29.01.2010. 16:29 ] @
Zahvaljujem za info, zbog lakse manipulacije uvek sam koristio 8bit tako da se nisam previse fokusirao na ovo (a nesto me kopkalo dok sam pisao odgovor).


Citat:
lm741: @_str_
moj odgovor, dali je ispravan?


Pitanje sam postavio vise 'globalno' a oko hardvera za pic ti ne mogu pomoci, a koliko vidim ni za atmel. :)
[ _str_ @ 13.02.2010. 22:03 ] @
Samo sam se salio, slobodno pitaj sta te zanima ako ja ne znam vec ce se neko pojaviti sa nekom idejom.
[ lm741 @ 13.02.2010. 23:12 ] @
pozdrav,..za sada ide ko bog,...
čekam da se završi mašinica komplet,nastao je problem oko veličine glavnog motora(vrti alat) sa kojim ja nemam veze,..
program radi ok. i praktično provereno, zadovoljan sam,...obećao sam da ću okačiti sve ali kada bude sve gotovo,...

nešto slično uradio sam i na makazama za papir da se graničmik pomera u milimetrima,..onako fino saLCD-om,..zada se koliko milimetara treba i motorče vrti,..

ps: ma samo kad sam ja skonto šta je interapt,...