# PIC mikrokontrolleri >  Kas ASMaa nepareizs?

## kvaris

Sveika, tauta!

Izstastisu, ko es velos sasniegt. PIC16F676 mirdzina LED maticu ar kaut kadu frekvenci. Es gribu, lai, nospiezot pogu, man frekvence izmainitos. Banali vienkarss udevums. Es biju iedomajies, ka, nospiezot sledzi, es aizeju uz interrupta proceduru, pamainu viena registra vertibu, lidz ar to pamainot aiztures ilgumu. Partraukums man ir uz RA2/INT kajas. LEDi tiek baroti no porta C.
Tas, kas notiek sobrid, ir tas, ka, nospiezot pogu, man mirgosanas frekvence mainas uz dullo, nekadas likumsakaribas.
Iemetu kodu. Ja nav slinkums un ir iespeja izsekot kodam, palidziet, ludzu! Atvainojos, ka kods ir tik saspiests, to man neizdevas uzrakstit skaistaku.

list p=16F676, R = DEC
include "P16F676.INC"
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
cblock 0x20
delay1,delay2,temp
endc
errorlevel -302

ORG 0x000
goto Main

org 0x04
goto ISR

Main 

movlw 7
movwf cmcon
bcf t1con,0
clrf adcon0
bsf status,rp0
bcf option_reg,6
bcf option_reg,5
bsf ioca,2
clrf trisc
bsf trisa,0
bsf trisa,2
clrf ansel
bcf status,rp0
movlw 255
movwf temp
bsf intcon,raie
bsf intcon,inte
bsf intcon,gie

cilpa

movlw 255
movwf portc
call aizture
movlw 0
movwf portc
call aizture
goto cilpa

aizture 
movf temp,w
movwf delay1
decfsz delay1,f
goto $+2
goto $+6
movf temp,w
movwf delay2
decfsz delay2,f
goto $-1
goto $-7
return

ISR

decf temp,f
bcf intcon,intf
bcf intcon,raif
retfie

end

----------


## habitbraker

Pameegjini mosk izmnatot to temp tikai vienaa aiztures cilpaa, otraa izmanto konstanti 

aizture 
movf temp,w
movwf delay1
decfsz delay1,f
goto $+2
goto $+6
movlw 0xff; otraa cilpaa konstante
movwf delay2
decfsz delay2,f
goto $-1
goto $-7
return

----------


## ansius

lai arī pic asm nepārzinu, būtu manuālis jāņem rokā... vienkāršs jautājums, pogai debounce ir?

----------


## kvaris

Atļaušos būt tizls - kas ir debounce?

----------


## ansius

http://www.labbookpages.co.uk/electronics/debounce.html
http://www.eng.utah.edu/~cs5780/debouncing.pdf

----------


## kvaris

Paldies! Uzzināju, ka biju līdz tam aizdomājies. Zinu, ka citreiz šo pogu pārtraukumiem esmu izmantojis, un viss bija OK! Bet uz osciloskopa paskatīšos. Lai gan - uztaisīju otru pic, kas sūta regulārus impulsus ārā - tur noteikti neparādījās daudzas pārejas. Un - rezultāts identisks!

----------


## kvaris

Habitbraker - izmēģināju arī ielikt konstanti 2. cilpā. Nekādas starpības!  ::

----------


## next

Es pareizi saprotu ka tev tur divi paartraukumi vienlaiciigi darbojas?
Ko domaa par shito:

The
user, in the Interrupt Service Routine, can clear the
interrupt in the following manner:
a) Any read or write of PORTA. This will end the
mismatch condition.
b) Clear the flag bit RAIF.

----------


## Slowmo

Tie divi neatkarīgie pārgraukumi varbūt arī ir problēmu iemesls.
Dzēs ārā no inicializācijas
 bsf intcon, raie

Un tad pārtraukuma apstrādātājā izdzēs
bcf intcon, raif

Kā Tev fiziski poga pievienota? Nekarājas ieeja gaisā?

----------


## kvaris

OK, pārtraukums būs tikai viens! Man likās, ka abi krodziņi (intf un raif) jānotīra. Ieeja tiešām gaisā nekarājas. Caur pull-down pie zemes pievilkta ar 10 kiloomēm.

----------


## kvaris

SUPER!! Īsti palīgi esat! Ir OK!

kvaris

----------

