mikrocontroller.net

Forum: Compiler & IDEs Software UART (nur AVR->PC)


Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo meine lieben AVR-Freunde, die mir hoffendlich mal wieder
weiterhelfen können.
Also ich möchte gerne Statusmeldungen (debug-infos) über RS232 an
meinen PC senden (Terminalprogamm).

mögliche AVR Typen: AT90S2323 , AT90S2343 , ATtiny26

Problem: Habe keine SoftwareUART lib gefunden, mit der das möglich
ist.
Da ich nur Daten von AVR an den PC senden will, brauche ich theoretisch
auch kein Interrupt und Timer zu verwenden, oder doch ?
Laut Atmels APPNote305 soll es ohne Timer möglich sein.

Kann mir jemand sagen, ob ein Soft-UART überhaupt mit diesen Typen
möglich ist ?

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

ich vermute mal, daß mit einem freien Pin mit fast jedem µC eine
serielle kommunikation möglich ist, die keinen Takt benötigt..

vermutung 2: ohne timer brauchst du warteschleifen, um die baudrate zu
erzeugen.

google:

http://elm-chan.org/works/avrx/report_e.html ganz unten

http://www.ustr.net/avrfiles/avrfiles.shtml communication : asm

http://www.avrfreaks.net/index.php?module=FreaksTo...

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich kein Assembler kann, nutzen mir die beiden letzten Links nicht
viel.
Den ersten Link hab ich auch schon gefunden, hat mich aber nicht
wirklich weiter gebracht.

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es mittlerweile eine Möglichkeit ?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gibt es mittlerweile eine Möglichkeit ?
ja, die gabs schon die ganze Zeit. Die von dir genannten Typen haben
ein USI das du als UART gebrauchen kannst.

Autor: BennyS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und nur AVR->PC sind 4-5 Codezeilen (bei USI).
Der Mega32 WebServer hat mein ich (zumindest in V1.39) sowas.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ATmega32 hat ein USI?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wolfram

"ja, die gabs schon die ganze Zeit. Die von dir genannten Typen haben
ein USI das du als UART gebrauchen kannst."


Nö.

Das USI kann nur SPI oder I2C, nicht aber UART !

Es hat nämlich weder Starterkennung noch 10Bit-Senderegister.

Man könnte zwar 8+2 Bit schieben, aber dann ist es aufwendiger als ne
reine Softwarelösung.


Peter

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er will nur senden, und als Half Duplex UART ist sie laut Datenblatt
ATTiny26 gut zu gebrauchen. Starterkennung braucht er beim Senden
nicht.

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es keine fertige Software-UART Library in C ?
Weil ich hab mal ein Programm in Assembler gesehen, was ohne Timer
auskam und auch auf jedem AVR funktionierte.

Ich will eigendlich nur Daten vom AVR zum PC zu senden.
Stichwort: printf-debugging bzw. Messwerte an den PC senden.

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

Bewertung
0 lesenswert
nicht lesenswert
Was gefällt dir am 2.-ten Link den ich
gepostet habe nicht?

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Timer-based AVR Software-UART"

Laut AVR305 Note ist es ohne Timer auf jedem AVR Typ möglich.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Weil ich hab mal ein Programm in Assembler gesehen, was ohne Timer
auskam und auch auf jedem AVR funktionierte."


Das stimmt.
Ohne Timer muß man Zyklen zählen und das geht nur in Assembler.


Du mußt Dich also entscheiden:

Entweder in Assembler ohne Timer oder in C mit Timer.


Peter

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, na gut dann muss ich wohl doch die Version mit Timer wählen.
Ist die zu jedem AVR Controller kompatibel ?

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So habs gestern mal ausprobiert:

MAX232CPE mit 1µF Kondensatoren
µC Typ: ATmega8
SUART lib: http://www.siwawi.arubi.uni-kl.de/avr_projects/#softuart

