Pfad: Home =>
AVR-Übersicht =>
Anwendungen =>
LED-Leiste => Software
Software für das Ledleiste mit ATtiny13
;
; ********************************************
; * Ledleiste Helligkeitsregelung ATtiny13 *
; * Version 1 vom 24.03.2012 *
; * (C)2012 by Gerhard Schmidt, avr-asm-tut *
; ********************************************
;
; Include-Datei fuer den betreffenden AVR-Typ
.NOLIST
.INCLUDE "tn13def.inc" ; Headerdatei fuer ATTINY13
.LIST
;
; ============================================
; H A R D W A R E I N F O R M A T I O N E N
; ============================================
;
; Regelt die Helligkeit von zwei 12V-LED-Leisten
;
; ____________
; / 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 U N D P I N S
; ============================================
;
.equ pba = PortB0
.equ pbb = PortB1
;
; ================================================
; K O N S T A N T E N Z U M E I N S T E L L E N
; ================================================
;
;
; =======================================================
; F E S T E + A B G E L E I T E T E K O N S T A N T E N
; =======================================================
;
; Konstante zum Starten des 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 E N
; ============================================
;
; R0..R15 frei
.def rmp = R16 ; Vielzweckregister
.def rcnt = R17 ; Zaehler fuer AD-Wandler
.def radal = R18 ; LSB AD-Wandler-Resultate ADC3
.def radah = R19 ; dto., MSB
.def radbl = R20 ; LSB AD-Wandler-Resultate ADC4
.def radbh = R21 ; dto., MSB
; R22..R31 frei
;
; ============================================
; S R A M D E F I N I T I O N E N
; ============================================
;
.DSEG
.ORG 0X0060
;
; ==============================================
; R E S E T U N D I N T V E K T O R E N
; ==============================================
;
.CSEG
.ORG $0000
rjmp Main ; Reset-Vektor
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 gesetzt, B-Kanal
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 ; dec 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 ; anderen Kanal waehlen
out ADMUX,rmp
set ; setze flag fuer Kanal 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 ; dec 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) ; anderen Kanal waehlen
out ADMUX,rmp
clt ; setze flag fuer Kanal B
IntAdcRet:
ldi rmp,cAdcStart
out ADCSRA,rmp ; restart AD converter
reti
;
; ============================================
; H A U P T P R O G R A M M I N I T
; ============================================
;
Main:
; Initiire Stapel
ldi rmp, LOW(RAMEND) ; Initiiere LSB Stapel
out SPL,rmp
; Init Port B
ldi rmp,(1<<pba)|(1<<pbb) ; Richtung 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 M - S C H L E I F E
; ============================================
;
Loop:
sleep ; Schlafen legen
nop ; Dummy fuer Aufwecken
rjmp loop ; Zurueck nach Loop
;
; Ende Quellcode
; Copyright
.db "(C)2012 by Gerhard Schmidt " ; menschenlesbar
.db "C(2)10 2ybG reahdrS hcimtd " ; wortgerecht
;
An den Seitenanfang
©2011 by http://www.avr-asm-tutorial.net