Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

LED line attiny13 asm

Awatar użytkownika
ACeK
-
-
Posty: 1522
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

LED line attiny13 asm

Postautor: ACeK » 20 lis 2013, o 14:03

Obrazek Na stronie :arrow: LED line jest fajny uklad sterowania diodami (moje DIY to projekt do niego pcb)

Obrazek

Jak widac na schemacie sercem jest Attiny13 oraz kilka elementow.

Kod: Zaznacz cały

; **************************************************** ; * Ledline Intensity control for LEDs with ATtiny13 * ; * Version 1 as of 24.03.2012 * ; * (C)2012 by Gerhard Schmidt, avr-asm-tutorial.net * ; **************************************************** ; ; Include file for AVR type .NOLIST .INCLUDE "tn13def.inc" ; Header file for ATTINY13 .LIST ; ; ============================================ ; H A R D W A R E I N F O R M A T I O N ; ============================================ ; ; Controls the intensity of two 12V-LED-lines ; ; ____________ ; / ATtiny13 | ; | | ; RESET o--|RES VCC|--o +5V VCC ; | | ; PotiA In o--|PB3 PB2|--o SCK ; | | ; PotiB In o--|PB4 PB1|--o MISO/OC0B ; | | ; 0 V o--|GND PB0|--o MOSI/OC0A ; |_____________| ; ; ============================================ ; P O R T S A N D P I N S ; ============================================ ; .equ pba = PortB0 .equ pbb = PortB1 ; ; ======================================= ; C O N S T A N T S T O A D J U S T ; ======================================= ; ; ; ======================================================= ; F I X E D A N D D E R I V E D C O N S T A N T S ; ======================================================= ; ; Constant for starting the ADC .equ cAdcStart = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) ; ; =========================================== ; R E G I S T E R D E F I N I T I O N S ; =========================================== ; ; R0..R15 free .def rmp = R16 ; Multipurpose register .def rcnt = R17 ; Counter for AD-converter .def radal = R18 ; LSB ADC results ADC3 .def radah = R19 ; dto., MSB .def radbl = R20 ; LSB ADC results ADC4 .def radbh = R21 ; dto., MSB ; R22..R31 free ; ; ============================================ ; S R A M D E F I N I T I O N S ; ============================================ ; .DSEG .ORG 0X0060 ; ; ============================================== ; R E S E T A N D I N T V E C T O R S ; ============================================== ; .CSEG .ORG $0000 rjmp Main ; Reset-Vector reti ; Int0 reti ; PcInt0 reti ; TIM0_OVF reti ; EE_RDY reti ; ANA_COMP reti ; TIM0_COMPA reti ; TIM0_COMPB reti ; WDT rjmp IntAdc ; ADC ; ; ========================================== ; I N T E R R U P T S E R V I C E ; ========================================== ; ; ADC ready interrupt IntAdc: brts IntAdcB ; T-flag set, B-Channel in rmp,ADCL ; read LSB result add radal,rmp ; add to result in rmp,ADCH ; read MSB result adc radah,rmp ; add to result dec rcnt ; decrement number of read cycles brne IntAdcRet ; not zero, go on ldi rcnt,64 ; restart cycle counter out OCR0B,radah ; set compare value B clr radal ; clear result value clr radah ldi rmp,1<<MUX1 ; select other channel out ADMUX,rmp set ; set flag for channel B rjmp IntAdcRet IntAdcB: in rmp,ADCL ; read LSB result add radbl,rmp ; add to result in rmp,ADCH ; read MSB result adc radbh,rmp ; add to result dec rcnt ; decrease number of read cycles brne IntAdcRet ; not zero, go on ldi rcnt,64 ; restart cycle counter out OCR0A,radbh ; set compare value A clr radbl ; clear result value clr radbh ldi rmp,(1<<MUX1)|(1<<MUX0) ; select other channel out ADMUX,rmp clt ; set flag for channel B IntAdcRet: ldi rmp,cAdcStart out ADCSRA,rmp ; restart AD converter reti ; ; ============================================ ; M A I N P R O G R A M I N I T ; ============================================ ; Main: ; Init stack ldi rmp, LOW(RAMEND) ; Init LSB stack out SPL,rmp ; Init Port B ldi rmp,(1<<pba)|(1<<pbb) ; Direction Port B out DDRB,rmp ; Init Timer ldi rmp,(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00) ; Fast PWM out TCCR0A,rmp ldi rmp,(1<<CS01)|(1<<CS00) ; prescale by 64 out TCCR0B,rmp ; Init ADC ldi rmp,(1<<ADC3D) ; disable digital input out DIDR0,rmp ldi rmp,(1<<MUX1)|(1<<MUX0) ; MUX to PB3 out ADMUX,rmp ldi rmp,cAdcStart ; start ADC out ADCSRA,rmp ; Init sleep mode and ints ldi rmp,1<<SE ; Enable sleep out MCUCR,rmp sei ; ; ============================================ ; P R O G R A M L O O P ; ============================================ ; Loop: sleep ; go to sleep nop ; Dummy for wakeup rjmp loop ; back to loop ; ; End source code ; Copyright .db "(C)2012 by Gerhard Schmidt " ; human readable .db "C(2)10 2ybG reahdrS hcimtd " ; wordwise ;
Tak wyglada plytka :P
IMG_2435_ep.png
Widok z gory
IMG_2436_ep.png
Od strony elementow
IMG_2438_ep.jpg
Demonstracja dzialania
Uklad zasilany jest z bateri (ktora jest ladowana z pv) :twisted: Ktora wystarcza do sterowania 9 zestawami diod ktore swieca (ustawione na minimum) cala noc oswietlajac korytarz i lazienke Obrazek

Awatar użytkownika
rafal.220
-
-
Posty: 1274
Rejestracja: 27 paź 2012, o 15:46

Re: LED line attiny13 asm

Postautor: rafal.220 » 20 lis 2013, o 16:44

Tak wyglada plytka
Mam takie pytanko.
Czy to co znajduje się na tych zworach to jest pajęczyna?
Pewnie płytka jakiś czas leżała w szufladzie :mrgreen:

Awatar użytkownika
ACeK
-
-
Posty: 1522
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: LED line attiny13 asm

Postautor: ACeK » 21 lis 2013, o 11:02

Obrazek Plytka ma dopiero miesiac :P ale "pracuje" w bardzo :no: przyjemnych tymczasowych warunkach pod schodami.
IMG_2437.png
IMG_2437.png (91.53 KiB) Przejrzano 15789 razy
Piny na ktorych widac pajeczynke (pewie mi ja tam podlorzyl jakis pajaczek :twisted: ) sluza tylko do programowania procka Obrazek

Wróć do „DIY - Do It Yourself”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości