www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC und USART bei Atmega8: Daten kommen verzögert an


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

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht lesenswert
wozu soll R30 in deiner Schaltung gut sein?
Nimm ihn erst mal raus.

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

Bewertung
0 lesenswert
nicht lesenswert
  char s[4];

bei einem maximalen Messwert von 1023 sind 4 Zeichen zu wenig. Du 
brauchst mindestens ein Array der Länge 5.

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

Bewertung
0 lesenswert
nicht lesenswert
    while(1)
    {
    

    if(data=='x')
    {

      for(int i=0; i<kanaele; i++ ) 

Nimm mal die Abfrage auf 'x' raus.
Sind deine angezeigten Messwerte dann immer noch zeitverzögert, wenn du 
am Poti drehst?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Helmuth (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Helmuth (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Helmuth (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Helmuth schrieb:
> Statusanzeige in HTerm

Sorry, ich meinte Realterm

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Helmuth (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.