Forum: Mikrocontroller und Digitale Elektronik 12 Bit AD WANDLER für Atmel


von Rudi (Gast)


Lesenswert?

Hy

Ich nutze einen Atmel 16 der ja leider nur einen 10Bit AD-Wandler hat. 
Ich bräuchte aber einen 12Bit.

Welche Möglichkeiten gibts einen externen AD anzuschließen?

- sollte 12Bit haben
- Konvertierungzeit ähnlich dem internen 10Bit AD


von Dirk (Gast)


Lesenswert?

>Welche Möglichkeiten gibts einen externen AD anzuschließen?

SPI, TWI, Parallel

von Rudi (Gast)


Lesenswert?

ok danke erstmal.

also SPI ist ja die Schnittstelle über die ich den Atmel auch 
programmiere.
wäre gut wenn ich die frei hätte um ohne umstecken programmieren zu 
können.

Gibt es ein Tutorial zu TWI bzw. Parallel? Parallel sagt mir was aber 
bezogen auf den ATMEL?

Welche AD könnt ihr empfehlen?  bzw welche Schnittstelle

von Lupin (Gast)


Lesenswert?

nimm den internen komperator, durchfahr die referenzspannung in einen 
spannungsbereich mit 12 bit genauigkeit und schau wo der komperator 
umkippt.

dann hast du nen 12 bit AD, oder vielleicht auch nicht ganz ;)

von Rudi (Gast)


Lesenswert?

ganz vergessen

er sollte 0-5V erfassen können und mit 10kHz abtasten können

von Rudi (Gast)


Lesenswert?

ja die Idee hatte ich auch erst aber Einschränken des Messbereichs ist 
leider nicht möglich.

brauche daher 12 Bit für die 5V Messbereich...

P.S.: Gibt es dazu Tutorials? Hab noch nie mit externen Komponenten am 
Atmel per Bus oder so gearbeitet außer beim Programmieren. Finde es 
immer praktisch wenn jemand nen passenden AD empfehlen könnte. dann kann 
man einfach rückwärts rechachieren :-)

hab bei Conrad nur den AD 670 gefunden aber der hat leider nur 8Bit. Die 
10us conversation time passen ja...

von Lupin (Gast)


Lesenswert?

naja wenn du wirklich einigermaßen genau ne referenz bereit stellen 
kannst und der komperator genau genug wäre dann könntest du mit 2,5V 
anfangen schauen ob die eingangsspannung kleiner oder größer ist, wenn 
größer dann zB mit 3,75V vergleichen usw bis du 12 bit hast

von Rudi (Gast)


Lesenswert?

also ne 5V Ref. für den AD wäre kein Probl. aber nur um Vref für den 
AD...

Die Idee mit dem Komperator ist zwar möglich aber das kostet zu viel 
Zeit.
Ich muss 5 Quellen in einer Schleife abfragen, und das immer in einer 
schleife...

also entweder 5 ADs oder einer der die daten dann nach der Reihe 
abliefert...

Habe mal bei analog devices gesucht. wie schnell ist 1MSPS?

von Lupin (Gast)


Lesenswert?

Das sind dann 1 Million Samples (Messwerte) Pro Sekunde

von jack (Gast)


Lesenswert?

MAX127/128.
Den kannst Du mit Software über I2C ansteuern, dann bleibt ISP frei.

von Jörg B. (manos)


Lesenswert?

Bei 10kHz wird es aber dann wahrscheinlich schon knapp mit I2C... oder?

von G. Nicht (Gast)


Lesenswert?

Einkanalige und kostengünstige Typen wären ADS7822 oder MCP3201. Als 
Multiplexer kann man 74HC4051 nehmen.
Mehrere Kanäle bieten z.B. LTC1293/LTC1294.
Allesamt sind schnell und genau.

von Rudi (Gast)


Lesenswert?

Also der Max127 wäre nicht schlecht. wenn alles in einem bauteil wäre 
und gleich alle Singnale aufnehmen kann. Er kann ja genau den Bereich 
den ich brauche von 0-5V mit 12Bit.

beim Datenblatt vom LTC1294 steig ich nicht durch! Kann ich wirklich nur 
0-5V aufnehmen! Es ist wichtig das die 12Bit wirklich voll nur auf dem 
Bereich eingesetzt werden.

Bestellen wird bei beiden wahrscheinlich eher schwierig und nur direkt 
beim Hersteller oder?

P.S.: Also wenn alle jede 1msek die Werte im Atmel zur Verfügung stehen 
würden, würde das reichen...

von Christoph db1uq K. (christoph_kessler)


Lesenswert?


von G. Nicht (Gast)


Lesenswert?

" beim Datenblatt vom LTC1294 steig ich nicht durch! Kann ich wirklich 
nur
0-5V aufnehmen! Es ist wichtig das die 12Bit wirklich voll nur auf dem
Bereich eingesetzt werden. "

Verstehe ich nicht. Wenn Du unterschiedliche Meßbereiche hast, wähle 
Vref so, daß sie dem kleinsten Bereich genügt. Die höheren Bereiche 
kannst Du durch Spannungsteiler anpassen.

von Rudi (Gast)


Lesenswert?

also ich brauch immer 0V bis 5V bei allen 5 Eingängen.

Das heisst ich kann auch beim LTC den Vref auf 5V legen und hab so mein 
Bereich?

von IAR-man (Gast)


Lesenswert?

So ist es.

von Rudi (Gast)


Lesenswert?

also habe mir den LTC1594 rausgesucht, da ich so gleich alle 4 AD in 
einem hab.

das Bauteil schließe ich ja dann an die SPI Schnittstelle an.Kann ich 
dann überhaupt noch per SPI den Atmel programmieren?

gibt es hierfür fertige Routinen(zum auslesen des LTC1594)...?

von Sonic (Gast)


Lesenswert?

Übrigens: SPI ist das 'serial-periheral-interface', nicht die ISP 
'in-system-programming' - Schnittstelle.

von Rudi (Gast)


Lesenswert?

Hoffe ichliege hier nicht ganz falsch aber hab außer den Prozessor zu 
programmieren noch nicht mit einem I^2C oder SPI gemacht...

also MISO,MOSI und SCK sind doch eine SPI "Schnittstelle" oder?
ISP wird doch auch darüber angeschlossen.

Also kann ich mit dem Atmel ein AD Wandler wie z.B. den LTC1594 oder 
ADS7841 nutzen (beide SPI) oder nicht?

von Falk (Gast)


Lesenswert?

@Rudi

>also MISO,MOSI und SCK sind doch eine SPI "Schnittstelle" oder?

Ja.

>ISP wird doch auch darüber angeschlossen.

Ja.

>Also kann ich mit dem Atmel ein AD Wandler wie z.B. den LTC1594 oder
>ADS7841 nutzen (beide SPI) oder nicht?

Ja. Du musst jedoch darauf achten, dass

a) der AD-Wandler nicht durch die ISP Commandos irritiert wird (sollte 
kein Problem sein, der wird bestenfalls mit Müll konfiguriert).

b) Der AD-Wandler darf während des ISP Vorgangs das Pin MISO nicht 
treiben. GGF. muss der Reset vom AVR mit dem Reset vom AD-Wandler 
parallel geschaltet werden, damit der AD-Wandler das Pin hochohmig 
schaltet. Das muss man im Datenblatt prüfen ob das so geht. Ggf. 
brauchst du einen Tristate-Buffer für dieses Signal vom AD-Wandler zum 
AVR.

MFG
Falk

von Rudi (Gast)


Lesenswert?

