DCG2 Parametersatz

Hier könnt ihr Diskussionen über die Software des Labornetzteiles des c't-Lab führen.
Antworten
bhm
kann c't-Lab-Bausätze löten
kann c't-Lab-Bausätze löten
Beiträge: 31
Registriert: 13.03.2011, 19:34

DCG2 Parametersatz

Beitrag von bhm »

Moin,
nachdem mein DCG (mit DCP) seit einiger Zeit mit der Firmware von cm läuft, wollte ich den C-Port von psclab38 ausprobieren (besten Dank für die Umsetztung!).
  • Kompilierung (oder Kompilation ??) ging relativ problemlos,
  • brennen auch (.hex & .eep),
  • Bedienung via Panel geht,
  • serielle Schnittstelle auch.
ABER leider bleibt die Ausgangsspannung zuverlässig bei 0.000, am Panel und gemessen.
Ich vermute es liegt an ein paar falsch gesetzten Parametern. Leider habe ich keine Beschreibung der Parameter gefunden, oder sind die mit der Pascalversion identisch (kann eigentlich wegen der zusätzlichen Funktionen nicht sein) ? Vielleicht hat auch jemand einen funktionierenden Satz (.eep) zur Hand ?

Grüße
Bernd
PS: In den nächsten Wochen werde ich auch mal die C-Versionen von DDS und ADA testen. EDL später.
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: DCG2 Parametersatz

Beitrag von psclab38 »

Hi Bernd,

freut mich, daß Du Dich für die C-Firmwaren interessierst. Aber der Code ist nur in Teilen von mir.
bhm hat geschrieben:Leider habe ich keine Beschreibung der Parameter gefunden, oder sind die mit der Pascalversion identisch (kann eigentlich wegen der zusätzlichen Funktionen nicht sein) ?
Da ist sicher noch ein bißchen Dokumentationsarbeit liegengeblieben. Die Parameter der Pascal-Firmware sind aber alle identisch (sie sollen es jedenfalls sein).
bhm hat geschrieben:Kompilierung (oder Kompilation ??) ging relativ problemlos,
  • brennen auch (.hex & .eep),
  • Bedienung via Panel geht,
Hast Du auch die für Deine Hardware richtigen #defines gesetzt? Vermutlich hast Du das nicht und jetzt hast Du eine FW für die Dual-DAC-Variante. Die haben nur die wenigsten...
Was zeigt denn der x:IDN String an?

Nimm mal zum Ausprobieren die hier:
http://dcg-firmware.cvs.sourceforge.net ... -firmware/
DCG2Firmware-m32_Std.hex

Das eep-File braucht außerdem nicht geladen werden, das macht die Firmware beim ersten Start selbst.

Wenn Du noch ein Backup der Pascal-Firmware eep-Files hast, dann restauriere bitte erst mal den Pascal-Originalzustand und lese die Parameter mit dem Backup&Restore.vi von CM aus. Nach dem Wechsel auf die C-Firmware (ohne eep-File) dann mit dem vi wieder zurückspielen. Die Parameter sollten mit diesem Verfahren passen. Dieses gilt übrigens für alle C-Firmwaren.

Die eep-Files sind zwischen Pascal und C NICHT austauschbar!

Grüße
Paul

PS: Ich habe noch ein paar neue Files ins Repository hochgeladen.
PPS: Für den Betatest der ADA wäre ich sehr dankbar.
bhm
kann c't-Lab-Bausätze löten
kann c't-Lab-Bausätze löten
Beiträge: 31
Registriert: 13.03.2011, 19:34

Re: DCG2 Parametersatz

Beitrag von bhm »

Moin,
du hast natürlich recht, ich habe mir die Version mt dem DUALDAC kompiliert, kann auch nicht gehen.
Leider war das noch nicht der Durchbruch.
Aber von vorne:
  • Wenn ich die DCG2Firmware-m32_Std.hex brenne bekomme ich als IDN (oder am Panel) DCG2d 1.0.
  • Wenn ich die Sourcen mit ohne ;-) #define DUAL_DAC kompiliere, ist die Meldung ok (DCG2 1.0 (ohne d)), aber es kommt noch immer nix aus der Kiste.
  • Wenn ich von aussen eine Spannung anlege, wird die am Panel angezeigt. Das geht also.
  • Bei der Abfrage aller möglichen Parameter (siehe Anhang) gibt es ein paar kleine Unterschiede; Subchannel 22,23, 80, 169 gibt es bei DCG2 nicht, dafür sind die Subchannel 180-189 neu. Ich habe versucht die Originalparameter zu übertragen. Das ist bis auf die fehlenden Subchannel auch gelungen. Geht aber trotzdem nicht.
  • Jetzt an's Eingemachte:
  • Die Ausgangsspannung vom LT1655 ist beharrlich 0.
  • An SDATA ist eine alternierende Signalfolge zu sehen. allerdings gegenüber DCG-CM invertiert (hauptsächlich high). Nachtrag: Manchmal auch low mit Signal high, manchmal wechselt high-low mit 1kHz + Signal, ... gaaaanz komisch ..
  • Der SCLK sieht auch anders aus: Abwechselnd high und low mit dem Clock-Signal drauf.
