; ************************************************************** ; * Akkuloader Version 0.1 for ATmega16 @ 8 Mcs/s clock * ; * (C)2005 by Gerh.Schmidt info@avr-asm-tutorial.net * ; ************************************************************** ; .INCLUDE "m16def.inc" ; ; Constants ; .EQU fclock = 8000000 ; processor clock frequency .EQU baud = 9600 ; Serial communication baudrate .EQU cUartTime = 5 ; send system time over Uart any 5 minutes .EQU cKeyRep = 5 ; number of correct keys until key is accepted .EQU cUnlVol = 1000 ; default unload threshhold voltage in mV ; ; Register definitions ; ; R0 used as register for flash operations ; R1:R0 used as double register in calculations ; R3:R2 dto. ; R6:R5:R4 used as triple register in calculations .DEF rKeyLst = R7 ; Last key read .DEF rKeyRep = R8 ; counter for key repeat ;.DEF rAdcV = R9 ; Operating voltage mask of the ADC .DEF rPwmC = R10 ; PWM counter .DEF rPwm1S = R11 ; PWM switch value for Channel 1 .EQU cPwm1S = 11 ; Value for calculating channel register .DEF rPwm2S = R12 ; PWM switch value for Channel 2 .DEF rPwm3S = R13 ; PWM switch value for Channel 3 .DEF rPwm4S = R14 ; PWM switch value for Channel 4 .DEF rSreg = R15 ; Save SREG during ints .DEF rmp = R16 ; Multipurpose register .DEF rimp = R17 ; Multipurpose register during interrupts .DEF rimp1 = R18 ; Multipurpose register during interrupts .DEF rFlg = R19 ; Multipurpose flag register .DEF rFlgD = R20 ; Display flag register .DEF rPwmOut= R21 ; Value for Port Out ; Free R22..R23 .DEF rChCL = R24 ; channel counter, LSB .DEF rChCH = R25 ; dto., MSB ; X (R27:R26) used for purposes outside Ints ; Y (R29:R28) used for ADC channel calculations ; Z (R31:R30) used for purposes outside Ints ; ; Bit definitions for rFlg .EQU bUartRxLine = 7 ; a complete line has been received .EQU bLcdOk = 6 ; Lcd is connected and detected ok ; not used: bit 4 and 5 .EQU bMin = 2 ; timer reached 1 Minute .EQU b32m = 1 ; timer int 4 seconds, 32 Adc conversions complete .EQU b64Hz = 0 ; timer int 64 Hz tick ; ; Bit definitions for the display flag rFlgD ; .EQU bUHex = 7 ; display results in hex over Uart (debug) .EQU bUMoni = 6 ; monitor active channels over Uart .EQU bURdy = 5 ; results ready for Uart display .EQU bLRdy = 4 ; results ready for Lcd display .EQU bLcd3 = 3 ; Display results in line 4 .EQU bLcd2 = 2 ; Display results in line 3 .EQU bLcd1 = 1 ; Display results in line 2 .EQU bLcd0 = 0 ; Display results in line 1 ; ; ; Calculated constants ; .EQU cTC1Prsc = 8 ; TC1 Prescaler value .EQU cTC1Div = fClock / cTC1Prsc / 64 ; 64 Ints per second .EQU cTC1CompB = 50 ; Timer compare to start ADC .EQU cStartAdc = (1<