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  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
TECHNIC
Član
Član



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

PrispevekObjavljeno: Tor Okt 09, 2007 8:55 pm    Naslov sporočila:   Odgovori s citatom

Hvala! Bom malo pogledal, se poglobil v program in datasheet. Morda celo uspe. Smile
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: Čet Okt 11, 2007 2:14 pm    Naslov sporočila:   Odgovori s citatom

Takole bi potem izgledal tisti potrebni del za AD meritev? Rezultat se potem zapiše v TMP1 (0x20) in TMP2 (0x21). V tem primeru sta dva AD pretvornika - GP0 in GP3 sta vhoda.

Koda je pisana nahitro (nisem vseh XXh spreminjal v 0xXX)

Koda:
;test

   include      p12f675.inc
   __CONFIG   _WDT_OFF & _INTRC_OSC_CLKOUT & _MCLRE_ON & _PWRTE_ON

;nastavi konstante

STATUS   equ   03h
TRISIO  equ   85h
GPIO   equ   05h

TMP1   equ   0x20
TMP2   equ   0x21

;nastavi izhode

   movlw   6fh
   movwf   CMCON

     bsf   STATUS,5
    call    0x3ff
     movfw    OSCCAL
     bcf   STATUS,5
     clrw                     ; clear w
     clrf    GPIO                  ; Clear all ports

    bsf   STATUS,5
    movlw    b'00010001'            ; set conversion time Fosc/8 and enable AN0
    movwf    ANSEL
    movlw    b'00001001'            ; GP0 & GP3 input
    movwf    TRISIO               ;
    bcf   STATUS,5

    movlw    b'00000111'            ; disable comparator module
     movwf    CMCON               ; to enable digital I/O
     movlw    b'10000001'            ; enable AD, right justified, Vdd reference, channel AN0 and power on AD
     movwf    ADCON0



;make AD conversion

     bsf    ADCON0, GO               ; Set go bit to start AD conversion
AD_WAIT
    btfsc    ADCON0, GO            ; If AD operation is not compete
    goto    AD_WAIT               ; we wait

   movf    ADRESH, w               ; move AD result into TMP variables
    movwf    TMP2                  ;
   bsf   STATUS,5
     movf    ADRESL, w               ;
    bcf   STATUS,5
     movwf    TMP1                  ;

   end
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: Pet Okt 26, 2007 5:35 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljeni!

Končno sem dokončal JDM-B z dodatkom FET-a za vklapljanje napajanja. Moram pohvalit tiskanino, vezice debele, samo dve prevezavi, za razliko od prve verzije, ki je imela mikronske vezice, pa tudi sedem prevezav.

Vglavnem. Najprej vsatvim PIC16F84, zaženem WinPic 800. Settings, hardware, pogledam če deluje ... Tudi na programerju je lepo zasvetila LED, ko je bila obkljukana posamezna vrstica.

Test hardware ... hardware OK ! Smile
Vstavim PICa, še enkrat, tokrat pa ... hardware not responding ... znano. Wink Poskusim prebrati, deluje. Ko pa poskusim zapisati, pokaže nekaj že znanega (v priponki).

Ok. Poskusim še PIC12F675. Zaradi tega sem tudi naredil ta programer. In ... deluje. Smile Zapiše, prebere in počisti. Super!

Sedaj ko sem lahko vklopil MCLRE, deluje tudi v prvotnem JDM. Samo mi je ta drugi bolj všeč, ker je precej bolj kompakten. Vezice so debelejše, manjši je ...

Ni mi pa jasno, zakaj ne deluje za PIC 16F84A. No, deluje pa s prejšnjim.

Še enkrat link do programerja. http://users.tpg.com.au/btkelly/feng3_pcb.html
Pripomba: Zgornji in spodnji tranzistor sta narobe obrnjena, če uporabite BC547B. Luknje so izvrtane prav.



Napaka.jpg
 Opis:
Že znana napaka ...
 Velikost datoteke:  68.87 KB
 Pogledana:  9 krat

Napaka.jpg


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: Sob Okt 27, 2007 9:48 am    Naslov sporočila:   Odgovori s citatom

Kakšne ideje, zakaj mi PIC 16F84A ne dela v JDM-B, v prvotnem pa? Shema je po večini identična. Razlika je le tisti FET, ki vklaplja ali izklaplja napajanje PIC.

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: Pon Okt 29, 2007 12:35 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljeni!

Zopet poskušam izvesti AD meritev.
Ne uspeva ... Confused

Priložena koda:

