; *************************************************************** ; * Copyright by mad.dax@t-online.de * ; * DCC-Encoder Fahrstufe 0 Testversion * ; * Version: 10.04 * ; * noch ungetestet ( keine Zeit ) * ; *************************************************************** ; ; Hardware Anforderungen: ; ; Standard Belegung ; ; Tiny 15 PDIP/SOIC ; ;(RESET/ADC0) PB5 = 1 8 = VCC ;(ADC3) PB4 = 2 7 = PB2 (ADC1/SCK/T0/INT0) ;(ADC2) PB3 = 3 6 = PB1 (AIN1/MISO/OC1A) ; GND = 4 5 = PB0 (AIN0/AREF/MOSI) ; ; DCC Encoder ; ;RESET PB5 = 1 8 = VCC ; PB4 = 2 7 = PB2 ; PB3 = 3 6 = PB1 ; GND = 4 5 = PB0 DCC Ausgang ;111111111111111 0 00000001 0 01001111 0 01001110 1 ;111111111111111 0 00000001 0 10001111 0 10001110 1 ; Software Funktionen: ; .NOLIST .INCLUDE "tn15def.inc" ; ; Konstanten FlagReg ; .equ BitWert = 3 ;BitWert für zu sendendes Bit .equ BitSendt = 2 ;Bit gesendet .equ BitRepeat =1 ;Wiederhole ( für BitWert = 0 ) .equ BitHalf =0 ;Bithälfte ( erste Hälfte = 1 ) .equ OutTime = 255 - 46 ; High/Low-Signal Periodendauer = 29 us ohne Precaler .equ EEOSCCAL = 5 ; Speicherplatz OSCCAL im EEPROM ; ; Benutzte Register ; .def TEMPS = R16 ;SREG Sicherungsregister .def TEMPI = R17 ;TEMP Register für Initialisierung und Interupt-Schmierregister .def TEMP1 = R18 ;TEMP Register für Hauptprogramm und Initialisierung .def TEMP2 = R19 ;TEMP Register für Hauptprogramm .def TEMP3 = R20 ;TEMP Register für Hauptprogramm ;def FREI = R21 ;def FREI = R22 .def FlagReg = R23 ;Flag Register .def BitCNT = R26 ;Bitzähler für Datenhandling ;def FREI = R28 ;def FREI = R29 ;def Reserviert = R30 ;def Reserviert = R31 ; ; ; Code beginnt hier ; .CSEG .ORG $0000 ; ; Reset- und Interrupt-Vektoren rjmp RESET ; Reset handler reti ;EXT_INT0 ; IRQ0 handler reti ;PIN_CHANGE ; Pin change handler reti ;TIM1_CMP ; Timer1 compare match reti ;TIM1_OVF ; Timer1 overflow handler rjmp TIM0_OVF ; Timer0 overflow handler reti ;EE_RDY ; EEPROM Ready handler reti ;ANA_COMP ; Analog Comparator handler reti ;ADC ; ADC Conversion Handler ; ; ; **************** Ende der Interrupt Service Routinen ********************* ; ; readEEPROM: sbic EECR, EEWE ; wird noch geschrieben ? rjmp PC-1 ; Schleife out EEAR, TEMP1 ; Erfasse EEProm-Leseadresse sbi EECR, EERE ; Setze EEProm-Lesebefehl in TEMP2, EEDR ; Lese EEprom-Daten ret ; Rücksprung TIM0_OVF: in TEMPS,SREG ; SREG sichern sbrc Flagreg, BitHalf ; wenn erste Hälfte fertig rjmp BitLo ; springe zur zweiten Hälfte sbi PORTB, PB0 ; setze DCC-Ausgang sbrc Flagreg, BitRepeat ; wenn Hi Wiederholt rjmp HiOK ; dann OK sbrs Flagreg, BitWert ; wenn neues Bit=0 rjmp HiEnd HiOK: sbr Flagreg, (1<