ATMega 8 mit 1,8432Hz Quarz für RS232

Gast #5881092
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
#5881222
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.
Gast #5881235
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/
#5881256
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. ;)
Gast #5881363
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
Gast #5881429
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.
#5881555
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/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren