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
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
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 ;)
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...
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
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?
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.
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...
" 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.
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)...?
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?
@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
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.
@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
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)
@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
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.
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.
...
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.
@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
@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.
...
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)
>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.
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 ?