Koda:
;test
;LED na GP1 (6)
;potenciometer na GP0 (7)

   include      p12f675.inc
   __CONFIG   _WDT_OFF & _INTRC_OSC_CLKOUT & _MCLRE_ON & _PWRTE_ON

;nastavi konstante

STATUS   equ   0x03
TRISIO  equ   0x85
GPIO   equ   0x05

TMP1   equ   0x20
TMP2   equ   0x21

;nastavi izhode

   movlw   6fh
   movwf   CMCON

     bsf   STATUS,5
    call    0x3ff
     movfw    OSCCAL
     bcf   STATUS,5
     clrw                     ; clear w
     clrf    GPIO                  ; Clear all ports

    bsf   STATUS,5
    movlw    b'00010001'            ; set conversion time Fosc/8 and enable AN0
    movwf    ANSEL
    movlw    b'00001001'            ; GP0 & GP3 input
    movwf    TRISIO
    bcf   STATUS,5

    movlw    b'00000111'            ; disable comparator module
     movwf    CMCON               ; to enable digital I/O
     movlw    b'10000001'            ; enable AD, right justified, Vdd reference, channel AN0 and power on AD
     movwf    ADCON0

   goto   Start

;-----AD meritev-----

AD_MERITEV
     bsf    ADCON0, GO               ; Set go bit to start AD conversion
AD_WAIT
    btfsc    ADCON0, GO            ; If AD operation is not compete
    goto    AD_WAIT               ; we wait

   movf    ADRESH,w               ; move AD result into TMP variables
    movwf    TMP2
   bsf   STATUS,5
     movf    ADRESL,w
    bcf   STATUS,5
     movwf    TMP1
   return
   
;*****----------program----------*****

Start   movlw   0x02
   movwf   GPIO
   
   call   Delay

   movlw   0x00
   movwf   GPIO

   call   Delay

   goto   Start

Delay   
   call   AD_MERITEV

ZANKA   decfsz   TMP1
   goto   ZANKA
   decfsz   TMP1
   goto   ZANKA
   
   return

   end


Tale del okrog Delay-a mi ni jasen. Rolling Eyes
Vem tudi, da bi lahko izklopil en kanal AD meritve ... Kako se že to naredi?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Silvo
Moderator
Moderator



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

PrispevekObjavljeno: Pon Okt 29, 2007 12:53 pm    Naslov sporočila:   Odgovori s citatom

Koda:
Tale del okrog Delay-a mi ni jasen.


Tudi meni ne, nisem sicer gledal ostale kode ampak iz tele zanke ne boš nikoli prišel.

Koda:
ZANKA   decfsz   TMP1
   goto   ZANKA
   decfsz   TMP1
   goto   ZANKA

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
TECHNIC
Član
Član



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

PrispevekObjavljeno: Pon Okt 29, 2007 1:19 pm    Naslov sporočila:   Odgovori s citatom

Joj, kakšna napaka. Hvala za opozorilo.

Rešitev:

Koda:
ZANKA   decfsz   TMP1,1
   goto   ZANKA
   decfsz   TMP1,1
   goto   ZANKA


Saj je tako, kajne?

Zdaj pa poskusim še enkrat.
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: Pon Okt 29, 2007 1:34 pm    Naslov sporočila:   Odgovori s citatom

TECHNIC je napisal/a:
Koda:
ZANKA   decfsz   TMP1,1
   goto   ZANKA
   decfsz   TMP1,1
   goto   ZANKA
Saj je tako, kajne?
Ne, ni.

Recimo, da je TMP=1. Najprej odšteješ 1 in preveriš. če je enako 0. Je. Zato se izvede tretja vrstica. Odšteješ 1 (dobiš 255) in preveriš, če je 0. Ni. Zato spet letiš v prvo vrstico. Neskončna zanka.
Najelegantneje rešiš z
Koda:

ZANKA   decfsz   TMP1,1
   goto   ZANKA
ZANKA1   decfsz   TMP1,1
   goto   ZANKA1
; To sta dve zakasnitvi zaporedno t=t1+t2

ZANKA   decfsz   TMP1,1
   goto   ZANKA
   decfsz   TMP2,1
   goto   ZANKA
; To pa sta dve množeni zakasnitvi t=t1*t2

Pa da ne bo pavza vsakič odvisna od AD meritve (rezultat gre v TMP1 in TMP2), spremenljivki pred pavzo pobrišeš "clrf TMP1 in clrf TMP2" ali uporabiš dodatni TMP3 in TMP4.
LP,
Igor

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor


Nazadnje urejal/a igo Pon Okt 29, 2007 2:16 pm; skupaj popravljeno 1 krat
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: Pon Okt 29, 2007 2:15 pm    Naslov sporočila:   Odgovori s citatom

Zdravo!

EDIT: Igo, je takole v redu? Popravil sem, a rezultat je isti.

Nekako se mi zdi, da ali napačno zapišem v TMP spremenljivke, ali pa napačno uporabim TMP spremenljivke ...

Tole je trenutna koda. Ne deluje ... Confused
LED gori do neke točke na potencimetru, nato pa začne utripati, pri tem pa ne spreminja hitrosti. Potenciometer je 10K.

Koda:
;test
;LED na GP1 (6)
;potenciometer na GP0 (7)

   include      p12f675.inc
   __CONFIG   _WDT_OFF & _INTRC_OSC_CLKOUT & _MCLRE_OFF & _PWRTE_ON

;nastavi konstante

STATUS   equ   0x03
TRISIO  equ   0x85
GPIO   equ   0x05

TMP1   equ   0x20
TMP2   equ   0x21

;nastavi izhode

    bsf   STATUS,5
    movlw    b'00010001'            ; set conversion time Fosc/8 and enable AN0
    movwf    ANSEL
    movlw    b'00001001'            ; GP0 & GP3 input
    movwf    TRISIO
    bcf   STATUS,5

    movlw    b'111'            ; disable comparator module
     movwf    CMCON
     movlw    b'10000001'            ; enable AD, right justified, Vdd reference
     movwf    ADCON0

   goto   Start

;-----AD meritev-----

AD_MERITEV
     bsf    ADCON0, GO               ; Set go bit to start AD conversion
AD_WAIT
    btfsc    ADCON0, GO            ; If AD operation is not compete
    goto    AD_WAIT               ; we wait

   movf    ADRESH,w               ; move AD result into TMP variables
    movwf    TMP2
   bsf   STATUS,5
     movf    ADRESL,w
    bcf   STATUS,5
     movwf    TMP1
   return
   
;*****----------program----------*****

Start   movlw   0x02
   movwf   GPIO
   
   call   Delay

   movlw   0x00
   movwf   GPIO

   call   Delay

   goto   Start

Delay  clrf    TMP1
          clrf    TMP2
 
    call   AD_MERITEV

ZANKA   decfsz   TMP1,1
   goto   ZANKA
   decfsz   TMP2,1
   goto   ZANKA
   
   return

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



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

PrispevekObjavljeno: Pon Okt 29, 2007 5:24 pm    Naslov sporočila:   Odgovori s citatom

Poizkusi z 1K potenciometrom.

Tista dva clrfja sta nepotrebna za delovanje programa.

MPLAB pozna konstante z imeni bitov registrov (in imeni registrov), ce vkljucis .inc file (kar si naredil). Pozna tudi konstanti w in f, ki dolocita cilj operacije vecine ukazov. Konsistentna uporaba teh konstant naredi kodo bolj berljivo, saj na pamet nihce razen tebe ne ve, da je recimo STATUS,5 v bistvu STATUS, rp0.

Sicer je program videti pravilen (inicializacije nisem pregledoval, predpostavljam, da je skopirana iz datasheeta in vse prav nastavljeno).

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
TECHNIC
Član
Član



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

PrispevekObjavljeno: Pon Okt 29, 2007 8:18 pm    Naslov sporočila:   Odgovori s citatom

Zdravo!

Malo pogledal Silvovo kodo iz teme "utripanje dveh LED diod", našel par napak.
No, hvala vsem!

Sedajšnja (delujoča) koda:
Nekaj sprememb v ANSEL in pa ADCON0.
Moti le nekaj: na odvitem pot-u LED utripa počasi, skoraj na koncu praktično gori. Ko pridem preko te točke (skoraj čisto na koncu), začne zopet počasi utripati.
Potenciometer ni kriv.

Sumim kak del okrog ZANKE.


Koda:
;test
;LED na GP1 (7)
;potenciometer na GP3 (5)

   include      p12f675.inc
   __CONFIG   _WDT_OFF & _INTRC_OSC_CLKOUT & _MCLRE_OFF & _PWRTE_ON

;nastavi konstante

STATUS   equ   0x03
TRISIO   equ   0x85
GPIO   equ   0x05

TMP1   equ   0x20
TMP2   equ    0x21

