www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sinus eines Funktionsgenerators AD-Umsetzen


Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich würde gerne die Sinusschwingung eines Funktionsgenerators mit dem 
Atmega8 digitalisieren und dann über die USART ausgeben lassen. Jetzt 
habe ich festgestellt, dass der Funktionsgenerator über den ADC0-Eingang 
in die Schaltung zurückwirkt, d.h. immer wiedere in periodischen 
Abständen wird der analoge Sinus falsch interpretiert.
Ist der EIngang des Atmega8 überhaupt geeignet, ein 
"potentialunabhängiges Signal" zu interpretieren oder muss das 
Signal-GND mit dem des Atmega8 übereinstimmen.
Ich habe bei meiner Schaltung einfach den Masseanschluss des 
Funktionsgenerators mit dem Masseanschluss des Atmega verbunden und dann 
entsprechende den Siganalausgang(0-5V sinusförmig)an den Eingang ADC0 
gelegt. Gibt es eine andere Möglichkeit???
Gruß
adrian

Autor: Realpotter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, der GND sollte derselbe sein, sonst misst man Mist.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> d.h. immer wiedere in periodischen
> Abständen wird der analoge Sinus falsch interpretiert

Wie hoch war die zu messende Frequenz?
Welchen Prescaler hast du im Mega8 benutzt?
Sagt dir das 'Shannonsche Abtasttheorem' etwas?

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird denn nicht durch verbinden der GND, das Potential des 
Funktionsgenerators auf das des Atmega gezogen?
Und ist es möglich, dass der Funktionsgenerator das AD-Wandlung stört?
habe nicht gedacht, dass die Sinusspannung über den ADC-Einggang 
zurückwirken kann. Aber ich sehe dutlich, dass bei abgeschalteter 
Versorgungsspannung des Atmega über ein 7805 die Power LED pulsiert.
Für die Auswertung eines Funktionsgenerators ist ein ATmega, also nicht 
fähig?

Autor: Realpotter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gehen sollte das schon. Wenn der Mega nicht gespiesen wird, fliesst das 
Signal in den Mega und speist so die gesammte Schaltung. Der 
Funktionsgenerator hat wahrscheinlich 50 Ohm, da kommen dann 100mA 
zusammen. Ich koennt mir vorstellen, dass das UART den ADC stoert, 
zeitlich, meine ich. Kommt auf das Timing und die pufferung an.

Autor: Adrian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
die zu messende Frequenz lag bei 10Hz und die Sampelrate liegt bei 20Hz, 
habe sie aber auch schon hoch gesetzt auf 50Hz. aber immer wieder diese 
aussetzter.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Adrian wrote:
> die zu messende Frequenz lag bei 10Hz und die Sampelrate liegt bei 20Hz,
> habe sie aber auch schon hoch gesetzt auf 50Hz. aber immer wieder diese
> aussetzter.

OK. 10Hz sollte kein Problem sein.
Zeig mal dein Programm.

Autor: Adrian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
also hier mal mein Programm.

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
hat denn noch jemand einen Einfall, woran es liegt, dass ich periodisch 
immer wieder einen falschen Wert empfange?
habe heute mit einem Osszi, mit angelegtem Sinus des 
Funktionsgenerators, die Uref gecheckt aber die ist stabil.
Hilfe! Mir fällt nix mehr ein!
adrian

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi zusammen,
habe noch mal bischen getestet.
Wenn ich das USART RX Interrupt komplett herauskommentiere, dann bekomme 
ich einen Sinus ohne "Abweichungen" => also ist wohl ein Fehler im Rx 
Interrupt. Komisch ist, dass während der Messungen das Interrupt nicht 
aktiv ist oder nicht sein sollte, weil ich kein Zeichen sende. Warum 
kann der Interrupt dennoch meine Messung beeinflussen?
Bekomme über einen Zeitraum von 15sec. beim Programm mit Rx_I. 
300Messpunkte, beim Prog ohne Rx_I nur 150Messpunkte?!
Würde mich auch über kleine Tipps freuen!
gruß
adrian

Autor: Realplotter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ADC laeuft auch am Interrupt ? An einem Timer Interrupt, oder anm 
ADC interrupt ?

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ADC läuft über einen timer Interrupt. siehe Anhang vom 07.08!
Jetzt habe ich nur den RxI auskommentiert.

