FORUM

Log in om antwoord te posten of de notificatie-service te gebruiken.

Onderwerp: Traag?

Author Post

Zom-B

14 berichten

Op bezoek
Op bezoek

Read post 02-03-2010 12:58

Ik heb de TAD kaart werkend gekregen en de C++ software van de auteur omgebouwd tot console applickatie zodat ik de communicatiesnelheid kan meten. En juist daat loop ik tegen grote vraagtekens.

Het maakt niet uit hie ik communiceer, ik schijn niet boven de ca 500 commando's per seconde uit te komen (250 write/read commando's)

Dit is wat ik doe: (de rest van het programma is hetzelfde als in TAD_v1_win.c van auteur)
int main(array < System::String ^ > ^args)
{
	AbrirTAD();
	SalidasDigitalesByteTAD(0);
	SalidasAnalogicasTAD(0,511);
	SalidasAnalogicasTAD(1,511);

	clock_t time = clock();

	for(int i=0;i < 1024;i++)
	{
		int j=EntradasAnalogicasTAD();
//		printf("Analog0: %i\n",j);
	}

	time = clock() - time;
	printf("time: %ims, smp/s: %f (precision: 1/%i s, 1024 samples)\n", time, (CLOCKS_PER_SEC * 1024) / (float)(time), CLOCKS_PER_SEC);

	return 0;
}


Hier de testresultaten:
Analoog:

time: 4062ms, smp/s: 252.092565 (precision: 1/1000 s, 1024 samples)
time: 4078ms, smp/s: 251.103482 (precision: 1/1000 s, 1024 samples)
time: 4094ms, smp/s: 250.122130 (precision: 1/1000 s, 1024 samples)
time: 4109ms, smp/s: 249.209053 (precision: 1/1000 s, 1024 samples)
time: 4078ms, smp/s: 251.103482 (precision: 1/1000 s, 1024 samples)

Digitaal:

time: 4094ms, b/s: 250.122130 (precision: 1/1000 s, 1024 bytes)
time: 4093ms, b/s: 250.183240 (precision: 1/1000 s, 1024 bytes)
time: 4094ms, b/s: 250.122130 (precision: 1/1000 s, 1024 bytes)
time: 4093ms, b/s: 250.183240 (precision: 1/1000 s, 1024 bytes)
time: 4078ms, b/s: 251.103482 (precision: 1/1000 s, 1024 bytes)


Nou heb ik met de oscilloscoop gekeken wat er daadwerkelijk over de USB lijnen word gecommuniceerd, en het blijkt dat als de driver is geactiveert door mijn software dat er 1000 pakketjes per seconde langskomen. De pakketjes hebben zo'n grote tussentijd dat ik alleen maar een trein van naalden zie op het beeld.

Dat het er 1000 per seconden zijn vind ik ook raadselachtig, want hoe kan je dan sneller data uitwisselen met de kaart dan dat? pjongen vertelde mij gisteren nog dat de kaart snel genoeg zou zijn om audio op te nemen van een of twee van de DAC lijnen.


Edit: Waarom interpreteert de [ code ] tag de tekens < en > als HTML?? wat een onzin!

Bericht bewerkt door Zom-B op 02-03-2010 12:58

Bericht bewerkt door Zom-B op 02-03-2010 12:59

Bericht bewerkt door Zom-B op 02-03-2010 12:59

Bericht bewerkt door Zom-B op 02-03-2010 13:00

Bericht bewerkt door Zom-B op 02-03-2010 13:00

Bericht bewerkt door Zom-B op 02-03-2010 13:01

pjongen

64 berichten

Komt vaker hier
Komt vaker hier

Read post 02-03-2010 16:27

250 samples per seconde met deze soft- en firmware over USB is eigenlijk heel goed. Dat is geen beperking van de PIC maar van het gekozen protocol en Windoos.

Bij de DA host software moet voor ieder sample een commando sturen. Daarop antwoordt de Firmware met de gevraagde waarde. Dat gaat met buffers van 64 bytes. (terwijl de payload maar 4 bytes is). Dat is niet zo erg handig als je snel wil samplen. Dat is ook niet handig als je wil dat de samples met een vaste timing worden genomen. Dat kun je nooit op deze manier realiseren.

Btw: Ik heb met mijn HID experimenten >500 gehaald, maar met deze setup hoef ik géén commando te sturen omdat de PIC dan zelfstandig kan besluiten een buffer te sturen. (Event driven).

Als je meer samples wil hebben van de analoge poort zullen we de microcode moeten aanpassen. Dat zou als volgt kunnen:

Een vaste interupt sampled periodiek een analoge poort en zet de resultaten in een buffer. Dat buffer (64 bytes) kan dat 30 samples bevatten van 10 bits (2 bytes) of 60 samples van 8 bits. Per read request haal je zo dus 250 * 30 (of 60)samples binnen. Door gebruik te maken van dubbel buffering in de PIC hoeft geen byte verloren te gaan.
Bij gebruik van de event driven HID software verdubbelt dat dus.

Het zou misschien nog wel sneller kunnen, maar dat moeten experimenten uitwijzen.

Ik wil de interupt sampling wel voor je programmeren in de FW. Ik ben zelf ook wel benieuwd hoe snel ik zou kunnen samplen en naar de PC sturen.

Wat jij eerst moet beslissen is met welke host software je gaat werken en ook of je Driver of HID gestuurd wil werken.

Ik heb overigens een commando gemaakt waarbij je met één request in één keer alle 8 de analoge poorten leest. Maar dat lost jouw probleem niet op.

Zom-B

14 berichten

Op bezoek
Op bezoek

Read post 02-03-2010 18:56

De pic aanpassen om volle buffers te sturen zal ook niet helpen. Voor analoog haal je dan toch maar 7500 samples per seconde, en voor digitaal I/O is het onmogelijk.

Bijvoorbeeld, stel ik wil een OneWire chip gebruiken, dan moet ik met een resolutie van 10 microseconde (100kHz) twee bits ontvangen, waarna ik afhankelijk van de gelezen bits weer een bit stuur, en dat 64 keer snel achter elkaar. (Op hardwareniveau komt een 0 overeen met 90us laag, 10us hoog, en een 1 vice versa)

Dan kan je zeggen, maar je kan daarvoor gewoon een gespecialiseerde routine in de PIC zetten, maar dat wil ik dus niet. Ik wil gewoon een general-purpose I/O kaart hebben zodat ik straks niet alleen OneWire aan kan maar ieder denkbaar protocol, zonder al die protocollen in te bouwen in de PIC.

Bericht bewerkt door Zom-B op 02-03-2010 18:57

Log in om antwoord te posten of de notificatie-service te gebruiken.

Payoff

Volg ons ook op:

       

Direct doen

The School of Electronics

 

Elektor eVents, vakboeken, cursussen en meer. Kortom, innovatief studie- en onderwijsmateriaal met educatieve content!