; Stereo indikator vybuzeni s ATmega8A / 8 / 8L ; int. RC 8MHz, BOD 2,7V ; IX. 2013 ; vytvoril: DANYK ; http://danyk.cz/avr_iv2.html .NOLIST .INCLUDE "m8def.inc" .LIST .DEF REG=R16 ; docasny registr .DEF REG2=R17 ; docasny registr 2 .DEF VYS_L=R18 ; vysledek AD prevodu dolni .DEF VYS_H=R19 ; vysledek AD prevodu horni .DEF DELREG=R20 ; registr deleni frekvence .DEF DELREG2=R21 ; registr deleni frekvence 2 .DEF KANAL=R22 ; prepinani kanalu .DEF MULTREG=R23 ; registr si pamatuje stav multiplexu .DEF LK=R24 ; levy kanal .DEF PK=R25 ; pravy kanal .DEF LKD=R26 ; levy kanal indikace maxima .DEF PKD=R27 ; pravy kanal indikace maxima .DEF LKZ=R28 ; levy kanal zpozdeni maxima .DEF PKZ=R29 ; pravy kanal zpozdeni maxima .EQU SMER=DDRD .EQU PORT=PORTD .EQU SMER2=DDRC .EQU PORT2=PORTC .EQU VSTUPY=PINC .EQU SMER3=DDRB .EQU PORT3=PORTB .CSEG .ORG 0 RJMP START ; vektory preruseni .ORG OC2addr ;preruseni citacem2 ridici multiplex, obnovovaci frekvenci RJMP CASOVANI START: ;nastaví port D LDI REG,0b11111111 OUT SMER,REG LDI REG,0b00000000 OUT PORT,REG ;nastaví port C LDI REG,0b000000 OUT SMER2,REG LDI REG,0b111100 OUT PORT2,REG ;nastaví port B LDI REG,0b00111111 OUT SMER3,REG LDI REG,0b11111100 OUT PORT3,REG LDI REG,LOW(RAMEND) OUT SPL,REG LDI REG,HIGH(RAMEND) OUT SPH,REG LDI DELREG,1 LDI DELREG2,1 LDI MULTREG,1 CLR LK CLR PK CLR LKD CLR PKD CLR LKZ CLR PKZ ; NASTAVENI CASOVACE A JEHO PRERUSENI LDI REG,0b00001001 ; nulovani pri dosazeni porovnavane hodnoty... OUT TCCR2,REG ; ...(tzv. CTC), OC0 nevyuzit. preddeli 1 LDI REG,249 ; nastavi porovnavanou hodnotu (dělí se n+1) OUT OCR2,REG ; LDI REG,0b10000000 ; povoli preruseni CTC OCIE2 OUT TIMSK,REG ; ;NASTAVENI ADC a MCU ; povoli uspani (sleep) a nastavi mod ADC nr LDI REG,0b10010000 OUT MCUCR,REG ; vypne analog. komparator - neni nikdy vyuzit (setri energii) LDI REG,0b10000000 OUT ACSR,REG ; nastavi ADC - f/8, povoli ho LDI REG,0b10000011 OUT ADCSRA,REG SEI ;povoli globalni preruseni ;hlavni smycka SMYCKA: SLEEP RJMP SMYCKA MULT: LDI REG,0b00000000 OUT PORT,REG LDI REG,0b11111100 OUT PORT3,REG LDI REG,0b111100 OUT PORT2,REG ; rychle CP LK,MULTREG BRLO L_NE CBI PORT3,2 L_NE: MOV REG,MULTREG SUBI REG,246 CP LK,REG BRLO L2_NE CBI PORT3,3 L2_NE: CP PK,MULTREG BRLO P_NE CBI PORT3,4 P_NE: MOV REG,MULTREG SUBI REG,246 CP PK,REG BRLO P2_NE CBI PORT3,5 P2_NE: ; pomale IN REG,VSTUPY SBRC REG,2 RJMP MAX_VYP CP LKD,MULTREG BRNE LD_NE CBI PORT3,2 LD_NE: MOV REG,MULTREG SUBI REG,246 CP LKD,REG BRNE L2D_NE CBI PORT3,3 L2D_NE: CP PKD,MULTREG BRNE PD_NE CBI PORT3,4 PD_NE: MOV REG,MULTREG SUBI REG,246 CP PKD,REG BRNE P2D_NE CBI PORT3,5 P2D_NE: MAX_VYP: ;vetveni multiplexu MOV REG,MULTREG DEC REG LDI ZL,LOW(SKOK) LDI ZH,HIGH(SKOK) ADD ZL,REG CLR REG ADC ZH,REG IJMP SKOK: RJMP MULT1 RJMP MULT2 RJMP MULT3 RJMP MULT4 RJMP MULT5 RJMP MULT6 RJMP MULT7 RJMP MULT8 RJMP MULT9 RJMP MULT10 MULT1: SBI PORT,0 RET MULT2: SBI PORT,1 RET MULT3: SBI PORT,2 RET MULT4: SBI PORT,3 RET MULT5: SBI PORT,4 RET MULT6: SBI PORT,5 RET MULT7: SBI PORT,6 RET MULT8: SBI PORT,7 RET MULT9: SBI PORT3,0 RET MULT10: SBI PORT3,1 RET PADEJ: CPI LK,0 BREQ LEVY_0 DEC LK LEVY_0: CPI PK,0 BREQ PRAVY_0 DEC PK PRAVY_0: CPI LKZ,0 BREQ LEVYZ_0 DEC LKZ RJMP LEVYZ_NE0 LEVYZ_0: MOV LKD,LK LEVYZ_NE0: CPI PKZ,0 BREQ PRAVYZ_0 DEC PKZ RJMP PRAVYZ_NE0 PRAVYZ_0: MOV PKD,PK PRAVYZ_NE0: RET ; preruseni ridici multiplex a zdroj casovani CASOVANI: IN VYS_L,ADCL IN VYS_H,ADCH MOV REG,KANAL ANDI REG,0b00000001 ORI REG,0b11000000 ;interni reference 2,56V, zarovna vpravo, vstup 0 / 1 OUT ADMUX,REG SBI ADCSRA,6 CLR REG LDI REG2,HIGH(11) CPI VYS_L,LOW(11) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(14) CPI VYS_L,LOW(14) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(18) CPI VYS_L,LOW(18) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(22) CPI VYS_L,LOW(22) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(28) CPI VYS_L,LOW(28) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(36) CPI VYS_L,LOW(36) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(45) CPI VYS_L,LOW(45) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(56) CPI VYS_L,LOW(56) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(71) CPI VYS_L,LOW(71) CPC VYS_H,REG2 BRLO MENSI2 INC REG LDI REG2,HIGH(90) CPI VYS_L,LOW(90) CPC VYS_H,REG2 BRLO MENSI2 INC REG RJMP POPOSKOC MENSI2: RJMP MENSI POPOSKOC: LDI REG2,HIGH(113) CPI VYS_L,LOW(113) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(142) CPI VYS_L,LOW(142) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(179) CPI VYS_L,LOW(179) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(225) CPI VYS_L,LOW(225) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(283) CPI VYS_L,LOW(283) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(356) CPI VYS_L,LOW(356) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(449) CPI VYS_L,LOW(449) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(565) CPI VYS_L,LOW(565) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(711) CPI VYS_L,LOW(711) CPC VYS_H,REG2 BRLO MENSI INC REG LDI REG2,HIGH(895) CPI VYS_L,LOW(895) CPC VYS_H,REG2 BRLO MENSI INC REG MENSI: INC KANAL SBRC KANAL,0 RJMP LEVY_NE CP LK,REG BRSH L_NENI_VYSSI MOV LK,REG L_NENI_VYSSI: CP REG,LKD BRLO LD_JE_NIZSI LDI LKZ,67 ;zpozdeni MOV LKD,REG LD_JE_NIZSI: RJMP PRAVY_NE LEVY_NE: CP PK,REG BRSH P_NENI_VYSSI MOV PK,REG P_NENI_VYSSI: CP REG,PKD BRLO PD_JE_NIZSI LDI PKZ,67 ;zpoždění MOV PKD,REG PD_JE_NIZSI: PRAVY_NE: DEC DELREG BRNE HOP LDI DELREG,32 RCALL MULT DEC MULTREG BRNE HOP LDI MULTREG,10 DEC DELREG2 BRNE HOP LDI DELREG2,3 ; !!! DOBA SESTUPU / FALL TIME (2 = 400ms, 3 = 600ms, 4 = 800ms, 5 = 1s, ...) !!! RCALL PADEJ HOP: RETI