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

Usposabljanje PIC12F675
Pojdi na stran Prejšnja  1, 2, 3
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
TECHNIC
Član
Član



Pridružen-a: Tor 31 Okt 2006 11:18
Prispevkov: 582
Aktiv.: 2.57
Kraj: Senovo

PrispevekObjavljeno: Sre Okt 31, 2007 10:37 am    Naslov sporočila:   Odgovori s citatom

Zdravo!

Poskušam narediti PWM regulacijo lučke, tako, da se počasi prižiga in nato počasi ugaša. Do tukaj sem prišel:

Vsakič ko kličem delay, se eni pavzi (delay1) zvišuje čas, drugi (delay2) pa znižuje. Vrednost f zvišujem z incf, samo potem manjka še, da to vrednost zapišem v register. Kateri ukaz uporabiti tukaj?

Kasneje bo vse to uporalbjeno v namizni (okrasni) lučki, ki bo imela nekaj RGB ledic, te pa bodo spreminjale barve na vsake toliko časa.

Koda:

   movlw   0x01
   movwf   COUNT1

Start   movlw   0x01
   movwf   GPIO
   
   call   Delay1

   movlw   0x00
   movwf   GPIO

   call   Delay2

   goto   Start


Delay1   incf   COUNT1,1

Loop1   decfsz   COUNT1,1
   goto   Loop1
   return

Delay2   decf   COUNT2,1

Loop2   decfsz   COUNT2,1
   goto   Loop2
   return
   
   end
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Čet Nov 01, 2007 1:53 pm    Naslov sporočila:   Odgovori s citatom

Vrjamem, da želiš sam narediti ta projekt. Lahko ti pa vseeno pomaga en tak že obstoječ poglej na tej strani kako se je avtor lotil zadeve, vključuje tudi izvorno kodo Wink

P.S.: Ko sem dostopal do te strani je trajalo kar nekaj časa da se odpre.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TECHNIC
Član
Član



Pridružen-a: Tor 31 Okt 2006 11:18
Prispevkov: 582
Aktiv.: 2.57
Kraj: Senovo

PrispevekObjavljeno: Čet Nov 01, 2007 4:06 pm    Naslov sporočila:   Odgovori s citatom

Zdravo!

Sem tole stran malo pogledal, downloadal .hex kodo (tisto 12F675 ready), vpišem na PIC, malo pogledam kako to sploh deluje in sestavim na protoboardu.

Hmm, v prvo ni delovalo. Tisto stikalo naj bi dalo PIC v sleep, vendar pri meni nima efekta. Ledice ne gorijo. Moja shema ni čisto takšna, kot je tam, ledice sem priklopil kar direktno na izhode.

Sem pogledal tudi spodaj, kjer piše nekaj glede internega timerja, vendar pri meni deluje ... Hitro napisan program, ki teže na interni oscilator, deluje BP.

Bom še malo probaval ... Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Čet Nov 01, 2007 6:27 pm    Naslov sporočila:   Odgovori s citatom

TECHNIC je napisal/a:
Tisto stikalo naj bi dalo PIC v sleep, vendar pri meni nima efekta. Ledice ne gorijo.
Če vklopiš ledice in nato "uspavaš" PICa, bodo ledice svetile še naprej. Če pa poskrbiš, da ledice utripajo in potem uspavaš PICa, bo ledica nehala utripati in ostalo bo zadnje stanje. Ob uspavanju se programski števec ustavi. Glede na stanja ustreznih registrov pa ob prebujanju program steče naprej na predvidenem mestu.
Citiram:
Moja shema ni čisto takšna, kot je tam, ledice sem priklopil kar direktno na izhode.
Brez preduporov Shocked Question Ledice brez preduporov se NE sme priključiti na 5V izhode Exclamation Skuril boš ledico ali (v najslabšem primeru) izhod PICa. Rabiš 470Ohm do 1kOhm upor. izhod]----[upor]----|>|----(gnd)
LP,
Igor

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TECHNIC
Član
Član



Pridružen-a: Tor 31 Okt 2006 11:18
Prispevkov: 582
Aktiv.: 2.57
Kraj: Senovo

PrispevekObjavljeno: Čet Nov 01, 2007 6:33 pm    Naslov sporočila:   Odgovori s citatom

Mislim ... seveda, z upori. Mislil sem direktno, brez tranzistorja. Smile

Bom sedaj še poskusil ... drugače pa ni kakšnega preprostega ukaza, ki bi lahko uresničil tisti program nekaj postov nazaj? Če delam sam, lažje spreminjam program, če mi ni kaj všeč.

EDIT: Uspelo. Deluje prav lepo (RGB kontroler iz linka), s tipko lepo preklapljaš med programi. Verjetno sem nazadnje pozabil iztakniti jumper, zato pa so bili vsi izhodi aktivno nizki (active low). Če stikalo držiš za več časa, gre v sleep mode. Samo ni mi uspelo priti nazaj. Sčasom sem potem le zbudil PICa.

Ima pa zanimive programe. Od počasnih, do takšnih, ki bi bili za v disko. Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Čet Nov 01, 2007 7:39 pm    Naslov sporočila:   Odgovori s citatom

TECHNIC je napisal/a:
Vrednost f zvišujem z incf, samo potem manjka še, da to vrednost zapišem v register. Kateri ukaz uporabiti tukaj?


MOVWF register

ta ni dober ukaz?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TECHNIC
Član
Član



Pridružen-a: Tor 31 Okt 2006 11:18
Prispevkov: 582
Aktiv.: 2.57
Kraj: Senovo

PrispevekObjavljeno: Čet Nov 01, 2007 7:47 pm    Naslov sporočila:   Odgovori s citatom

Takole ne deluje:

Koda:
Delay1   incf   COUNT1,1
   movwf   COUNT1
Loop1   decfsz   COUNT1,1
   goto   Loop1
   return
Confused
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Čet Nov 01, 2007 8:07 pm    Naslov sporočila:   Odgovori s citatom

Ta tvoj delay je hecno napisan. Prvo vprašanje kako velik delay potrebuješ.

Tule je ena od možnih delay kod:

100us pri 8MHz oscilatorju

Koda:

...
   MOVLW  0x42
   MOVWF  DTEMP
loop:   DECFSZ DTEMP,1
   GOTO   loop
   NOP
....
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TECHNIC
Član
Član



Pridružen-a: Tor 31 Okt 2006 11:18
Prispevkov: 582
Aktiv.: 2.57
Kraj: Senovo

PrispevekObjavljeno: Čet Nov 01, 2007 11:05 pm    Naslov sporočila:   Odgovori s citatom

Rabim še, da bi se vsak "krog" čas pavze (v tem primeru) povečal. Zato je ukaz incf. Na začetku je vrednost pavze1 najmanjša (LED je prižgana 1/255 časa), vrednost pavze2 pa največja. Vsakič se dolžina pavze1 poveča za 1, pavze2 pa zmanjša za ena. Tako se počasi povečuje razmerje med prižgano in ugasnjeno LED.

Na kakšen način bi lahko to še izvedel?

Lahko bi za vsak korak vpisal za eno višjo številko, vendar bi to vzelo preveliko prostora.

Koda:

movlw    0x01    ;prižgi LED
movwf    GPIO

movlw    0x01     ;povečaj vrednost v COUNT1 za 1 korak
movwf    COUNT1

call         Delay1   ;prva pavza

movlw    0x00       ;ugasni LED
movwf    GPIO

movlw    0xfe      ;zmanjšaj vrednost COUNT2 za 1 korak
movwf    COUNT2

call         Delay2    ;druga pavza

...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
TECHNIC
Član
Član



Pridružen-a: Tor 31 Okt 2006 11:18
Prispevkov: 582
Aktiv.: 2.57
Kraj: Senovo

PrispevekObjavljeno: Ned Dec 02, 2007 12:08 pm    Naslov sporočila:   Odgovori s citatom

Zdravo!

Tokrat gre za 16F84A.

Delam airsoft fps meter (chronograph).
Za senzorja sta uporabljena dva odprta optocouplerja. Dodana sta še dva ojačevalnika in Set-Reset latch - tako da na izhodu tega sklopa dobimo aktivno visok signal. Signal je visok dokler je naboj med senzorjem. Ko pride do prvega senzorja, gre izhod na visoko stanje, ko pa mimo drugega, gre pa na nizko stanje.

namesto tega __/''\______/''\__
je na izhodu tole __/''''''''''''''''''''\__

Sedaj pa program.

Ko senzor zazna prvi (dvigajoči) rob, se ena spremenljivka višati, recimo za ena na vsake 50 us. Program tudi vsak krog preverja za drugi rob. Ko zazna drugi (padajoči) rob, tisto spremenljivko vnese v PCL števnik - uporaba v tabeli.

Vprašanje: Kako se lahko izognem uporabi 255 mest dolgi tabeli?
Tak način ni idealen. Čas se tu linearno spreminja, kar pomeni da bo natančnost pri velikih hitrostih zelo majhna, pri nižjih pa precej večja.
Rezultat bo prikazan s tremi LED zasloni 0 - 199 m/s.
Kako bi se lahko drugače lotil programa?

Hvala za odgovore.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
TECHNIC
Član
Član



Pridružen-a: Tor 31 Okt 2006 11:18
Prispevkov: 582
Aktiv.: 2.57
Kraj: Senovo

PrispevekObjavljeno: Ned Dec 02, 2007 1:25 pm    Naslov sporočila:   Odgovori s citatom

Malo sem še pobrskal po internetu in našel en preprost merilnik. Namesto 7-segmentnih zaslonov je uporabljen merilnik frekvence.

PIC šteje čas med senzorjema, nato ga samo linearno poveča (v mojem primeru sem izračunal, da je potrebno dobljeni čas množiti krat 20). Iz tega časa potem tvori pravokotni signal. Če je izmerjena frekvenca recimo 120 Hz, to pomeni 120 m/s.

Za merilnik bom uporabil tanov multimeter (VA 18 B) Razz , ki ima merilnik frekvence.
To pa zato, ker nisem našel merilnika frekvence kot vgradni instrument.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3
Stran 3 od 3

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group