 |
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: Sob Okt 06, 2007 4:04 pm Naslov sporočila: Usposabljanje PIC12F675 |
|
|
Pozdravljeni!
Pred kratkim sem se naučil programiranja mikrokotrolerjev. Prvi je bil 16F84A in z njim mi je uspelo nekaj preprostih programov (utripanje, semafor, potovanje 8 led, pa še vse to z dodanim stikalom, ki spremeni hitrost ali kaj drugega).
Potem pa sem kupil še PIC12F675, ker je fizično manjši. Takrat ko potrebuješ samo recimo en izhod in en vhod, ne boš zraven tlačil 18 pin mikrokontrolerja.
Do sedaj pa mi ni uspel še noben program na 12F675. Tukaj je en, ki sem ga sam napisal. Ne deluje, LED stalno gori. Povejte, če še kaj manjka:
Koda: |
;bliskavica
;LED na izhodnem pinu RA0 utripa v razmakih
#include P12F675.inc
__CONFIG _WDT_OFF
;nastavi
STATUS equ 0x03
TRISIO equ 0x85
GPIO equ 0x05
COUNT1 equ 0x11
COUNT2 equ 0x12
;nastavi izhode
bsf STATUS,RP0
movlw 0x00
movwf TRISIO
bcf STATUS,RP0
;prižgi LED
Start movlw 0x01
movwf GPIO
;dodaj pavzo
call Delay
;ugasni LED
movlw 0x00
movwf GPIO
;dodaj pavzo
call Delay
call Delay
call Delay
call Delay
call Delay
;na začetek
goto Start
;pavza
Delay movlw 0x50 ;vrednost med 0x00 in 0xFF, določa dolžino pavze
movwf COUNT1
movlw 0x0d ;vrednost med 0x00 in 0xFF, določa dolžino pavze
movwf COUNT2
Loop1 decfsz COUNT1,1
goto Loop1
decfsz COUNT2,1
goto Loop1
return
end |
Nastavitve pri MPLABu (v priponki).
Vezje je klasično - pozitivna napetost na pin1, pin4, negativna na pin8. Led je med pin7 in minusom.
Uporabljam Winpic800 in JDM programator. 16F84 sprogramira brez problema.
Opis: |
|
Velikost datoteke: |
24.48 KB |
Pogledana: |
7 krat |

|
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Okt 06, 2007 4:15 pm Naslov sporočila: |
|
|
Kako je z reset pinom?
Splošno namenski registri (ram) se začne na lokaciji 0x20. Ti napoveduješ dva registra Count1 in count2 na 0x11 ter 0x12 - tam ni nič.
(priporočam branje datasheta - file register map)
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Sob Okt 06, 2007 4:23 pm Naslov sporočila: |
|
|
Sem spremenil lokacijo in še enkrat naredil HEX datoteko. Sedaj tudi ne javi napake (prej je napisalo invalid RAM location).
Pin MCLR (pin4) je direkt vezan na +5 V. Ali naj dodam še upor in kondenzator? Bom poskusil - javim.
EDIT: Deluje! Hvala Silvo!
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Okt 06, 2007 4:39 pm Naslov sporočila: |
|
|
TECHNIC je napisal/a: |
Sem spremenil lokacijo in še enkrat naredil HEX datoteko. Sedaj tudi ne javi napake (prej je napisalo invalid RAM location).
|
Taka sporočila niso brez veze.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Sob Okt 06, 2007 4:42 pm Naslov sporočila: |
|
|
Vem, samo nisem vedel kaj točno pomenijo. Šele potem, ko sem prebral datasheet mi je bilo jasno.
Če v vezje dodam upor in kondenzator na pin4, deluje bolje.
|
|
Nazaj na vrh |
|
 |
twom Član


Pridružen-a: Ned 26 Okt 2003 0:37 Prispevkov: 986 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Sob Okt 06, 2007 10:26 pm Naslov sporočila: |
|
|
12F675 ima po defoltu vklopljene komparatorje in AD, tako da so pini definirani kot analogni in ne digitalni.
v banki 1
clrf ANSEL ; A/D module OFF
v banki 0
movlw b'00000111'
movwf CMCON ; comparator off
Lp,
Peter
|
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Ned Okt 07, 2007 10:15 am Naslov sporočila: |
|
|
Pozdravljeni spet!
Sedaj ko hočem v vezje dodati stikalo, zopet no go.
Kaj manjka? Utripanje deluje, stikalo pa nima vpliva.
Koda: |
;utripanje LED s stikalom - vklop 2× upočasni delovanje
;LED je na GP1, stikalo na GP0 s pull-down uporom
include p12f675.inc
__config _INTRC_OSC_CLKOUT & _WDT_OFF
;nastavi konstante
STATUS equ 0x03
TRISIO equ 0x85
GPIO equ 0x05
COUNT1 equ 0x20
COUNT2 equ 0x21
;nastavi izhode
bsf STATUS,5
movlw 0x01
movwf TRISIO
clrf ANSEL
bcf STATUS,5
movlw 0x6f
movwf CMCON
;prižgi LED
Start movlw 0x02
movwf GPIO
;preveri če je stikalo vklopljeno
BTFSC GPIO,0
call Delay
;dodaj pavzo
call Delay
;ugasni LED
movlw 0x00
movwf GPIO
;preveri če je stikalo še vedno vklopljeno
BTFSC GPIO,0
call Delay
;dodaj pavzo
call Delay
;pojdi na začetek
goto Start
;pavza
Delay
Loop1 decfsz COUNT1,1
goto Loop1
decfsz COUNT2,1
goto Loop1
return
;konec programa
end |
EDIT: Se mi je zdelo, da sem nekaj pozabil. Popravek je že vnešen. Sedaj deluje ...
|
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Ned Okt 07, 2007 11:35 am Naslov sporočila: |
|
|
Hmm, kaj pa je sedaj to ...
Ko imam v programatorju PICa 12F675, mi pokaže Hardware is not responding. Ko pa dam PICa ven, pa zopet deluje. Ko ga dam zopet noter ... no response ... Ampak ko dam detect device, pa zazna PIC12F675.
Programiranje tudi ne gre.
ko imam noter PICa 16F84A, deluje vredu. tudi programiranje.
Ja, PICa sem ponesreči premaknil eno mesto navzdol (za eno luknjico), tokrat pa na programatorju.
Ali sem skuril PICa?
Opis: |
Napaka pri poskusu programiranja |
|
Velikost datoteke: |
68.26 KB |
Pogledana: |
6 krat |

