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 Prejšnja  1, 2, 3
 
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: Sre Dec 16, 2009 7:42 am    Naslov sporočila:   Odgovori s citatom

No, mislim, da sem zdaj program popravil. Upam, da ni več kakšne velike napake. Ker sedaj mi lavfa normalno, pa lahko vezje vklapljam in izklapljam kolikor hočem Smile

Koda:

;-----------------------
;multivibrator z 12f675
;-----------------------

list P=12f675
#INCLUDE "C:\ASM\P12F675.INC"

__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _CP_OFF & _MCLRE_OFF & _BODEN_OFF

;---------------------------------
;Deklaracija spremenljivk
;---------------------------------
cblock 0x20
stevec1
stevec2
stevec3
endc   ;Spremenljivke
;---------------------------------


org 0x0000 ;Reset vektor

;------------------------
;GLAVNI PROGRAM
;------------------------
GLAVNI

;-------------------------------
;Inicializacija
;-------------------------------
bsf STATUS,RP0 ;Banka 1
movwf OSCCAL   ;Calibrate
clrf ANSEL     ;Digitalni I/O
clrf TRISIO      ;Vsi pini izhodi
bcf STATUS,RP0   ;Banka 0
movlw .7
movwf CMCON      ;Izklop komparatorjev
;---------------------------------------


G_ZANKA
clrf GPIO   ;Vsi pini na 0
;--------------------------------
bsf GPIO,0   ;GP0 prvic na 1
call PAVZA   ;prva zakasnitev
bcf GPIO,0   ;GP0 na 0
call PAVZA   ;druga zakasnitev
bsf GPIO,0   ;GP0 drugic na 1
call PAVZA   ;tretja zakasnitev
bcf GPIO,0   ;GP0 na 0
;--------------------------------
bsf GPIO,1   ;GP1 prvic na 1
call PAVZA   ;prva zakasnitev
bcf GPIO,1   ;GP1 na 0
call PAVZA   ;druga zakasnitev
bsf GPIO,1   ;GP1 drugic na 1
call PAVZA   ;treta zakasnitev
bcf GPIO,1   ;GP1 na 0

goto G_ZANKA ;Neskončna zanka

;------------------------
;ZAKASNITEV
;------------------------
PAVZA
movlw .255
movwf stevec1
movwf stevec2
movlw .2
movwf stevec3

ZANKA
decfsz stevec1,f
goto ZANKA
decfsz stevec2,f
goto ZANKA      
decfsz stevec3,f
goto ZANKA
return

end

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Aljosa
Član
Član



Pridružen-a: Pet 15 Sep 2006 11:43
Prispevkov: 149
Aktiv.: 0.65
Kraj: Trbovlje

PrispevekObjavljeno: Čet Dec 17, 2009 10:54 pm    Naslov sporočila:   Odgovori s citatom

Za kakšne manjše projekte uporabljam kar Oshon PIC Simulator IDE (nekaj takega če se ne motim) in imaš notri cel simulator pic krmilnikov, asm in basic prevajalnik, lcd simulator itd itd... V basic IDE si napišem progam, prevedem v hex in naložim na PIC. Največkrat vse skupaj traja 15 min, če začnem z nule. Videl sem namreč, da si se kar natrudil da si vse to napisal in da zadeva deluje. Meni se ne da ukvarjati z detajli in programirati v ASM, ker največkrat ne rabim ekstra visokih performans, da bi štel vsako inštrukcijo. Pa še super je ker lahko preveden hex naložiš v ram v simulatorju (hitrost simulacije nastaviš na takšno, da vidiš celetno dogajanje ali pa celo na real time) in opazujš kaj se dogaja na pinih, tisti ki si deinirani kot vhod pa imajo tipko, ki jo lahko pritisneš. Pa izčrpen help je zraven in exampli.

Pred dobrim mesecem sem tako v dobrih 20min realiziral neke preklope s 4 tipkami (channel selector) pic pa mi je krmilil LED diode in pine na analognem preklopniku. No bugs at all. Very Happy Vredno poskusiti, čas je denar. Wink

_________________
"Logic will get you from A to B. Imagination will take you everywhere.
―Albert Einstein
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: Čet Dec 17, 2009 11:13 pm    Naslov sporočila:   Odgovori s citatom

Zdaj sem se odločil, da k programu dodam malo zunanjega sveta. Program sem napisal tako, da (vsaj moralo bi biti tako) na portu GP1 utripa LED v intervalu 1s s 5 kratno ponovitvijo, če pritisnemo tipko na GP0. Kaj meni dejansko naredi? Prva napaka, ki sem jo pravzaprav odkril je to, da mikrokontroler ne zazna, da je pin GP0 visok, če ga priklopim na +5v, ampak na GND. To mi ni jasno. Druga stvar pa je, ko pride v zanko, torej ko začne LED utripati, se le ta ne konča. Morala bi se samo 5 krav vklopit in izklopit, ampak preide v neko neskončno zanko. Program sem pregledal, pa ne najdem napake.

Koda:
;---------------------------------------------------------------------
;Ko pritisnemo tipko na GP0, na GP1 5krat utripne LED v intervalu 1s
;---------------------------------------------------------------------


list p=12f675

#INCLUDE <p12f675.inc>

__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _CP_OFF & _MCLRE_OFF & _BODEN_OFF


;-------------------------
;Spremenljivke
;-------------------------
cblock   0x20
stevec1
stevec2
stevec3
endc            ;Spremenljivke
;-------------------------

org 0x0000      ;Reset vektor
;----------------
;Inicializacija
;----------------
bsf STATUS,RP0      ;Banka1
movwf OSCCAL      ;Kalibracija internega RC oscilatorja
clrf ANSEL         ;Digitalni V/I
clrf TRISIO         ;Vsi pini na GPIO izhodi (LED)
bsf TRISIO,0      ;Pin 1 na GPI0 vhod-tipka
bcf STATUS,RP0      ;Banka0
movlw .7
movwf CMCON         ;Izklop komparatorjev
;----------------

;----------------------------
;Glavni program
;----------------------------
Glavni
clrf    GPIO      ;Vsi pini na logicni 0
btfss   GPIO,0      ;Ali je tipka pritisnjena?
goto    Glavni      ;Ne, preverjaj naprej
call   Pavza_1ms   ;Da, poklici pavzo za filtriranje branja
btfsc   GPIO,0      ;Ali je tipka ze spuscena?
goto   $-1         ;Ne, preverjaj naprej
call   Pavza_1ms   ;Da, poklici pavzo za filtriranje branja

;---------------------------------------
;Utripanje LED
;---------------------------------------
movlw .5
movwf stevec1

Utripaj
bsf      GPIO,1      ;Prizgi LED
call   Pavza_1s   ;Zakasnitev 1s
bcf      GPIO,1      ;Ugasni LED
call   Pavza_1s   ;Zakasnitev1s
decfsz   stevec1,f
goto    Utripaj
goto   Glavni      ;Neskoncna zanka-na zacetek
;----------------------------------------   


;--------------------------
;Zakasnitev tipke 1ms
;--------------------------
Pavza_1ms
movlw .3         
movwf stevec3

Zakasnitev_1ms
incfsz stevec1,f      ;Povecuj stevec1, dokler ni 255 oz. 0
goto Zakasnitev_1ms      
decfsz stevec3,f      ;Zmanjšuj stevec3, dokler ni 0 (4 krat)
goto Zakasnitev_1ms      ;255*3=765=1ms
return
;--------------------------

;--------------------------
;Zakasnitev vklopa 1s
;--------------------------
Pavza_1s
movlw .15
movwf stevec3

Zakasnitev
incfsz stevec1,f      ;Povecuj stevec1, dokler ni 255
goto Zakasnitev
incfsz stevec2,f      ;Povecuj stevec2, dokler ni 255
goto Zakasnitev
decfsz stevec3,f      ;Odstevaj stevec3, dokler ni 0 (15 krat)
goto Zakasnitev         ;255*255*15=975ms=1s
return
;-------------------------

end

_________________
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: Pet Dec 18, 2009 10:07 am    Naslov sporočila:   Odgovori s citatom

@ljudsko... Danes pridem na Koroško - natančneje na Legen. Če želiš si popoldne lahko vzamem kakšni dve urici časa in pregledava tvoje težave. Sporoči če imaš čas
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: Pet Dec 18, 2009 5:13 pm    Naslov sporočila:   Odgovori s citatom

igo je napisal/a:
Spremenljivko Stevec1 uporabljaš v vseh podprogramih. To ne gre. V Utripaj ga nastaviš na 5, nato pa to vrednost v Pavza_1s povoziš in vsakič znova povečaš na 0, nato se v Utripaj zmanjša na 255, a jo spet povoziš v Pavza_1s. Neskončnokrat.

Dodaj še eno spremenljivko Stevec in naslednjič bolj pazi.

Koda:


movlw .5
movwf stevec1

Utripaj
bsf      GPIO,1      ;Prizgi LED
call   Pavza_1s   ;Zakasnitev 1s
bcf      GPIO,1      ;Ugasni LED
call   Pavza_1s   ;Zakasnitev1s
: decfsz   stevec1,f  ; po dveh Pavza_1s ni več notri prava vrednost Stevec1. Naj bo tu Stevec
goto    Utripaj
goto   Glavni      ;Neskoncna zanka-na zacetek
 
 
Pavza_1s
movlw .15
movwf stevec3

Zakasnitev
: incfsz stevec1,f    ; povoziš Stevec1 , a naj ostane ta spremenljivka  ;Povecuj stevec1, dokler ni 255
goto Zakasnitev
incfsz stevec2,f      ;Povecuj stevec2, dokler ni 255
goto Zakasnitev
decfsz stevec3,f      ;Odstevaj stevec3, dokler ni 0 (15 krat)
goto Zakasnitev         ;255*255*15=975ms=1s
return 


LP,
Igor

_________________
Denis
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-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: Sob Dec 19, 2009 12:52 pm    Naslov sporočila:   Odgovori s citatom

Sedaj deluje. Hvala, Igor.
Ampak še vseeno ne razumem, zakaj mi mikrokontroler reagira na pinu s tipko na nizek potencial in ne na visok. Ko sklenem tipko na maso, začne utripati, namesto, da bi začelo, ko jo sklenem na +5V.

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 16.98
Kraj: Črnuče

PrispevekObjavljeno: Sob Dec 19, 2009 12:57 pm    Naslov sporočila:   Odgovori s citatom

Pa sej maš napisano zakaj Rolling Eyes

Koda:

btfsc   GPIO,0      ;Ali je tipka ze spuscena?
goto   $-1         ;Ne, preverjaj naprej

Testiraš če je na pinu 0 in če je, nehaš testirat.

Če hočeš da dela na 1 - ko moraš v tej vrstici btfsc zamenjat z btfss par vrstic višje, ko testiraš na 1 z btfss pa zamenjat z btfss.

Btfss - bit test registra skip if set, set=1
btfsc - bit test registra skip if clear, clear =0

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
ljudsko
Član
Član



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

PrispevekObjavljeno: Sob Dec 19, 2009 1:09 pm    Naslov sporočila:   Odgovori s citatom

Potem mi ta pin zazna vedno, kot da je tipka pritisnjena. Saj, če je tako:
Koda:
btfsc  GPIO,0
, to pomeni, da testira, če je na pinu 0. To pa je vedno, dokler ne skleneš z +5V a ne? Zato pa najprej preverjam, če je 1 (če je na +5V), nato pa, če je 0 (če je že umaknjena iz +5V). To mi je nekako tako logično.
_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-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: Sob Dec 19, 2009 10:56 pm    Naslov sporočila:   Odgovori s citatom

Še vedno nerazjasnjeni pojmi glede potenciala tipke. Confused
Dobil sem idejo za zanimiv nov program na tej strani. Sestavil sem vezje na protoboardu in napisal program sam na novo. Zdaj pa sem v dilemi, ker ne vem, ali imam jaz tako neverjetno srečo, oz. nesrečo, ali program deluje pravilno, le da sem nekaj spregledal. Namreč, vsakokrat ko sklenem tipko, mi zagori rdeča LED. Zamenjal sem pogoj v IF stavku iz <=.125 na >=.125 pa mi sveti zdaj samo zelena LED. Zgleda, kot da v else stavek nikoli ne bi šlo. Ali je napaka pri povečevanju števca, ali pa v tem if-else stavku. Prosim, če mi kdo to preveri:
Koda:
;--------------------------------------------------------------------------------------------------------------------------------------
;Program v zanki preverja, ce je na GP0 pritisnjena tipka, nato nakljucno izbere, katero LED bo prizgal (GP1-rdeca-ne, GP2-zelena-da)
;--------------------------------------------------------------------------------------------------------------------------------------


