ADC und USART bei Atmega8: Daten kommen verzögert an

Gast #1840591
Lesenswert?

Hallo zusammen,

ich bin gerade am durcharbeiten des AVR-Tutorials und möchte die 
ADC-Werte von 2 Kanälen über USART an den PC übertragen. Das klappt auf 
meinem STK500 auch wunderbar. Wenn ich mit HTerm auslese erhalte ich je 
nach angelegter Spannung Werte zwischen 0 und 1023 (bei drehen an einem 
Poti). Die Werte ändern sich in Echtzeit, wie es ja auch sein sollte.

Wenn ich aber nun meinen Atmega8 in eine eigene Schaltung einsetze 
(siehe Anhang) erhalte ich zwar auch Werte angezeigt, allerdings mit 
einer Zeitverzögerung von fast 30 Sekunden.

Was mache ich falsch?

Gruß
H.

F_CPU: 3.6864 MHz
Baudrate: 38400
Angehängte Dateien:
#1840618
Lesenswert?

Ich glaube, Du misst gerade den Puffer Deines Terminalprogramms aus.  Du 
schickst die Daten mit voller UART-Geschwindigkeit, und das Terminal ist 
30 Sekunden hinter dem, was Du schickst.

Versuch's mal mit einer (oder mehreren) der folgenden Möglichkeiten:

- kleinere Baudrate
- Warteschleife von ein paar zig ms zwischen den Ausgaben
- Lass den \n am Zeilenende weg, damit nicht gescrollt werden muss

Dass das Zeug so lange im ATmega bleibt, halte ich nicht für möglich.
Gast #1840629
Lesenswert?

Karl heinz Buchegger schrieb:
> wozu soll R30 in deiner Schaltung gut sein?

Der wird statt der 10mH Spule im Tutorial empfohlen.

Karl heinz Buchegger schrieb:
> bei einem maximalen Messwert von 1023 sind 4 Zeichen zu wenig. Du
>
> brauchst mindestens ein Array der Länge 5.

Ok. Funktioniert aber so wie ich es stehen habe.


Hc Zimmerer schrieb:
> Ich glaube, Du misst gerade den Puffer Deines Terminalprogramms aus.  Du
>
> schickst die Daten mit voller UART-Geschwindigkeit, und das Terminal ist
>
> 30 Sekunden hinter dem, was Du schickst.

Kling sinnvoll, aber warum funktioniert's dann über das STK500?
Gast #1840636
Lesenswert?

Helmuth schrieb:
>> brauchst mindestens ein Array der Länge 5.
>
> Ok. Funktioniert aber so wie ich es stehen habe.

Ist aber trotzdem verkehrt. Und funktionieren tut es nur aus Versehen. 
Du schreibst wild auf dem Stack rum. Daß Dein Programm nicht Amok läuft 
bzw. der µC nicht resetet ist eher wie ein 6er im Lotto.
#1840640
Lesenswert?

Helmuth schrieb:
> Kling sinnvoll, aber warum funktioniert's dann über das STK500?

Wenn es genau dieselbe Software ist (inklusive der Schnittstellentreiber 
und Baudrate) und das auf beiden Seiten, dann kann ich Dir das nicht 
sagen.

Was für mich gegen ein Puffern im ATmega spricht:  Du sendest Daten mit 
der vollen Geschwindigkeit, macht um die 3800 Zeichen/s.  Das 30 
Sekunden lang gibt ca. 110000 Bytes an Daten, die der arme ATmega erst 
mal gepuffert kriegen müsste.  (Du sendest etwas langsamer, weil die 
ADC-Wandelzeit (abzüglich der Dauer eines Zeichens im UART) pro 
Durchlauf dazukommt.)  Deshalb würde ich schätzen, dass Dein 
Terminalpuffer 100k groß ist.

Die anderen Fehler wären dann zusätzlich.
Gast #1840653
Lesenswert?

Habe alle Änderungen wie vorgeschlagen vorgenommen:

- char auf [5] erweitert
- Baudrate auf 9600 zurückgenommen
- if-Abfrage rausgenommen

Hat sich aber nichts geändert.

Was mir noch aufgefallen ist:

Wenn ich über das STK500 gehe, ist die Statusanzeige in HTerm bei CTS 
und DSR grün. Gehe ich aber über meine Schaltung, dann ist DSR aus und 
CTS flackert grün.
Gast #1840669
Lesenswert?

Hi

>Wenn ich über das STK500 gehe, ist die Statusanzeige in HTerm bei CTS
>und DSR grün. Gehe ich aber über meine Schaltung, dann ist DSR aus und
>CTS flackert grün.

Dann verbinde mal auf deiner Platine Pin6 mit Pin4 und Pin7 mit Pin8 vom 
Sub-D-Verbinder.

MfG Spess
Gast #1840754
Lesenswert?

spess53 schrieb:
> Dann verbinde mal auf deiner Platine Pin6 mit Pin4 und Pin7 mit Pin8 vom
>
> Sub-D-Verbinder.

Ich hab zwar keine Ahnung, was ich da gerade gemacht habe, aber:

1) Ich hab gesehen, dass auf dem STK500 die Beschaltung genauso ist
2) Es klappt jetzt so, wie es soll :-)


Herzlichen Dank an Dich! Und natürlich auch an die anderen Helfer.

Gruß & schönen Abend

H.
Gast #1840829
Lesenswert?

Hi

>1) Ich hab gesehen, dass auf dem STK500 die Beschaltung genauso ist

Daher stammt der Tipp.

>Ich hab zwar keine Ahnung, was ich da gerade gemacht habe, aber:

Damit wird eine Hardware-Flussteuerung simuliert. Evtl. lässt sich das 
auch in dem, mir unbekannten, Realterm abschalten. Dann geht es auch 
ohne die Brücken.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren