Forum: Mikrocontroller und Digitale Elektronik Fragen zur Programmierung eines ATMega8


von Roman K. (jupiter2648)


Lesenswert?

Ich hab zum Anfang mal einen Arduino zum Programmieren eines ATMega8 
verwendet.

Mir ist dabei folgendes nicht klar:

Kann man auf diesen nun ohne externen 16MHz Crystal den bootloader 
raufladen?

-Meine Antwort bisher ist ja. Aber es geht halt langsamer? Immerhin hat 
der AT einen internen mit 8MHz. Ich bin mir aber nicht sicher, ob zum 
bootloader laden zwingend ein Crystal erforderlich ist und man diesen 
aber zum sketch hochladen nicht mehr verwenden muss, oder ob selbst zum 
bootloader laden er nicht zwingend gebraucht wird?

Falls dieser nicht zwingend erforderlich ist, hat avrdude noch nie 
erfolgreich den bootloader schreiben können.

Natürlich nur unter der Voraussetzung, dass das funktionieren müsste, 
was ist den hier Fehlersuche vorgehensweise?
5V liegen am Chip an ... aber das ist auch schon alles was ich messen 
kann?

Verkabelung neu machen und überprüfen ... 16Mhz Crystal kaufen ... wenn 
das alles nichts hilft, neuen chip kaufen?

von Einer K. (Gast)


Lesenswert?

Fuses und Quarz!
Das muss zusammen passen.
Ansonsten verstehe ich deine Gedanken nicht.

von Karl M. (Gast)


Lesenswert?

Frage, für was soll so ein Bootloader bei einem nackten ATmega8 sinnvoll 
sein? Und stelle dir die Frage, wie man ein atmega XYZ programmiert. Das 
steht nämlich im Datenblatt!

von Einer K. (Gast)


Lesenswert?

Karl M. schrieb:
> Frage, für was soll so ein Bootloader bei einem nackten ATmega8 sinnvoll
> sein?
Wenn man in der Arduino IDE "Bootloader brennen" drückt, werden die 
Fuses gesetzt und ein Bootloader gebrannt.
So ist es original.

Bei manchen Boarddefinitionen von Fremderstellern, wird ein leerer 
Bootloader gebrannt, also nur die Fuses gesetzt.

Der Begriff "Bootloader brennen" kann also zu Verwirrungen führen.

von Christian S. (roehrenvorheizer)


Lesenswert?

>Kann man auf diesen nun ohne externen 16MHz Crystal den bootloader
raufladen?

Irgendeinen Bootlader kann man sicher mittels AVRDUDE drauf flashen. Ich 
habe das mal mit Ponyprog gemacht, ging beim Mega8 auch.
https://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung

Was Deine Arduino-Welt da erwartet, ist mir unbekannt. Wie schon 
genannt, die Fuses müssen zur favorisierten Taktquelle passen, damit 
überhaupt die Kiste läuft. Im einfachsten Fall kann man dies mit einer 
Blink-LED und einem Minimal-Programm prüfen. Im schwierigeren Fall kann 
es helfen, die Taktfrequenz des Programmieradapters zu verringern.

Also erst die Fuses richtig einstellen, dann das Programm drauf.

Aber Du willst vermutlich erst den Bootlader drauf machen, um dann erst 
das Blink-LED-Programm mittels Bootlader drauf zu bekommen.


https://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment

Nützlich ist es immer, von den AVRs mehrere Exemplare griffbereit zu 
haben.

mfG

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Roman K. schrieb:
> Falls dieser nicht zwingend erforderlich ist, hat avrdude noch nie
> erfolgreich den bootloader schreiben können.

Mit welchem Befehl hast du denn versucht, den Arduino-Bootloader in den 
ATMega8 zu brennen ?

Mit dem in die Arduino IDE eingebauten "Bootloader brennen" geht es 
nicht, weil die zuerst die Fuses auf Quartz stellt und dann kein Quartz 
dran ist.

Man kann angeblich die Bootloader-brenn-EInstellungen in der 
preferences.txt ändern, hab ich nie probiert.

Wenn du es mit avrdude direkt probiert und die fuses richtig auf 8MHz RC 
Oszillator brennst, bekommst du wenigstens das bootloader-Programm in 
den Chip. Neue ATmega8 sind immer auf 8MHz RC gestellt.

