Forum: Projekte & Code DCC Decoder


von Muetze (Gast)



Lesenswert?

Hallo Sebastian,

Ich habe das Eagle File noch mal überarbeitet und eine
Version entwickelt die nur mit dem DCC Signal auskommt oder
die man Stationär mit Spannung versorgt und das DCC Signal
( nur das Plus ) zum ansteuern nimmt.

Bei Einbau in Loks oder Wagons mus das DCC Signal auf die
mit < 20 ~ Bezeichneten Pole gelegt werden.

Ansonsten den auf dem Bild mit R1 bezeichneten 220K Widerstand auf R2 
löten, dann das DCC Kabel auf den mit " DCC bei Ext. V " bezeichneten 
PAD löten. Den Gleichrichter an den mit " < 20 ~ " Bezeichneten Polen an 
einen Trafo anschließen. So wird Digitalspannung gespart.

Ich habe bei meinen Wagons bis zu 15 LED´s eingebaut,
da hat die Schaltung so um die 7,4 mA verbraucht.

Die Ausgänge habe ich noch mal Bezeichnet mit F1 bis F4
dann ist es Leichter bei dem Anlöten die richtigen PAD´s zuzuordnen.

Der Plus von den LED´s kommt auf den gemeinsamen Pol der mit " VCC "
gekennzeichnet ist, der Minus wird jeweils geschaltet PAD F1 bis F4.
Die Wiederstände sind so berechnet das LED´s dort direkt angeschlossen 
werden können ( paralell )möchte man mit Glühbirnchen arbeiten muss
der Wiederstand verringert werden, in der vorhandenen Schaltung beträgt 
er 1,5K.

So jetzt hast Du alles auf dem neusten Stand.
Weiter bin ich noch nicht gekommen.

Gruß Muetze

von Andreas G. (djmetro)


Lesenswert?

Hallo,
ich bin auf der Suche nach einem Funktionsdecoder mit folgenden 
Eigenschaften:

- Kurze und Lange Adresse (CV1, CV17/18)
- Functionmapping, also die F-Tasten beliebig den Ausgängen zuordnen
- fahrtrichtungsabhängig (FL/FR)
- Dimmen der Ausgänge
- Leuchtstoffröhren Effekt bei F1-Fx konfigurierbar
- ggf. auch Analogbetrieb

Erfüllt das evtl. schon einer oder hat so einen jemand in Arbeit?

Andi

von Robert H. (robert1980)


Lesenswert?

Hallo,

Entschuldigung das ich den alten Beitrag wieder rauskrame.

Ich möchte gern das Programm von Muetze mit Tiny15 zu Versuchszwecken 
auf einen ATmega32 spielen.

Ich habe dazu die Timer  und das Programm geändert, so das ich in der 
Ausgabe  keine Fehler erhalte. Lediglich 4 Warnungen bezüglich der 
Verwendung der Register ab R26 bis R29.


Ich vermute das es ein Problem mit dem Takt des µC gibt. Der Tiny15 hat 
ja 1,6MHZ internen Takt welcher im Programm für die Timer verwendet 
wird.

Wie passe ich dies am Besten an für ATMega32 oder gibt es ein generelles 
Problem bei der Verwendung eines ATM32.

Vielen Dank

MFG

Robert

von Sebastian G. (borsti87)


Lesenswert?

Hi,

erst mal ein Frohes neues Jahr 2011 ;-)
so ich wollte mal horchen ob sich hier schon einer einen Kopf darum 
gemacht hat das der Tiny15 jetzt vom Tiny25 quasi abgelöst wurde.
Welchen Tiny25 sollte man nehmen den mit 10MHz oder mit 20MHz?
Und hat sich schon wer daran gemacht das Programm anzupassen?

MfG
Sebastian

von Hannes L. (hannes)


Lesenswert?

Sebastian G. schrieb:
> Hi,
>
> erst mal ein Frohes neues Jahr 2011 ;-)

Jou, Frohes und Gesundes...

> so ich wollte mal horchen ob sich hier schon einer einen Kopf darum
> gemacht hat das der Tiny15 jetzt vom Tiny25 quasi abgelöst wurde.
> Welchen Tiny25 sollte man nehmen den mit 10MHz oder mit 20MHz?

