Pic Basic program inkorten

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 13 december 2017 00:11:53 (0%)]

Electronica is mooi als het goed werkt

Je kan op zijn website direct het HEX bestand downloaden.
Dan hoef je niets te compilen.
http://www.picbasic.nl/downloads/STROOM12.HEX

Ja dat weet ik,maar ik wil enkele dingen aanpassen vandaar mijn post.

Electronica is mooi als het goed werkt

Ik denk niet dat dat in 50 regels gaat lukken...
Je kunt wel in ieder geval alle SYMBOL regels weglaten, en gewoon de werkelijke waardes gebruiken in je programma.

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Onderstaande is een indicatie mechanisme, zou je weg kunnen laten. Alleen weet je dan niet zeker of de PIC werkt.

pic basic code:


;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
Een WOK is ook maar een vergiet zonder gaatjes

Nog een betere oplossing:

Download de laatste gratis versie van Picbasic.
Sinds augustus dit jaar is er geen limiet meer op het aantal regels code en is ook jouw type microcontroller ondersteunt.

http://www.protonbasic.co.uk/vbdownloads.php?do=download&&...loadid=416

Je hebt enkel nog een USB licentie sleutel nodig als je andere types wil programmeren, maar hun "gratis" lijst is al zéér groot geworden.

[Bericht gewijzigd door coldrestart op 9 december 2017 20:18:12 (20%)]

arco en marcob ; ik ga dit zeker uitproberen, mocht dit toch niet goed gaan dan ga ik over op de oplossing van coldrestart.
Mvrgr Bert

PS, hoe krijg ik mijn code precies in het daar voor bestemde kader ??

Electronica is mooi als het goed werkt

Over je forumvraag:

code:


[code]
hier je programma
[/code ]

(ik heb een extra spatie moeten toevoegen opdat ie de codes niet ziet.)

Het gehannes met beperkte versies van compilers, headers die niet met een open source compiler meegeleverd mogen worden etc etc. zijn voor mij reden dat ik geen spijt heb van mijn beslissing om op de AVR en tegenwoordig STM32 familie over te stappen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

pic basic code:

[/co;           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
WENDde]
Electronica is mooi als het goed werkt

Ik heb er even een slag naar geslagen en heb denk ik in de gauwigheid al genoeg heb gewonnen.

Geknipper aan het begin verwijderd.
Inlezen en middelen van de 15 meetwaarden beter gestructureerd, is daardoor aanzienlijk korter geworden.
While-loop potmeterinlezing is nu IF..THEN, scheelt 2 regels.
Ongebruikte definities van bijv. TRISIO verwijderd.
Vervangen van SYMBOLs is left as an exercise for TS. :-)

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
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
 
CLEAR                         ;Wis alle RAM geheugen
DELAYMS 500                   ;Signaal stabilisering
 
 
;Hoofdprogramma

WHILE 1 = 1
    CLEAR MeetGemiddelde      ;Wis het gemiddelde van de vorige keer
	FOR Index = 0 TO 14
	MeetGemiddelde = MeetGemiddelde + Meting[Index] = ADIN 2      ;Lees huidige stroomopname in op GPIO.2 (=AN2)
 
    MeetGemiddelde = MeetGemiddelde / 15 ;Deel het totaal van de 15 metingen door 15
 
    PotmeterInst = ADIN 1   ;Lees instelling van 5k ... 25k instelpotmeter op GPIO.1
    IF PotmeterInst > 450 THEN  ;Potmeter > bijna maximaal, dan alarm uitschakelen
      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
    ENDIF
 
    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
 
  DELAYMS 5                   ;Vertraging voor o.a. piezo-zoemer timer
WEND]
Don't Panic!

Nog een paar kleine code tipjes (die het korter maken) van iemand die absoluut geen PICBASIC kent maar ik denk dat je het volgende toch kan toe passen:

pic basic code:

    

      Buzzer = OFF            ; Hoef niet in lus, dus staat niet in lus
      Piezo  = OFF
      CLEAR Timer    
      LED    = OFF            ; De led wordt een knipper led bij alarm.

REPEAT 
      DELAYMS 250             ;Rustig kijken naar potmeterstand
      PotmeterInst = ADIN 1   
UNTIL PotmeterInst < 450

REPEAT UNTIL (ook wel eens 'DO WHILE' genoemd) is hier veel netter en leesbaarder dan een pseudo eeuwige lus (WHILE 1=1) die dan toch weer stiekem een BREAK bevat.. De Buzzer en Piezo zetten we uit voordat we die lus in gaan, er staat ook niks in die lus die het aanzet dus we blijven niet voor gekke henkie bezig ;) De Led ga ik hier ook uitzetten zodat het verderop niet in een 'else' hoeft. Hij wordt dan wel knipperend bij alarm.

Deze code kan weg:

pic basic code:


 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

Je zet namelijk de buzzer/led/piezo aan in het eerste gedeelte van het if statement.. Als je dat niet doet dan kan je ze hier met de 'ELSE' wel uitzetten, maar dat doe je ook al een stukje verderop namelijk vlakvoor je de potmeter REPEAT UNTIL lus ingaat..

