mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Welcher AD-Wandler µC ?


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich versuche hier sowas wie einen Osciloskop zu bauen.
Soweit klappt alles, nur bislang habe ich als AD-Wandler den internen
AD-Wandler des ATMega8 verwendet.
Bei mir kommt er nur auf lächerliche 2ksps. Laut dem Datenblatt können
es eh höstens 15ksps sein, das ist viel zu langsam.
Ich möchte aber eine Abtastrate von 1MHz haben, so das sich Signale bis
100-200kHz gut darstellen lassen und ein ATMega8 dies zu verarbeiten
schafft.

Nun ist meine Frage, kann mir jemand aus eigener Erfahrung irgendein
AD-Wandler µC empfehlen ?
Ich denke da an sowas wie AD6640(der ist eigentlich viel zu gut) also:
-schafft 1MSPS
-8 bit auflösung(6bit ginge auch)
-lässt sich relativ leicht mit dem Mikrocontroller koppeln
(also hat einen 8bit-Port als Ausgang, keine serielle übertragung)

Übrigens, weiss jemand wie schnell in der Praxis ein PORT (z.b PORTB)
am ATMega8 ausgelesen werden kann (angenommen 16MHz Taktfrequenz) ?

Wäre dankbar für jede Hilfe.

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du Assembler?

IN (Port in Register lesen) 1 Takt
Bit Setzen/Löschen SBI/CBI 2 Takte
Ins RAM speichern 2 Takte
OUT (z.B. ins UART-Register) 1 Takt

Autor: luchs2a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nabend

schau mal auf die seite von maxime da kann man schön suchen lassen.
sowas wie du habe ich auch vor und dort auch schon gesucht, wenn du was
dazu ausgearbeitet hast könntest du es ja mal posten  wäre interessant.


danke

Mischa

ps für alle die gleich wieder mosern von wegen langsam .... .
1. es ist ein anfang
2. wäre es ne möglichkeit auf nem analogen oszi langsamere vorgänge
sichtbar zu machen  und mal was zu speichern

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.

@dave
Das ist die schöne Theorie. Bei kleinen Frequenzen ist das sicher so.
Aber wenn ich jetzt versuche ein Port 255 mal in 255µs auszulesen
dann ist es vielleicht nicht mehr so z.B wegen Kapazitäten an den
Eingängen.Vielleicht muss man deshalb noch ein NOP dazwischen setzen.

@Mischa
Ich bin gerade dabei, vielleicht ist was bei den max... Bausteinen
dabei was die Anforderungen erfüllt, nicht zu teuer ist, und auch
erhältlich.
>wenn du was dazu ausgearbeitet...
Ja mach ich, ich muss nur das Ganze (Quellcode, Schemen) irgendwie
sortieren und für andere Menschen verständlich machen.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls es richtig schnell sein soll nimm nen DSP, die schaffen bis in den
MSample/s Bereich bei z.T. 14 Bit Auflösung. Wird aber mit dem Basteln
halt etwas schwieriger. Dafür ist die Signalweiterverarbeitung mit
hoher  Geschwindigkeit gewährleistet.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich habe jetzt geeigneten AD-Wandler gefunden, TDA8703.
Der AD-Wandler wird an PORTD angeschlossen, und von da werden die Daten
ausgelesen.
Nun habe ich aber folgende Frage, lässt sich an dieser Schleife etwas
optimieren:
loop:
  ;CLK für den AD-Wandler
  sbi PORTB,CLK ;2
  ;Ergebnis in den r16 Register einlesen
  in temp,PIND ;1
  ;und im SRAM speichern
  st x+,temp  ;2
  ;CLK zurücksetzen
  cbi PORTB,CLK  ;2
  inc r0  ;1
  cpse r0,temp2 ;1-3
  rjmp loop ;2

@Mischa
Wenn du noch Interesse hast, hier ist so zimmlich alles was bis jetzt
ausgearbeitet habe:
http://www1.kielnet.net/home/marc.in/pc-oszilloskop/

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du dir 2 Register bereitlegst, das einmal mit Clock High und einmal
Low gefüllt ist, kannste 2 Takte sparen.
Außerdem würdeste eins sparen, wenn du in r0 oder egal wo den Wert von
temp2 reinspeicherst und mit SUBI r0, 1 immer erniedrigst (oder DEC),
danach ein BRNE.. SUBI (DEC) kostet 1, BRNE beim RJMP 2, macht 3.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sbi/sbi durch out mit entsprechend präparierten Registern ersetzen.

Schleife ist auch überflüssig wenn genug Platz im ROM. Einfach den Code
entsprechend oft hintereinander schreiben.

=> 5 Takte pro Sample.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Optimierungstips.

@dave
Wenn ich das mit BRNE richtig verstehe dann könnte es so aussehen:
mov r0,temp2 ;Anzahl der Schleifendurchläufe in r0
loop:
     ....
     ....
     dec r0
     brne r0 ; wenn r0 bei 0 angekommen ist, wird rjmp übersprungen
     rjmp loop

@A.K.
Das ist mir etwas zu unflexibel, die Anzahl der Schleifendurchläufe
soll variabel sein.

Autor: luchs2a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
superst ! ich abs noch nicht richtig durchforstet weil ich nich an
meinem rechenr bin aber bis hier kann ichnur sagen danke   ich lads mir
nächste woche  danke schonmal

Mischa

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
loop:
     ....
     ....
     dec r0
     brne loop

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>brne r0 ; wenn r0 bei 0 angekommen ist, wird rjmp übersprungen
>rjmp loop
Mein Gott, was hab ich da fürn Blödsinn geschrieben.
Danke A.K.

@Mischa
Erschreck dich nur nicht, obwohl ich versucht habe in das ganze Projekt
ein wenig Ordnung hinein zu bringen, kann es auf den ersten Blick
verwirrend wirken.
Und an kann zwar schon Signalverlauf beobachten, es gibt auch noch viel
zu tun.
Und damit du nicht überrascht bist, PC-Software ist für Linux.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.