Ist diese Frage Dein Ernst?
Welche Taktfrequenzen kann der Tiny25 ohne externen Taktgeber?
Welche Rolle spielt es dann, ob der Tiny25 10 oder 20 MHz Takt verträgt?

> Und hat sich schon wer daran gemacht das Programm anzupassen?

Nicht schwätzen, sondern machen.

>
> MfG
> Sebastian

...

von ftelektro (Gast)


Angehängte Dateien:

Lesenswert?

Das ist meine variante.

von ftelektro (Gast)


Angehängte Dateien:

Lesenswert?

In der App-note 501 von Atmel wird alles beschrieben,welche 
einstellungen und Befehle man verwenden mus.

von Harald K. (carbonblack)


Lesenswert?

Hallo,

ich bin über einen 5V Regler im SOT-23 Gehäuse gestolpert. Damit lassen 
sich evtl. noch ein paar mm^2 einsparen:

TA 78L 05F TOSHIBA (z.B. €0.53 bei C... )

Noch hab' ich den Thread nicht durchgeackert. Wird für die 
Signalübertragung die Versorgungsspannung umgepolt oder kurz 
ausgeschaltet?

Her(t)zliche Grüße
Harald

von Sebastian G. (borsti87)


Lesenswert?

Hi,
ich habe jetzt mal Mützes Multifunktiondecoder Programm versucht etwas 
um zubauen. Und zwar will ich das beim schreiben der CV 8 diese zwar 
weiterhin beibehalten wird aber alle CV's in den 'Auslieferungszustand' 
zurückgesetzt werden. Dazu habe ich folgendes geändert:
1
Servicemode:        ; Programmiermodus CV-Lesen, Schreiben, Bitmanipulation
2
    
3
    ldi TEMP1, 0b01110100    ; lade Abbild 01110100 in TEMP1 /  prüfe Funktionscode
4
    cp ByteA, TEMP1      ; vergleiche ByteA und TEMP1 ob gleich / auf CV Verify Byte
5
    breq PRGVERIFY      ; wenn ByteA und TEMP1 gleich , dann springe zu PRGVERIFY / Verifizierung
6
    ldi TEMP1, 0b01111100    ; lade Abbild 01111100 in TEMP1 /  prüfe Funktionscode
7
    cp ByteA, TEMP1      ; vergleiche ByteA und TEMP1 ob gleich /  auf CV Write Byte
8
    breq PRGWRITE        ; wenn ByteA und TEMP1 gleich , dann springe zu PRGWRITE / Schreiben
9
                   ; Prüfung auf Reset 
10
    in   TEMP1, TIFR      ; kopiere TIFR nach TEMP1 / hole Timer Interuptflag
11
    sbrs TEMP1, TOV1      ; Wenn Timer Counter 1 Resetzeit abgelaufen dann überspringe den nächsten Befehl / und kein Programmierbefehl
12
    rjmp MAIN            ; springe zu Main / Endlosschleife
13
    rjmp RUN            ; springe zu RUN / setze Timer auf RUN-Werte
14
    
15
PRGVERIFY:
16
  mov TEMP1, ByteB      ; kopiere ByteB nach TEMP1 / setze Lese-Adresse
17
    rcall readEEPROM      ; springe zu readEEPROM / lies
18
    cpse TEMP2, ByteC      ; vergleiche TEMP2 und ByteC und springe wenn gleich / und vergleiche
19
    rjmp main          ; wenn gleich dann springe zu Main / Endlosschleife
20
    sbi  PortB, PB3      ; setze einen Motorausgang / Quittung an Zentrale ( min 60mA Verbrauch )
21
    rjmp PRGACK          ; springe zu PRGACK 
22
    
23
PRGWRITE: 
24
25
  ldi TEMP1, 0b00000110    ; lade Abbild 00000110 in TEMP1 /  prüfe Funktionscode
26
    cp ByteB, TEMP1      ; vergleiche ByteB und TEMP1 ob gleich /  auf Schreib-Adresse CV Versions ID
