Hallöchen, ein ATmega8 soll so schnell wie möglich eine AD-Wandlung durführen. An meinem OSZI habe ich 26 Takte gemessen. Und so habe ich das Register ADSCR eingestellt: (Vorteiler=0) ldi temp, (1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIF)|(1<<ADIE) + 0 out ADCSR, temp Momentan wird nach jeder fertigen AD-Wandlung (26 Takte) ein Interrupt ausgelöst und das Ergebnis der AD-Wandlung bereitgestellt. Meine Frage, gehts noch schneller? Gruß Bernhard
Nimm Free Running betrieb und werte die Daten im Interrupt aus. Sollten ca 13 Takte sein dann.
Mit geringerer Auflösung (nämlich 1bit) gehs mit max. 8MS/s: in r16, pina Du betreibst den ADC mit über 600kHz. Das ist etwa das 40 fache der Spezifikation....
@Bendikt darf er ja, das geht halt zu lasten der genauigkeit, wie du auch schon angedeutet hast :-) @Bernhard hast du dir überhaupt schon mal das Datenblatt angeschaut? da stehen lustige Sachen drinne, die manchmal sogar ganz interessant sind und deine Fragen auch beantworten. LameM
....achso: und dafür musst du nichtmal dein Oszi einschalten ;-)
>Mit geringerer Auflösung (nämlich 1bit) gehs mit max. 8MS/s:
in r16, pina
Aber dann kann man wenig mit dem Signal machen.
Man hat nur 2 Takte platz:
loop:
in r16,PINB ;1 Takt
mov r0,r16 ;1 ;Ergebnis in den einen Register, in den Speicher
_ geht
nicht weil es zu lange dauert (2 Takte)
in r16,PINB
mov r1,r16
...........
...........
in r16,PINB
mov rN,r16
Oder habe ich eine andere Möglichkeit etwas übersehen ?
ähem... Martin, Benedikt! Mit "in r16,PINB" oder "in r16,PINA" wird das nix mit dem INTEGRIERTEN ADC! Es muß heißen "in R16,ADCH" bei 8 Bit ADC und ADLAR = 1. @Martin: Statt IN und MOV ginge auch gleich "in r0,PINB", nur mal so am Rande. MfG Andi
@Andi in r16, portx funktioniert bei jedem AVR, auch ohne ADC, halt eben nur mit 1bit Auflösung (besser bekannt als High und Low Pegel...)
Klar, legt man eine wechselnde Spannung an einen Port-Pin an ist dieser ab 2/3 VCC high (1) und unter 1/3 VCC low. Aber was bringt das bitte ausser man möchte nur eine Spannungsquelle überwachen ob sie an oder aus ist? MfG Andi
Ich nehme an, daß Benedikt darauf hinauswill, daß der ADC bei vierzigfacher Überschreitung seiner zulässigen Samplerate kaum mehr effektive Auflösung haben wird als ein einzelnes Bit ...
@Andi >Statt IN und MOV ginge auch gleich "in r0,PINB", nur mal so am Rande. Stimmt man kann auch in Register r0-r15 die werte aus der Ports lesen, das habe ich übersehen. >Mit "in r16,PINB" oder "in r16,PINA" wird das nix mit dem INTEGRIERTEN ADC! Das ist mir schon klar, dem Benedikt höhstwahrscheinlich auch. Es ging nur dar um dass wenn man 1bit Auflösung haben will, braucht man nicht mehr den AD-Wandler zu bemühen. Ein Pin an einem Port mit eventuel vorgeschaltetem Komparator reicht schon.
Oder 8 verschiedene Widerstände am kompletten Port. Dann sind auch 8 Bit ohne ADC möglich. Hatte ich damals für den Druckerport im Atari ST gebastelt zum samplen und schneiden von Audio-Signalen. MfG Andi
>Oder 8 verschiedene Widerstände am kompletten Port.
Dann sind auch 8 Bit ohne ADC möglich.
Dann hast du kompleten AD-Wandler gebastelt. Der hat aber nur 3bit
Auflösung.
Meiner Erfahrung nach, ist das Messergebnis bis etwa 40kS/s ganz gut brauchbar, danach steigt das Rauschen ziemlich schnell an. Für 600kS würde ich einen ADS830E/820E von Reichelt verwenden. Damit sind einige 10MS/s bei 8 bzw. 10bit möglich.
Hier wird ein bißchen viel durcheinandergewürfelt: mal 600kHz mal 600kS. Soll jeder für sich klären. Mir geht es um einen Blick ins Datenblatt, das Genauigkeitsangaben bei 200kHz und 1MHz angibt. Bei 2MHz kann man meiner Erfahrung nach noch 6 Bit nutzen. Wenn es bei einigen Leuten zu stark rauscht: doppelseitige Platine, sauberes Layout, Massefläche, Erfahrung, +++
Wenn ich es richtig verstanden habe, wird hier 16MHz CPU Takt und einm Prescaler von 2 also mit 8MHz ADC Takt gearbeitet. Macht also rund 600kS/s. Welche Auflösung ist da wohl noch möglich ? 4bit ?
@Martin: >Dann hast du kompleten AD-Wandler gebastelt. Der hat aber nur 3bit >Auflösung. Hä? Wieso nur 3 Bit bei 8 Pins? MfG Andi
> Hä? Wieso nur 3 Bit bei 8 Pins?
Weil es nur 8 verschiedene Zustände gibt (1. Pin high, 1. und 2. Pin
high, etc.).
So ein schmarrn, da war damals natürlich etwas mehr auf der Schaltung als ein paar Widerstände drauf. Im Endeffekt war es ein 8 Bit ADC. Ich weis den kompletten Schaltplan nicht mehr, ist schon lange her (war vor der PC-Domäne) und war damals aus einem Programmierheft. Ich hatte mir damals eine komplette Software zum Aufnehmen, Bearbeitung und Anzeige der Audiowellen geschrieben und da hätte die Anzeige dann sehr abgestuft ausgesehen. MfG Andi
Ich kann da zu noch folgendes sagen: Man kann den internen AD-Wandler von ATMega8 locker über die 200kHz übertakten.Man verliert nur die Auflösung. Hier ein Beispiel, 8Mhz Taktfrequenz, Vorteiler 8x, Eingangsignal 1kHz Sinus, Signal ohne erkennbare Verzerrungen: http://www1.kielnet.net/home/marc.in/bilder/takt8Mhz_prescx8_sin1kHz.png Hier 8Mhz Taktfrequenz, Vorteiler 2x, Eingangsignal 3.15kHz Sinus, Signal verzerrt: http://www1.kielnet.net/home/marc.in/bilder/takt8Mhz_prescx2_sin3.15kHz.png
@Martin Was ist denn das für eine Software, mit der du die Kurven dargestellt hast ? Die gefällt mir... Kann man die irgendwo bekommen ? Hier geht es um 8MHz ADC Takt, das Eingangssignal sollte also schon stark verzerrt sein...
>Hier geht es um 8MHz....
Ich meinte 8MHz Mikrocontroller Takt
Es ist trotzdem ziemlich viel, aber es scheint tatsächlich so zusein.
Der Vorteiler wird so konfiguriert:
ldi temp3, 0b11010001 ;001 also durch 2
out ADCSR, temp3
Diese Software ist von mir, es ist nicht einmal halbfertig, es kann
zwar schon Daten aus dem Mikrocontroller empfangen aber das meiste muss
noch programmiert werden. Und es ist kompllet für Linux, dürfte also für
dich kaum von Interesse sein.
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.