Hallo
Heb me suf lopen zoeken maar kan het niet vinden.

Hoe krijg ik een pic 16f628a in low power mode
met mikrobasic pro?

Graag info hierover.

ja had ik al gezien.
Had de code ook al gesimuleert maar daar doet hij het niet.
Of zal het alleen werken als ik de code in een pic programeer?

dat is natuurlijk wel de ultime test :)

maar sleep is wat je bedoelde met de low powermode?

Nou dat is wat ik kan vinden bij mikrobasic.
Op hun forum geven ze aan om sleep in je code te gebruiken voor low power.

je beseft dat je uC dan stopt met werken en wacht op een externe interrupt om weer verder te gaan ...

Als je hem op een lagere spanning wil laten werken, schoef je spanning terug tot 2v en je heb 'low powermode'.

Hou wel rekening met je ttl signalen, indien je die gebruikt.

ja, zal even uit leggen wat ik wil.
om minder spannig te gebruiken wil ik naar low power.
voeding baterijen.
Via externe interupt port rb4-7 (pic16f628a) zou he weer moeten ontwaken (wake-up).

Dan is sleep de juiste instructie lijkt mij.

Hoe heb je gesimuleerd en gezien dat het niet werkte?

Gesimuleert met real pic simulator.
laat de pic eerst 2 keer om en om 2 led's branden
en dan zou hij in sleep moeten gaan.
Maar de led's blijven maar knipperen.

ik ken je code niet maar voor de hand ligt natuurlijk dat je sleep in een while blijft hangen.
Een interrupt zou je while test kunnen aanpassen zodat je uC weer zijn ding gaat doen totdat hij weer in de sleep lus komt.

Je simulatie zou dat dan ook moeten doen, kan je meteen je externe interrupt testen.

dus


runflag = 1
while runflag
  sleep ' of wat is de microbasic sleep command
wend

Dat had ik nog niet geprobeert, ga ik straks effe testen.
laat het even weten dan.

Heb de code aan gepast het lijkt te werken in simulatie!
Als de pic in sleep zou moeten zijn blijft er wel een led branden.
is dit normaal?
Ik dacht als de pic in sleep is hij ook alle poorten zou sluiten.

[Bericht gewijzigd door Henry S. op (56%)]

Als ik wat google, vind ik dat je er een tijd achter moet brengen, ik denk in seconden. Misschien dat je nu verder kan? En anders moet je eens in het écht proberen, dus niet in simulatie?

De poorten van een PIC blijven bij een SLEEP gewoon in de toestand waarin ze zijn. Als je ze uit wilt hebben, is het aan de programmeur zelf om dat te doen. (Is ook het meest logisch)

Dan ga ik van middag het even in het echt proberen.
Neem aan dat je het ook kan meten dat de pic in low power is.
Zou iemand mij kunnen vertellen hoe ik dat het beste kan meten (multimeter)

Op µA/mA zetten tussen de Vcc aansluiting en zien of de waardes kloppen met de datasheet.
Wel eventuele belastingen aan outputs meetellen.
En ook als eventueel peripherals zoals watchdog, a/d converter, BOR zijn ingeschakeld, die gebruiken extra...

Ok bedankt.
laat het even weten vanmiddag.

Hoewel Proton PICBasic wat afwijkt van MikroBasic zou je ook nog wat kunnen hebben aan de informatie die staat op www.picbasic.nl/interrupt_on_change.htm

ja had ik al door gelezen.
Daar kan ik wel wat mee ja.

helaas door omstandigheden nog niet aan toe gekomen
Moet eerstkomende week c.q weken zoveel mogenlijk plat liggen.

Ja hoor het werkt.
Alleen niet zoals ik gedacht had.
Nadat ik de schakelaar die de pic weer moet ontwaken.
via vss had lopen in plaats van vdd deed hij precies wat hij moet doen.(snap dit alleen nog niet)
volgens de code zou rb4 input moeten zijn toch ?

program b

dim dump as byte
sub procedure blink
    porta = %00000001
    delay_ms(500)
    porta = %00000010
    delay_ms(500)
end sub

sub procedure Interrupt
    if intcon.rbif = 1 then
    dump = portb
    delay_ms(200)
    INTCON.rbif = 0
    end if
end sub

main:
trisa = 0
trisb = %11110000
OPTION_REG.7 = 0
INTCON.GIE= 0
INTCON.RBIE= 1
blink

while true
 porta = %10000000
 delay_ms(100)
 dump = portb
 INTCON.rbif = 0
 PORTB = 0
 delay_ms(100)
 asm
 SLEEP
 end asm
 delay_ms(100)
 blink

 wend
goto main
end.

INTCON.GIE= 0

Interrupts staan uit. Dan gebeurt er natuurlijk ook niet erg veel... ;)

De code werkt perfect verder.
pic gaat in low power, en ontwaakt weer na druk op knop.
Heb het nog nagemeten met multi meter.

Sommige PICs ondersteunen wake-up on pin change. Daar komt inderdaad geen interrupt bij kijken.

Sommige PICs ondersteunen wake-up on pin change. Daar komt inderdaad geen interrupt bij kijken.

Daar is INTCON.RBIF toch voor.

ik weet er niet zoveel van !!!
Maar kreeg het vermoeden dat
door pin change de INTCON.GIE van 0 naar 1 verandert.
Daardoor zou je voor dat je weer naar sleep gaat de INTCON.GIE eerst weer op 0 moeten zetten.
Als het niet goed is moet je het zeggen hoor!!!

INTCON.GIE = Global Interrupt Enable.

Die moet je dus aanzetten en verder afblijven!
(Je moet alleen de betreffende flag resetten, in dit geval dus RBIF)