Ik ben gelukkig met de nieuwe informatie van Hensz,en van K7Jz . Want de nieuwe versie van Proton-Compiler geeft een groot aantal errors vooral bij Symbol Off en bij Symbol On,als ik de Off verander in (uit) en de On in (aan) gaat het gedeeltelijk goed ,maar blijven er noch errors over deze probeer ik noch op te lossen ;( . Maar bij 50 regels kan ik de oudere versie gebruiken.
Gr Bert

Electronica is mooi als het goed werkt

Deze

pic basic code:

      DELAYMS 250             ;Rustig kijken naar potmeterstand

mag er van mij sowieso uit. Hij zit nu in de 'grote' loop en wordt al een stuk langzamer uitgelezen als de actuele stroomsterkte. Het is maar een instelpot, hoeft dus absoluut geen speciale behandeling!

Don't Panic!

Het kan zijn dat OFF en ON al gedefinieerd zijn. De overige symbolen zijn nederlandse woorden dus daar is de kans al veel kleiner.

Overigens vind ik OFF = 0 en ON = 1 onzinnige symbolen. De binaire 0 en 1 zijn wel zo bekend dat dergelijke leeshulp onnodig is en je gaat ze ook nooit aanpassen, het is sneller typen en kost minder inkt om te printen en minder bytes om op te slaan als source.. Een symbool is iets dat je bijvoorbeeld bij een standaard wachttijd of poortnummer wel heel erg kan helpen.

0 en 1 zijn in zoverre zinvoller dat je geen misverstand hebt als je iets aangesloten hebt dat aangaat als de poort laag/0 is.
Ik zou zelf kiezen voor HOOG en LAAG, komt de leesbaarheid (zeker van de 0 vs O) ten goede zonder misverstanden te creëren.

Don't Panic!

@Hensz helemaal mee eens maar als het zo specifiek is dan zeg je waarschijnlijk iets als LAMP1_OFF

Op 11 december 2017 16:48:44 schreef Hensz:
Deze

pic basic code:

      DELAYMS 250             ;Rustig kijken naar potmeterstand

mag er van mij sowieso uit. Hij zit nu in de 'grote' loop en wordt al een stuk langzamer uitgelezen als de actuele stroomsterkte. Het is maar een instelpot, hoeft dus absoluut geen speciale behandeling!

Mmm misschien krijg je dan meer stroomverbruik.

De code van Hensz zal compilerfouten opleveren omdat er een FOR in zit zonder NEXT.

On en Off zijn reserved words, worden gebruikt bij de Declares.

Nog meer optimalisaties: verwijder variabelen die je niet meer gebruikt.

En nog een tip: gebruik alleen commentaar als het iets toevoegt voor het begrijpen van het programma, bv voor later onderhoud. Commentaar als ; Gebruik een 12F675 is echt volkomen overbodig.
Verder: Poortnamen is onjuist, de GPIO is de poort. Wat jij benoemt
zijn pin-identificaties.
Kijk ook even in het manual naar de Do-Loop construxie.

Just find out what you like and let it kill you

Op 11 december 2017 21:48:05 schreef hadv:
De code van Hensz zal compilerfouten opleveren omdat er een FOR in zit zonder NEXT.

Sorry, domme fout!

Don't Panic!

Met de aangedragen oplossingen ben ik er met het nieuwe programma van Proton-Compiler toch uit gekomen,de lengte van het programma is gelijk gebleven;De veranderingen zitten in de On/Off en de 1 en 0

Electronica is mooi als het goed werkt

Je code tags kloppen niet. (Alleen relevant voor leesbaarheid hier)

De twee symbols kunnen weg.

De laatste else tot (niet met) endif kan weg...

Wel een LED =0 onder de eerste piezo =0 erbij zetten

SYMBOL uit/aan kunnen ook wel weg, want die gebruik je nergens... ;)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

En om meer regels te sparen....

pic basic code:


      IF Timer = 20 THEN      ;Hysteresis zodat buzzer niet piept bij een korte stroompuls
        Buzzer = 1           ;Buzzer slaapkamer aan
        Piezo  = 1           ;Eerste piep piezo (kamer) direct bij hoge stroommeting
        DELAYMS 200           ;Deze eerste piep duurt ook wat langer
        Piezo  = 0          ;Gaat elders korte piepen geven als stroommeting te lang duurt
      ENDIF
      ELSE                      ;...anders... (is stroomopname lager dan potmeterinstelling)
        CLEAR Timer             ;Tijd resetten
        Buzzer   = 0          ;Buzzer (slaapkamer) uitzetten
        LED      = 0          ;LED uitzetten
        Piezo    = 0          ;Piezo-zoemer (kamer) uitzetten
      ENDIF

Verander je dan in...

pic basic code:


      IF Timer = 20 THEN
         Buzzer = 1 : Piezo  = 1 : DELAYMS 200 : Piezo  = 0
      ENDIF
    ELSE
      CLEAR Timer : Buzzer = 0 : LED = 0 : Piezo = 0
    ENDIF

Kun je geen commentaar achter elke regel zetten maar scheelt je toch 6 regels...

Domoticz en ESP8266, goede combo!!!