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
wozu soll R30 in deiner Schaltung gut sein? Nimm ihn erst mal raus.
1 | char s[4]; |
bei einem maximalen Messwert von 1023 sind 4 Zeichen zu wenig. Du brauchst mindestens ein Array der Länge 5.
1 | while(1) |
2 | {
|
3 | |
4 | |
5 | if(data=='x') |
6 | {
|
7 | |
8 | 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?
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.
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?
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.
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.
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.
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
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.