Habs auf WINXP und WIN2000 Rechner probiert.
Beim Hyperterminal kam gar nix an.
Und beim bray-Terminal (aktuelle Version) nur Datenmüll.

Ist das eigendlich normal, das in der Graphen-Anzeige kein
Rechtecksignal erscheint, sondern es eher aussieht als würde ich eine
Wave-Datei anzeigen?

An der Seite zum PC liegt ein Spannungspegel von +/- 8V an.

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

Bewertung
0 lesenswert
nicht lesenswert
> Beim Hyperterminal kam gar nix an.
> Und beim bray-Terminal (aktuelle Version) nur Datenmüll.

Klingt nach Timing Fehler.
Die üblichen Verdächtigen:
* schwingt dein µC tatsächlich auf der Frequenz
  auf der du glaubst
  * Quarz oder interner Oszillator?
  * Wenn Quarz, ist der auch aktiviert

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim ATmega8 nutze ich den internen 8MHz Oszillator.
Ich könnte einmal meinen ATtiny26 mit externem 8 MHz Quarz testweise
ausprobieren.
Ist das eigendlich egal, welche Baudrate ich bei den sUART verwende
oder ist dies auch wie beim normalen UART von der Taktfrequenz abhängig
?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Beim ATmega8 nutze ich den internen 8MHz Oszillator.

Auch auf 8 MHz gestellt?  Im Auslieferungszustand wird der
Prozessor mit 1 MHz betrieben (CKDIV-Fuse gesetzt).

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das wäre mir direkt aufgefallen, da auch ein LCD dranhängt, was bei
einem falschen Takt auch nur Datenmüll anzeigt.

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

Bewertung
0 lesenswert
nicht lesenswert
OSCAL kalibriert?
Wenn ich mich recht erinnere, wird die automatische
Kalibrierung nur bei 1 Mhz gemacht.

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wollte noch den sUART von Peter Dannegger ausprobiert, aber dieser
funktioniert aber nicht auf dem Tiny26. Beim ATmega nur auf bestimmten
Pins die aber schon belegt sind.

Verstehe ehrlich gesagt den Sinn der sUARTs von P. Danneger nicht so
ganz. Wenn der SoftwareUART nur unter bestimmten Voraussetzungen, in
diesen Fall konkrete Anforderungen an die Hardwaretimer stellt, und
somit nur auf "größeren" AVRs funktioniert, die dann zu 99% einen
HardwareUART integriert haben, warum sollte ich dort dann einen
SoftwareUART einsetzen. Meiner Meinung nach benötige ich dann einen
SoftwareUART, wenn der AVR keinen HardwareUART zur Verfügung stellt,
oder ich zum Debuggen oder Ausgeben von Messdaten auf einem
"kleineren" AVR eine serielle Schnittstelle zum PC benötige.

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

Bewertung
0 lesenswert
nicht lesenswert
Manchmal braucht man 2 oder mehr serielle Schnittstellen.
zb. wenn der AVR in eine bestehende Verkabelung
eingefügt werden muss, und den über bestehende
Verkabelung laufenden Datenstrom anaylsieren
soll.

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juhuuu, es funktioniert endlich.
ATmega8 @ 8MHz interner Oszillator und 38.4 kbbs
Mit diesem Code und ein paar Veränderungen geht es nun.
http://www.roboternetz.de/wissen/index.php/Softwar...

Autor: bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich suche vergeblich eine funktionierende softwareuart für meinen avr8.
kannste den code mal reinstellen.
danke.

Autor: Tobias Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werden den Code noch ausführlich testen (unterschiedliche Baudraten
usw.) und dann hier veröffentlichen.

Allerdings habe ich nur eine unidirektionale Verbindung vorgesehen,
also nur AVR --> PC.

Autor: Tobias Paul (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@bastler:
Bin noch leider nicht zum ausführlichen Testen des Codes gekommen.
Deswegen stelle ich mal meine letzte Version hier rein.

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.