27
    breq PRGACK          ; wenn ByteB und TEMP1 gleich , dann springe zu PRGACK / beende Schreiben wenn gleich
28
    ldi TEMP1, 0b00000111    ; lade Abbild 00000111 in TEMP1 /  prüfe Funktionscode
29
    cp ByteB, TEMP1      ; vergleiche ByteB und TEMP1 ob gleich /  auf Schreib-Adresse CV Hersteller ID
30
    breq CVRESET        ; wenn ByteB und TEMP1 gleich , dann springe zu CVRESET / CV in Auslieferungszustand wenn gleich     ;PRGACK          ; wenn ByteB und TEMP1 gleich , dann springe zu PRGACK / beende Schreiben wenn gleich
31
    ldi TEMP1, 0b00001000    ; lade Abbild 00001000 in TEMP1 /  prüfe Funktionscode
32
    cp ByteB, TEMP1      ; vergleiche ByteB und TEMP1 ob gleich /  Schreib-Adresse CV Hersteller Typ
33
    breq PRGACK          ; wenn ByteB und TEMP1 gleich , dann springe zu PRGACK /  beende Schreiben wenn gleich    
34
    cp  PRGCHECK, ByteD     ; vergleiche ByteD und PRGCHECK ob gleich / (XOR-Byte)
35
    brne PRGWRACK        ; wenn ByteD und PRGCHECK ungleich , dann springe zu PRGWRACK / springe wenn ungleich
36
    mov TEMP1, ByteB      ; kopiere ByteB nach TEMP1 /  setzte Schreib-Adresse
37
    mov TEMP2, ByteC      ; kopiere ByteC nach TEMP2 /  hole Daten
38
    rcall writeEEPROM     ; springe zu writeEEPROM / schreibe ins EEPROM
39
  rjmp PRGWRACK           ; springe zu PRGWRACK
40
41
 CVRESET:                   ; Zurücksetzen der CV's in Auslieferungszustand
42
43
   ldi TEMP1,0b00000000    ; lade 00000000 in TEMP1 / setze Schreib-Adresse für CV1
44
  ldi TEMP2,0b00000011    ; lade 00000011 in TEMP2 / hole Daten für CV1
45
  rcall writeEEPROM      ; springe zu writeEEPROM / schreibe ins EEPROM
46
   ldi TEMP1,0b00000001    ; lade 00000001 in TEMP1 / setze Schreib-Adresse für CV2
47
  ldi TEMP2,0b00000000    ; lade 00000000 in TEMP2 / hole Daten für CV2
48
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
49
  ldi TEMP1,0b00000010    ; lade 00000010 in TEMP1 / setze Schreib-Adresse für CV3
50
  ldi TEMP2,0b10000000    ; lade 10000000 in TEMP2 / hole Daten für CV3
51
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
52
    ldi TEMP1,0b00000011    ; lade 00000011 in TEMP1 / setze Schreib-Adresse für CV4
53
  ldi TEMP2,0b10000000    ; lade 10000000 in TEMP2 / hole Daten für CV4
54
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
55
    ldi TEMP1,0b00000100    ; lade 00000100 in TEMP1 / setze Schreib-Adresse für CV5
56
  ldi TEMP2,0b10000000    ; lade 10000000 in TEMP2 / hole Daten für CV5
57
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
58
    ldi TEMP1,0b00000101    ; lade 00000101 in TEMP1 / setze Schreib-Adresse für CV6
59
  ldi TEMP2,0b01101001    ; lade 01101001 in TEMP2 / hole Daten für CV6
60
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
61
62
    ldi TEMP1,0b00010000    ; lade 00010000 in TEMP1 / setze Schreib-Adresse für CV17
63
  ldi TEMP2,0b11001000    ; lade 11001000 in TEMP2 / hole Daten für CV17
64
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
65
    ldi TEMP1,0b00010001    ; lade 00010001 in TEMP1 / setze Schreib-Adresse für CV18
66
  ldi TEMP2,0b10001010    ; lade 10001010 in TEMP2 / hole Daten für CV18
67
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM  
68
    ldi TEMP1,0b00010010    ; lade 00010010 in TEMP1 / setze Schreib-Adresse für CV19