Mir scheint irgendwas mit der Ansteuerung des DAC nicht zu stimmen. Leider verstehe ich a) von SPI und b) von Assembler zu wenig um da weiterzukommen.

Grüße
Bernd
Dateianhänge
dcg_merge.txt
(13.83 KiB) 248-mal heruntergeladen
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: DCG2 Parametersatz

Beitrag von psclab38 »

Hi Bernd
bhm hat geschrieben: Wenn ich die Sourcen mit ohne ;-) #define DUAL_DAC kompiliere, ist die Meldung ok (DCG2 1.0 (ohne d)),
schon mal gut.
bhm hat geschrieben:Wenn ich von aussen eine Spannung anlege, wird die am Panel angezeigt. Das geht also.
auch gut.
bhm hat geschrieben:Bei der Abfrage aller möglichen Parameter (siehe Anhang) gibt es ein paar kleine Unterschiede; Subchannel 22,23, 80, 169 gibt es bei DCG2 nicht, dafür sind die Subchannel 180-189 neu.
22+23 sind in der Pascal-Liste gar nicht drin ?!? 80 ist nicht implementiert + 169 braucht die C-Firmware nicht, da ist die Hysterese im Code. 180-189 sind für die Arbitraryfunktionen, sie sind wirklich neu.
bhm hat geschrieben:Ich habe versucht die Originalparameter zu übertragen. Das ist bis auf die fehlenden Subchannel auch gelungen. Geht aber trotzdem nicht.
das sollten wir in den Griff kriegen. Ich glaube doch, es haben ein paar die FW im Einsatz, auch ohne Dual-DAC.
bhm hat geschrieben:Die Ausgangsspannung vom LT1655 ist beharrlich 0.
Das hätte ich sonst gefragt.
bhm hat geschrieben:An SDATA ist eine alternierende Signalfolge zu sehen. allerdings gegenüber DCG-CM invertiert (hauptsächlich high). Nachtrag: Manchmal auch low mit Signal high, manchmal wechselt high-low mit 1kHz + Signal, ... gaaaanz komisch ..
Der SCLK sieht auch anders aus: Abwechselnd high und low mit dem Clock-Signal drauf.
Da drängt sich mir die Frage auf, was Du denn im Parameter 167 so drin hast? 167=3, also kein DCP, das tut hier aber nix zur Sache, denn am LT1655 sollte auf jeden Fall was rauskommen.
bhm hat geschrieben:Mir scheint irgendwas mit der Ansteuerung des DAC nicht zu stimmen. Leider verstehe ich a) von SPI und b) von Assembler zu wenig um da weiterzukommen.
An dem Assembler-Ansteuercode des LT hab ich eigentlich nix geändert, der ist uralt. Ein Fehler da wäre in den letzten drei Jahren aufgefallen. Außer mir ist da beim Einbau der Arbitrary-Funktionen was durcheinandergeraten. Hast Du mal die original-C-FW von amd-65 ausprobiert, die sollte da keine Probleme haben.
http://dcg-firmware.cvs.sourceforge.net ... mware/dcg/
Wenn die geht, dann muß ich wohl nochmal in den Code schauen. :shock:

Mal drüber schlafen ... das hat ja alles schon mal funktioniert.

Gruß
Paul


EDIT:
bhm hat geschrieben:Wenn ich die DCG2Firmware-m32_Std.hex brenne bekomme ich als IDN (oder am Panel) DCG2d 1.0.
Tut mir leid, aber in der Hektik hab ich die beiden Hexfiles verwechselt. Ist korrigiert.

Warum das mit der Standardhardware nicht klappt, ist mir aber noch ein Rätsel. Hat eigentlich noch jemand das Problem?