|
Opis: |
PICa zazna, kljub temu, da ... |
|
Velikost datoteke: |
40.79 KB |
Pogledana: |
4 krat |

|
Opis: |
... se hardware ne odziva. |
|
Velikost datoteke: |
40.87 KB |
Pogledana: |
3 krat |

|
Opis: |
|
Velikost datoteke: |
29.57 KB |
Pogledana: |
7 krat |

|
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Okt 07, 2007 12:42 pm Naslov sporočila: |
|
|
Ne, vrjetno ga nisi skuril. Težava je vključen interni oscilator, pa morebiti še izključen MCLR, zaradi katerega takoj potem, ko pic dobi napajanje v njem steče program. To zmede marsikateri programator. O tem je bilo že govora na forumu. Uporabi iskanje.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Ned Okt 07, 2007 1:32 pm Naslov sporočila: |
|
|
Sem malo pogledal po forumu, našel par primerov, da naj bi pobrisal mikrokontroler, vendar ne gre. Tudi če poskusim večkrat, lahko potem še vedno preberem vsebino (in točno tisto kar je bilo prej gor zapisano).
Baje so na internetu popravki, kateri lahko to odpravijo.
Torej mora biti v programu __CONFIG _MCLRE_ON ?
Našel sem pa tole:
Kateri MOSFET uporabit?
Pa še tiskanina:
http://users.tpg.com.au/btkelly/feng3_pcb.html
|
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.07 Kraj: Divača (Kačiče)
|
Objavljeno: Ned Okt 07, 2007 2:49 pm Naslov sporočila: |
|
|
Uporabi 2n7002. Stamp code na ohišju je 702. Je dokaj razširjen, tako da z dobavljivostjo ne bo problema.
_________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
matjay Član

Pridružen-a: Pon 06 Dec 2004 22:07 Prispevkov: 537 Aktiv.: 2.27 Kraj: Ljubljana
|
Objavljeno: Ned Okt 07, 2007 7:54 pm Naslov sporočila: |
|
|
S takim programatorjem sem se mučil pred časom. Problem je bilo napajanje in RS232 in je včasih delal , včasih ne.
LP
Matjay
|
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Pon Okt 08, 2007 2:34 pm Naslov sporočila: |
|
|
Bom vseeno poskusil. Stane me malo. Če dela original verzija JDM, potem je velika verjetnost, da bo tudi popravek ...
Imam še eno vprašanje:
Kako izvesti AD meritev?
Kaj je treba narediti, da vklopimo AD pretvornike?
Kaj je rezultat pri AD meritvi? Se te vrednost (1-255) zapiše v register?
Na internetu je veliko navodil za osnove programiranja PIC16F84 v assembelrju, za PIC12F675 pa ne toliko ...
|
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Pon Okt 08, 2007 3:20 pm Naslov sporočila: |
|
|
Preberi datasheet (poglavje o A/D pretvorniku). Tam pise vse, kar te zanima, torej kako se vkljuci (oz. izkljuci v tvojem primeru) analogne vhode, kako nastavis parametre pretvorbe, kako pretvorbo zazenes in kje preberes rezultat.
_________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Okt 09, 2007 6:31 am Naslov sporočila: |
|
|
Meni dela takole:
BANK1, BANK0 sta makroja za prestavljanje bank (Jaz sem eden od lenob, ki se jim ne ljubi pisat bcf STATUS,RP0 vsakič)
Koda dela na 12F675 in 12F683 inicializira AD in naredi pretvorbo. Ker sta registra z izhodnim podatkom (10 bit) v različnih bankah jih jaz premaknem v dne lokalni spremenljivki. Dokler časa traja AD pretvorba ne delam nič ampak čakam (pooling). Upam da je razumljivo.
Koda: |
IFDEF __12F675
BANK1
call 0x3ff
movfw OSCCAL
BANK0 ; Inicialization
ENDIF
IFDEF __12F683
BANK1
movlw b'00010000'
movwf OSCCON
BANK0 ; Inicialization
ENDIF
clrw ; clear w
clrf GPIO ; Clear all ports
BANK1
IFDEF __12F675
movlw b'00010001' ; set conversion time Fosc/8 and enable AN0
ENDIF
IFDEF __12F683
movlw b'00000001' ; set conversion time Fosc/8 and enable AN0
ENDIF
movwf ANSEL
movlw b'00001001' ; GP0 & GP3 input
movwf TRISIO ;
BANK0
movlw b'00000111' ; disable comparator module
IFDEF __12F675
movwf CMCON ; to enable digital I/O
ENDIF
IFDEF __12F683
movwf CMCON0 ; to enable digital I/O
ENDIF
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 ;
BANK1
movf ADRESL, w ;
BANK0
movwf TMP1 ;
|
|
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|