69
  ldi TEMP2,0b00000000    ; lade 00000000 in TEMP2 / hole Daten für CV19
70
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
71
    
72
  ldi TEMP1,0b00011000    ; lade 00011000 in TEMP1 / setze Schreib-Adresse für CV25
73
  ldi TEMP2,0b00110000    ; lade 00110000 in TEMP2 / hole Daten für CV25
74
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
75
    ldi TEMP1,0b00011001    ; lade 00011000 in TEMP1 / setze Schreib-Adresse für CV26
76
  ldi TEMP2,0b00001010    ; lade 00001010 in TEMP2 / hole Daten für CV26
77
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM  
78
    ldi TEMP1,0b00011010    ; lade 00011000 in TEMP1 / setze Schreib-Adresse für CV27
79
  ldi TEMP2,0b00000100    ; lade 00000100 in TEMP2 / hole Daten für CV27
80
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
81
    ldi TEMP1,0b00011011    ; lade 00011011 in TEMP1 / setze Schreib-Adresse für CV28
82
  ldi TEMP2,0b00000011    ; lade 00000011 in TEMP2 / hole Daten für CV28
83
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
84
    ldi TEMP1,0b00011100    ; lade 00011000 in TEMP1 / setze Schreib-Adresse für CV29
85
  ldi TEMP2,0b00000000    ; lade 00000000 in TEMP2 / hole Daten für CV29
86
  rcall writeEEPROM       ; springe zu writeEEPROM / schreibe ins EEPROM
87
88
89
PRGWRACK: 
90
91
  mov PRGCHECK, ByteD    ; kopiere ByteD nach PRGCHECK /  Datencheck
92
    sbi  PortB, PB3      ; setze einen Motorausgang / Quittung an Zentrale ( min 60mA Verbrauch )
93
      
94
PRGACK:              ; Acknowledge
95
96
    cli                  ; Globales Interrupt Flag auf 0 / alle Interrupts ausschalten
97
    ldi  TEMP1, ACKTime     ; lade ACKTime in TEMP1 / lade den Timer/Counter1
98
    ldi  TEMP1,0b00001100    ; lade Abbild 00001100  in TEMP1 /  1 1 0 0 CK/128 für Resetzeit und ACK
99
    out  TCCR1,TEMP1        ; Lade Abbild von TEMP1 nach Timer Counter Register1 
100
    out  TCNT1, TEMP1       ; Lade Abbild von TEMP1 nach TimerCounter1 / setze Zeit für Acknowlege
101
    in   TEMP1, TIFR      ; Lade Abbild von Timer Counter InterruptFlag nach TEMP1 / hole Timer Interuptflag
102
    sbrs TEMP1, TOV1      ; wenn Timer counter overflowFlag =1 dann Ackzeit abgelaufen
103
    rjmp PC-2          ; Programmcouter um 2 zurück / Schleife
104
    ldi  TEMP1,0b00000110   ; lade Abbild 00000110 in TEMP1 /  lösche Timer Interupts
105
    out  TIFR, TEMP1    ; Lade Abbild von TEMP1  nach Timer Counter InterruptFlag
106
    clr TEMP1          ; lösche TEMP1
107
    out PortB, TEMP1        ; lade Abbild von TEMP1 nach PortB / lösche Motorausgang
108
    sei                    ; alle Interrupts wieder einschalten / auf 1        
109
    rjmp MAIN            ; springe zu Main / Endlosschleife

Neu ist dabei Hauptsächlich das Label CVRESET und der zugehörige Aufruf 
im Label PRGWRITE.
Mein Problem ist nur, dass nach dem CVRESET kein Acknowledge erzeugt 
wird und ich nicht genau weis warum.
Ein anderes Problem ist noch das ich beim lesen der CV's ebenfalls kein 
Acknowledge bekomme.
Kann mir da wer weiter Helfen?

MfG
Sebastian

von Sebastian G. (borsti87)


Lesenswert?

@Mütze

