/********************************************************************************
* DCC Wagen Decoder Software V1.1 *
* Copyright 2011 Toralf Wilhelm *
* *
* private Nutzung erwünscht, gewerbliche Nutzung erfordert zwingend meine Zustimmung! *
* Datei: LoadEEdaten.inc *
* Kontakt: toralfwilhelm@web.de *
* Webseite: www.toralfwilhelm.de *
* Version: 01/2011 Version 1 Start *
* 01/2013 Fehler beim laden langer Adressen beseitigt *
* Beschreibung: EEProm Daten in die Arbeitsregister laden *
********************************************************************************/
#include "definitionen.h"
EEpromDatenlesen:
/*****************************
* bei mega8 OSCCAL einlesen *
*****************************/
#ifdef __AVR_ATmega8__
ldi w,EEOSCCAL // hole Oszillator Calibrierung NUR bei mega8 nötig
sts EE_Adresse,w
rcall eepromlesen
out OSCCAL,w
#endif
/*****************************
* auf Softwareupdate testen *
*****************************/
ldi w,EEsoftup // auf Bootloader ein -> Softwareupdate ein testen
sts EE_Adresse,w
rcall eepromlesen
tst w // auf Null testen
breq 1f // wenn Null normal weiter
0: nop
rjmp 0b // auf WDR Reset und Sprung zum Bootloader warten
#ifdef __AVR_ATmega8__
1: // Kein SoftwareUpdate
// WDR ausschalten (nachBootloader)
WDR
// Write logical one to WDCE and WDE
in w, WDTCR
ori w, (1<<WDCE)|(1<<WDE)
out WDTCR, w
// Turn off WDT
ldi w, (0<<WDE)
out WDTCR, w
#endif
/***************************
* Grundparameter einlesen *
***************************/
ldi w,EEAdresse // hole Dekoder Adresse (kurze Adresse)
sts EE_Adresse,w
rcall eepromlesen
mov Adresse,w
DATEN_NEU_EINLESEN:
/****************************
* AUX FKT und EFF einlesen *
****************************/
ldi YL,lo8(AUX_Funktion)
ldi YH,hi8(AUX_Funktion)
ldi ZL,lo8(AUX_Status)
ldi ZH,hi8(AUX_Status)
ldi w2,EE_AUX_FKT
0:
sts EE_Adresse,w2
rcall eepromlesen
mov w3,w // bit 0-2 -> nach Funktion bit 0-2
cbr w3,0b11111000
st y+,w3
swap w // bit 5-7 -> nach Status bit 0-2
lsr w
cbr w,0b11111000
st z+,w
inc w2
cpi w2,(EE_AUX_FKT+ANZAHL_AUX) // alle Werte eingelesen?
brne 0b // wenn nicht nächsten holen
ldi YL,lo8(AUX_Effekte)
ldi YH,hi8(AUX_Effekte)
ldi w2,EE_AUX_EFF
0:
sts EE_Adresse,w2
rcall eepromlesen
st y+,w
inc w2
cpi w2,(EE_AUX_EFF+ANZAHL_AUX) // alle Werte eingelesen? (kupplung und licht haben keine effekte)
brne 0b // wenn nicht nächsten holen
/*****************
* CV29 einlesen *
*****************/
ldi w,EEcv29 // Konfig bits holen
sts EE_Adresse,w
rcall eepromlesen
bst DCCreg,keinDCC
bld w,keinDCC // bit6+7 (KeinDCC+Richtung) kommen nicht aus CV29,
bst DCCreg,richtung // diese Bits beibehalten damit nach POM der Dekoder weiterläuft
bld w,richtung
mov DCCreg,w
/*********************************
* CV31/32 U_LED / Lipo einlesen *
*********************************/
ldi w,EE_U_LED
sts EE_Adresse,w
rcall eepromlesen
mov U_LED,w
ldi w,EE_Lipo
sts EE_Adresse,w
rcall eepromlesen
sbrc w,0
sbr flag,(1<<Lipo)
/**************************
* lange Adresse einlesen *
**************************/
sbrs DCCreg,erwAdresse // wenn erweiterte (lang) Adresse an 1x springen
ret // lange adresse holen überspringen
ldi w,EElanghigh // erweiterte Adresse holen
sts EE_Adresse,w
rcall eepromlesen
mov Adresse,w
ldi w,EElanglow
sts EE_Adresse,w
rcall eepromlesen
sts AdresseLow,w
ret
/*************************
* CV Register im eeprom *
*************************/
.section .eeprom,"a",@progbits
EEAdresse:.byte 3 //CV1 Dekoderaddresse 1-127
.space 4,0xFF
.byte 0xFF //CV6
.byte 43 //CV7 Software-Version
.byte 0x0D //CV8 Herstellerkennung
.byte 0xFF
.byte 0xFF //CV10
.byte 0xFF //CV11
.byte 0xFF //CV12
EECV13: .byte 0b00000111 //CV13 Analogmodus aktive FL/0 = 1 ein F1 = 2 ein bis F7 = 255 ein
.byte 0xFF //CV14
.byte 0xFF //CV15
.byte 0xFF //CV16
EElanghigh: .byte 192 //CV17 Erweiterte Adresse Höherwertiges Byte der langen Adresse plus 192
EElanglow: .byte 100 //CV18 Erweiterte Adresse Niederwertiges Byte der langen Adresse
.byte 0xFF //CV19 Consist-Adresse wird nicht unterstützt!
.byte 0xFF //CV20
.byte 0xFF //CV21
.byte 0xFF //CV22
.byte 0xFF //CV23
.byte 0xFF //CV24
.byte 0xFF //CV25
.byte 0xFF //CV26
.byte 0xFF //CV27
.byte 0xFF //CV28
EEcv29: .byte 6 //CV29 Konfiguration nach DCC-Norm
// +1:Fahr-Richtung umgekehrt
// +2:28/128 Fahrstufen, sonst 14
// +4:automatisch Analog/Digital-Erkennung, sonst nur Digitalbetrieb
// +32:Erweiterte (lange) Adresse (CV17 und CV18), sonst CV1
EEsoftup: .byte 0 //CV30 gleich 1 Softwareupdate ein
EE_U_LED: .byte 205 //CV31 U_LED 4,2V -> ca. 205 (je nach AVR da die int. rev. unterschiedlich)
EE_Lipo: .byte 1 //CV32 1 = Lipobetrieb -> AUX17 = Lipo GND Anschluß!
EE_AUX_FKT:
.byte 0b00100001 //CV33 AUX_1_FKT
// bit0-2 welcher Funktion ist dieser AUX zugeordnet
// +0 = F0/FL -> bit0-2 = 000
// +1 = F1 -> bit0-2 = 001
// +2 = F2 -> bit0-2 = 010
// bis
// +7 = F7 -> bit0-2 = 111
// bit3-4 reserviert
// bit5-7 Dimmer von 000 bis 111 (Achtung ist nicht linear)
.byte 0b00100010 //CV34 AUX_2_FKT
.byte 0b00100010 //CV35
.byte 0b00100010 //CV36
.byte 0b00100010 //CV37
.byte 0b00100010 //CV38
.byte 0b00100010 //CV39
.byte 0b00100001 //CV40
.byte 0b11100011 //CV41 -> AUX_9 im Nachtmodus AUX_2 zugeordnet
.byte 0b11100011 //CV42 -> AUX_10 im Nachtmodus AUX_3 zugeordnet
.byte 0b11100011 //CV43 -> AUX_11 im Nachtmodus AUX_4 zugeordnet
.byte 0b11100011 //CV44 -> AUX_12 im Nachtmodus AUX_5 zugeordnet
.byte 0b11100011 //CV45 -> AUX_13 im Nachtmodus AUX_6 zugeordnet
.byte 0b11100011 //CV46 -> AUX_14 im Nachtmodus AUX_7 zugeordnet
.byte 0b11100000 //CV47 AUX_15 Schlußicht hinten und
.byte 0b11100000 //CV48 AUX_16 Schlußlicht vorn
// bit0-2 immer 0 (F0/FL)
// bit3-4 reserviert
// bit5-7 Dimmer
.byte 0b00100111 //CV49 AUX_17 Kupplung_1 und
.byte 0b11100111 //CV50 AUX_18 Kupplung_2
// bit0-2 welcher Funktion ist dieser AUX zugeordnet
// +0 = F0/FL -> bit0-2 = 000
// +1 = F1 -> bit0-2 = 001
// +2 = F2 -> bit0-2 = 010
// bis
// +7 = F7 -> bit0-2 = 111
// bit3-4 reserviert
// bit5-7 Zeit bis AUX wieder abschaltet in Sekunden (0-7)
// +32 = 1
// +64 = 2
// +128 = 4
EE_AUX_EFF:
.byte 0b00000001 //CV51 AUX_1_EFF
// +1 = normales Licht
// +2 = Neonlicht (Startflackern)
// +4 = defekte Lampe (flackert nur)
// +8 = Nachtmodus (nur AUX 9-14 und dann in Verbindung mit AUX 2-7)
// +16 = Kupplung
// +32 = Ausgang schaltet zufällig um, bei Nachtmodus nur 1x (mit 1/2/4/8 kombinierbar)
// +64 = AUX rückwärts aus
// +128 = AUX vorwärts aus
.byte 2 //CV52 AUX_2_EFF
.byte 2 //CV53
.byte 2 //CV54
.byte 2 //CV55
.byte 2 //CV56
.byte 2 //CV57
.byte 1 //CV58
.byte 2 //CV59 -> AUX_9 im Nachtmodus AUX_2 zugeordnet
.byte 2 //CV60 -> AUX_10 im Nachtmodus AUX_3 zugeordnet
.byte 2 //CV61 -> AUX_11 im Nachtmodus AUX_4 zugeordnet
.byte 2 //CV62 -> AUX_12 im Nachtmodus AUX_5 zugeordnet
.byte 2 //CV63 -> AUX_13 im Nachtmodus AUX_6 zugeordnet
.byte 2 //CV64 -> AUX_14 im Nachtmodus AUX_7 zugeordnet
.byte 65 //CV65 Schlußlicht hinten
.byte 129 //CV66 Schlußlicht vorn
.byte 16 //CV67 Kupplung 1
.byte 16 //CV68 Kupplung 2
.space 31,0xFF
EEOSCCAL:.byte 0x9E // Speicherplatz OSCCAL bei Tiny44/45 nicht nötig!
Detected encoding: UTF-8 | 0
|