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
>Welche Möglichkeiten gibts einen externen AD anzuschließen?
SPI, TWI, Parallel
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 ;)
ganz vergessen er sollte 0-5V erfassen können und mit 10kHz abtasten können
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?
Bei 10kHz wird es aber dann wahrscheinlich schon knapp mit I2C... oder?
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...
LTC 1286 / 1298 sind nicht billig, aber sogar von Conrad erhältlich. http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1001,C1158,P1444,D2760 Für 8 Eingänge LTC 1290 http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1155,C1001,C1158,P1594,D2494
" 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 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?
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)...?
Übrigens: SPI ist das 'serial-periheral-interface', nicht die ISP 'in-system-programming' - Schnittstelle.
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.
Ich würde einfach Oversamling betreiben, damit kannst Du die Auflösung des internen ADC ohne zusätzliche Kosten erhöhen.
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
@Falk: Was willst Du uns sagen? Bevorzugst Du Antwort 1, oder bietest Du nur Senf aus der Tube?
@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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.