einfach und genial !! ein atmega8 mit internen Oszillator (1MHz) kann problemlos 4800 2400 und 1200 Baud übertragen. 9600 Baud funktioniert nicht, kann bei 1 MHz nicht funktionieren. Ursache ist die Formel: (Frequenz/16*Baud)-1 Das Ergebnis sollt möglichst ganzzahlig sein!!!! Noch was, bitte beachtet, dass der com-Port am PC die sogenannte negativ-Logik besitzt, d.h. logisch 0 sind +3...+15 Volt und logisch 1 ist -15....+2 volt. Beim ATmega ist es genau umgekehrt, also das Signal muss physikalisch invertiert werden, geht durch einen einfachen Transistor in Emitterschaltung.
"Noch was, bitte beachtet, dass der com-Port am PC die sogenannte negativ-Logik besitzt, d.h. logisch 0 sind +3...+15 Volt und logisch 1 ist -15....+2 volt. Beim ATmega ist es genau umgekehrt, also das Signal muss physikalisch invertiert werden, geht durch einen einfachen Transistor in Emitterschaltung." Der PC verwendet RS232-Pegel, der µC verwendet TTL-Pegel. Das ist überhaupt nicht ungewöhnliches; durch Verwendung eines RS232-Treiber-Bausteines wie dem beliebten Max232 ist das Problem aus der Welt.
"einfach und genial !! ein atmega8 mit internen Oszillator (1MHz)" ... und bringt es nicht ! Den Traum hatten schon viele, bis sie dann feststellen mußten, daß der interne RC-Oszillator nicht stabil genug arbeitet: ausgeträumt.
"... und bringt es nicht !" zumindest nicht im gesamten Temperatur- und Betriebsspannungsbereich. Es gibt da allerdings Tricks: Z.B. wenn jemand sowieso eine stromsparende RTC benötigt (32kHz Quarz an T2), dann kann man damit den RC-Oszillator nachregeln. Oder ein Autobauding wie in meinem Bootloader. Da könnte man dann auch sagen "genial !!", ohne das es überheblich klingt. Ich verstehe Deine Freude über Dein erstes laufendes Programm durchaus. Es ist aber wirklich nur sehr simpel gestrickt ohne jegliche Genialität. Sich selber ein "genial !!" zuzuschreiben, bringt nichts. Erst wenn es von anderen kommt, hat es auch einen Wert. Peter
Nur, wenn ich eh einen Quarz brauche und nicht noch zusätzliche Eigenschaften wie Uhr, Low-Power Standby, usw., nehme ich gleich einen 16MHz Quarz und spare mir jeden potentiellen Ärger.
.... ich wollte durch meinen Beitrag nur zeigen, dass es auch mit den einfachsten Mitteln hinreichend funktioniert und problemlos verfeinert werden kann..... Natürlich kann man sich auch ein Starter-Kit kaufen für über 100 Euro. Ich stell Euch mal eine Übersicht zur Verfügung, die die Baudrate und die Oszillatorfrequenz mal etwas untersucht. Das Ergebnis ist sehr interessant, oder?
"Das Ergebnis ist sehr interessant, oder?" Nö, überhaupt nicht. Es gibt im Web doch schon nen Haufen wesentlich gründlichere Untersuchungen dazu. Sowie diverse Baudratenrechner mit Angabe der Abweichung. Als Faustformel gilt folgendes: Abweichung: 0% ... 1%: fast keine Abhängigkeit der Fehlerrate 1% ... 2,5% merkbare Zunahme der Fehlerrate >2,5% sehr hohe Fehlerrate >3,5% nur noch Mist Übrigens kann man das Rechnen ruhig dem Assembler überlassen: .equ xtal = 8000000 .equ baud = 9600 .equ divider = (xtal / baud - 8) / 16 ldi r16, low(divider) out UBRRL, r16 ldi r16, high(divider) out UBRRH, r16 Peter
...habe mal eine Fehlerate von 10% simuliert (einfach die Betriebsspannung nach unten hin verändert) und siehe da, es funktioniert auch..... Mit anderen Worten, der ATmega8 ohne Quarz, ist etwas für Geizkragen :)
...habe mal eine Fehlerate von 10% simuliert ist etwas für Geizkragen :) so. so. Halt 'mal den Lötkolben drauf oder Kältespray, dann wird Dir der Kragen schon platzen.
...habe ich auch gemacht, aber das half nicht sehr viel, eine Temperaturerhöhung, ich würde sagen, auf ca. 50 C brachte nur 1% Abweichung.... ich staunte selber, hatte mehr erwartet Gruß
"...habe mal eine Fehlerate von 10% simuliert (einfach die Betriebsspannung nach unten hin verändert)" Wenn Du hier was veröffentlichst, dann mach es bitte nachvollziehbar, damit andere damit auch was anfangen können. "Betriebsspannung nach unten" ist Wischiwaschi, also bitte ganz konkret "von xx V auf yy V". Eine "Fehlerrate von 10%" sagt überhaupt nichts aus. Du mußt schon die gemessene (mit Frequenzmesser) Änderung der RC-Oszillator Frequenz angeben. Die Fehlerrate ist natürlich auch vom Daten-Byte abhängig, also alle Werte von 0x00..0xFF müssen getestet werden. Auch spielt die Signalverformung durch die Treiber-Ics und die Leitung eine wesentliche Rolle. Trotzdem kann es sein, daß alles nur für Dein ganz konkretes Exemplar zutrifft, wenn Du die Messungen nicht mit mehreren AVRs und von verschiedenen Chargen durchführst. Man sollte bei Veröfentlichung in der Codesammlung schon möglichst sorgfältig arbeiten und daran denken, daß Anfänger kaum unterscheiden können, ob etwas nachbausicher ist oder nicht. Ich zahle lieber die paar Eurocent für einen Quarz und weiß dann aber auch, daß es immer klappt. Peter
Hallo vielleicht einer kann mir helfen. Versuche einen Atmega8 ohne externes Quarz mit der seriellen Schnittstelle zu verbinden. Hab nicht die große elektronik erfahrung und kenn mich bisher mit seriellen Schnittstellen nicht besonders aus. Hab leider auch keine Fachliteratur in der ich nachsehen kann. Ich hab den Max232N und die Pins so belegt, wie es im Tutorial erklärt wird. Der Microcontroller sendet Daten auf der TXD Leitung, die allerdings vom PC nicht erkannt werden ( Hyperterminal). Allerdings kann der PC über Hyperterminal Zeichen an den Mikocontroller senden. Ich besitzt leider auch kein Oszilloskop um genauere Messungen durchführen zu können. Der Mikrokontroller soll später lediglich daten zum PC senden. Die Baudrate ist auf 110 eingestellt, da ich hier noch High-Low änderungen an den I/O pins wahrnehmen kann. Ich hab das Programm senden auf den Mikrocontroller aufgespielt und hab USCZ1 und USZC0 auf 1 gelegt, damit im 8-bit Modus übertragen wird. Hab auch schon mit den verschiedenen Protokollen im Hyperterminal und mit yaap probiert irgendwie Daten zu bekommen, hatte aber keinen ERfolg. Die Emulation in Hyperterminal hab ich auf Automatisch stehen. Würde mich sehr freuen, wenn mir einer n bischen unter die Arme greifen könnte, wie habt ihr eure Mikrokontroller mit der seriellen schnitstelle verknüpft? Gruß Basti
Ich denke mal, es dürfte hier eigentlich klar geworden sein: Bei Problemen immer erst mit einem Quarz probieren. Das es bei einem funktioniert ist numal kein Beweis, daß es bei jedem funktioniert !!! Wenn also wirre Zeichen ankommen sind die paar Eurocent für einen Quarz kein rausgeschmissenes Geld. Und da ich Geräte für den industrieellen Einsatz baue, ist ein Quarz bei RS-232 Anwendungen praktisch Pflicht. Gerade für Anfänger ist ein Quarz generell der sicherste Weg. Peter
P.S.: Ein Attribut "genial" ist totale Scheiße und bedeutet absolut nichts, wenn man es sich selbst vergibt. Peter
Hallo Peter, findest du nicht du solltest dich mit deinen "Ausdrücken" etwas mäßigen. Was hast du eigendlich für eine Kinderstube?? MfG Gerhardt !!
Naja, wo er doch eigentlich Recht hat? Immerhin behauptet Bernhardt, irgndwelche Sachen ohne sie wirklich belegen zu können. und von "genial" kann hier nun wirklich nicht die Rede sein. Man benutze nur die Suchfunktion.. Und in der Tat: Nur weil etwas klappt, heißt es nicht dass es bei andern genausotoll klappt. Denn überall sind die Ansprüche verschieden.
> Ein Attribut "genial" ist totale Scheiße und bedeutet absolut nichts, > wenn man es sich selbst vergibt. > ... wie in meinem Bootloader. > Da könnte man dann auch sagen "genial !!", ohne das es überheblich > klingt.
Bernhard schrieb: > einfach und genial !! > > ein atmega8 mit internen Oszillator (1MHz) > > kann problemlos 4800 2400 und 1200 Baud übertragen. > Habs trotzdem mal versucht, weil ich so etwas zum Debuggen brauch. Und zwar die 4800 Baud Variante, weil die Warteschleife ja darauf abgestimmt ist. An OSCCAL habe ich nichts geändert. Bei mir funktioniert es schon mal nicht. Ich weiß, das lesen die " Genialen " nicht gerne, aber kann nicht Einer von Euch hier mal so einen Code in ASM verfassen, den man überwiegend mit Copy & Paste nutzen kann ? Bernd_Stein
Hallo Bernd,
> ....4800 Baud Variante... Bei mir funktioniert es schon mal nicht.
Ja, RS232 ohne Quarz hat so seine Tücken und funktioniert eventuell
nicht korrekt, da die einzelnen Bits zeitlich zu ungenau generiert
werden.
Es kann funktionieren, muss aber nicht.
Die RS232 Schnittstellen des PCs können eine gewisse Fehlerabweichung
der einzelnen Bits korrigieren, aber irgendwann ist der Bogen überspannt
und
die Datenübertragung funktioniert nicht mehr korrekt oder sehr
fehlerbehaftet.
Nicht mit allen Taktfrequenzen lassen sich mathematisch gesehen alle
Baudraten erzeugen.
Das "genial" hätte ich damals als Anfänger (Jahr 2005), nicht verwenden
sollen, ich bitte um Entschuldigung.
Die Freude, dass es durch "Zufall"funktionierte, war zu groß.
Bernhard
Bernhard S. schrieb: > ... > Das "genial" hätte ich damals als Anfänger (Jahr 2005), nicht verwenden > sollen, ich bitte um Entschuldigung. > > Die Freude, dass es durch "Zufall"funktionierte, war zu groß. > Ja, das kenne ich. Die Idee ist jedoch gut. Wenn man es durch leichte Änderungen hinkriegen könnte wärs nicht schlecht. Aber ich wüste nicht wie und wo man da am Besten ansetzt, um es durch ein paar Versuche zum Laufen zu bekommen. Meine Versuche sind leider alle gescheitert nicht eins von den 6 Zeichen war richtig. Schade das sich keiner von den Genialen bisher die Mühe gemacht hat. Es muss ja nicht auf Anhieb funktionieren. Es würde schon reichen wenn man wüste wie und wo man " drehen " müsste und zwar nicht mit tausend Versuchen. OSCCAL ist vielleicht eine Möglichkeit. Man müste nur eine Prozedur finden wie man sich da einschiesst. Aber der ATmega8 ist ja schon bei 1Mhz vom Werk her auf das Optimum eingestellt, das kann doch gar nicht mehr viel zu weit vom passenden Wert entfernt sein. Bernd_Stein
@Bernd Ich gehe davon aus, dass die Hardware der Datenübertragung funktioniert. - wie hoch ist die exakte Taktfrequenz des µC bei internem RC-Generator? - beschalte den µC mal versuchsweise mit eine 1MHz Quarz oder speise einen exakten 1MHz Takt extern ein - Kannst du die RS232 Daten am Oszi darstellen? - Stimmen die Pegel ? - kommen keine oder nur fehlerhafte Bytes an? Bernhard
@Bernhard >Nicht mit allen Taktfrequenzen lassen sich mathematisch gesehen alle >Baudraten erzeugen. Das ist etwas, was man in der Grundschule bereits lernt - zumindest in allgemeiner Form. Macht aber nichts, das ist ja gerade das Schöne am asynchronen Empfang. Der Empfang via RS232 lässt einiges an Toleranzen (im %-Bereich) zu. Natürlich nicht, wenn ich an den Grenzen lecke. @Bernd >aber kann nicht >Einer von Euch hier mal so einen Code in ASM verfassen, den man >überwiegend mit Copy & Paste nutzen kann ? Reichen die viele Beispiele in den Handbüchern von Atmel nicht aus, oder ist Dein Problem wörtlich zu nehmen? Also Probleme ein paar Zeilen abzutippen. Jede Wette, dass eine vernünftige Suche allein hier im Forum, Beispiele im zweistelligen Bereich liefert. Egal ob Zäh oder Assembler. Allerdings muss man dazu eine einfache Suchanfrage formulieren können.
Bernhard S. schrieb: > @Bernd > > Ich gehe davon aus, dass die Hardware der Datenübertragung funktioniert. > > - wie hoch ist die exakte Taktfrequenz des µC bei internem RC-Generator? > Das Thema hatte ich schon mal : Beitrag "Wie findet man möglichst genau die Frequenz des internen RC-Oszilators heraus ?" Weis aber bis heute nicht wie exakt solch eine Methode ist. Ich besitze nur ein 20Mhz Analog Osziloskop. Den Frequenzzähler muss ich erst noch reparieren um es mit dem Ergbnis vom Multimeter vergleichen zu können. Weiß noch nicht wann ich dies mal machen werde. > > - beschalte den µC mal versuchsweise mit eine 1MHz Quarz oder speise > einen > exakten 1MHz Takt extern ein > Finde ich nicht so eine gute Idee, denn wenn man eine Schaltung entwickelt hat, will man nicht mehr an der Hardware rummurksen. > > - Kannst du die RS232 Daten am Oszi darstellen? > > - Stimmen die Pegel ? > Der selbe Aufbau ( RS232 ) funktioniert mit anderer Soft,- bzw. Firmware im µC > > - kommen keine oder nur fehlerhafte Bytes an? > Jedes Zeichen Fehlerhaft. Bernd_Stein
Amateur schrieb: > > Jede Wette, dass eine vernünftige Suche allein hier im Forum, Beispiele > im zweistelligen Bereich liefert. Egal ob Zäh oder Assembler. > Allerdings muss man dazu eine einfache Suchanfrage formulieren können. > Was Du mit Zäh meinst weiß ich nicht. Auch nicht, ob es sinnvoll ist Jemanden der sich unter dem Gastaccount einloggt auf solche Antworten zu antworten ;-) Bernd_Stein
Ein Grund mehr auf die Xmegas mit besserer (quarzloser) Frequenzkonstanz umzusteigen! Als Konfiguration kann man es, so die Leistung langt, bei den 2 Mhz ab Reset belassen. Hatte bis hinauf zu 38400er Baudrate noch keine Probleme!
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.