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 ?
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=FreaksTools&func=viewItem&item_type=tool&item_id=78
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.
>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.
Und nur AVR->PC sind 4-5 Codezeilen (bei USI). Der Mega32 WebServer hat mein ich (zumindest in V1.39) sowas.
http://www.avrfreaks.net/index.php?module=FreaksTools&func=viewItem&item_type=tool&item_id=79 http://www.siwawi.arubi.uni-kl.de/avr_projects/#softuart
@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
Er will nur senden, und als Half Duplex UART ist sie laut Datenblatt ATTiny26 gut zu gebrauchen. Starterkennung braucht er beim Senden nicht.
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.
"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
Hmm, na gut dann muss ich wohl doch die Version mit Timer wählen. Ist die zu jedem AVR Controller kompatibel ?
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.
> 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
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 ?
> 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).
Ja, das wäre mir direkt aufgefallen, da auch ein LCD dranhängt, was bei einem falschen Takt auch nur Datenmüll anzeigt.
OSCAL kalibriert? Wenn ich mich recht erinnere, wird die automatische Kalibrierung nur bei 1 Mhz gemacht.
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.
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.
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/Software-UART_mit_avr-gcc
ich suche vergeblich eine funktionierende softwareuart für meinen avr8. kannste den code mal reinstellen. danke.
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.
@bastler: Bin noch leider nicht zum ausführlichen Testen des Codes gekommen. Deswegen stelle ich mal meine letzte Version hier rein.
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.