Forum: Mikrocontroller und Digitale Elektronik ATMega 8 mit 1,8432Hz Quarz für RS232


von m_golbs (Gast)


Lesenswert?

Hallo,

ich habe eine Schaltung aufgebaut und anfänglich mit der internen Freq 
von 1 MHz probiert. Auf RS232 war zwar mit dem Oszi was zu sehen aber 
per minicom kam nicht. Habe gelesen dass die interne Freq recht stark 
schwanken kann, Temperatur & Co., damit RS232 Problem entstehen. Nun 
habe ich einen externen Quarz mit 1,8432MHz verbaut + Kondensatoren. 
Krumme Variante für Baud Konfiguration. Anfänglich hatte ich fuse l e1 
und h d9 laufen. Für die externen 1,8432MHz dachte ich an l 66 und h d9. 
Leider lässt sich diese Konfiguration per avrdude nicht setzen.
1
avrdude -c stk200 -P /dev/parport0 -p m8 -U lfuse:w:0x66:m
2
avrdude -c stk200 -P /dev/parport0 -p m8 -U hfuse:w:0xd9:m

Da ich im Thema nicht so tief stecke und sonst immer die internen 
Frequenzen genutzt habe würde ich mich über eine Info freuen.

Gruß und Dank Markus

von Oliver S. (oliverso)


Lesenswert?

Du kannst prinzipiell jede Fusekombination setzen. Wenn nicht, stimmt 
was mit dem Programmer oder der Verbindung nicht.

Oliver

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

für Quarzbetrieb wäre das dann CKOPT=1, CKSEL3...1=110 und das 
Baudratenregister müßte entsprechend zur Taktfrequenz eingestellt 
werden.

MfG

von M. K. (sylaina)


Lesenswert?

m_golbs schrieb:
> Habe gelesen dass die interne Freq recht stark
> schwanken kann, Temperatur & Co., damit RS232 Problem entstehen.

Hast du es auch mal mit Kalibrieren versucht?
 Mit diesen paar Zeilen Code kannst du z.B. den optimalen Wert für das 
OSCCAL-Register experimentell ermitteln:
1
### Programm zur Bestimmung von OSCCAL ohne Frequenzgenerator/-zaehler ###
2
3
#include <stdlib.h>
4
#include <avr/io.h>
5
6
#include "uart.h"
7
8
int main(void) {
9
    uartSetup(9600);
10
    char valueToSend[5];
11
    for (uint8_t i=0x00; i<0x7f; i++) {
12
        OSCCAL = i;
13
        sendString("OSCCAL is now: ");
14
        itoa(OSCCAL,
15
             valueToSend,
16
             10);
17
        sendString(valueToSend);
18
        sendString("\r\n");
19
        
20
    }
21
  for (;;) {
22
  }
23
  return 0; // never reached
24
}
Das wäre ggf. eine Möglichkeit für dich auf einen Quarz zu verzichten.

Zu dem Fuse-Problem: Man kann sich einen AVR auch ziemlich leicht 
verfusen sodass man einen HV-Programmer braucht. Solange das aber nicht 
der Fall ist kannst du eigentlich immer die Fuse-Bits setzen. Geht das 
bei dir nicht stimmt entweder beim Aufbau etwas nicht oder am Programmer 
klemmt es.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

m_golbs schrieb:

> Für die externen 1,8432MHz dachte ich an l 66 und h d9.

Das ist Quatsch, das ist keine Konfiguration für einen Quarz, sondern 
für einen externen RC-Oszillator.

> Leider lässt sich diese Konfiguration per avrdude nicht setzen.

Vermutlich ließ sie sich setzen, jetzt kannst du bloß nix mehr dran 
ändern. Verfused.

Drei Möglichkeiten zur Wiederbelebung:
1) Tatsächlich eine geeignete RC-Kombination anschalten
2) Externen Takt anlegen
3) HV-Programming

Und wenn du das nächste mal an irgendwas "denkst", vergiß es einfach 
gleich wieder und benutze statt dessen:

http://www.engbedded.com/fusecalc/

von my2ct (Gast)


Lesenswert?

M. K. schrieb:
> Hast du es auch mal mit Kalibrieren versucht?

Und das willst du vor jedem Senden eines Strings durchziehen, oder nur 
wenn sich die Temperatur des µC nennenswert geändert hat?

von M. K. (sylaina)


Lesenswert?

my2ct schrieb:
> M. K. schrieb:
>> Hast du es auch mal mit Kalibrieren versucht?
>
> Und das willst du vor jedem Senden eines Strings durchziehen, oder nur
> wenn sich die Temperatur des µC nennenswert geändert hat?

So etwas macht man ein mal bei den typischen Betriebswerten und nicht 
vor jedem Senden eines Strings oder wenn sich die Temperatur nennenswert 
geändert hat, ist doch logisch. Kalibrierst du z.B. vor jeder Messung 
mit einem DMM erstmal das DMM? Das Oberstübchen darf schon mit benutzt 
werden, auch am Happy Kadaver Day. ;)

von m_golbs (Gast)


Lesenswert?

Hallo,

