Daten von parallelem ADC einlesen

OP #856710
Lesenswert?

Ich habe einen AT91SAM7S an welchem bislang ein SPI ADC mit 3MSPS hängt.
Leider reicht die Geschwindigkeit nicht ganz aus und ich muss einen 
schnelleren ADC verwenden. 10-20MSPS wären toll. Es wird aber nicht 
dauernd eingelesen, sondern nur 1024 Werte auf einmal und diese dann 
abgespeichert, bearbeitet und ev. verschickt.
Bevor ich nun auf eine anderen Prozessor wechsle möchte ich mal 
nachfragen wie schnell ich die Daten in den AT91 bekommen würde. Wäre es 
eine alternative den externen Datenbus des AT91SAM7SE zum Anschluss 
eines parallelen ADCs zu missbrauchen?
#856768
Lesenswert?

Lukas Slz wrote:
> Wäre es
> eine alternative den externen Datenbus des AT91SAM7SE zum Anschluss
> eines parallelen ADCs zu missbrauchen?

Alternative zu was?

Memory mapped IO ist der übliche Weg, um parallele IO-Devices 
anzusprechen.

Nur wenn kein externer Datenbus existiert, muß man notgedrungen 
umständlich mit den Bits wackeln.


Peter
OP #856987
Lesenswert?

Also muss ich auf den AT91SAM7SE wechseln.
Gibt es keine Möglichkeit die Daten schnell mit einem Sam7S ohne 
Externem Businterface einzulesen z.B. mit DMA?
Zum Ansteuern des ADC muss dabei mit einem Pin ein Taktsignal generiert 
werden und gleichzeitig 12Bits vom Port eingelesen und abgespeichert 
werden.
Gast #857014
Lesenswert?

>Zum Ansteuern des ADC muss dabei mit einem Pin ein Taktsignal generiert
>werden und gleichzeitig 12Bits vom Port eingelesen und abgespeichert
>werden.

Damit hast du dir die Frage doch zur Hälfte schon selbst beantwortet. 
Jetzt musst du nur noch herausfinden, wielange das dauert.
OP #857017
Lesenswert?

Mit einfachem Ansteuern des PIO Controllers des AT91SAM7S gehts nur bis 
ca. 2MSPS. Mehr wäre schön...
1
for (loop = 0; loop < (LOOPS); loop++) { //Messe 
2

3
  p2PIO->PIO_SODR = (1<<8); //High
4
  value  = ((p2PIO->PIO_PDSR) & 0xFF); //Read Pin
5
  p2PIO->PIO_CODR = (1<<8); //LOW
6
  buffer[loop] = value;
7

8
} //for

Ich kann auch den Controller Wechseln, er sollte aber möglichst klein 
und trotzdem handlötbar bleiben.
Moderator (Firma: Titel) Persönliche Seite #948277
Lesenswert?

Irgendwie hagelt es da die Zehnerpotenzen durcheinander:
>10-20MSPS wären toll.

>Der ADC wird ausgelesen, die Werte manipuliert und über DAC ausgegeben.
Aber schon um alle 1024 Werte mit 20MSps einzulesen brauchst du 51µs. 
Gleich darauf heisst es:
>Dies soll nach möglichkeit schneller als 500ns sein.
500ns sind aber nur 2MSps, die hattest du doch schon mit der 
Softwarelösung.

Die lässt sich auch noch optimieren:
1
int *pbuffer = buffer;
2
for (loop = 0; loop < (LOOPS); loop++) { //Messe 
3
  p2PIO->PIO_SODR    = (1<<8);  //
4
  *(pbuffer++)       = p2PIO->PIO_PDSR; // keine Zwischenvariable,
5
                                        // nicht jedesmal Adresse neu berechnen
6
  p2PIO->PIO_CODR    = (1<<8);  //
7
} //for
Da hilft ein Blick ins Listing, und dann dem Compiler nach dem Maul 
programmieren... ;-)


Was soll denn jetzt wie schnell in welcher Zeit passieren?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren