' Oster-Contest, VU-Meter, Voltmeter 0-1,1V
'
' LED einzeln
'-------------------------------------------------------------------------------
' alle Fuse-Byte ab Werk
'-------------------------------------------------------------------------------
$regfile = "attiny13.dat"
$crystal = 1200000 ' 9,6MHz/8
$hwstack = 8
Config Adc = Single , Prescaler = Auto , Reference = Internal
Dim Temp As Word
Do 'Hauptprogramm
Main:
Ddrb = 0 'LED aus
Temp = Getadc(2) 'Wert holen
Temp = Temp / 93 'auf 11 Stufen reduzieren
If Temp = 0 Then : Ddrb = 3 : Portb = 1 : End If
If Temp = 1 Then : Ddrb = 5 : Portb = 1 : End If
If Temp = 2 Then : Ddrb = 9 : Portb = 1 : End If
If Temp = 3 Then : Ddrb = 3 : Portb = 2 : End If
If Temp = 4 Then : Ddrb = 6 : Portb = 2 : End If
If Temp = 5 Then : Ddrb = 10 : Portb = 2 : End If
If Temp = 6 Then : Ddrb = 5 : Portb = 4 : End If
If Temp = 7 Then : Ddrb = 6 : Portb = 4 : End If
If Temp = 8 Then : Ddrb = 12 : Portb = 4 : End If
If Temp = 9 Then : Ddrb = 9 : Portb = 8 : End If
If Temp = 10 Then : Ddrb = 10 : Portb = 8 : End If
If Temp = 11 Then : Ddrb = 12 : Portb = 8 : End If
If Temp > 10 Then : Ddrb = 12 : Portb = 8 : End If
Loop 'nochmal
' End P
;===============================================================================================
;
; Oster-Contest: Voltmeter, Punktanzeige 69mV/Teil (0..0,8V)
;
;===============================================================================================
;
; ATtiny13
; _____ _____
; | |_| | 1N4148 /
; |Res Vcc|-------+---|<|---+-o o-o +4,5V-6V
; | | | |
; | | --- C1 |
; | sck| --- 1u |
; +-----|PB3 PB2|-----+ | |
; | | | | | |
; | | | | | |
; | | miso| | | |
; | +---|ADC2 PB1|---+ | | |
; | | | | | | | |
; | | | | | | | |
; | | | mosi| | | | |
; | | +-|Gnd PB0|-+ | | | |
; | | | |_____________| | | | | |
; | | o--o--o--o--o--o--|-|-|-+ schwarz |
; | | o--o--o--o--o--o--|-|-|-----------+ rot
; | +-o o o o o-----+ | | gelb
; +------+ | +----------+ |
; +---------------+
; B4 B3 B2 B1 B0 Batt
;
;
; ALLE GND-Anschlüsse MÜSSEN (sternförmig) auf kürzestem Weg am Pin 4 zusammenlaufen,
; um keine Spannungsabfälle auf ADC(2) zu übertragen.
;===============================================================================================
; ADC(2)=PB.4 wird per Interrupt in r16 geholt. Uref auf 1,1V eingestellt
; der ADC-Wert wird für die Anzeige durch 16 geteilt
;===============================================================================================
; Fuse 0b0110_1010
; devide=^ ^^^^=9,6MHz
;===============================================================================================
.DEVICE ATtiny13 ; für gavrasm
.cseg ; codesegment
.org 0 ; adr 0
rjmp init ; Reset vector
reti ; Int0 interrupt vector
reti ; PCINT0 vector
reti ; TC0 overflow vector
reti ; Eeprom ready vector
reti ; Analog comparator int vector
reti ; TC0 CompA vector
reti ; TC0 CompB vector
reti ; WDT vector
rjmp int_adc ; ADC conversion complete vector
;--------------------------------
Int_adc: ; Aufruf NUR, wenn neuer Wert verfügbar
in r16,ADCh ; Lese ADC-Wert, obere 8Bit
lsr r16
lsr r16
lsr r16
lsr r16 ; /16
reti ; zurück ins Hauptprogramm
;--------------------------------
init:
init_adc: ;
ldi r16,0b01100010 ; - 1 1 - - - 1 0
Out Admux , R16 ; ref-^ ^adlar ^+^-adc2
ldi r16,0b00000000 ; - - - - - 0 0 0
Out Adcsrb , R16 ; ^+^+^-Free Run
ldi r16,0b11101110 ; 1 1 1 0 1 1 1 1
Out Adcsra , R16 ; ena-^ ^-start ^+^+^-prescale
sei ;
;--------------------------------
main:
ldi r17,0 ;
cpse r16,r17 ;
rjmp eins ;
ldi r17,0b00000011 ;
out ddrb,r17 ;
ldi r17,1 ; LED 0,1,2
out portb,r17 ;
rjmp main ;
eins: ;
ldi r17,1 ;
cpse r16,r17 ;
rjmp zwei ;
ldi r17,0b00000101 ;
out ddrb,r17 ;
ldi r17,1 ; LED 0,1,2
out portb,r17 ;
rjmp main ;
zwei: ;
ldi r17,2 ;
cpse r16,r17 ;
rjmp drei ;
ldi r17,0b00001001 ;
out ddrb,r17 ;
ldi r17,1 ; LED 0,1,2
out portb,r17 ;
rjmp main ;
drei: ;
ldi r17,3 ;
cpse r16,r17 ;
rjmp vier ;
ldi r17,0b00000011 ;
out ddrb,r17 ;
ldi r17,2 ; LED 3,4,5
out portb,r17 ;
rjmp main ;
vier: ;
ldi r17,4 ;
cpse r16,r17 ;
rjmp funf ;
ldi r17,0b00000110 ;
out ddrb,r17 ;
ldi r17,2 ; LED 3,4,5
out portb,r17 ;
rjmp main ;
funf: ;
ldi r17,5 ;
cpse r16,r17 ;
rjmp sechs ;
ldi r17,0b00001010 ;
out ddrb,r17 ;
ldi r17,2 ; LED 3,4,5
out portb,r17 ;
rjmp main ;
sechs: ;
ldi r17,6 ;
cpse r16,r17 ;
rjmp sieben ;
ldi r17,0b00000101 ;
out ddrb,r17 ;
ldi r17,4 ; LED 6.7.8
out portb,r17 ;
rjmp main ;
sieben: ;
ldi r17,7 ;
cpse r16,r17 ;
rjmp acht ;
ldi r17,0b00000110 ;
out ddrb,r17 ;
ldi r17,4 ; LED 6.7.8
out portb,r17 ;
rjmp main ;
acht: ;
ldi r17,8 ;
cpse r16,r17 ;
rjmp neun ;
ldi r17,0b00001100 ;
out ddrb,r17 ;
ldi r17,4 ; LED 6.7.8
out portb,r17 ;
rjmp main ;
neun: ;
ldi r17,9 ;
cpse r16,r17 ;
rjmp zehn ;
ldi r17,0b00001001 ;
out ddrb,r17 ;
ldi r17,8 ; LED 9,10,11
out portb,r17 ;
rjmp main ;
zehn: ;
ldi r17,10 ;
cpse r16,r17 ;
rjmp elf ;
ldi r17,0b00001010 ;
out ddrb,r17 ;
ldi r17,8 ; LED 9,10,11
out portb,r17 ;
rjmp main ;
elf: ;
ldi r17,11 ;
cpse r16,r17 ;
rjmp zwolf ;
ldi r17,0b00001100 ;
out ddrb,r17 ;
ldi r17,8 ; LED 9,10,11
out portb,r17 ;
rjmp main ;
zwolf: ;
ldi r17,0b00001100 ;
out ddrb,r17 ;
ldi r17,8 ; LED 9,10,11
out portb,r17 ;
rjmp main ;
;===============================================================================================
;end