ok. ich wollte sonst einfach ein Mehrwegeschalter einbauen, mit dem ich 
die Leitungen zwischen Programmieren und AD-Wandler umschalten kann. SPI 
ist daher kein Probl. mehr (theoretisch

nochmal zum AD Wandler. ich finde es etwas verwirrend mit dem SPI und es 
scheint ja auch keine Standart zu geben.

Also ich habe 3 AD Wandler rausgesucht die in Frage kommen:

AD 7994              mit I^2C Bus

TI - ADS7841         mit SPI

LTC 1594             mit SPI

1. was ist einfacher SPI oder I^2C? (finde kaum Informationen dazu)

2. also aus den Datenblättern werde ich nicht schlau. da sind viele 
Offsetzeiten und Delays und auch z.B. beim TI7841 sehr schön auf Seite 
10 der Ablauf der Daten dargestellt aber woher weis ich ob mein Atmel 
das auch so sendet bzw. kann? gibts da nicht sowas wie Start und Stopbit 
beim SPI? ich kann es jedenfalls nicht im Atmel DAtenblatt finden.

ich möchte einfach nur innerhalb von 1ms alle 4 Werte abgefragt haben 
und die dann weiterverarbeiten.

von Falk (Gast)


Lesenswert?

@Rudi

>nochmal zum AD Wandler. ich finde es etwas verwirrend mit dem SPI und es
>scheint ja auch keine Standart zu geben.

Doch, jeder IC hat seinen eigenen. ;-)
Im Ernst, das ist schon relativ standardisiert. Nur die Phase zwischen 
Takt und Daten ist mal so und mal so. Das kann (und muss) man jedoch im 
AVR einstellen. Da gibts aber am Ende nur 4 Varianten.

>1. was ist einfacher SPI oder I^2C? (finde kaum Informationen dazu)

IMHO SPI. Aber auch I2C ist kein allzugrosses Problem.

>2. also aus den Datenblättern werde ich nicht schlau. da sind viele
>Offsetzeiten und Delays und auch z.B. beim TI7841 sehr schön auf Seite
>10 der Ablauf der Daten dargestellt aber woher weis ich ob mein Atmel
>das auch so sendet bzw. kann?

Da musst du die Datenblätter vergleichen. Aber ich kann dir mit 99.99% 
Wahrscheinlichkeit sagen, dass der AVR die ICs ordentlich anspechen 
kann.

> gibts da nicht sowas wie Start und Stopbit
>beim SPI?

Nein, das gibts nur beim UART. Andere Baustelle.

>ich möchte einfach nur innerhalb von 1ms alle 4 Werte abgefragt haben
>und die dann weiterverarbeiten.

Kein Thema. Dafür reicht der AVR allemal.

MfG
Falk

von Rudi (Gast)


Lesenswert?

ok viele Dank Falk die "Bewölkung" klärt langsam auf :-)

ich war nur verwirrt da bei TI von einem StartBit beim senden die Rede 
ist...(Seite 10)

Grundsatzlich werden aber einfach nur 8Bit übertragen der Clock wird ja 
vom Atmel erzeugt(SCK)

Also beim TI starte ich mit CS starte ich bei fallender Flanke eine 
Messung. Bei LTC muss CS auf low sein nur zum senden oder wie?

Ist die Zuordnung richtig? AD - Atmel

CS   - PinX
DCLK - CLK
DIN  - MOSI
DOUT - MISO
BUSY - ?? (nur TI)

von Falk (Gast)


Lesenswert?

@Rudi

>ich war nur verwirrt da bei TI von einem StartBit beim senden die Rede
>ist...(Seite 10)

Hehe, kleine Stolperfalle ;-)

>Grundsatzlich werden aber einfach nur 8Bit übertragen der Clock wird ja
>vom Atmel erzeugt(SCK)

Genau.

>Also beim TI starte ich mit CS starte ich bei fallender Flanke eine
>Messung. Bei LTC muss CS auf low sein nur zum senden oder wie?

Kann sein, hab das Datenblat jett nciht angeschaut.

>Ist die Zuordnung richtig? AD - Atmel

>CS   - PinX

Ein beliebiges IO Pin

>DCLK - CLK

SCK

>DIN  - MOSI
>DOUT - MISO

Ja.

>BUSY - ?? (nur TI)

Ein beliebiges IO Pin

MFG
Falk

von G. Nicht (Gast)


Lesenswert?

Die LTC1594 sind artverwandt zum LTC1293/94, brauchen weniger Strom und 
sind langsamer. Bei Deiner Anwendung ist die Geschwindigkeit scheinbar 
nicht so problematisch. Die Wandlungszeit der 1594 beträgt ca. 55µs, 
weshalb Du für vier Kanäle etwa 220µs veranschlagen kannst. 
Wahrscheinlich passiert das stetige Einlesen in einer Interruptroutine, 
was von den 1000µs einen kräftigen Happen Zeit verbraucht.

Da alles so langsam vor sich geht, ist es auch nicht lohnenswert, SPI zu 
verwenden. Du kannst beliegige Pins nehmen und diese per Software 
schalten. Da die Wandler nicht sehr schnell sind, muß Du diese Software 
noch durch Warteschleifen ausbremsen. Klar, man könnte auch SPI per 
Interrupt verwenden.

Die LTC1293/94 können in ca. 12µs einen neuen Wert liefern bei vier 
Kanälen hat man eine Zeitersparnis von rund 170µs (220 - rund 50). Wenn 
man es eilig hat sind 170µs bezogen auf die 1000µs Zykluszeit schon von 
großem Vorteil.

von Johnny (Gast)


Lesenswert?

Ich würde einfach Oversamling betreiben, damit kannst Du die Auflösung 
des internen ADC ohne zusätzliche Kosten erhöhen.

von Hannes L. (hannes)


Lesenswert?

Johnny wrote:
> Ich würde einfach Oversamling betreiben, damit kannst Du die Auflösung
> des internen ADC ohne zusätzliche Kosten erhöhen.

Ich würde erstmal prüfen, ob ich überhaupt 12 Bit brauche.

In einem der anderen Threads war von 1000 Werten die Rede, also reichen 
10 Bit. Ich vermute, das untere Digit zappelt etwas, und nun wird 
einfach nach einer höheren Auflösung gegriffen, anstatt der Ursache auf 
den Grund zu gehen (ordentliches störungsarmes Layout, LC-Siebung von 
AVcc und AREF) und den unvermeidlichen Rest durch Mittelwertbildung, 
Oversampling oder Hysterese zu eliminieren. Auch Interrupt-Betrieb des 
ADC im Sleep-Mode ADC-Noise-Reduction kann etwas bringen.

...

von G. Nicht (Gast)


Lesenswert?

Immer wieder das gleiche Spiel: jemand fragt nach einem genaueren ADC 
zum Anschluß an einen AVR.

1.Antwort: "Das brauchst Du nicht".
2.Antwort: "Nimm den internen 10Bit ADC und fülle mit Zufallszahlen 
auf".
3.Antwort: Man äußert irgendetwas, ohne sich an die Randbedingungen zu 
halten (12Bit mit 10kHz).

In verschiedenen Datenblättern für AVRs finde ich Angaben zur Linearität 
INL und DNL im Bereich 0,5 - 1 LSB für den internen ADC.
Glaubt denn wirklich jemand, diese Fehler würden sich in Luft auflösen, 
wenn man den Mittelwert aus vielen, vielen Meßwerten bilden würde?
Die 10Bit der AVRs sind schon mit Bedacht zu genießen. Wer höhere 
Genauigkeit braucht, braucht einen externen ADC.

von Falk (Gast)


Lesenswert?

@G. Nicht

>INL und DNL im Bereich 0,5 - 1 LSB für den internen ADC.
>Glaubt denn wirklich jemand, diese Fehler würden sich in Luft auflösen,

Nöö, aber das ist schon die theoretische Untergrenze.

>Die 10Bit der AVRs sind schon mit Bedacht zu genießen. Wer höhere
>Genauigkeit braucht, braucht einen externen ADC.

Das ist richtig. Aber meist kommt dann doch raus, dass der OP recht 
überzogene Genauigkeit/Auflösungsanforderungen stellt, um sein Problem 
zu lösen.

MFG
Falk

von G. Nicht (Gast)


Lesenswert?

