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 

Pic16f84A enostaven program
Pojdi na stran 1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika za začetnike
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.63
Kraj: Koroška-Mežica

PrispevekObjavljeno: Pon Dec 07, 2009 11:12 pm    Naslov sporočila:  Pic16f84A enostaven program Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.42
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Tor Dec 08, 2009 8:47 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3367
Aktiv.: 14.17
Kraj: Dragomer

PrispevekObjavljeno: Tor Dec 08, 2009 9:06 am    Naslov sporočila:  Re: Pic16f84A enostaven program Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.63
Kraj: Koroška-Mežica

PrispevekObjavljeno: Tor Dec 08, 2009 9:34 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.42
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Tor Dec 08, 2009 10:00 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2116
Aktiv.: 9.48
Kraj: Krško

PrispevekObjavljeno: Tor Dec 08, 2009 10:15 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.42
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Tor Dec 08, 2009 10:56 am    Naslov sporočila:   Odgovori s citatom

Denis. Tudi tvoj program ni "bleščeč" vendar je boljši. Kaj bi se zgodilo, če se v tvojem primeru sproži interrupt Confused
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2116
Aktiv.: 9.48
Kraj: Krško

PrispevekObjavljeno: Tor Dec 08, 2009 11:18 am    Naslov sporočila:   Odgovori s citatom

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 Confused


Res je,to je namreč prvi assemblerski program,ki dela. Res je bolj po "kavbojsko"napisano. Verjetno bi se zaciklal.

_________________
Denis
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.77

PrispevekObjavljeno: Tor Dec 08, 2009 12:13 pm    Naslov sporočila:   Odgovori s citatom

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 Confused


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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2116
Aktiv.: 9.48
Kraj: Krško

PrispevekObjavljeno: Tor Dec 08, 2009 12:18 pm    Naslov sporočila:   Odgovori s citatom

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 Confused


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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.77

PrispevekObjavljeno: Tor Dec 08, 2009 12:53 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.42
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Tor Dec 08, 2009 1:22 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14679
Aktiv.: 61.77

PrispevekObjavljeno: Tor Dec 08, 2009 1:29 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.42
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Tor Dec 08, 2009 3:53 pm    Naslov sporočila:   Odgovori s citatom

Zanimivo. Jaz tabele shranjujem v zadnji page programskega dela. Vsak po svoje zgleda.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.63
Kraj: Koroška-Mežica

PrispevekObjavljeno: Ned Dec 13, 2009 3:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika za začetnike Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3  Naslednja
Stran 1 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: 11 dni


Powered by phpBB © 2001, 2005 phpBB Group