Hallo
Ik heb de stroomsensor gemaakt van Frits Kieftenbelt,maar om deze te compileren in de Lite versie,moet ik het programma inkorten kan iemand mij dat uitleggen.
pic basic code:
; PIC12F675: +--v--+
; +5V [ ] GND
; Buzzer <[ ]> LED
; Piezo <[ ]< Potmeter
; 33k pull-up! Vpp/Reset >[ ]< Stroomsensor
; +-----+
;www.picbasic.nl / Frits Kieftenbelt, Raalte, Netherlands (Frizie)
;
;Opstarten gebeurt na programmering van de PIC soms niet automatisch
;Dan even opnieuw de spanning inschakelen
;Programmeren met de potmeter in middenstand, anders heb je kans dat programmeren niet wil
DEVICE 12F675 ;Gebruik een 12F675 type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, BODEN_OFF, PWRTE_ON, MCLRE_OFF
'ALL_DIGITAL TRUE ;ALL_DIGITAL TRUE mag weggelaten worden
'SET_OSCCAL ;Fabrieks kalibratiewaarde in OSCCAL register plaatsen
;Constanten
SYMBOL Tijd = 3500 ;700 = 1 minuut, na deze tijd gaat piezo zoemer piepen
SYMBOL TijdPiezo = 450 ;Piezo "af en toe piep" tijd, deze moet kleiner dan 'Tijd' zijn
;Logische constanten
SYMBOL OFF = 0 ;UIT
SYMBOL ON = 1 ;AAN
;Poortnamen
SYMBOL LED = GPIO.0 ;LED brandt onmiddellijk als stroom boven instelling komt
SYMBOL Potmeter = GPIO.1 ;Instelpotmeter 5k ... 25k op print
SYMBOL Spoel = GPIO.2 ;Hierop zit de stroomsensor aangesloten (spoel)
SYMBOL Piezo = GPIO.4 ;Piezo-zoemer (piep in kamer)
SYMBOL Buzzer = GPIO.5 ;Buzzer (bzzzz in slaapkamer)
;Variabelen declareren
;WORD-ARRAY
DIM Meting[15] AS WORD ;Sla laatste 15 metingen op in een array
;WORD
DIM MeetGemiddelde AS WORD ;Bevat het totaal van de laatste 15 stroommetingen
DIM PotmeterInst AS WORD ;Bevat de potmeter instelling
DIM Timer AS WORD ;Lopende timer voor piezo-zoemer
DIM WD1 AS WORD ;Word Dummy 1
;BYTE
DIM Index AS BYTE ;Indexvariabele voor array 'Meting[]'
DIM BD1 AS BYTE ;Byte Dummy 1
;BIT
DIM ID1 AS BIT ;bIt Dummy 1
;Register 76543210
GPIO = %00000000
TRISIO = %11001110 ;Uitgangen voor Buzzer, Piezo-zoemer en LED
ADCON0 = %10000000 ;Analoog right justified / Vdd als referentie spanning
ANSEL = %00010110 ;Fosc/8 en analoog input alleen GPIO.2 en GPIO.1
CMCON = %00000111 ;Comparator uit (Bits 2, 1 en 0 op '1' zetten)
CLEAR ;Wis alle RAM geheugen
DELAYMS 500 ;Signaal stabilisering
;Hoofdprogramma
FOR BD1 = 1 TO 4 ;Laat LED een paar keer knipperen (indicatie dat PIC opstart)
LED = ~LED ;Toggle de LED
DELAYMS 300 ;Knippersnelheid van de LED
NEXT
WHILE 1 = 1
Meting[Index] = ADIN 2 ;Lees huidige stroomopname in op GPIO.2 (=AN2)
IF Index < 14 THEN ;'Index' telt in een lus van 0 ... 14 (15 metingen)
INC Index ;Verhoog de indexvariabele voor arrayvariabele 'Meting[]'
ELSE
CLEAR Index ;Reset indexvariabele van de array
CLEAR MeetGemiddelde ;Wis eerst de metingswaarde van de vorige keer
FOR BD1 = 0 TO 14 ;Bereken het gemiddelde van de 15 metingen (meting 0 t/m 14)
MeetGemiddelde = MeetGemiddelde + Meting[BD1] ;Tel waarden van laatste 15 metingen op
NEXT
MeetGemiddelde = MeetGemiddelde / 15 ;Deel het totaal van de 15 metingen door 15
WHILE 1 = 1
PotmeterInst = ADIN 1 ;Lees instelling van 5k ... 25k instelpotmeter op GPIO.1
IF PotmeterInst < 450 THEN BREAK ;Potmeter < bijna maximaal, dan is alarm ingeschakeld
Buzzer = OFF ;Bij potmeter (bijna) maximaal 'Buzzer' en 'Piezo' uit
Piezo = OFF
CLEAR Timer ;Timer resetten omdat de buzzer anders niet meer aan zou gaan
DELAYMS 250 ;Rustig kijken naar potmeterstand
WEND
IF MeetGemiddelde > PotmeterInst THEN ;Stroomopname groter dan potmeterinstelling, dan...
INC Timer ;Verhoog 'Timer'
IF Timer > Tijd THEN ;Tijd voorbij? Dan...
Piezo = ON ;Piezo-zoemer aan (kamer)
Timer = Tijd - TijdPiezo ;Timer iets terugzetten waardoor piezo opnieuw zal afgaan
ELSE ;...anders... (is Tijd voorbij)
Piezo = OFF ;Piezo-zoemer uit (kamer)
ENDIF
LED = ON ;LED reageert zonder vertraging (direct aanzetten)
IF Timer = 20 THEN ;Hysteresis zodat buzzer niet piept bij een korte stroompuls
Buzzer = ON ;Buzzer slaapkamer aan
Piezo = ON ;Eerste piep piezo (kamer) direct bij hoge stroommeting
DELAYMS 200 ;Deze eerste piep duurt ook wat langer
Piezo = OFF ;Gaat elders korte piepen geven als stroommeting te lang duurt
ENDIF
ELSE ;...anders... (is stroomopname lager dan potmeterinstelling)
CLEAR Timer ;Tijd resetten
Buzzer = OFF ;Buzzer (slaapkamer) uitzetten
LED = OFF ;LED uitzetten
Piezo = OFF ;Piezo-zoemer (kamer) uitzetten
ENDIF
ENDIF
DELAYMS 5 ;Vertraging voor o.a. piezo-zoemer timer
WEND
[Bericht gewijzigd door Henry S. op woensdag 13 december 2017 00:11:53 (0%)