Portierung der ADA-IO nach C (die Zweite)

Hier werden Themen zur Programmierung des Port-Motherboards ADA-IO und seiner Tochterplatinen IO8-32, Optoschaltstufe, AD16-8 und DA12-8 diskutiert.
Antworten
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 915
Registriert: 25.01.2008, 23:34

Portierung der ADA-IO nach C (die Zweite)

Beitrag von psclab38 » 27.04.2011, 20:07

Hallo Forum,

das Thema dieses Threads ist nicht ganz neu, aber seit gut drei Jahren hat sich da leider nichts getan. Drum habe ich nochmal einen Anlauf gewagt und die C-Portierung der ADA-Firmware gestartet.

Die Implementierung ist soweit erstmal vollständig, d.h. alle Komponenten sind mit Code versorgt; Bus und Display funktionieren auch. Ich bin aber noch nicht groß zum Testen gekommen und werde das in der nächsten Zeit noch machen, bevor ich Code veröffentliche. Der muß außerdem auch nochmal etwas verschönert werden.

Falls jemand Beta-Tester (oder besser noch: Alpha-Tester) machen möchte, der möge sich bitte melden.

Bis demnächst
Paul

dg1vs
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 136
Registriert: 20.12.2009, 22:26

Re: Portierung der ADA-IO nach C (die Zweite)

Beitrag von dg1vs » 28.04.2011, 19:29

psclab38 hat geschrieben: ... Die Implementierung ist soweit erstmal vollständig, d.h. alle Komponenten sind mit Code versorgt; Bus und Display funktionieren auch. Ich bin aber noch nicht groß zum Testen gekommen und werde das in der nächsten Zeit noch machen, bevor ich Code veröffentliche. Der muß außerdem auch nochmal etwas verschönert werden.
Falls jemand Beta-Tester (oder besser noch: Alpha-Tester) machen möchte, der möge sich bitte melden.
Da ich ein ADA-Modul habe, werde ich auch die C-Firmware draufspielen, kann ich gleich als Anlass nehmen, die weiteren Aufsteckkarten aufzubauen die noch in der Ecke liegen. .... also einen Tester haste.

Gruß Karsten

psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 915
Registriert: 25.01.2008, 23:34

Re: Portierung der ADA-IO nach C (die Zweite)

Beitrag von psclab38 » 28.04.2011, 22:46

dg1vs hat geschrieben:.... also einen Tester haste.
Das ist ja schon mal ein guter Anfang.

