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


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Pon Dec 07, 2009 11:12 pm Naslov sporočila: Pic16f84A enostaven program |
|
|
Da sem preizkusil tale programator, sem si izdelal preprost 5V regulatorček, ki ga bom pritrdil na protoboard (idejo sem dobil dolgo nazaj na spletni strani slovenskega avtorja, ki je zdaj ne najdem več). Nanj sem priključil 9V blok baterijo. Ko ga vključim, mi voltmeter na izhodu pokaže lepo konstantno 5V. Ko pa nanj priključim omenjeni mikrokrmilnik, pa mi pokaže napetost 0.6V. Če obrnem polariteto (VDD na - in VSS na +), mi kaže 5V s predznakom -. Nič mi ni več jasno. Na mikrokontroler imam priključene 4 ledice s predupori (visok potencial. Anoda na pin, katoda na upor, upor na maso). Program sem v mplab-u uspešno prevedel (sicer z warningi z neznanim razlogom ampak brez errorjov) in zapisal na mikrokrmilnik. Je pa sledeč:
Koda: |
;***************************************************
;Izmenicno priziganje in ugasanje vsake druge ledice
;***************************************************
;*************************************************
;POSTAVITVE VHODOV IN IZHODOV...NOVE SPREMENLJIVKE
;*************************************************
list p=16f84a
#INCLUDE "C:\Program Files (x86)\Microchip\MPASM Suite\P16F84A.INC"
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC
ORG 00h
STEVEC1 EQU 0x0C ;Prvi stevec
STEVEC2 EQU 0x0D ;Drugi stevec
BSF STATUS,RP0 ;Banka1
MOVLW 0x00; Vsi pini
MOVWF TRISA ;Na TRISA izhodi
BCF STATUS,RP0 ;Banka0
;*******
;Zacetek
;*******
GLAVNI
;******************
; Vklapljanje ledic
;******************
MOVLW b'10101' ;V W naložimo vrednost 10101
MOVWF PORTA ;Nastavimo Katere ledice svetijo
CALL PAVZA ;zakasnitev
;******************
;Izklapljanje ledic
;******************
MOVLW b'10101'
MOVWF PORTA
COMF PORTA,1 ;Obrnemo prešje stanje ledic in pošljemo rezultat v PORTA
CALL PAVZA ;Zakasnitev
goto GLAVNI
;************
; ZAKASNITEV
;************
PAVZA
MOVLW 255
MOVWF STEVEC1
MOVWF STEVEC2 ;Stevec 1 in 2 sta 255
ZANKA DECFSZ STEVEC1
GOTO ZANKA
DECFSZ STEVEC2
GOTO ZANKA
RETURN
end |
Uporabil sem takšno vezavo regulatorja, s tem da je dioda 5m rdeča LED s 300R preduporom, C1 je elektrolot 470uF, C2 pa je navaden 100nF kondenzator. Zakaj napetost tako drastično pade?
Na mikrokrmilnik sem tudi poizkusil priklopiti kvarc z dvema 18pF kondenzatorjema, vezanima na maso, ampak se vezje ne odziva (ne s kvarcem in ne brez). Sem morda še kaj spregledal? Upam, da sem navedel dovolj podatkov za kakšna sklepanja. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.42 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Dec 08, 2009 8:47 am Naslov sporočila: |
|
|
Logično da ti ne dela.
Program je brez repa in glave, brez inicializacije, brez vsega.
Iz sheme regulatorja ostrani diodo in tisti tvoj "magični" 300R upor in bo stvar delovala tako kot mora. PIC16F84 nima internega oscilatorja in brez kristala tako ali tako ne bo deloval. |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3367 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Tor Dec 08, 2009 9:06 am Naslov sporočila: Re: Pic16f84A enostaven program |
|
|
ljudsko je napisal/a: |
Da sem preizkusil tale programator, sem si izdelal preprost 5V regulatorček, ki ga bom pritrdil na protoboard (idejo sem dobil dolgo nazaj na spletni strani slovenskega avtorja, ki je zdaj ne najdem več). Nanj sem priključil 9V blok baterijo. Ko ga vključim, mi voltmeter na izhodu pokaže lepo konstantno 5V. Ko pa nanj priključim omenjeni mikrokrmilnik, pa mi pokaže napetost 0.6V. Če obrnem polariteto (VDD na - in VSS na +), mi kaže 5V s predznakom -. |
Ne PIC-e se ne spoznam, toda regulator napetosti bi moral delovati, če si le pravilno obrnil polariteto elektrolitov.
Če se napetost sesede na 0.6 V pomeni, da je verjetno nekaj v kratkem stiku, in seveda pri taki napetosti ti noben mikrokrmilnik ne bo deloval.
Kje je tisti 'nekaj' v kratkem stiku, (narobe obrnjene diode, elektroliti, pravi kratki stiki) boš moral ugotoviti sam.. |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Tor Dec 08, 2009 9:34 am Naslov sporočila: |
|
|
mucek4 je napisal/a: |
Logično da ti ne dela.
Program je brez repa in glave, brez inicializacije, brez vsega.
|
Kako brez vsega? Kaj pa manjka (konkretno)? _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.42 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Dec 08, 2009 10:00 am Naslov sporočila: |
|
|
ljudsko je napisal/a: |
Kako brez vsega? Kaj pa manjka (konkretno)? |
Program je brez vsega. Manjka ti reset vektor, inicializacija procesorja, ..
ljudsko je napisal/a: |
Diodo in predupor imam za signalizacjo vklopa, ker imam v vezju stikalo, da ga lahko izklopim. Kako pa potem naj izvedem to signalizacijo? Se da drugače? |
Diodo in predupor veži med izhodom regulatorja in GNDjem. |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.48 Kraj: Krško
|
Objavljeno: Tor Dec 08, 2009 10:15 am Naslov sporočila: |
|
|
Naprimer takole:
procesor je 877a:
Koda: |
;avtor:denis
;jst
INCLUDE P16F877A.INC
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF & _DEBUG_ON
ORG 0x00;začetek programa
stevec EQU 0x23
stevec2 EQU 0x24
CALL INICIALIZACIJA ;kliči prvo incializacijo
;********************GLAVNI PROGRAM************
ZACETEK
CALL PRIZGI
CALL PAVZA
CALL UGASNI
CALL PAVZA
GOTO ZACETEK ;KONEC
;*******************INCIALIZACIJA PROCESORJA********************
INICIALIZACIJA
BSF STATUS,RP0 ;PREHOD IZ BANKE 0 V BANKO 1
MOVLW 0x00;v W register damo 0,postavimo portb na izhod
MOVWF TRISB;PRESLIKI V TRISB
RETURN
PRIZGI
BCF STATUS,RP0 ;BANKA0
MOVLW B'00001111';kombinacija
MOVWF PORTB;PRESLIKI V PORTB
RETURN
UGASNI
BCF STATUS,RP0 ;BANKA0
MOVLW B'11110000';kombinavija
MOVWF PORTB;PRESLIKI V PORTB
RETURN
;*************PAVZA**************************
PAVZA;2 cikla
movlw .100;1 cikl
movwf stevec2
zanka2
movlw .255;1 cikl
movwf stevec
zanka1
DECFSZ stevec,F ;D-destination ,ce je F=>stevec=stevec-1,ce paW=>W=stevec-1
; DECFSZ stevec,W ;D-destination ,ce je F=>stevec=stevec-1,ce paW=>W=stevec-1
goto zanka1
DECFSZ stevec2,F
goto zanka2
;(4x254+3)+,traja v zanki
return ;(6+3+4)+stevec-1=1024*0,4=410us
END
|
_________________ Denis |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.42 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Dec 08, 2009 10:56 am Naslov sporočila: |
|
|
Denis. Tudi tvoj program ni "bleščeč" vendar je boljši. Kaj bi se zgodilo, če se v tvojem primeru sproži interrupt  |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.48 Kraj: Krško
|
Objavljeno: Tor Dec 08, 2009 11:18 am Naslov sporočila: |
|
|
mucek4 je napisal/a: |
Denis. Tudi tvoj program ni "bleščeč" vendar je boljši. Kaj bi se zgodilo, če se v tvojem primeru sproži interrupt  |
Res je,to je namreč prvi assemblerski program,ki dela. Res je bolj po "kavbojsko"napisano. Verjetno bi se zaciklal. _________________ Denis |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.77
|
Objavljeno: Tor Dec 08, 2009 12:13 pm Naslov sporočila: |
|
|
dkone je napisal/a: |
mucek4 je napisal/a: |
Denis. Tudi tvoj program ni "bleščeč" vendar je boljši. Kaj bi se zgodilo, če se v tvojem primeru sproži interrupt  |
Res je,to je namreč prvi assemblerski program,ki dela. Res je bolj po "kavbojsko"napisano. Verjetno bi se zaciklal. |
Na lokaciji 0x04 je prekinitveni vektor... _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.48 Kraj: Krško
|
Objavljeno: Tor Dec 08, 2009 12:18 pm Naslov sporočila: |
|
|
Silvo je napisal/a: |
dkone je napisal/a: |
mucek4 je napisal/a: |
Denis. Tudi tvoj program ni "bleščeč" vendar je boljši. Kaj bi se zgodilo, če se v tvojem primeru sproži interrupt  |
Res je,to je namreč prvi assemblerski program,ki dela. Res je bolj po "kavbojsko"napisano. Verjetno bi se zaciklal. |
Na lokaciji 0x04 je prekinitveni vektor... |
To že,a potem moram začeti program na lokaciji višje od 0x004? Do sedaj nismo še delali z interupti(zunanjimi). _________________ Denis |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.77
|
Objavljeno: Tor Dec 08, 2009 12:53 pm Naslov sporočila: |
|
|
Tako je. Če so vključene prekinitve ter se le ta zgodi skoči kazalček na lokacijo 0x04 ter se izvede kar pač je tam napisano. PC se hardwersko shrane v sklad. Običajno je tam skok na prekinitveno rutino katera se zaključi z ukazom retfie. Po tej instrukciji se iz sklada pobere PC. Program se nadaljuje tam, kjer se je izvedla prekinitev. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.42 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Dec 08, 2009 1:22 pm Naslov sporočila: |
|
|
Silvo. To pa opažam pri tvojih programih pa ne vem zakaj.
Na org 0x0004 daš ukaz "goto PREKINITEV" (ki zasede 2 pomnilniški lokaciji) na org 0x0006 pa imaš to prekinitev. Torej se ti vsaka prekinitev izvaja 2 cikla več popolnoma po nepotrebnem. Je to samo navada ali?
Sam delam nekako tako:
Koda: |
org 0x0000
goto MAIN
org 0x0004
; prekinitve, kar koli jih že je
MAIN
; glavni program
end |
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14679 Aktiv.: 61.77
|
Objavljeno: Tor Dec 08, 2009 1:29 pm Naslov sporočila: |
|
|
Nekako je navada - a zato obstaja razlog. V koliko v programu uporabljam tabele je te običajno pišem takoj za prekinitvenim vektorjem - z razlogom, da mi ni treba skbeti, da bo slučajno prišlo do "lomljenja" tabele. Prekinitveno rutino pač potem potiskam na dol koliko kode je vrinjene. V koliko tabel ni pač program izgleda kot si ti omenil. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.42 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Dec 08, 2009 3:53 pm Naslov sporočila: |
|
|
Zanimivo. Jaz tabele shranjujem v zadnji page programskega dela. Vsak po svoje zgleda. |
|
Nazaj na vrh |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Ned Dec 13, 2009 3:07 pm Naslov sporočila: |
|
|
Preizkusil sem vse možne variante programov, od Silvotovega (sicer za 16f84, ampak bi moral delovat tudi na 16f84A, če se ne motim) pa vse do raznoraznih primerih, najdenih z googlanjem. Zdaj izključujem te možnosti:
- Je potrebno kaj posebej nastavljati, če preneseš že prevedeno .hex datoteko iz interneta, preden to zapišeš na mikrokrmilnik in sestaviš vezje?
- Ali sestavljam vezje narobe?
- Ali sem neumen?
- Ali je čip neumen?
- Ali me ima čip za norca?
Prosim, če bi me eden opozoril na vse morebitne posebnosti pri programiranju in samemu sestavljanju poskusnega vezja. Obupujem, ker ne najdem vzroka za nedelovanje. _________________ return;
brake; |
|
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: 11 dni
Powered by phpBB © 2001, 2005 phpBB Group
|