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
> 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?
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?
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.
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.
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.
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
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
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.
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!?
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
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
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.
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
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