Aber der normale Bootloader geht auch nicht, weil er für 16MHz 
geschrieben ist und auf einem 8MHz mit RC Oszillator laufenden uC das 
Senden der daten dann nur mit der halben Baudrate erwartet.

Selbst wenn du einen auf 8MHz ungeschriebene bBootloader verwendest, ist 
der RC Oszillator eigentlich für UART Übertragungen nicht genau genug, 
sagt man, geht oftmals doch, aber eben nicht immer.

von Einer K. (Gast)


Lesenswert?

Michael B. schrieb:
> Man kann angeblich die Bootloader-brenn-EInstellungen in der
> preferences.txt ändern, hab ich nie probiert.

Dafür ist die betreffende boards.txt die richtige.

Da müsste man die verwendete kennen, um Aussagen treffen zu können, was 
da passiert. Die für den ATMega8 kann keine originale sein. Denn einen 
solchen Arduino gibt es nicht.

Die, welche ich kenne, für den ATMega8, machen nur Fuseumstellungen, 
intern 1 oder 8MHZ oder externen Quarz.
Nix Bootloader brennen, wenn Bootloader brennen gedrückt wird.

Michael B. schrieb:
> Mit dem in die Arduino IDE eingebauten "Bootloader brennen" geht es
> nicht, weil die zuerst die Fuses auf Quartz stellt und dann kein Quartz
> dran ist.
Das ist wahr, wenn der externe Quarz gewählt wird.
Intern 8MHz geht auch so.

von Ralph S. (jjflash)


Lesenswert?

Karl M. schrieb:
> Frage, für was soll so ein Bootloader bei einem nackten ATmega8 sinnvoll

Einem "nackten" ATmega8 einen Bootloader zu geben hat genau denselben 
Sinn, wie die Verwendung eines Bootloaders wenn der ATmega mit einem 16 
MHz Quarz arbeitet.

Eine Bautrate > 38400 habe ich mit einem ATmega mit internem RC 
Oszillator 8 MHz nie erreicht.

Der originale Bootloader bspw. eines Arduino UNO (und einige andere 
auch) arbeitet jedoch mit 115200 Baud.

Bei halbierter Taktfrequenz wäre die Baudrate dann 57600 !! Hier wäre 
die Baudrate schon zu hoch um einen ATmega8 mit interner 8 MHz Quelle zu 
betreiben.

Es ist also ein Bootloader notwendig, der eine veringerte Baudrate 
besitzt.

Außerdem: wenn bspw. ein Arduino UNO als Board gewählt ist und man 
"Bootloader flashen" aktiviert, würde versucht werden, der Bootloader 
für einen ATmega328 auf einen ATmega8 zu brennen (was dann 
glücklicherweise fehlschlägt).

Arduino Fanboy D. schrieb:
> Wenn man in der Arduino IDE "Bootloader brennen" drückt, werden die
> Fuses gesetzt und ein Bootloader gebrannt.

Absolut richtig! Hier gibt es dann den typischen Fallstrick: Flasht man 
so einen fabrikneuen Chip, werden die Fuses auf externen Quarz mit 
Frequenz > 8 MHz gesetzt. Dieses Flashen funktioniert und zwar genau ein 
einziges mal.

Danach erwartet ein so geflashter Chip einen externen Quarz den er nicht 
hat und ein weiteres Flashen in Ermangelung des Quarzes schlägt fehl.

------------------------------------------

Will man also unbedingt einen Bootloader in einen ATmega8 ohne Quarz 
flashen sollte man den Bootloader verwenden, den Arduino für das 
allererste Arduino Board verwendet hatte, dieses Board heißt: "Arduino 
NG or older" und verwendete entweder einen ATmega8 oder einen ATmega168.

Einen Bootloader findet man im Arduino Verzeichnis:

hardware\avr\bootloaders\atmega8

Hier gibts dann eine Hexdatei : atmegaBOOT.hex

Prinzipiell funktioniert dieser Bootloader, es gibt jedoch einen 
Schönheitsfehler dabei: Dieser Bootloader wurde compiliert für einen 
Controller MIT 16 MHz Quarz für eine Baudrate mit 19200 Baud.

Entweder man ändert nun das Makefile und gibt für F_CPU 8000000 an und 
compiliert neu oder man flasht diese Hexdatei wie sie ist in den 
ATmega8. Da dieser jetzt komplett mit halber Geschwindigkeit läuft 
beträgt die Baudrate jetzt "lausige" 9600 Baud.

Das Flashen des Loaders darf hierbei NICHT über den Menüpunkt 
"Bootloader flashen" erfolgen, sondern man sollte in den Arduino das 
Beispielprogramm ArduinoISP in seinen UNO laden und auf 
Kommandozeilenebene obige Hexdatei flashen.

Anschließend sind für den ATmega8 die Fuses für interne 8 Mhz und 
reservierten Speicherbereich Bootloader zu setzen.

Will man diesen ATmega8 partout nun über Arduino programmieren ist nun 
wichtig zu wissen, dass alle Dinge - insbesondere solche Dinge wie delay 
und millis - nun mit halber Geschwindigkeit laufen.

Um einen solchigen ATmega8 innerhalb Arduino programmieren zu können 
muss die Datei boards.txt im Verzeichnis:

hardware\arduino\avr

erweitetert werden.

Innerhalb dieser Datei sucht man sich die Einträge ab:

atmegang.name=Arduino NG or older

schaut sich das genauer an, kopiert die Abschnitte für dieses Board ans 
Ende der Datei und ändert alle Textanfänge beginnend mit atmegang bspw. 
nach atmega8_crystalless (oder ähnlich) um

anstelle von
atmegang.upload.speed=19200
gibt man nun
atmega8_crystalless.upload.speed=9600

und für
atmegang.build.f_cpu=16000000L
dann
atmega8_crystalless.build.f_cpu=8000000L
ein.

Sämtliche Einträge für den ATmega168 können bei der Erweiterung dann 
gelöscht werden.

---------------------------------------

Wie gesagt, wenn man so etwas machen mag...

von Einer K. (Gast)


Lesenswert?

Ralph S. schrieb:
> Das Flashen des Loaders darf hierbei NICHT über den Menüpunkt
> "Bootloader flashen" erfolgen, sondern man sollte in den Arduino das
> Beispielprogramm ArduinoISP in seinen UNO laden und auf
> Kommandozeilenebene obige Hexdatei flashen.
Verstehe ich nicht.
Natürlich geht das.

Ralph S. schrieb:
> Um einen solchigen ATmega8 innerhalb Arduino programmieren zu können
> muss die Datei boards.txt im Verzeichnis:
>
> hardware\arduino\avr
>
> erweitetert werden.
Geht, ist aber Suboptimal.

Variante 1: (die bessere)
Man baut sich eine, oder sucht sich eine Boarddefinition, welche für den 
ATMega8 vorbereitet ist. Gibbet fertig.

Variante 2:
Statt die boards.txt zu erweitern, legt man eine boards.local.txt neben 
die originale.

von Ralph S. (jjflash)


Lesenswert?

Arduino Fanboy D. schrieb:
> Variante 1: (die bessere)
> Man baut sich eine, oder sucht sich eine Boarddefinition, welche für den
> ATMega8 vorbereitet ist. Gibbet fertig.

Stimmt, wollte ich nur einem scheinbaren Anfänger nicht zumuten..

Arduino Fanboy D. schrieb:
> Variante 2:
> Statt die boards.txt zu erweitern, legt man eine boards.local.txt neben
> die originale.

stimmt auch, für meinen persönlichen Geschmack habe ich allerdings 
lieber alle in einer Datei.

----------------------------------

Okay, mit Arduino mache ich dann zugegebenerweise nicht so wirklich 
viel, ich werkel lieber mit einem puren C (und nicht mit C++) auf 8-Bit 
Controllern und einem Makefile.

Arduino nutze ich hauptsächlich in Verbindung mit ES8266

von Einer K. (Gast)


Lesenswert?

Ralph S. schrieb:
> stimmt auch, für meinen persönlichen Geschmack habe ich allerdings
> lieber alle in einer Datei.
Ja, da kann es durchaus Vorlieben geben.

Ich verwende lieber die *.local.txt Variante, als immer die originalen 
Dateien editieren zu müssen. Sowas ist ja schließlich auch der Zweck der 
Erfindung.
Erleichtert die Datensicherung bzw die Übertragung zwischen Systemen.

von Ralph S. (jjflash)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ralph S. schrieb:
>> stimmt auch, für meinen persönlichen Geschmack habe ich allerdings
>> lieber alle in einer Datei.
> Ja, da kann es durchaus Vorlieben geben.
>
> Ich verwende lieber die *.local.txt Variante, als immer die originalen
> Dateien editieren zu müssen. Sowas ist ja schließlich auch der Zweck der
> Erfindung.
> Erleichtert die Datensicherung bzw die Übertragung zwischen Systemen.

Ich glaube wir beide kommen uns nicht in die Haare : - )

von Stefan F. (Gast)


Lesenswert?

Ralph S. schrieb:
> Bei halbierter Taktfrequenz wäre die Baudrate dann 57600 !! Hier wäre
> die Baudrate schon zu hoch um einen ATmega8 mit interner 8 MHz Quelle zu
> betreiben.

Ich verstehe die Logik hinter dieser Aussage nicht.

Wenn er mit 16 MHz 115200 Baud schafft, dass schafft er mit 8Mhz die 
57600 Baud. Schließlich läuft alles mit halbierter Taktfrequenz.

Allerdings ist der interne R/C Oszillator nicht präzise genug, um eine 
zuverlässige Funktion der seriellen Schnittstelle zu ermöglichen.

Und auch mit Quarz ist das keine gute Kombination, denn die Baudrate hat 
bei idealem Quarz bereits 2,1% Abweichung von den 57600 Baud. Man soll 
eigentlich unter 2% bleiben, um ein bisschen Abstand von der kritischen 
Schwelle zu halten.

Die Arduino Klone sind oft mit billigeren Keramik-Resonatoren bestückt, 
deren Abweichung das ganze noch verschlechtert.

Eigentlich sollte man bei 16 Mhz maximal 57600 Baud nutzen, und bei 8 
Mhz nur 38400 Baud. Dann klappt das auch mit Keramik-Resonator 
zuverlässig.

Warum die Arduino Macher die Taktfrequenz mit dem neuen Bootloader 
verdoppelt haben, ist mir ein Rätsel. Ich hätte es nicht getan.

von Stefan F. (Gast)


Lesenswert?

Roman K. schrieb:
> was ist den hier Fehlersuche vorgehensweise?

Deine Beschreibung ist nicht ganz klar. Ich habe dich so verstanden, 
dass du auf einen "nackten" Atmega8 den Arduino Bootloader installieren 
willst. Dazu möchtest du die Arduino IDE verwenden, sowie ein Arduino 
Board als ISP Programmieradapter. Auf diesem Arduino Board hast du also 
den ISP Sketch installiert, richtig?

Zum Programmieren eines jungfräulichen AVR Mikrocontrollers ist nicht 
viel notwendig:

- Abblock-Kondensator direkt an den VCC/GND Pins (typisch 100nF)
- Verbindungen zum Programmieradapter: VCC, GND, RESET, MISO, MOSI, SCK

Da dein Programmieradapter (Arduino Board) die 5V Versorgung liefert, 
brauchst du kein separates Netzteil für den nackten Mikrocontroller.

Der jungfräuliche Mikrocontroller taktet sich selber mitteln internem 
R/C Oszillator. Aber die Arduino IDE ändert das in den Fuses (siehe 
https://www.engbedded.com/fusecalc/), so dass der Mikrocontroller danach 
einen 16MHz Quarz (und die beiden Kondensatoren dazu) benötigt.

Wenn du danach den Bootloader erneut installieren willst, muss der Quarz 
schon dran sein, denn ohne Takt funktioniert die ISP Schnittstelle 
nicht.

Steckbretter eignen sich eher schlecht für den Quarz, weil sie eine hohe 
Kapazität zwischen den Kontakten haben. Manchmal muss man die 
Kondensatoren am Quarz kleiner wählen, manchmal ganz weg lassen. Mache 
das besser auf einer gelöteten Platine, dann hast du weniger Probleme 
gleichzeitig.

Bei weiteren Fragen empfehle ich, Schaltplan, Fotos vom Aufbau, die 
Kommandozeile von avrdude und dessen Ausgaben anzuzeigen. In den 
Einstellungen der Arduino IDE kannst du detaillierte Ausgaben 
aktivieren.

von Einer K. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die Arduino Klone sind oft mit billigeren Keramik-Resonatoren bestückt,
> deren Abweichung das ganze noch verschlechtert.
Naja, wenn das mal keine Fake News sind.....
Oder zumindest eine Realitätsverzerrung.
Die Nachbauten sind häufiger mit Quarzen bestückt, als die originalen.
Einfach nur bei Ebay Bildchen schauen, wird dir das bestätigen.


Stefan ⛄ F. schrieb:
> Warum die Arduino Macher die Taktfrequenz mit dem neuen Bootloader
> verdoppelt haben, ist mir ein Rätsel. Ich hätte es nicht getan.
Warum nicht?
Weil du nicht rechnen kannst?
Denn den prozentualen Fehler kümmert die Verdopplung nicht!
Oder weil du Dreck zum werfen benötigst?

z.B. betrifft die Erhöhung/Verdoppelung nur den Nano, von dem hier 
überhaupt nicht die Rede war.
Auch bestätigt der, seit dem ersten Tag so ausgelieferte UNO, dass es 
funktioniert.

Drittens:
Die üblichen Boarddefinitionen, um ATMega8 an/mit der Arduino IDE 
betreiben zu können, sehen keinen Bootloader vor. Zumindest die 
Möglichkeit, diesen ohne Bootloader zu betreiben.
Da werden dann nur die Fuses gesetzt.

Über einen nicht existierenden Bootloader zu sprechen, und dessen 
Konfiguration zu kritisieren, ist gelinde gesagt eine Nebelkerze.
Wenn nicht gar eine bewusste Irreführung.

Naja...
Dass deine Prozentrechnung nicht funktioniert, das stufe ich mal als 
Irrtum ein.
Ein Irrtum, welcher dir ab heute nicht mehr unterlaufen darf.
Denn ab jetzt werde ich dich in dem Punkt, bei Wiederholung, der 
bewussten Lüge bezichtigen.

Da ich annehme, dass du eigentlich schlau genug bist um 
Prozentrechnungen durchzuführen, wird es wohl mit deiner immer wieder 
aufblitzenden Arduino Ablehnung zu tun haben, welcher dir den Geist 
vernebelt.

von Joachim B. (jar)


Lesenswert?

Stefan ⛄ F. schrieb:
> Warum die Arduino Macher die Taktfrequenz mit dem neuen Bootloader
> verdoppelt haben, ist mir ein Rätsel. Ich hätte es nicht getan.

+1
schon weil es Probleme beim wUSB und USBwebserver Sharkoon 100/400 gibt, 
mit 115k2 kein upload möglich, mit 57k6 war vorher zumindest beim 
Sharkoon nie ein Problem.

Ich hatte für meine nano alle Optiboot zurück gesetzt auf 57k6.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Warum nicht?
> Denn den prozentualen Fehler kümmert die Verdopplung nicht!
> Oder weil du Dreck zum werfen benötigst?

Weil die Abweichung der Baudrate 2,1% beträgt. Bei Keramik Resonatoren 
sind Abweichungen bis 0,5% üblich, die kommen nach dazu. Damit bist du 
über der kritischen Grenze von 2,5% ab der Fehlfunktionen zu erwarten 
sind (je nach dem, wie fehlertolerant der Empfänger ist).

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Über einen nicht existierenden Bootloader zu sprechen, und dessen
> Konfiguration zu kritisieren, ist gelinde gesagt eine Nebelkerze.

Er möchte aber einen Bootloader schreiben und hat genau dazu um Hilfe 
gebeten. Vielleicht kannst du ihm helfen, die Arduino IDE so 
umzukonfgurieren, dass sie den Bootloader auf seinen ATmega8 schreibt.

von Einer K. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Er möchte aber einen Bootloader schreiben und hat genau dazu um Hilfe
> gebeten. Vielleicht kannst du ihm helfen, die Arduino IDE so
> umzukonfgurieren, dass sie den Bootloader auf seinen ATmega8 schreibt.

Die Frage des TO habe ich nicht verstanden!
Gerne nochmal:
Arduino Fanboy D. schrieb:
> Ansonsten verstehe ich deine Gedanken nicht.
Wie soll ich was beantworten, was ich nicht verstehe.

Du kannst das.
Glückwunsch.

Ansonsten macht ein Bootloader bei internem Takt wenig Sinn, außer man 
unternimmt weitergehende Schritte zur Takt Kalibrierung.

Die einfachste Lösung ist halt:
Quarz dran, und eine der frei verfügbaren Bordefinitionen, für den 
ATMega8, zu verwenden. Dann klappts auch mit dem Bootloader.
Aber das sagte ich doch schon, oder?




Stefan ⛄ F. schrieb:
> Weil die Abweichung der Baudrate 2,1% beträgt.
Bei einer Verdoppelung oder Halbierung der Baudrate ändert sich die 
prozentuale Fehlerrate nicht.
Deine Begründung ist irrational.

Jetzt glaube ich wirklich schon fast, dass dich Prozentrechnung 
überfordert.
Zumindest hast du das Hirn nicht eingeschaltet.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ansonsten macht ein Bootloader bei internem Takt wenig Sinn, außer man
> unternimmt weitergehende Schritte zur Takt Kalibrierung.

Allerdings. Der interne R/C Oszillator ist dazu kaum geeignet.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
>> Weil die Abweichung der Baudrate 2,1% beträgt.
> Bei einer Verdoppelung oder Halbierung der Baudrate ändert sich die
> prozentuale Fehlerrate nicht.
> Deine Begründung ist irrational.

Beim 8MHz Quarz und 57600 Baud hast du mindestens 2,1% Abweichung.
Beim 16MHz Quarz und 115200 Baud hast du mindestens 2,1% Abweichung.
Das ist mir beides zu nahe an den kritischen 2,5%.

Der alte Bootloader lief hingegen mit 16MHz und 57600 Baud. Das ergibt 
laut Datenblatt 0,8% Abweichung. Das ist schön weit von der kritischen 
Schwelle entfernt.

Schau Dir mal im Datenblatt an, wie der Baudraten-Generator 
funktioniert. Dann erkennst du, dass die Halbierung der Baudrate 
durchaus die Abweichung vom Soll reduzieren kann.

https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf 
Table 36

Beitrag #6456718 wurde von einem Moderator gelöscht.
von c-hater (Gast)


Lesenswert?

Roman K. schrieb:

> Kann man auf diesen nun ohne externen 16MHz Crystal den bootloader
> raufladen?

Natürlich.

> Aber es geht halt langsamer?

Klar, nur ca. halb so schnell. Aber, Wayne interessierts... Bootloader 
sind typischerweise recht klein. Sollen ja auch Platz für die Anwendung 
lassen...

> Immerhin hat
> der AT einen internen mit 8MHz.

Das ja. Im Auslieferungszustand aber trotzem nur ca. 1MHz Systemtakt. 
Das ist die entscheidende Kenngröße, nicht der Takt des Oszillators.

> Falls dieser nicht zwingend erforderlich ist, hat avrdude noch nie
> erfolgreich den bootloader schreiben können.

Das wird daran liegen, dass die standardmäßige Bitrate halt zu hoch für 
1MHz Systemtakt ist. Einfach reduzieren und alles ist schick. Dauert 
dann allerdings nochmal Faktor 8 länger.

Die sinnvolle Alternative wäre: zuerst mal mit kleiner Bitrate einfach 
nur die Fuses umprogrammieren, so dass das Teil mit dem 16Mhz-Quarztakt 
läuft. Das geht sehr schnell, weil dafür nur wenige Bytes über die 
ISP-Schnittstelle bewegt werden müssen.

Danach dann die Bitrate auf Maximum setzen und der Rest geht so schnell 
wie irgend möglich.

von Ralph S. (jjflash)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich verstehe die Logik hinter dieser Aussage nicht.
>
> Wenn er mit 16 MHz 115200 Baud schafft, dass schafft er mit 8Mhz die
> 57600 Baud. Schließlich läuft alles mit halbierter Taktfrequenz.

Du widersprichst dir im folgenden Verlauf des Threads gleich selbst und 
erklärst, warum die 57600 Bd mit internem 8 MHz RC nicht funktionieren.

Die Logik hinter der Aussage ist die: nicht alles was theoretisch 
klappen müßte, klappt auch (in der Elektronik lohnt es sich das im 
Hinterkopf zu behalten).

Stefan ⛄ F. schrieb:
> Die Arduino Klone sind oft mit billigeren Keramik-Resonatoren bestückt,
> deren Abweichung das ganze noch verschlechtert.

Oha, ich habe nur welche mit Quarzen... ob die jetzt 30, 40 oder 50 ppm 
Abweichung haben spielt hier keine Rolle.

Stefan ⛄ F. schrieb:
> Eigentlich sollte man bei 16 Mhz maximal 57600 Baud nutzen, und bei 8

Aha !

Ich hatte mit dem Opti-Bootloader und 115200 Bd noch nie auch nur ein 
Problem. Das lief auf Uno und Nano - Clone, das läuft auch auf einem 
Steckbrett und einem µC ohne Board auf dem der 16 MHz Quarz im 
Steckbrett gesteckt ist (und das ist zugegebenermasen etwas kritischer) 
auch fehlerfrei. Weshalb also nur 57600 wenn es auch schneller geht?

Arduino Fanboy D. schrieb:
> Ansonsten macht ein Bootloader bei internem Takt wenig Sinn, außer man
> unternimmt weitergehende Schritte zur Takt Kalibrierung.

Stimmt, aber ich habe es dennoch einmal gemacht gehabt bei einem Gerät, 
bei dem ich im Zweifel eine Firmware aufspielen möchte ohne das Gerät zu 
öffnen und bei dem ich damals leider die Portpins des Quarzes benötigt 
hatte. Taktkalibrierung hatte ich keine gemacht gehabt und die Baudrate 
war 9600. Smile im Normalfall macht es aber wirklich keinen Sinn.

Arduino Fanboy D. schrieb:
> Die einfachste Lösung ist halt:
> Quarz dran, und eine der frei verfügbaren Bordefinitionen, für den
> ATMega8, zu verwenden. Dann klappts auch mit dem Bootloader.
> Aber das sagte ich doch schon, oder?

Du sagtest es schon, smile und es ist immer noch richtig, es ist immer 
noch am einfachsten und hilft einem (höchstwahrscheinlich nicht mehr 
mitlesenden) TO am meisten.

Beim Experimentieren macht es keinen Sinn einen AVR ohne Quarz zu 
betreiben !!

von Ralph S. (jjflash)


Lesenswert?

Arduino Fanboy D. schrieb:
> Stefan ⛄ F. schrieb:
>> Die Arduino Klone sind oft mit billigeren Keramik-Resonatoren bestückt,
>> deren Abweichung das ganze noch verschlechtert.
> Naja, wenn das mal keine Fake News sind.....
> Oder zumindest eine Realitätsverzerrung.

so krass habe ich es dann aber doch nicht sagen wollen ! : - )

von MaWin (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Schau Dir mal im Datenblatt an, wie der Baudraten-Generator
> funktioniert. Dann erkennst du, dass die Halbierung der Baudrate
> durchaus die Abweichung vom Soll reduzieren kann.

Uff, aber nur bei gleich bleibendem Takt, weil der Teiler dann z.B. 
statt 6 nicht 12 sondern 13 sein kann.

Du hast eklatante - nicht Wissenslücken sondern Intelligenzhohlräume.

von Karl B. (gustav)


Lesenswert?

Hi,
taugt das was?
http://www.gjlay.de/helferlein/avr-uart-rechner.html
finde gerade die andere Tabelle nicht. Also Table 36 wo?

Stefan ⛄ F. schrieb:
> durchaus die Abweichung vom Soll reduzieren kann.
>
> 
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf
> Table 36
Da gibts ein href zu Seite 96 aber auch irgendwie....

ciao
gustav

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ralph S. schrieb:
> Du widersprichst dir im folgenden Verlauf des Threads gleich selbst und
> erklärst, warum die 57600 Bd mit internem 8 MHz RC nicht funktionieren.

Ich habe erklärt, warum sie nicht zuverlässig funktionieren - wenn man 
einen Resonator anstatt Quarz verwendet.

Mit Quarz geht es noch so gerade eben, das habe ich deutlich 
geschrieben.

> Beim Experimentieren macht es keinen Sinn einen AVR
> ohne Quarz zu betreiben !!

Dass sehe ich auch so. Dennoch werden einige Boards (sogar originale, 
angeblich, siehe oben) mit Keramik-Resonator ausgeliefert und dort ist 
der neue Bootloader halt keine gute Wahl.

von Stefan F. (Gast)


Lesenswert?

MaWin schrieb:
>> Schau Dir mal im Datenblatt an, wie der Baudraten-Generator
>> funktioniert. Dann erkennst du, dass die Halbierung der Baudrate
>> durchaus die Abweichung vom Soll reduzieren kann.

> Uff, aber nur bei gleich bleibendem Takt, weil der Teiler dann z.B.
> statt 6 nicht 12 sondern 13 sein kann.

Natürlich bei gleichem Takt, was denn sonst? Ich habe die konkreten 
Zahlen in den Beitrag geschrieben. Hast du das vor dem Antworten nicht 
gelesen?

> Beim 16MHz Quarz und 115200 Baud hast du mindestens 2,1% Abweichung.

> Der alte Bootloader lief hingegen mit 16MHz und 57600 Baud. Das ergibt
> laut Datenblatt 0,8% Abweichung.

Da gibt es keine Wissenslücke, wohl eher eine Kommunikationsstörung.

von MaWin (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Da gibt es keine Wissenslücke, wohl eher eine Kommunikationsstörung

Denkstörung.
Deinerseits.

In diesem thread ging es darum, ob ein mit 8MHz internem RC getakteter 
ATmega8 die gleiche baudrate im Bootloader verwenden kann/sollte wie der 
Original-Arduino mit 16 MHz Quartz.

Es wurde drauf hingewiesen, dass RC zu ungenau für zuverlässige UART 
Verbindung ist, sogar schon bei Keramikresonatoren die Toleranz gerissen 
werden kann, eben weil hardwaretechnisch sogar bei exakten 16MHz die 
baudratenabweichung bei 115kbps schon 2.1% beträgt

Nun kommst du als Trottel und weist darauf hin, dass bei gleichem 
Quartztakt die niedrigere baudrate ggf. genauer eingehalten werden kann 
als die höhere (zumindest bei 1:2 Abstufungen). Geil, aber Thema 
verfehlt, 6, setzen.

von Einer K. (Gast)


Lesenswert?

Das muss man ein bisschen aufpassen....
z.B. seine genannten 0,8% sind -0,8%

von Stefan F. (Gast)


Lesenswert?

Die Kommunikationsstörung führt zu einer Diskrepanz dessen, was gemeint 
war und was verstanden wurde. Ich glaube, technisch/fachlich sind wir 
uns aber einig. Wir müssen das jetzt nicht 6000 mal endlos durchkauen, 
wie in diesem Linux Thread. Lasst es gut sein.

Aber die persönlichen Beleidigungen sind nicht in Ordnung.

von Joachim B. (jar)


Lesenswert?

Ralph S. schrieb:
> Weshalb also nur 57600 wenn es auch schneller geht?

weil es eben nicht SICHER schneller geht, z.B. nicht über wUSB und nicht 
über den USBwebserver Sharkoon LAN 100/400.

Ich habe hier beides und kein angeschlossener nano328p wollte damit 
programmiert werden. Erst als ich den Optibootloader auf 57k6 
herabsetzte komme ich wieder an die Teile!

https://www.mikrocontroller.net/attachment/470648/nano.jpg

von Einer K. (Gast)


Lesenswert?

Joachim B. schrieb:
> Ich habe hier beides und kein angeschlossener nano328p wollte damit
> programmiert werden. Erst als ich den Optibootloader auf 57k6
> herabsetzte komme ich wieder an die Teile!

Dir ist aber schon klar, dass die Baudrate nur zwischen Serialadapter 
und µC wirkt?
Also dein angeschlossener USB Host nichts von den da auftretenden 
Differenzen mit bekommt?

Dein beobachteter Effekt liegt also keinesfalls an der 2.1% zu -0,8% 
Differenz, sondern an ganz was anderem!
Solltest du was anderes annehmen, dann unterliegst einem Trugschluss.

von Roman K. (jupiter2648)


Lesenswert?

Danke, Problem hat sich gelöst.
Funktioniert mit internem Quarz nun ... die PIN Belegung im Arduino as 
ISP Sketch war anderst, als bei meinem ISP vorgesehen.
Musste ich manuell eintragen. Anscheinend habe ich eine Nachbau Version, 
die die vorhandene PIN Konfiguration nicht "verträgt".

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Roman K. schrieb:
> Funktioniert mit internem Quarz

Was meinst du damit? Ich glaube kaum, dass der Mikrocontroller einen 
Quarz enthält.

von Roman K. (jupiter2648)


Lesenswert?

Stefan ⛄ F. schrieb:
> Roman K. schrieb:
>> Funktioniert mit internem Quarz
>
> Was meinst du damit? Ich glaube kaum, dass der Mikrocontroller einen
> Quarz enthält.

Ja "internal clock" halt :D Tritt nem Anfänger nicht gleich drauf :D

von Joachim B. (jar)


Lesenswert?

Arduino Fanboy D. schrieb:
> Dein beobachteter Effekt liegt also keinesfalls an der 2.1% zu -0,8%
> Differenz

das habe ich nie behauptet, nur dieser Aussage wiedersprochen

Ralph S. schrieb:
> Weshalb also nur 57600 wenn es auch schneller geht?

es geht eben nie immer schneller, mal klappts auch mit 115k nicht!

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
Noch kein Account? Hier anmelden.