Kannst du mir bitte sagen was ich tun muss damit ich den 
Reversierbetrieb wieder ins Programm bekomme, um im Steuerwagenbetrieb 
die beiden Ausgänge für FL zu tauschen?
Und ob es eine einfache Möglichkeit gibt das Neonflackern nicht nur beim 
ersten Start des Dekoder bei schon betätigte Funktion gibt, sondern auch 
beim einschalten der jeweiligen Funktion im laufnden Betrieb?

Gruß
Sebastian

von Sebastian G. (borsti87)


Lesenswert?

Sebastian G. schrieb:
> @Mütze
>
> Kannst du mir bitte sagen was ich tun muss damit ich den
> Reversierbetrieb wieder ins Programm bekomme, um im Steuerwagenbetrieb
> die beiden Ausgänge für FL zu tauschen?

so das habe ich schon wie folgt gelöst:

Die Auskommentierung hier bei den letzten beiden Code-Zeilen enfernt
1
RESET:
2
3
[...]
4
5
ldi TEMP1, EELongADR      ; Lade EELongADR in TEMP1 / Lange Adresse 
6
    rcall readEEProm      ; Springe zu readEEprom
7
    bst Temp2, 5        ; Lade aus TEMP2 BIT 5 / Lange Adresse ( CV29 )
8
    bld DCCReg, LongADR      ; schreibe T-Bit in DCCReg, LongADR ( BIT 7 )
9
    bst Temp2, 0          ; Lade aus TEMP2 BIT 0 für Reversierbetrieb ( CV29 )
10
    bld DCCReg, RevDir      ; schreibe T-Bit in DCCReg, RevDir ( BIT 6 )
11
12
[...]

und das Label Steuerw um die Überprüfung des DCCReg auf Reversierbetrieb 
wie folgt ergänzt
1
Steuerw:    
2
3
  cbr Temp1,0b00000011
4
  sbrc stop,7        ; wenn das Bit 6 auf 1 ist
5
  rjmp pc+16        ; springe im Programm Counter 15 vor
6
  sbrs DCCReg,FL       ; Wenn Fahrtlicht Bit = 1 dann
7
  rjmp PC+14        ; springe im Programm Counter 13 vor
8
  sbrs stop,6        ; wenn das Bit 6 im Sopregister auf Null steht
9
  rjmp pc+12        ; springe im Programm Counter 13 vor
10
  sbrc DCCReg,DIR     ; Wenn Fahrtrichtung Bit Rückwärts 1 dann
11
  rjmp PC+6        ; springe im Programm Counter 4 vor
12
;********** FL Vorwärts **********************************************************************
13
  sbrc DCCReg,RevDir      ; wenn RevDir = 0 überspringe nächste Anweisung
14
  sbr TEMP1, 0b00000010   ; sonst Fahrtrichtung Reversiert
15
  sbrs DCCReg,RevDir      ; wenn RevDir = 1 überspringe nächste Anweisung
16
  sbr Temp1,0b00000001    ; sonst Fahrtrichtung 'Standard'
17
  rjmp PC+5        ; springe im Programm Counter 3 vor
18
;********* FL Zurück *************************************************************************
19
  sbrc DCCReg,RevDir      ; wenn RevDir = 0 überspringe nächste Anweisung
20
    sbr Temp1,0b00000001    ; sonst Fahrtrichtung Reversiert
21
  sbrs DCCReg,RevDir      ; wenn RevDir = 1 überspringe nächste Anweisung
22
  sbr Temp1,0b00000010    ; sonst Fahrtrichtung 'Standard'
23
;********* FL Aus ****************************************************************************  
24
   ret         ; springe zu Main / Endlosschleife

So nun habe ich aber noch fesgestellt das der Betrieb mit langer Adresse 
noch nicht so richtig funktioniert, werd mir das noch mal anschauen, bin 
aber auch hier weiterhin für Hilfe dankbar ;-)

MfG
Sebastian

von Sebastian G. (borsti87)


Lesenswert?

Sebastian G. schrieb:

> So nun habe ich aber noch fesgestellt das der Betrieb mit langer Adresse
> noch nicht so richtig funktioniert, werd mir das noch mal anschauen, bin
> aber auch hier weiterhin für Hilfe dankbar ;-)

Das Problem lag wohl nicht am Programm als mehr an meinem duseligen 
Twin-Center das es nicht gebacken bekommt ordentlich lange Adressen  zu 
Programmieren.

Gruß
Sebastian

von Sebastian G. (borsti87)


Lesenswert?

Hallo

Sebastian G. schrieb:
> Mein Problem ist nur, dass nach dem CVRESET kein Acknowledge erzeugt
> wird und ich nicht genau weiß warum.
> Ein anderes Problem ist noch das ich beim lesen der CV's ebenfalls kein
> Acknowledge bekomme.
> Kann mir da wer weiter Helfen?

Sebastian G. schrieb:
> Und ob es eine einfache Möglichkeit gibt das Neonflackern nicht nur beim
> ersten Start des Dekoder bei schon betätigte Funktion gibt, sondern auch
> beim einschalten der jeweiligen Funktion im laufenden Betrieb?

Kann mir da keiner weiter helfen

Gruß
Sebastian

von Volkmar (Gast)


Lesenswert?

Hallo,

Sebastian G. schrieb:
> Sebastian G. schrieb:
>> Mein Problem ist nur, dass nach dem CVRESET kein Acknowledge erzeugt
>> wird und ich nicht genau weiß warum.

ich meine gelesen zu haben, daß hier das ACK vor dem Beschreiben der 
EEPROM-Zellen erfolgen muß und angenommen wird, daß die Werte erst nach 
einem Neustart des Dekoders übernommen werden. Das Beschreiben der 
vielen CVs/EEPROM-Zellen dauert einfach zu lang.

Gruß
Volkmar

von Sebastian G. (borsti87)


Lesenswert?

Volkmar schrieb:
> ich meine gelesen zu haben, daß hier das ACK vor dem Beschreiben der
> EEPROM-Zellen erfolgen muß und angenommen wird, daß die Werte erst nach
> einem Neustart des Dekoders übernommen werden. Das Beschreiben der
> vielen CVs/EEPROM-Zellen dauert einfach zu lang.

Gibt es denn entweder eine Möglichkeit den Vorgang zu beschleunigen oder 
eine andere Möglichkeit eine Reset der CV-Werte in den 
"Auslieferungszustand" zu bewältigen.

Gruß
Sebastian

von Christian (Gast)


Lesenswert?

Hallo,

habe den Code erfolgreich auf einem ATTINY45 zum Laufen gebracht.
Ich möchte aber die Ausgänge invertieren - sprich Outputs sind low wenn 
eingeschaltet.
Frage: Hat das schon jemand probiert?
Vorab mal ein großes DANKESCHÖN!

von Torsten G. (wawibu)


Lesenswert?

Eine Frage: Warum hast Du für den Funktionsdecoder 1206er Widerstände 
genommen? Wg der Last?

Überlege mir einen Schwung dieser Decoder zu bauen. Die Platinen werde 
ich dann wohl doppelseitig ausführen und herstellen lassen. Daher halt 
die Frage, ob man die Widerstände nicht auch in 0805 nutzen kann. Zum 
löten ist das ja nicht viel komplizierter :)

Muss gestehen, dass ich nicht den ganzen Thread gelesen habe - 
vielleicht war das schon mal diskutiert worden :/

Danke & Gruß,
Torsten

von Torsten G. (wawibu)


Lesenswert?

ach ja - und dann noch eine Frage: Wie testet ihr die Decoder? Gibt es 
dafür spezielle Tools mit der man eine DCC-Zentrale "steuern" kann?

Ich hatte mal vor einiger Zeit selbst mal versucht einen Dekoder zu 
programmieren. Leider hat das dann im realen Betrieb nicht richtig 
funktioniert. Hatte seinerzeit aber auch "nur" eine Lenz-Zentrale, 
welche nun bei meinem Vater verbaut ist und fleißig genutzt wird :)

Danke & Grüße,
Torsten

von Christoph S. (schoerner)


Lesenswert?

Hallo
gibt es eigentlich schon neuigkeiten zu dem projekt vom Siegfried 
Saueressig
"DCC-Decoder m8lok"
Hat die Umsetzung funktioniert.
Danke für eine Antwort

von Niklas F. (derniklas)


Lesenswert?

Hallo,

