Forum: Mikrocontroller und Digitale Elektronik Attiny45 Dateneingabe über RS232 komisch


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Armin R. (ironlayer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich kappier da mal wieder was nicht!
Ich habe nen Attiny45 mit Half-Duplex UART (von Nerd Ralph -> 
http://nerdralph.blogspot.de/2014/01/avr-half-duplex-software-uart.html?m=1) 
per RS232/USB-Converter an WinXP gehängt.
Schaltung und Beispielcode habe ich, so wie im Blog, übernommen.
Pin-Nummer habe ich in der "BasicSerial3.S" auf PB 4 gestellt.

Hier mein Problem:
Wenn ich mit 'serOut' einen Textstring ans Hyperterminal schicke, kommt 
dieser problemlos und korrekt an. Auch mit 'TxByte(97)' erscheint ein 
"a" im Terminal. Alles soweit OK.
ABER: Wenn ich mit dem AVR mit RxByte() ein Zeichen lese, enthält die 
Variable nicht den, der Taste zugehörigen, ASCII-Code.
Bei Tastendruck "f" steht in der gelesenen Variable '198', der 
ASCII-Code wäre aber '102'.
Führe ich bei Tasteneingabe 'if(variable==198) TxByte(102);' aus, wird 
dann auch die korrekte Taste "f" angezeigt.

Ich habe im Hyperterminal sämtliche Einstellungen durch.
Im AVR das Fusebit CKDIV8 ist deaktiviert
Baudrate ist für COM2 und im Hyperterminal auf 115200 Baud 81N 
eingestellt.
Hatte auch schon vermutet, dass das Byte vom AVR 'falschrum' gelesen 
wird, aber auch das verdrehen der Bitfolge im Byte hats nicht gebracht!

Und ja, das Tastaturlayout im WinXp ist auf 'Deutsch' eingestellt. Alle 
sonstigen Programme etc. nehmen die Eingaben korrekt an...

Kann man da doch noch was umstellen?
Hat da jemand nen Tipp für mich?
Suchmaschine hat mir bisher nicht helfen können!

Gruss Armin

von Walter S. (avatar)


Bewertung
0 lesenswert
nicht lesenswert
läuft der Tiny mit einem Quarz?

von Armin R. (ironlayer)


Bewertung
0 lesenswert
nicht lesenswert
Nein, mit internen 8MHz.

von Armin R. (ironlayer)


Bewertung
0 lesenswert
nicht lesenswert
Die Ausgabe aufs Terminal funktioniert ja einwandfrei!
Nur die Tastatureingaben stimmen nicht und ich hab keine Ahnung wieso...

von Walter S. (avatar)


Bewertung
1 lesenswert
nicht lesenswert
Armin R. schrieb:
> Nein, mit internen 8MHz.

keine gute Idee,
miss doch mal die Taktfrequenz

wenn du dir die Bitmuster deiner beiden Werte anschaust ist da einfach 
eine 0 eingeschoben, deutet sehr auf falschen Takt hin

von Armin R. (ironlayer)


Bewertung
0 lesenswert
nicht lesenswert
Ok, stimmt.
Müsste die Ausgabe vom AVR ins Hyperterminal dann aber nicht auch 
spinnen?!?
Das Ergebnis in der Variable ist ja auch immer das gleiche.
Geht das nur mit Quarz? Ich müsste nämlich alle übrigen Pins haben, also 
eigentlich kein Platz fürn Quarz...

von Marco G. (grmg2010)


Bewertung
0 lesenswert
nicht lesenswert
reduziere doch einmal zu Testzwecken die Baudrate auf 9600.tritt der 
Fehler nicht mehr auf weisst du das es an dr Baudrate liegt

: Bearbeitet durch User
von Armin R. (ironlayer)


Bewertung
0 lesenswert
nicht lesenswert
Ah, ich Depp. Da hab ich tatsächlich nicht dran gedacht!

Werde ich morgen Früh direkt mal machen und berichten...hab jetzt schon 
alles aus gemacht.

Schonmal vielen Dank für die Tipps
und erstmal Gute Nacht!

von Walter S. (avatar)


Bewertung
0 lesenswert
nicht lesenswert
Armin R. schrieb:
> Müsste die Ausgabe vom AVR ins Hyperterminal dann aber nicht auch
> spinnen?!?
nein, deine Sende/Empfangsroutinen sind ja nicht symetrisch, vor allem 
wird die Empfangsroutine einen Jitter haben

> Das Ergebnis in der Variable ist ja auch immer das gleiche.
> Geht das nur mit Quarz?
Eigentlich ja, du bist da der tausendste der das erleben muss

>Ich müsste nämlich alle übrigen Pins haben, also
> eigentlich kein Platz fürn Quarz...
Du kannst zum Einstellen die Bitbreite eines vom PC gesendeten Bytes 
messen und die Delays in deinen Routinen entsprechend anpassen wie es 
z.B. PeDa in seinem Bootloader macht

von batman (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Man kann den internen RC-Taktgeber kalibrieren, so daß er in der 
Toleranz läuft. Mit einem Uhrensketch zu kontrollieren.

von Armin R. (ironlayer)


Bewertung
0 lesenswert
nicht lesenswert
Ging leider doch erst Nachmittags...
Habe mir ein paar Beiträge zu PeDas Bootloader mal angeschaut. Ist ja 
schon etwas umfangreicher!

Hab mich dann mal an die Einstellungen in der "BasicSerial3.h" 
rangetraut, Zwecks Timingkorrektur.

Erstmal hatte ich die Baudrate auf 9600 Baud gesetzt. AVR Studio bzw der 
Errortext in der "BasicSerial3.h" meinte aber, die Baudrate sei zu 
niedrig. Mit mindestens 38400 Baud gings dann, allerdings immer noch mit 
sporadischen Übertragungsfehlern.

Die endgültig funktionierende Lösung steht auch in der "BasicSerial3.h"!
Ich habe in der Definition von 'RXDELAY' den Wert '+1.5' auf '+2.5' 
erhöht, um das Empfangs-Delay zu erhöhen.
Damit funkioniert die Übertragung sogar mit 115200 Baud tadellos!

Also ist es tatsächlich, wie von euch direkt erkannt, ein Timingproblem 
gewesen.
Vielen Dank für eure Tipps!

von Armin R. (ironlayer)


Bewertung
1 lesenswert
nicht lesenswert
Nachtrag:
Wenn ich TXDELAY auf '+3' und RXDELAY auf '+4' stelle, kann ich sogar 
auf 230400 Baud raufgehen.

von batman (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Schön, nur läufts so auf einem anderen t45 oder mit Quarz vielleicht 
nicht mehr.

von Armin R. (ironlayer)


Bewertung
1 lesenswert
nicht lesenswert
Das mag sein. Habe ja nur meine "Erfahrung" teilen wollen.
Bei mir klappts jedenfalls so auf diesem Tiny.

Kann heut Abend mal nen anderen T45 füttern und sehen wie der damit 
umgeht ;-)

von Armin R. (ironlayer)


Bewertung
1 lesenswert
nicht lesenswert
So,
hat zwar was länger gedauert, aber wie angedroht jetzt nochmal eine 
Erfahrung meinerseits:

Hab jetztl noch 3 weitere Tiny45 mit dem Programm gefüttert und CKDIV8 
deaktiviert. Läuft einwandfrei mit den internen 8Mhz und 230400Baud und 
den Delays RX+4 und TX+3. Kleinere Delays ergeben Fehler...

Ein Mega32 läuft auch mit internen 8Mhz bei 230400 problemlos, CLKDIV8 
natürlich deaktiviert. Allerdings kann ich da die Delays beide wieder 
auf den ursprünglichen +1,5 belassen :-)

Gruss Armin

von Walter S. (avatar)


Bewertung
0 lesenswert
nicht lesenswert
Armin R. schrieb:
> Ein Mega32 läuft auch mit internen 8Mhz bei 230400 problemlos

bei 5V und 20-25 Grad ..

allen die das nachmachen wollen empfehle ich die Diagramme
Calibrated 8 MHz RC Oscillator Frequency vs. Temperature
sowie
Calibrated 8 MHz RC Oscillator Frequency vs. Vcc
zu beachten

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]
  • [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.