@Falk:

Was willst Du uns sagen? Bevorzugst Du Antwort 1, oder bietest Du nur 
Senf aus der Tube?

von Hannes L. (hannes)


Lesenswert?

@G.Nicht:

Was Du schreibst, wäre richtig (ist es eigentlich auch), wenn Rudi nicht 
bereits in den Vorgängerthreads zu diesem seinen Thema gezeigt hätte, 
dass er eigentlich nicht so richtig weiß, was er da tut. Manchmal ist es 
eben der Zusammenhang mit anderen Äußerungen eines Hilfesuchenden, die 
einem (mich) zu solchen Äüßerungen verleiten. Höhere Ansprüche kann man 
sich meist erst leisten, wenn man auch in der Lage ist, für optimale 
Randbedingungen zu sorgen. Denn bei ungünstigem Schaltungsaufbau bringt 
auch ein externer 16-Bit-ADC nur Müll.

...

von Rudi (Gast)


Lesenswert?

Also hab den LTC1594 ausgewählt, da er nicht nur 4 Kanäle dank dem 
interenen Multiplexer hat, sondern gegenübern dem TI auch noch eine 
Sample&Hold Schaltung hat....

12Bit müssen leider definitiv sein und sind schon an der unteren 
Grenzen. Die interne 10 Bit reicht leider nicht aus. Zusätzlich werden 
die mit 12bit ermittelten Werte dann noch gefiltert.

Parallel-Anschluss möchte ich vermeiden(mehr als 12 Pins zu 
verschwenden). SPI ist doch irgendwie eine sauberere Lösung und man ist 
flexibler in Zukunft.

Ich wollte mit einem Prescaler 32, SPI dann mit 250kHz betreiben. Die 
max Frequenz des LTC1594 laut Datenblatt liegt ja bei fclk=320kHz. Oder 
gibt es noch etwas zu beachten? Hab SPI noch nicht genutzt..

Daher müssten die Abtastung eines Wertes dann ja in weniger als 100us 
fertig sein oder?
(8Mhz mit Prescaler 32 und 24 Clk + Totzeit)

von G. Nicht (Gast)


Lesenswert?

>12Bit müssen leider definitiv sein und sind schon an der unteren
>Grenzen. Die interne 10 Bit reicht leider nicht aus. Zusätzlich werden
>die mit 12bit ermittelten Werte dann noch gefiltert.


Nehmen wir diese Anforderungen doch einfach ernst. Dann ist gut.

@Rudi:
In einer Anwendung verwende ich den LTC1864 (16Bit) mit einem 74HC4051 
Multiplexer. Dabei werden alle 0,25ms ein neuer Kanal eingelesen, was 
per Software unter 20µs dauert, wenn ich es richtig im Kopf behalten 
habe.
Das wäre die 'schönste' Lösung für Deine Wunschbits.

Hardware-SPI muß nicht von Vorteil sein. Da die S+H-Stufe für einen 
SCLK-Zyklus aktiv ist, kann man SCLK per Software etwas verlängern, um 
das Einschwingen des treibenden OPVs abzuwarten. Wandeln/Auslesen wird 
danach wieder mit höchster Taktrate erledigt.

von Honga (Gast)


Lesenswert?

Ich hab ein ähnliches Problem.

Ich brauche auch die 12Bit Messbereich 0-5Volt und verwende noch einen 
ATMEL16. Das Problem ist, daß mir die Genauigkeit nicht aussreicht, den 
der AD vom ATMEL hat nur 10Bit. Dass sind dann nur 1024 Steps, in die 
ich die 0-5Volt auflösen kann.

Im Gegensatz zu meinem "Vorredner" brauche ich keine so rasche Abtastung 
mit 10kHz. Ha, bei mir reichen vielleicht 10 Hz oder so ähnlich.

Gibt es dann einen günstigen Trick, wie ich den ATMEL weiterhin 
verwenden kann (mit externem AD??? wenn nötig) um doch 12Bit Auflösung 
hinzubekommen ?

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.