Wer mag, kann sich eine erste Alpha-Version anschauen (Ist noch Alpha auch wenn ich das File schon _Beta_ genannt habe. Bitte hier:
http://dcg-firmware.cvs.sourceforge.net ... -firmware/

Bitte EEPROM der Pascalversion vorher retten, damit die Kalibrierwerte nicht weg sind. Das EEPROM-File ist nicht kompatibel (kann nicht kompatibel sein). Wer es versuchen will, bitte die Kalibrierwerte mit "ParamBackupRestore.vi" übertragen.

Ich hab den Emulator noch dran, da ist also der DA/AD-Multiplexer blockiert. Das konnte ich somit noch gar nicht testen. Aber es sollte sich eigentlich schon mal alles bewegen... Ich hoffe ich habe alle Features der Pascal-Version drin.

Grüße
Paul

psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 915
Registriert: 25.01.2008, 23:34

Re: Portierung der ADA-IO nach C (die Zweite)

Beitrag von psclab38 » 05.05.2011, 22:43

So, ich habe noch ein wenig selbst getestet und ein paar Kleinigkeiten glattgezogen. Mit den Test-VIs und JLab hab ich auch gespielt. Nur zum Kalibrieren bin ich noch nicht gekommen.
Ansonsten sind mir bei der Testaktion keine offenen Baustellen mehr aufgefallen, aber vielleicht bin ich schon etwas betriebsblind. Wenn jemand von Euch was findet, bitte einfach hier vermelden.

Unter dem weiter oben genannten Link liegt jetzt die "Beta1"-Version.
Den Quellcode gibt's demnächst auch auf dem CVS-Repository.

Die Displaybedienung ist etwas anders als das Original, zum Verändern der Werte der Kanäle 20..27 und 30..37 bitte Encoder drücken und dann drehen. Anders gibt es das verwendete Menü-Framework aus der DDS-C im Moment leider nicht her, wenn man nicht wieder was Neues erfinden möchte. Aber Vorschläge dazu werde ich mir gerne ansehen.

Viele Grüße
Paul

psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 915
Registriert: 25.01.2008, 23:34

Re: Portierung der ADA-IO nach C (die Zweite)

Beitrag von psclab38 » 22.04.2012, 18:17

Hallo Forum,

ich zerre den alten Thread nochmal nach vorne. Es gibt eine neue Version Beta4 für die ADA-C-Firmware, mit so einigen Bugfixes seit letztem Jahr.

Außerdem habe ich im Display für die digitalen Ports die wahlweise Anzeige in Hex oder Binär eingebaut; das kann man im Menü einstellen. Wer die Betitelung der Kanäle mit DSP1 verwendet, kann jetzt auch deren Darstellung (geladener String, Defaultstring, oder abwechselnd) verändern.

Gruß
Paul

PatHoff
kann c't-Lab-Bausätze löten
kann c't-Lab-Bausätze löten
Beiträge: 34
Registriert: 02.10.2009, 23:47

Re: Portierung der ADA-IO nach C (die Zweite)

Beitrag von PatHoff » 14.07.2013, 21:23

Hallo (schon wieder) Paul,
psclab38 hat geschrieben:ich zerre den alten Thread nochmal nach vorne. Es gibt eine neue Version Beta4 für die ADA-C-Firmware, mit so einigen Bugfixes seit letztem Jahr.
Ich zerre mal mit, weil es hier rein passt: Ich bin ja gerade dabei, ein neues Messmodul für die ADA-IO in Deine C-Firmware zu implementieren. Deswegen kommen jetzt so kleckerweise einige Problemberichte von mir. Nach dem gelösten Integrier-Problem (siehe Thread "ADA-C-Firmware: Zurückspielen der Kalibrierwerte") ist mir jetzt aufgefallen, dass bei mir die DAC16-Karte nicht erkannt wird. Ich habe auch herausgefunden warum: Die Wartezeit nach dem Ziehen der Leitung PB1 (bzw. PB3) auf LOW und vor dem Testen der SENSE-Leitung PB7 war zu kurz (Du hattest nur ein NOP vorgesehen). Wahrscheinlich dauert es länger bis die Diodenkapazitäten umgeladen sind und auch den SENSE-Eingang PB7 auf LOW ziehen. Jedenfalls reicht eine Wartezeit von nominell 1µs. Ich habe jetzt den Code der zuständigen Funktion CheckForInstalledModules in main.c folgendermaßen geändert:

Code: Alles auswählen

void CheckForInstalledModules(void)
{
    uint8_t uc_Zero = 0x00;
//    uint8_t ucSense;

    PORTB &= ~SPI_DATA;  // sets PB1 (=SPI_DATA) to LOW
	//nop();  // this does NOT give enough time to charge the capacity of the diode connecting PB1 (cathode) and PB7 (anode) and pull PB7 via that diode to LOW !
	_delay_us(10);  // I have tested that 1µs nominal Wait-Time is sufficient / take 10 for safety reasons
		
    if ( !(PINB & SENSE_IN) )  // checks the SENSE_IN-Pin (PB7, connected to PB1 via a sensing Diode) on LOW state
    {
        g_Module.DA12_8_12 = 1;  // if SENSE_IN (PB7) is low, a DAC-card is mounted
    }
    PORTB |= SPI_DATA;
	_delay_us(10);  // I have tested that 1µs nominal Wait-Time is sufficient / take 10 for safety reasons


//  ucSense = ShiftOut1655(0x8000); => this detection methode for DAC16 was used in the original PSC-FirmWare, but that was not working with the new 10µs Wait-Times used above. Therefore, the "normal" detection methode via the sensing diodes was used for distinguishing between DAC12 and DAC16
//  if ( !ucSense && ( g_Module.DA12_8_12 == 1 ) )
    PORTB &= ~LTC1655_STROBE;
	//nop();  // this does NOT give enough time to charge the capacity of the diode connecting PB1 (cathode) and PB7 (anode) and pull PB7 via that diode to LOW !
	_delay_us(10);  // I have tested that 1µs nominal Wait-Time is sufficient / take 10 for safety reasons
    if ( !(PINB & SENSE_IN) && ( g_Module.DA12_8_12 == 1 ) )
    {
		g_Module.DA12_8_12 = 0;
		g_Module.DA12_8_16 = 1;
	}
    PORTB |= LTC1655_STROBE;
	_delay_us(10);  // anyhow: for safety reasons I also take 10µs Wait-Time


    PORTB &= ~LTC1864_STROBE;
	//nop();  // here, NOP does give enough time to charge the capacity of the diode, probably because at the ADC-board there is only one diode !?
	_delay_us(10);  // anyhow: for safety reasons I also take 10µs Wait-Time

    if ( !(PINB & SENSE_IN) )
    {
        g_Module.AD16_8 = 1;
    }
    PORTB |= LTC1864_STROBE;
	_delay_us(10);  // anyhow: for safety reasons I also take 10µs Wait-Time


    if (!(i2c_write_regs(IO32_1_BASE_ADDRESS, PCA9554A_POLARITY, 1, &uc_Zero)) )
    {
        g_Module.IO32_1 = 1;
    }

    if (!(i2c_write_regs(IO32_2_BASE_ADDRESS, PCA9554A_POLARITY, 1, &uc_Zero)) )
    {
        g_Module.IO32_2 = 1;
    }

}
Bei mir wird die DAC16-Karte jetzt erkannt und sie funktioniert auch. Wurden bei Dir eigentlich die DAC-Karten erkannt ? Welche hast Du, DAC12 oder DAC16 ? Und: Hat noch jemand anders Probleme bei der Erkennung der DAC-Karten ?

Besten Gruß,
Patrick

psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 915
Registriert: 25.01.2008, 23:34

Re: Portierung der ADA-IO nach C (die Zweite)

Beitrag von psclab38 » 14.07.2013, 23:10

Hallo Patrick,

vielen Dank für's Fehlerfinden. Suchen kann jeder :D
PatHoff hat geschrieben:Bei mir wird die DAC16-Karte jetzt erkannt und sie funktioniert auch. Wurden bei Dir eigentlich die DAC-Karten erkannt ? Welche hast Du, DAC12 oder DAC16 ?
Ich hab die DAC16 und bei mir hat's eigenartigerweise funktioniert. Aber um jetzt nicht weiter auf Verdacht zu arbeiten habe ich mal nachgemessen. Die kritische Zeit ist die Anstiegszeit, da zieht halt nur R10 nach oben. Das ist aber sicher nach 500ns fertig, auch die Pascal-FW nimmt 1µs. Das sollte reichen.

Ich habe wieder Code hochgeladen (nur Quellen, keine Hexfiles). Es gibt nun auch den Integriermodus im Panel-Menü - die Woche war lang.

Grüße
Paul

PS: es gibt noch ein paar weitere Änderungen, die sollten aber die Funktion nicht beeinflussen. Wie gesagt, die Woche war lang.

Antworten