ich habe den Dekoder auf Basis eines Attiny45 plus L272 nachgebaut und 
bekomme leider keine Rückmeldung, wenn ich ihn an meine Roco Multimaus 
anschließe und ansteuere.
Ich möchte gerne ausschließen, dass die von mir kompilierte hex Datei 
Fehler beinhaltet. Kann mir jemand die hex Datei für den Attiny45 
bereitstellen?
Welche Fusebits müssen im Vergleich zum Auflieferungszustand geändert 
werden?

Sind eigentlich im Quellcode Standard CV gesetzt?

Vielen Dank,
Niklas

von Niklas F. (derniklas)


Angehängte Dateien:

Lesenswert?

Nachtrag zu vorigem Post:
Die von mir kompilierte hex Datei basiert auf dem angehängten Quellcode, 
der hier weiter oben im Thread bereitgestellt wurde, siehe Anhang.

Ein Vergleich mit der Version für den AT15 zeigt, dass nur Registernamen 
und Ports getauscht worden sind. Die erhöhte Frequenz des At45 im 
Verlgeich zum At15 wurde nicht berücksichtigt. Deshalb habe ich auf 
Grundlage des weiter oben geposteten PDF (ATtiny15zu25.pdf) den At45 in 
den Kompatibilitätsmodus versetzt. Das Ergebnis ist, dass ich den At45 
nicht mehr mittels Programmer ansprechen kann.

Kann mir jemand helfen? Hat jemand Erfahrung mit dem Umstieg von 
Attiny15 zu Attiny25/45?

Bg,
Niklas

von Hannes L. (hannes)


Lesenswert?

Niklas Freeman schrieb:
> Kann mir jemand helfen?

Ich versuche es, obwohl ich es für sinnfrei halte, diese uralte auf 
Tiny15 optimierte Software auf einem Tiny45 laufen zu lassen. Denn unter 
Nutzung der Features des Tiny25/45/85 (zweiter Timer, bessere 
Hardware-PWM, höherer Controllertakt, ...) ließe sich das durch 
Neuprogrammierung bedeutend effizienter umsetzen.

Niklas Freeman schrieb:
> Das Ergebnis ist, dass ich den At45
> nicht mehr mittels Programmer ansprechen kann.

Ich vermute mal, Du hast die CKDIV8-Fuse nicht rausgenommen, nun 
klappert der Tiny45 im Kompatiblitätsmodus zu langsam für Deinen 
ISP-Takt. Du müsstest also mal mit dem ISP-Takt Deines Programmers auf 
unter 1/4 des Controllertaktes runter gehen. Ich kann mich da aber auch 
irren, habe zwar schon viele Tiny85 für Gartenbahn-Soundmodule 
(Dampf/Diesel) benutzt, aber noch keinen im T15-Kompatiblitätsmodus.

Niklas Freeman schrieb:
> Sind eigentlich im Quellcode Standard CV gesetzt?

Hast Du eigentlich in den von Dir geposteten Quelltext geschaut???
Was meinst Du, was das hier ist?:
1
;** hier beginnt das EEProm **  
2
.ESEG
3
.ORG $0000    
4
5
.db 0x01, 0x00  ; CV1 Adresse und CV2 StartSpeed
6
.db 0x80, 0x80  ; CV3 IncVAL und CV4 DecVal 
7
.db 0x80, 0x71  ; CV5 MaxSpeed  und CV6 OSCCAL
8
.db 0xFF, 0x01  ; CV7 Hersteller und CV8 Typ ID
9
.db 0xFF, 0xFF  ; CV9 Frei und CV10 Frei
10
.db 0xFF, 0xFF  ; CV11 Frei und CV12 Frei
11
.db 0xFF, 0xFF  ; CV13 Frei und CV14 Frei
12
.db 0xFF, 0xFF  ; CV15 Frei und CV16 Frei
13
.db 0x00, 0x02  ; CV17 HI-Byte und CV18 LO-Byte
14
.db 0x00, 0xFF  ; CV19 Consist und CV20 Frei
15
.db 0xFF, 0xFF  ; CV21 Frei und CV22 Frei
16
.db 0xFF, 0xFF  ; CV23 Frei und CV24 Frei
17
.db 0xFF, 0xFF  ; CV25 Frei und CV26 Frei
18
.db 0xFF, 0xFF  ; CV27 Frei und CV28 Frei
19
.db 0x00, 0xFF  ; CV29 Configuration Data und CV30 Frei
Musst natürlich auch die EEP-Datei mit in den Controller übertragen...

...

von Niklas F. (derniklas)


Lesenswert?

Guten Morgen,
Danke für die Antwort.

Die CV Standardwerte habe ich mittlerweile auch gefunden, sie stehen 
halt ganz am Ende vom Code. Allerdings wird bei mir keine eep Datei beim 
Kompilieren erstellt.

Die CKDIV8-Fuse ist definitiv nicht das Problem, denn wenn ich nur diese 
Fuse ändere gibt es kein Problem.

Gruß,
Niklas

von Hannes L. (hannes)


Lesenswert?

Niklas Freeman schrieb:
> Allerdings wird bei mir keine eep Datei beim
> Kompilieren erstellt.

Wenn der Quelltext ein Eeprom-Segment enthält, sollte auch eine 
EEP-Datei assembliert werden. Ist dies nicht der Fall, dann bedienst Du 
Dein AVR-Studio falsch.

Niklas Freeman schrieb:
> Die CKDIV8-Fuse ist definitiv nicht das Problem, denn wenn ich nur diese
> Fuse ändere gibt es kein Problem.

Na denn ist's ja gut...

...

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Nik schrieb:

> Ich werde mal mein Projektordner nach einigen anschaulichen Dateien
> durchforsten, muss aber noch anmerken, dass ich in diesem Forum wohl ein
> bisschen ein Exot bin, da ich in C programmiere und
> Silabs-Mikrocontroller (z.B. den C8051F310, siehe
> 
http://www.silabs.com/public/documents/tpub_doc/dsheet/Microcontrollers/Small_Form_Factor/en/C8051F31x.pdf)
> verwende. Diese Chips sind extrem leistungsfähig (bis zu 25 MIPS) bei
> bloss 5mA, verfügen selbst bei winzigen Massen (ab 3 x 3 mm) über ein
> grosses Repetoire an integrierter peripherer Hardware (PWM, ADC, SPI
> etc.) und können dank JTAG built-in-programmiert und debugged werden.
>
> Doch bevor ihr fragt: nein, ich werde nicht von Silabs gesponsert! :)
> Ich bin nur sehr begeistert von den kleinen Chips, das ist alles. Aber
> ich muss auch zugeben, dass ich noch nicht allzu viele andere Mikros
> genauer unter die Lupe genommen habe; ich lasse mir also gerne die
> Vorzüge der Amtel-Chips erklären. :)
>
> Gruss, Nik

Erst einmal bitte ich um Entschuldigung diesen Thread zu exumieren, aber 
mich würde interessieren ob NIK (Gast) hier noch zu erreichen ist.
Mich würde interessieren ob aus der Erfahrung mit den Silabs 8051 
Derivaten in Hinsicht auf DCC etwas erstanden ist auf dass man 
zurückgreifen könnte.
Leider überschneided sich DCC stark mit dem C-Compilerenvironment SDCC 
womit unter der Fülle an Links zu letzterem mögliche Spuren auf eine DCC 
Protokoll ziemlich untergehen...

Alle Sachdienlichen Hinweise werden mehr oder weniger vertraulich 
behandelt ;)

Gruß aus LA(ndshut)

Bergy

von Hans-Joachim L. (lemmi)


Lesenswert?

Moin aus Hamburg,
Ich bin auch ein Freund von Parsic.
Gibt es schon einen Encoder also ein kleines Programm welches DCC schon 
"lesen"kann.? Ich hätte es gern in Parsic um es besser verstehen zu 
können.
Danke für eine Rückmeldung.
Tschüß Lemmi

von Arnold (Gast)


Lesenswert?

Hallo zusammen.
Dieser thread war Super.
Schade, das er eingeschlafen ist.
MFg Arnold

von Arnold (Gast)


Lesenswert?

Ich suche einen source mit ATTiny15 und ZXMHC6A07T8
Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.