"Blinky" the Ice Blue Solar Light
Putting the Stable Joule Thief (SJT) into service, in this post I am cutting the guts out of a standard solar garden light and making an ice blue blinking version. I'm not sure why.
Firstly the SJT itself which is a variation on the QX5252 IC circuit which looks like:
Here's the PCB version I'm using for this project.
Needing some code to sleep and blink the microcontroller, I dug out an old assembly project and modified it as follows:
.nolist .include "tn13adef.inc" ; Define device ATtiny13A .list ; ********************************** ; H A R D W A R E ; ********************************** ; Device: ATtiny13A, Package: 8 - pin - PDIP_SOIC ; ; ____________ ; 1 / | 8 ; o-- | RESET VCC | --o ; o-- | PB3 PB2 | --o ; o-- | PB4 PB1 | --o ; o-- | GND PB0 | --o ; 4 |____________| 5 ; ; ********************************** ; C O D E ; ********************************** .cseg .org 000000 ; ********************************** ; R E S E T & I N T - V E C T O R S ; ********************************** rjmp Main ; Reset vector reti ; INT0 reti ; PCI0 reti ; OVF0 reti ; ERDY reti ; ACI reti ; OC0A reti ; OC0B rjmp mytimer_ISR ; my interrupt reti ; ADCC ; ********************************** ; I N T - S E R V I C E R O U T . ; ********************************** mytimer_ISR: ; sleep is interrupted, program returns reti ; ********************************** ; M A I N P R O G R A M I N I T ; ********************************** ; Main: ldi r16, Low(RAMEND) out SPL, r16 ; Init LSB stack pointer ; output mode for PB4, input for the rest ldi r16, 0b00010000 out DDRB, r16 ; turn on PB4, enable internal pullups ; on the rest of the pins ldi r16, 0b11111111 out PORTB, r16 ; ********************************** ; P R O G R A M L O O P ; ********************************** Loop: rcall waitabit ; 1/8 second (on) rcall waitalot ; 2 seconds (off) rjmp loop waitabit: ; reset watchdog timer wdr ; 1/8 second timer ldi r16, 0b01000011 ; see datasheet out WDTCR, r16 rcall sleepnow rcall flipbit ret waitalot: ; reset watchdog timer wdr ; 2 second timer ldi r16, 0b01000111 ; see datasheet out WDTCR, r16 rcall sleepnow ; finished long sleep, so flip LED rcall flipbit ret sleepnow: ; see datasheet MCUCR, ADCSRA, BODCR ; sleep enable, power down mode ldi r16, 0b00110000 out MCUCR, r16 ; disable ADC ldi r16, 0b00010000 out ADCSRA, r16 ; disable interrupts to make sure the following ; timed sequence is not interrupted cli ; disable BOD - must be done in a timed sequence ; as follows, write 1 to BODS and BODSE then within ; four clock cycles write 1 to BODS and 0 to BODSE ; then within three clock cycles enable sleep ; page 33 on the datasheet ldi r16, 0b00000011 ldi r17, 0b00000010 out BODCR, r16 out BODCR, r17 sei sleep ; sleep disable ldi r16, 0b00000000 out MCUCR, r16 ret flipbit:
; if PB4 is on, switch off and vice versa in r16, portb ldi r17, 0b00010000 eor r16, r17 out portb, r16 ret ; End of source code
I burned the fuses, compiled the code and uploaded the hex file to the ATTiny13a (see video below). After testing, I was ready to assemble the PCB back into the gutted solar light and flick it out to the garden - nice!
Now we wait for alien overlords to see the signal and come on down for a nice cup of tea and to say hello.
Do you sell a parts kit with the chip programmed please but ai think it will cost to much as I am in the UK
ReplyDeletethanks Bob
Pre-pandemic I supplied through https://www.tindie.com/stores/bovineck/, but at the moment the freight situation makes it unlikely, however if you leave me a message at the store I will let you know when it opens up again - hopefully very soon!
Delete