Anti-Tartre électronique ATE2009

Logiciel
TaskTracker
WResDiv
 
Electronique
ATE2009
;***************************************************************
; ATE2009 v05/2010
;
; Cliquer ici pour télécharger le projet complet
;
; Programme sur PIC10F20x effectuant une oscillation inversee
; sur GP0 et GP1. L'oscillation est une suite d'impulsion dont
; la frequence varie de 2 a 25 kHz.
;
; GP0 est une sortie
; GP1 est une sortie (complement de GP0)
; GP2 est une sortie (non connectee)
; GP3 est configuree en MCLR
;
; Historique
; Date Commentaire
; ------- ------------------------------------------------------
; 06/2010 Version de base du logiciel

title ATE2009

; inclusion des definitions du PIC10F202

#include <p10f202.inc>

; configuration specifique
; MCLR/GP3 configuree en tant que MCLR
; Protection du code desactivee
; Watchdog active

__CONFIG _MCLRE_ON & _CP_OFF & _WDT_ON

; variables

CBLOCK 0x010
delai_1 ; boucle attente depart
delai_2
f_index ; selection frequence
f_valeur ; reference frequence
ENDC

; vecteur reset (le code demarre a partir de l'adresse 0x0000

ORG 0x000

nop

; OPTION
; reveil sur changement etat desactive
; pull-up desactivees
; TRM0 cadence a 125 kHz (4 MHz / 4 / 8)
; -> TMR0 sert de cadencement

movlw ( 1 << NOT_GPWU ) | ( 1 << NOT_GPPU ) | ( 1 << PS1 )
option

; Positionne GP0, GP1 et GP2 en sortie
; GP3 est toujours une entree

movlw ( 1 << GP3 )
tris 6

; sur PIC10F204/206 desactiver le comparateur

; clrf CMCON0

; initialisation etat depart de GP0 et GP1
; les sorties sont positionnees en complement

movlw ( 1 << GP0 )
movwf GPIO

; temporisation depart pour test sortie
; les sorties (LED) oscillent lentement
; durant quelques secondes. cela permet
; de constater une condition de defaut

movlw 0x10
movwf delai_1
clrf delai_2

attend: movlw D'125' ; attend 1 ms
subwf TMR0,W
btfss STATUS,C
goto attend

clrf TMR0 ; relance le compteur

clrwdt ; relance watchdog

decfsz delai_2,F ; decrement poids faible
goto attend

movlw ( 1 << GP0 ) | ( 1 << GP1 ) ; inversion sorties
xorwf GPIO,F

decfsz delai_1,F ; decrement poids fort
goto attend

; initialisation des variables

clrf f_index ; selection frequence depart

; boucle principale (n'en sort jamais)

boucle: clrwdt ; relance le watchdog

call f_tmr ; mise a jour reference
movwf f_valeur

delai: movfw f_valeur ; attente largeur impulsion
subwf TMR0,W
btfss STATUS,C
goto delai

clrf TMR0 ; relance le compteur

movlw ( 1 << GP0 ) | ( 1 << GP1 ) ; inversion sorties
xorwf GPIO,F

incf f_index,F ; passe a la frequence suivante

goto boucle ; c'est reparti

; conversion frequence en duree pour TMR0
; la table est une repartition entre 2 kHz et 25 kHz

f_tmr: movlw 0x0F ; masque bits utiles
andwf f_index,F
movlw f_tbl ; prepare le saut
addwf f_index,W
movwf PCL ; saut dans la table

f_tbl: retlw D'125' / D'2' ; 0: 2 kHz
retlw D'125' / D'5' ; 1: 5 kHz
retlw D'125' / D'9' ; 2: 9 kHz
retlw D'125' / D'12' ; 3: 12 kHz
retlw D'125' / D'15' ; 4: 15 kHz
retlw D'125' / D'18' ; 5: 18 kHz
retlw D'125' / D'22' ; 6: 22 kHz
retlw D'125' / D'25' ; 7: 25 kHz
retlw D'125' / D'25' ; 8: 25 kHz
retlw D'125' / D'22' ; 9: 22 kHz
retlw D'125' / D'18' ; A: 18 kHz
retlw D'125' / D'15' ; B: 15 kHz
retlw D'125' / D'12' ; C: 12 kHz
retlw D'125' / D'9' ; D: 9 kHz
retlw D'125' / D'5' ; E: 5 kHz
retlw D'125' / D'2' ; F: 2 kHz

END

Copyright 2016 Bruno BERUARD