 |
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: Sre Dec 16, 2009 7:42 am Naslov sporočila: |
|
|
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
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 |
|
 |
Aljosa Član


Pridružen-a: Pet 15 Sep 2006 11:43 Prispevkov: 149 Aktiv.: 0.65 Kraj: Trbovlje
|
Objavljeno: Čet Dec 17, 2009 10:54 pm Naslov sporočila: |
|
|
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. Vredno poskusiti, čas je denar.  _________________ "Logic will get you from A to B. Imagination will take you everywhere.”
―Albert Einstein |
|
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: Čet Dec 17, 2009 11:13 pm Naslov sporočila: |
|
|
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 |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.42 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Pet Dec 18, 2009 10:07 am Naslov sporočila: |
|
|
@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 |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.48 Kraj: Krško
|
Objavljeno: Pet Dec 18, 2009 5:13 pm Naslov sporočila: |
|
|
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 |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Sob Dec 19, 2009 12:52 pm Naslov sporočila: |
|
|
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 |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 16.98 Kraj: Črnuče
|
Objavljeno: Sob Dec 19, 2009 12:57 pm Naslov sporočila: |
|
|
Pa sej maš napisano zakaj
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 |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Sob Dec 19, 2009 1:09 pm Naslov sporočila: |
|
|
Potem mi ta pin zazna vedno, kot da je tipka pritisnjena. Saj, če je tako:
, 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 |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Sob Dec 19, 2009 10:56 pm Naslov sporočila: |
|
|
Še vedno nerazjasnjeni pojmi glede potenciala tipke.
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 |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 16.98 Kraj: Črnuče
|
Objavljeno: Sob Dec 19, 2009 11:13 pm Naslov sporočila: |
|
|
Č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 |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Ned Dec 20, 2009 12:45 am Naslov sporočila: |
|
|
Ne razumem te. Niti malo.  _________________ 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
|