list p=12f675
#include <p12f675.inc>

__CONFIG _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

;------------------------------------------------------
;Spremenljivke
;------------------------------------------------------
cblock 0x20
stevec,stevec1,stevec2,stevec3
endc
;------------------------------------------------------

org 0x0000      ;prekinitveni vektor

;------------------------------------------------------
;Inicializacija
;------------------------------------------------------
bsf      STATUS,RP0   ;Banka 1
movwf   OSCCAL      ;Calibrate
clrf   ANSEL      ;Digitalni I/O
clrf   TRISIO      ;Vsi pini izhodi
bsf      TRISIO,0   ;GP0 vhod
bcf      STATUS,RP0   ;Banka 0
movlw   .7
movwf   CMCON      ;Izklop komparatorjev
;------------------------------------------------------

;------------------------------------------------------
;Glavni program
;------------------------------------------------------
clrf   GPIO
clrf   stevec
Glavni
incf   stevec,1   ;Povecaj stevec
btfss   GPIO,0      ;Ali je tipka pritisnjena?
goto   Glavni      ;Ne, preverjaj naprej
call   Pavza_ms   ;Da, filtriraj
btfsc   GPIO,0      ;Ali je tipka ze spuscena?
goto   $-1         ;Ne, preverjaj naprej
call   Pavza_ms   ;Da, filtriraj

call   Nakljucna_izbira   ;Izbira LED
clrf   GPIO      ;Izklopi LED
goto   Glavni      ;Neskoncna zanka
;------------------------------------------------------


;------------------------------------------------------
;Nakljucna izbira
;------------------------------------------------------
Nakljucna_izbira
if (stevec <= .125)   ;Ce je stevec manjsi ali enak 125,
bsf      GPIO,1      ;se vklopi rdeca LED-Ne
else
bsf      GPIO,2      ;Drugace zelena LED-Da
endif
call   Pavza_5s   ;Zakasnitev 1s
return
;------------------------------------------------------

;------------------------------------------------------
;Pavza 1ms
;------------------------------------------------------
Pavza_ms
clrf   stevec1
clrf   stevec2
movwf   .4
movlw   stevec2

Zakasnitev_ms
incfsz   stevec1
goto   Zakasnitev_ms   ;Povecuj stevec1, dokler ni 0
decfsz   stevec2
goto   $-1            ;Zmanjsuj stevec2, dokler ni 0
return
;------------------------------------------------------

;------------------------------------------------------
;Pavza 5s   255*255*80
;------------------------------------------------------
Pavza_5s
clrf   stevec1
clrf   stevec2
clrf   stevec3

movlw   .80
movwf   stevec3


Zakasnitev_5s
incfsz   stevec1
goto   Zakasnitev_5s   ;Povecuj stevec1, dokler ni 0
incfsz   stevec2
goto   Zakasnitev_5s   ;Povecuj stevec2, dokler ni 0
decfsz   stevec3
goto   Zakasnitev_5s   ;Zmanjsuj stevec3, dokler ni 0
return               ;255*255*80=5202ms=5,2s   
;------------------------------------------------------

end

_________________
return;
brake;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 16.98
Kraj: Črnuče

PrispevekObjavljeno: Sob Dec 19, 2009 11:13 pm    Naslov sporočila:   Odgovori s citatom

Če bi si vzel 1 minuto kot jaz bi videl da spremenljivko števec v nekem trenutku ob zakonu zbrišeš = 0 potem pa ob pritisku na tipko preverjaš če je manjši od 128

Ker ga nikoli ne spremeniš ostane vedno 0. Zato ti sveti samo ena led.
Nekje bi rabil neko random funkcijo, ki jo pa v tem programu ni.

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
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 20, 2009 12:45 am    Naslov sporočila:   Odgovori s citatom

Ne razumem te. Niti malo. Confused
_________________
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 Prejšnja  1, 2, 3
Stran 3 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