vielen Dank für die Antwort.
1
Das ist Quatsch, das ist keine Konfiguration für einen Quarz, sondern 
2
für einen externen RC-Oszillator.


Dann habe ich mit fuse l 66 und h d9 den typischen Fehler gemacht. Da 
wäre wohl -U lfuse:w:0xde:m -U hfuse:w:0xd9:m  besser? Sind 1,8432MHz 
schon high freq oder medium?


"...Wenn nicht, stimmt was mit dem Programmer oder der Verbindung 
nicht..." Komisch, denn ich kann fuse lesen und hex schreiben???
1
Vermutlich ließ sie sich setzen, jetzt kannst du bloß nix mehr dran 
2
ändern. Verfused.

Wenn fuse zu lesen dann sollte doch noch nicht verfused sein? Mit 
avrduse und -F habe ich es dann doch geschafft, verfused.
1
Drei Möglichkeiten zur Wiederbelebung:
2
1) Tatsächlich eine geeignete RC-Kombination anschalten
3
2) Externen Takt anlegen
4
3) HV-Programming

Werde diesen MC dann mit dem STK500 und 3) beleben, jetzt erst mal den 
zweiten MC nutzen.
1
### Programm zur Bestimmung von OSCCAL ohne Frequenzgenerator/-zaehler ###

Prima, danke! Für das debugging bei Raumtemperatur passt das sicher 
prima. Im Betrieb müssen später etwa -20°C ... 50°C möglich sein. Wo 
glaubt ihr ist Delta T für interne 1MHz und RS232 ungefähr angesiedelt, 
dass RS232 noch läuft?

Gruß und Dank Markus

von Zitat Lehrer (Gast)


Lesenswert?

m_golbs schrieb:
> Gruß und Dank Markus

Texte zitiert man mit dem Textfeld-Button unten links im
Beitrags-Fenster wo steht "Markierten Text zitieren".

von Zitat Lehrer (Gast)


Lesenswert?

Zitat Lehrer schrieb:
> unten links

unten rechts

von Wolfgang (Gast)


Lesenswert?

M. K. schrieb:
> So etwas macht man ein mal bei den typischen Betriebswerten

Die Betriebswerte ändern sich typisch über einen gewissen Bereich. Da 
gibt es keinen einzelnen "typischen Betriebswert".

m_golbs schrieb:
> -20°C ... 50°C

Über den geforderten Temperaturbereich von 70K dürfte sich die 
Oszillatorfrequenz um typisch 8% ändern, also etwa +/-4% um die 
Bereichsmitte, falls die Fig.1 der AVR053 (Calibration of the internal 
RC oscillator) so in etwa auch für den ATmega8 passt.

Da kann es schon etwas eng werden mit "so etwas macht man ein mal".

Besser sollte man also mal nachmessen, was sich da so tut.

von M. K. (sylaina)


Lesenswert?

Wolfgang schrieb:
> Besser sollte man also mal nachmessen, was sich da so tut.

Wenn man die Möglichkeit hat, es zu messen, dann sollte man es auch 
immer messen, ob es passt.

Wolfgang schrieb:
> Die Betriebswerte ändern sich typisch über einen gewissen Bereich. Da
> gibt es keinen einzelnen "typischen Betriebswert".

Ist dir die Bedeutung von "typisch" bekannt? Es gibt IMMER typische 
Betriebswerte aber es sollte doch klar sein, dass die nicht in Stein 
gemeiselt sind.

m_golbs schrieb:
> Wo
> glaubt ihr ist Delta T für interne 1MHz und RS232 ungefähr angesiedelt,
> dass RS232 noch läuft?

öhm...das musst du doch wissen, du musst doch wissen welches Delta T du 
später hast. Wie es Wolfgang schon sagte, am besten Messen.

Soll das nen Serienprodukt werden? Dann ist es wohl am einfachsten, 
einen Quarz zu verwenden.

m_golbs schrieb:
> Dann habe ich mit fuse l 66 und h d9 den typischen Fehler gemacht. Da
> wäre wohl -U lfuse:w:0xde:m -U hfuse:w:0xd9:m  besser? Sind 1,8432MHz
> schon high freq oder medium?

Ist jetzt nicht böse gemeint: Hast du das Datenblatt gelesen des Atmegas 
gelesen? Dann müsstest du nicht fragen ob 1.8432 MHz High Freq oder 
Medium ist. Und dann wäre wohl auch der Fuse-Fehler nicht passiert. Um 
zumindest die richtigen Werte für die Fuses einzutragen, sofern man es 
nicht selber bestimmen will, empfiehlt es sich, den Fuse Bit Calculator 
zu verwenden (wenn man halt nicht mit dem Studio oder ähnlichem 
Unterwegs ist): www.engbedded.com/fusecalc/

von Christian S. (roehrenvorheizer)


Lesenswert?

" Sind 1,8432MHz schon high freq oder medium?"

Diese Frage zeigt klar, daß Du meinen Beitrag oben nicht verstanden und 
gewinnbringend verarbeiten konntest. Diese Sachen stehen im Dabla in 
einer Tabelle zu den Taktquellen.

MfG

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.