 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Tor Okt 09, 2007 8:55 pm Naslov sporočila: |
|
|
Hvala! Bom malo pogledal, se poglobil v program in datasheet. Morda celo uspe.
|
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Čet Okt 11, 2007 2:14 pm Naslov sporočila: |
|
|
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 |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pet Okt 26, 2007 5:35 pm Naslov sporočila: |
|
|
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 !
Vstavim PICa, še enkrat, tokrat pa ... hardware not responding ... znano. 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. 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.
Opis: |
|
Velikost datoteke: |
68.87 KB |
Pogledana: |
9 krat |

|
|
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Sob Okt 27, 2007 9:48 am Naslov sporočila: |
|
|
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 |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pon Okt 29, 2007 12:35 pm Naslov sporočila: |
|
|
Pozdravljeni!
Zopet poskušam izvesti AD meritev.
Ne uspeva ...
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.
Vem tudi, da bi lahko izklopil en kanal AD meritve ... Kako se že to naredi?
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Okt 29, 2007 12:53 pm Naslov sporočila: |
|
|
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 |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pon Okt 29, 2007 1:19 pm Naslov sporočila: |
|
|
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 |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Pon Okt 29, 2007 1:34 pm Naslov sporočila: |
|
|
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 |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pon Okt 29, 2007 2:15 pm Naslov sporočila: |
|
|
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 ...
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pon Okt 29, 2007 5:24 pm Naslov sporočila: |
|
|
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 |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pon Okt 29, 2007 8:18 pm Naslov sporočila: |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pon Okt 29, 2007 9:30 pm Naslov sporočila: |
|
|
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 |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pon Okt 29, 2007 9:36 pm Naslov sporočila: |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pon Okt 29, 2007 10:38 pm Naslov sporočila: |
|
|
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)
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
_________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pon Okt 29, 2007 11:24 pm Naslov sporočila: |
|
|
Zdravo!
Bom popravil in še enkrat poskusil. 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! Točno!
EDIT: Po popravku deluje kot je treba!
|
|
Nazaj na vrh |
|
 |
|
|
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
|