EDIT2:
In Deinen Parameterdumps steht als "gemessene" Spannung 3.6V, Parameter 10. Das paßt m. E. nicht zu "LT1655 bleibt auf 0". Wenn Du die DCP-Baugruppe hast, dann mußt Du den Parameter 167 auf 7 stellen, damit die Relais richtig angesteuert werden. (Edit: stimmt nicht, siehe EDIT3)
Hast Du die Spannung am LT1655 mit dem Oszi oder dem Multimeter gemessen? Das Signal ist hier ja noch gemultiplext.

Das Timing mit der Software für die Standardhardware ist m. E. ok; ich hab da "mal eben" eine Aufnahme gemacht:
LogicPort.pdf
Eine komplette Sequenz. U und I-Werte werden übertragen.
(17.49 KiB) 261-mal heruntergeladen
ganz links mit SCLK/SDATA/STROBE die Übertragung des Spannungswertes, ganz rechts dito des Stromwertes. Das wiederholt sich alle 2ms.
In der Mitte und das hat Dich wohl irritiert, das sind die SCLK-Signale für den ADC LTC1864. Die stören aber hier nicht.

Der High-Pegel auf SCLK ist kein Problem, weil der kurz vor Strobe wieder zurückgesetzt wird:
LogicPort_2.pdf
Detail mit SCLK low vor STROBE low.
(17.61 KiB) 246-mal heruntergeladen
Und die Bits bei SDATA ändern sich mit den Werten, die ich am Panel einstelle. Eigentlich alles so, wie es sein soll.


EDIT3:
Jetzt hab ich nochmal mit Abstand auf den Code geschaut und festgestellt, daß das Bit 2 von Parameter 167 in der C-Firmware gar nicht beachtet wird. Es sollte daher auch mit 167=3 und DCP funktionieren.
Die Ursache für Dein Problem ist mir aber umso schleierhafter...
bhm
kann c't-Lab-Bausätze löten
kann c't-Lab-Bausätze löten
Beiträge: 31
Registriert: 13.03.2011, 19:34

Re: DCG2 Parametersatz

Beitrag von bhm »

Hallo,
psclab38 hat geschrieben: Hast Du mal die original-C-FW von amd-65 ausprobiert, die sollte da keine Probleme haben.
http://dcg-firmware.cvs.sourceforge.net ... mware/dcg/
frisch kompiliert und geht.
(Allerdings nur, wenn ich das .eep NICHT brenne, und den Programmierstecker nach dem Brennen ziehe, sonst gibt es wirre Anzeigen ..)
In Deinen Parameterdumps steht als "gemessene" Spannung 3.6V, Parameter 10. Das paßt m. E. nicht zu "LT1655 bleibt auf 0".
Stimmt, kann ich auch nicht bestätigen, zeigt jetzt -0.07.
Hast Du die Spannung am LT1655 mit dem Oszi oder dem Multimeter gemessen? Das Signal ist hier ja noch gemultiplext.
Oszi, bei der Std-FW sieht man auch schön den Wechsel.
Das Timing mit der Software für die Standardhardware ist m. E. ok; ich hab da "mal eben" eine Aufnahme gemacht:
Ich werde mal versuchen, das mit den Messungen hier zu vergleichen (etwas schwieriger, weil nur einfaches 2-Kanal Oszi).

Grüße
Bernd
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: DCG2 Parametersatz

Beitrag von psclab38 »

bhm hat geschrieben:
psclab38 hat geschrieben: Hast Du mal die original-C-FW von amd-65 ausprobiert, die sollte da keine Probleme haben.
http://dcg-firmware.cvs.sourceforge.net ... mware/dcg/
frisch kompiliert und geht.
Wie meinst Du das? Hast Du damit eine Ausgangsspannung?

Ich habe mir vorhin nochmal den Aufwand gemacht und bei meinem DCG die Dual-DAC-Konstruktion temporär rausgebaut und meine aktuelle Std-C-Software eingespielt. Hat einwandfrei funktioniert.
bhm hat geschrieben:(Allerdings nur, wenn ich das .eep NICHT brenne,
Du brauchst/sollst bitte bei der C-FW keine eep-Dateien brennen!

Weil mir sonst nix mehr einfällt:
Welchen Compiler verwendest Du? Wie groß ist der Programmcode?

Code: Alles auswählen

AVR Memory Usage
----------------
Device: atmega32

Program:   31212 bytes (95.3% Full)
(.text + .data + .bootloader)

Data:       1521 bytes (74.3% Full)
(.data + .bss + .noinit)

EEPROM:      675 bytes (65.9% Full)
(.eeprom)
Kommt das gleiche raus, was ich auf Sourceforge hochgeladen habe, wenn Du den WinAVR-20080610 verwendest?
bhm
kann c't-Lab-Bausätze löten
kann c't-Lab-Bausätze löten
Beiträge: 31
Registriert: 13.03.2011, 19:34

Re: DCG2 Parametersatz

Beitrag von bhm »

Heureka, ich habs!
Nachdem ich gesehen hab, dass kein Strobe-Signal da ist, habe ich mir den Assembler-Code angesehen.
Da ist PB4 eindeutig drin, allerdings im konditionalen code (#ifdef). Aus einer Laune / Inspiration habe ich die Direktive und den DUAl-DAC Code gelöscht, und siehe da es klappt.
Es scheint, dass der Compiler (avr-gcc (GCC) 4.5.3 unter Linux) im Assembler-Code die Direktive nicht richtig verarbeitet.
Mal googeln was es damit auf sich hat, aber morgen ...

EDIT
die Syntax für Kompilerdirektiven scheint hier .ifdef, .else etc zu sein.
http://sources.redhat.com/binutils/docs ... eudo%20Ops
Ich hab es aber nicht ausprobiert.

besten Dank für die Hilfe
Bernd
Zuletzt geändert von bhm am 08.01.2012, 00:16, insgesamt 1-mal geändert.
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: DCG2 Parametersatz

Beitrag von psclab38 »

bhm hat geschrieben:Heureka, ich habs!
Nachdem ich gesehen hab, dass kein Strobe-Signal da ist, habe ich mir den Assembler-Code angesehen.
Da ist PB4 eindeutig drin, allerdings im konditionalen code (#ifdef). Aus einer Laune / Inspiration habe ich die Direktive und den DUAl-DAC Code gelöscht, und siehe da es klappt.
Is' ja 'n Ding! :roll:
bhm hat geschrieben:Es scheint, dass der Compiler (avr-gcc (GCC) 4.5.3 unter Linux) im Assembler-Code die Direktive nicht richtig verarbeitet.
Mit diesen Compilern (Win) hier funktioniert der Code einwandfrei:
  • gcc version 4.3.0 (WinAVR 20080610)
  • gcc version 4.3.2 (WinAVR 20090313)
  • gcc version 4.3.3 (WinAVR 20100110)
  • gcc version 4.5.1 (AVR_8_bit_GNU_Toolchain_3.3.0_364)
  • gcc version 4.5.1 (AVR_8_bit_GNU_Toolchain_3.3.1_445)
Der erste in der Liste ist der bevorzugte, da ist die std-lib am kleinsten.
bhm hat geschrieben:besten Dank für die Hilfe
Gerne. Hab selbst wieder was gelernt dabei.
Gruß,
Paul
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: DCG2 Parametersatz

Beitrag von psclab38 »

bhm hat geschrieben: EDIT
die Syntax für Kompilerdirektiven scheint hier .ifdef, .else etc zu sein.
http://sources.redhat.com/binutils/docs ... eudo%20Ops
Das mag sein, aber ein ".ifdef" kann ich unter dem Link nicht finden.

Ich glaube eher, das Problem liegt am Makefile, das die Änderung im "config.h" und damit die Abhängigkeiten nicht richtig aufgedröselt bekommt. Ich kenne Dein Makefile nicht, aber wenn ich mit den beiden Compilern
gcc version 4.3.3 (GCC)
gcc version 4.5.3 (GCC)
auf openSuse 12.1den Originalcode komplett compiliere, dann ist alles in Ordnung.

Code: Alles auswählen

me@machine:~/atmel/dcg2> avr-objdump -d dcg-hw-asm.o.453

dcg-hw-asm.o.453:     file format elf32-avr


Disassembly of section .text:

00000000 <ShiftIn1864>:

  ...

00000036 <ShiftOut1655>:
  36:   4f 93           push    r20
  38:   9f 93           push    r25
  3a:   c0 98           cbi     0x18, 0 ; 24
  3c:   c4 98           cbi     0x18, 4 ; 24
  3e:   48 e0           ldi     r20, 0x08       ; 8
  40:   97 fd           sbrc    r25, 7
  42:   c1 9a           sbi     0x18, 1 ; 24
  44:   97 ff           sbrs    r25, 7
  46:   c1 98           cbi     0x18, 1 ; 24
  48:   c0 9a           sbi     0x18, 0 ; 24
  4a:   99 0f           add     r25, r25
  4c:   c0 98           cbi     0x18, 0 ; 24
  4e:   4a 95           dec     r20
  50:   01 f4           brne    .+0             ; 0x52 <ShiftOut1655+0x1c>
  52:   98 2f           mov     r25, r24
  54:   48 e0           ldi     r20, 0x08       ; 8
  56:   97 fd           sbrc    r25, 7
  58:   c1 9a           sbi     0x18, 1 ; 24
  5a:   97 ff           sbrs    r25, 7
  5c:   c1 98           cbi     0x18, 1 ; 24
  5e:   c0 9a           sbi     0x18, 0 ; 24
  60:   99 0f           add     r25, r25
  62:   c0 98           cbi     0x18, 0 ; 24
  64:   4a 95           dec     r20
  66:   01 f4           brne    .+0             ; 0x68 <ShiftOut1655+0x32>
  68:   c4 9a           sbi     0x18, 4 ; 24
  6a:   9f 91           pop     r25
  6c:   4f 91           pop     r20
  6e:   08 95           ret
Mach auf Deiner LinuxBox doch mal mit dem Originalquellcode des dcg-hw-asm.S

Code: Alles auswählen

make clean
make
avr-objdump -d dcg-hw-asm.o
und sehe Dir dann das Ergebnis an.

Gruß
Paul
bhm
kann c't-Lab-Bausätze löten
kann c't-Lab-Bausätze löten
Beiträge: 31
Registriert: 13.03.2011, 19:34

Re: DCG2 Parametersatz

Beitrag von bhm »

psclab38 hat geschrieben:
bhm hat geschrieben: EDIT
die Syntax für Kompilerdirektiven scheint hier .ifdef, .else etc zu sein.
http://sources.redhat.com/binutils/docs ... eudo%20Ops
Das mag sein, aber ein ".ifdef" kann ich unter dem Link nicht finden.
steht unter dem link IF, aber das ist es tatsächlich nicht.
Ich glaube eher, das Problem liegt am Makefile, das die Änderung im "config.h" und damit die Abhängigkeiten nicht richtig aufgedröselt bekommt. ...
Mach auf Deiner LinuxBox doch mal mit dem Originalquellcode des dcg-hw-asm.S

Code: Alles auswählen

make clean
make
avr-objdump -d dcg-hw-asm.o
und sehe Dir dann das Ergebnis an.
Du hast mal wieder recht.
Wenn ich es so mache bekomme ich den selben Code. Wichtig ist make clean.Wenn ich config.h ändere und nur make mache, werden die c-codes neu kompiliert, aber nicht das Assembler-File. Sieht man erst, wenn man die Ausgaben genau ansieht.
Mein Makefile hab ich angehängt.

Gruß
Bernd
Dateianhänge
Makefile.txt
(13.74 KiB) 279-mal heruntergeladen
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: DCG2 Parametersatz

Beitrag von psclab38 »

bhm hat geschrieben:
psclab38 hat geschrieben:
bhm hat geschrieben: EDIT
die Syntax für Kompilerdirektiven scheint hier .ifdef, .else etc zu sein.
http://sources.redhat.com/binutils/docs ... eudo%20Ops
Das mag sein, aber ein ".ifdef" kann ich unter dem Link nicht finden.
steht unter dem link IF, aber das ist es tatsächlich nicht.
Funktioniert mit unserem Compiler/Assembler auch nicht. ".ifdef" gibt nur Fehlermeldung. ".else" und ".endif" kennt er aber.
bhm hat geschrieben:Du hast mal wieder recht.
Wenn ich es so mache bekomme ich den selben Code. Wichtig ist make clean.Wenn ich config.h ändere und nur make mache, werden die c-codes neu kompiliert, aber nicht das Assembler-File. Sieht man erst, wenn man die Ausgaben genau ansieht.
Mein Makefile hab ich angehängt.
Dein Makefile ist eine ähnliche Version, die ich mir auch gegriffen habe. Warum die Abhängigkeiten zum Include im Assemblerfile nicht gefunden werden, hab ich aber auch nicht rausgefunden.

Code-technisch ist jedenfalls Entwarnung. "Works as designed" :mrgreen:

Gruß
Paul
Antworten