Autor: Realplotter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ist einiges falsch. Der timer0 kann den ADC im interrupt neu starten, 
nicht im main das TIFR abfragen. Un dann dann den ADC interrupt 
verwenden,um das resultat in einem buffer wegzuschreiben.

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich dachte es sei besser die Interrupts nicht so voll zu schreiben und 
deswegen die AD-Wandlung in der main.
Also den ADU-Code ins Timer Interrupt und dann sollte doch jeder Wert 
über USART einzeln versendet werden. Buffer?
ber der Hauptfehler muss doch auch im RxI stecken!?

Autor: Wolfram Quehl (quehl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab den ADC auch ohne Interrupt gemacht. Das mag Ansichtssache oder 
projektabhängig sein.
Auf jeden Fall sind mir die SEI im Interrupt aufgefallen. Die sollten 
raus. So wie ich das sehe, läuft das Ganze auch langsam ab. Müßte daher 
ansonsten laufen. Ich habe für den Uart einen Puffer verwendet, damit 
das schneller abläuft. Ich habe keine Wartezeiten drin, sondern es wird 
geprüft, ob der MC noch etwas tun kann. Möglicherweise liegt ein 
Timingproblem vor. Ich hatte das gehabt, daß der MC nichts empfangen 
hat, obwohl das Programm richtig ist. Der Fehler lag daran, daß ich im 
PC den UART Pufferspeicher ausgeschaltet hatte. Es wurden ständig Daten 
vom MC zum PC übertragen und da war keine Zeit für die Übertragung vom 
PC.
Mal prüfen, ob der Mux während einer Umsetzung gesetzt wird. Mux im 
Uartempfang hätte ich nicht gemacht.

mfg

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
mal so am Rande,
>Ich habe bei meiner Schaltung einfach den Masseanschluss des
>Funktionsgenerators mit dem Masseanschluss des Atmega verbunden
Dein Funktionsgenerator macht nicht zufällig +/- 2,5V(5V) gegen GND?
Wäre jedenfalls ungesund für den AVR wenn die Spannung am Eingang 
negativ wird.

Viel Erfolg, Uwe

Autor: Realplotter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der Timer kommt und meint der ADC sollte mal, so wird das dem main 
signalisiert. Wenn nun ein UART interrupt kommt, so wird das Starten des 
ADC verzoegert, da das main unterbrochen wird.

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,

>Dein Funktionsgenerator macht nicht zufällig +/- 2,5V(5V) gegen GND?
>Wäre jedenfalls ungesund für den AVR wenn die Spannung am Eingang
>negativ wird.
also der Funktionsgenerator macht nur im Bereich von 0 bis +5V eine 
Sinusschwingung, keine negative Halbwelle.

>Wenn nun ein UART interrupt kommt, so wird das Starten des
>ADC verzoegert, da das main unterbrochen wird.
Grundsätzlich möcht ich durch das senden des Zeichens "A","B" oder "C" 
ja einen neuen AD-Eingang wählen und auch damit eine neue ADW einleiten.

Kann es sein, dass die die Werte im UDR nicht nur als zu sendende Werte 
interpretiert werden, sondern das mir damit der RxInterr.startet und 
kurzfristig die Ausgänge wechselt?
Wodurch erkennt der Atmega8, das sich im UDR ein Empfangenes Zeichen 
befindet und nicht ein zu sendendes?

gruß
adrian

Autor: Realplotter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da UDR besteht effektiv aus 2 Registern, wenn man liest, liest man vom 
Empfangsregister, wenn man schreibt, schreibt man ins Senderegister.

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, dann fällt das schon mal als fehlerquelle heraus.
schreibe grade an einem geänderten Prog.

Autor: Adrian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
habe jetzt mal das Prog. von Jörg X.
>Autor: Jörg X. (Gast)
>Datum: 04.08.2007 13:59
>Dateianhang: adcsend.asm
genutzt und noch ein wenig umgestrickt.
Aber auch hierbei die gleichen Fehler bei der Aufnahme des Sinus.
Jetzt habe ich mir noch einen ATmega8 gekauft, weil ich dachte es kann 
doch nur am Chip liegen und immer noch diese Fehler.
Schicke mal als Anhang das Prog. wenn jemanden was auffällt, einfach 
schreiben!
gruß
adrian

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.