;nastavi izhode

     clrf   GPIO
     bsf   STATUS,RP0
      movlw   b'00010100'
      movwf   ANSEL
      movlw   b'100'            ; GP3 input
      movwf   TRISIO
     bcf   STATUS,RP0

       movlw   b'111'            ; disable comparator module
       movwf   CMCON
       movlw   b'1001'
       movwf   ADCON0

   goto   Start

;-----AD meritev-----

AD_MERITEV
   bsf   ADCON0, GO               ; Set go bit to start AD conversion
AD_WAIT
   btfsc   ADCON0, GO            ; If AD operation is not compete
   goto   AD_WAIT               ; we wait

   movf   ADRESH,w               ; move AD result into TMP variables
   movwf   TMP1
   movwf   TMP2
   return
   
;*****----------program----------*****

Start   movlw   0x01
   movwf   GPIO
   
   call   Delay

   movlw   0x00
   movwf   GPIO

   call   Delay

   goto   Start

Delay   call   AD_MERITEV

ZANKA   decfsz   TMP1,1
   goto   ZANKA
   decfsz   TMP2,1
   goto   ZANKA
   
   return

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



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

PrispevekObjavljeno: Pon Okt 29, 2007 9:30 pm    Naslov sporočila:   Odgovori s citatom

TECHNIC je napisal/a:
Potenciometer ni kriv.

Sumim kak del okrog ZANKE.


No, potem pa kar pridno sumi ... ko se bos navelical sumiti, preveri potenciometer, kateri ni nic kriv (na koncu ima najbrz mrtvo obmocje).

Z zanko za zakasnitev preverjeno (simulator je prilozen MPLABu in je zelo prakticna zadeva !) ni narobe nic, razen da sta meji konfuzno postavljeni; vrednost, vpisana tmp1, na cas izvajanja prakticno ne vpliva, vrednost v tmp2 pa vpliva na prakticno celoten cas izvajanja. Ce je nastavitev ADCja v redu - to ocitno je, sicer se program sploh ne bi odzival na obracanje potenciometra - in potenciometer ni kriv, potem mora program delovati.

Aja pa izbrani pin za vhod ADCja ni GP3, kakor si zapisal v svojem komentarju, ampak GP2. Ce bi poskusal izbrati GP3, ne bi delovalo nic.

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
TECHNIC
Član
Član



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

PrispevekObjavljeno: Pon Okt 29, 2007 9:36 pm    Naslov sporočila:   Odgovori s citatom

Gp3 - vem, sem se zmotil, ker sem začel šteti od 1.
Glede potenciometra nisem prepričan, sem poskusil najmanj tri različne. Pri vseh je enak rezultat.

Glede meje v zanki - pavzi. Lahko bi torej namesto TMP1 uporabil tudi kakšen prost register, v katerega bi vpisal neko vrednost.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Sokrat
Član
Član



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

PrispevekObjavljeno: Pon Okt 29, 2007 10:38 pm    Naslov sporočila:   Odgovori s citatom

Imas prav, potenciometer je OK, tezava je drugje.

Glede TMP1 je tako: lahko bi popolnoma izpustil nastavljanje TMP1 (torej vrstico movwf TMP1). Ta spremenljivka je uporabljena zato, ker je nekdo ocitno raje zrtvoval bajt RAMa (katerega hitro zmanjka), kot par besed flasha (katerega ima tale PIC ogromno) Laughing

Do napake v delovanju pride zato, ker uporabljas kodo zakasnitvene zanke malce narobe; ko je odcitek ADCja 0, takrat zanka traja najdlje (se dlje kot takrat, ko je odcitek maksimalen, torej 255), ceprav bi morda pricakoval, da bo takrat najkrajsa (torej se krajse kot pri odcitku 1).

Vrednost odcitka povecaj za 1 (dodaj incf TMP2,f za vrstico movwf TMP2), pa bo zakasnitvena zanka delovala tocno tako, kakor si je njen prvotni avtor zamislil, s tem pa tudi tvoj program.

Drugic kodo napisi sam ali se vsaj potrudi razumeti kaj pocne, ce jo ze od nekje prekopiras, pa tovrstnih tezav ne bos imel Wink

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
TECHNIC
Član
Član



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

PrispevekObjavljeno: Pon Okt 29, 2007 11:24 pm    Naslov sporočila:   Odgovori s citatom

Zdravo!

Bom popravil in še enkrat poskusil. Smile Hvala!

Saj bi napisal, ampak mi ni bilo jasno, kaj so tiste številke, ki se jih vnaša v ANSEL in ADCON0. Potem se spomnim ... datasheet! Smile Točno! Wink

EDIT: Po popravku deluje kot je treba! Smile
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  Naslednja
Stran 2 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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group