; ************************************************************** ; * Akkulader Version 0.1 for ATmega16 @ 8 MHz Takt * ; * (C)2005 by Gerh.Schmidt info@avr-asm-tutorial.net * ; ************************************************************** ; .INCLUDE "m16def.inc" ; ; Konstanten ; .EQU fclock = 8000000 ; Processortaktfrequenz .EQU baud = 9600 ; Serielle Schnittstelle Baudrate .EQU cUartTime = 5 ; Alle 5 Minuten die Systemzeit an das UART .EQU cKeyRep = 5 ; Anzahl Durchläufe bis Tastendruck akzeptiert wird .EQU cUnlVol = 1000 ; Standard-Entladespannung in mV ; ; Register Definitionen ; ; R0 wird für diverse Operationen verwendet ; R1:R0 Als Doppelregister bei Rechenoperationen verwendet ; R3:R2 dto. ; R6:R5:R4 Dreifachregister bei Rechenoperationen .DEF rKeyLst = R7 ; Letzte gedrückte Taste .DEF rKeyRep = R8 ; Zähler für Tastenwiederholung ;.DEF rAdcV = R9 ; Betriebsspannungsmaske für ADC .DEF rPwmC = R10 ; PWM Zähler .DEF rPwm1S = R11 ; PWM Schaltwert für Kanal 1 .EQU cPwm1S = 11 ; (Pointerwert für Kanal 1) .DEF rPwm2S = R12 ; PWM Schaltwert für Kanal 2 .DEF rPwm3S = R13 ; PWM Schaltwert für Kanal 3 .DEF rPwm4S = R14 ; PWM Schaltwert für Kanal 4 .DEF rSreg = R15 ; Sicherung von SREG bei Interrupts .DEF rmp = R16 ; Multipurpose Register .DEF rimp = R17 ; Multipurpose Register bei Interrupts .DEF rimp1 = R18 ; Multipurpose Register bei Interrupts .DEF rFlg = R19 ; Multipurpose Flag Register (siehe unten) .DEF rFlgD = R20 ; Anzeige Flag Register (siehe unten) .DEF rPwmOut= R21 ; Wert für die PWM-Ausgabe ; Frei R22..R23 .DEF rChCL = R24 ; Kanalzähler für ADC-Messungen, LSB .DEF rChCH = R25 ; dto., MSB ; X (R27:R26) für verschiedene Zwecke außerhalb von Interrupts ; Y (R29:R28) bei Interrupts für Messauswertung verwendet ; Z (R31:R30) für verschiedene Zwecke außerhalb von Interrupts ; ; Bit-Definitionen für rFlg .EQU bUartRxLine = 7 ; Eine vollständige Zeile über UART empfangen .EQU bLcdOk = 6 ; LCD-Anzeige angeschlossen und ok ; nicht benutzt: Bits 3, 4 und 5 .EQU bMin = 2 ; Timer hat 1 Minute erreicht .EQU b32m = 1 ; Timer Interrupt 4 Secunden, 32 ADC-Messungen komplett .EQU b64Hz = 0 ; Timer Interrupt 64 Hz Tick ; ; Bit-Definitionen für das Anzeigeflag rFlgD ; .EQU bUHex = 7 ; Zeige Ergebnisse in Hex über UART an (Debug) .EQU bUMoni = 6 ; Zeige aktive Kanäle über UART an .EQU bURdy = 5 ; Ergebnisse komplett für die UART-Ausgabe .EQU bLRdy = 4 ; Ergebnisse komplett für die LCD-Ausgabe .EQU bLcd3 = 3 ; Zeile 4 der LCD ist frei verwendbar .EQU bLcd2 = 2 ; Zeile 3 der LCD ist frei verwendbar .EQU bLcd1 = 1 ; Zeile 2 der LCD ist frei verwendbar .EQU bLcd0 = 0 ; Zeile 1 der LCD ist frei verwendbar ; ; ; Berechnete Konstanten ; .EQU cTC1Prsc = 8 ; TC1 Vorteiler-Wert .EQU cTC1Div = fClock / cTC1Prsc / 64 ; 64 Interrupts pro Sekunde .EQU cTC1CompB = 50 ; Timer-Wert für den Start der ADC-Umwandlung .EQU cStartAdc = (1<