ATmega8515: Änderung der Taktfrequenz durch MKII?

#2701601
Lesenswert?

Mahlzeit,

ich habe ein kleines Verständnisproblem was die Einstellung des internen 
Oszillators des Atmega8515 angeht. Die Fuse steht auf int.Osc. 4MHz. 
Wenn ich ein Programm mit einer FCPU = 4000000UL und einer Baudrate von 
19200 konfiguriere, bekomme ich korrekte Zeichen bei 19200Baud nur mit 
angeschlossenem AVRISPMKII und mit abgezogenem AVRISPMKII und neu 
gestartetem µC bei 38400Baud. Das ganze passiert im STK500. Rechnerisch 
wären FCPU/(16xBaud)=13. Wenn ich nun zurückrechne: 13x16x38400 komme 
ich auf ca. 8Mhz. Wo liegt da mein Denkfehler? Ich möchte schon meine 
Applikation ohne MKII mit der programmierten Geschwindigkeit laufen 
lassen.

Gruss Robert
Gast #2701691
Lesenswert?

Hi

>Das ganze passiert im STK500. Rechnerisch wären FCPU/(16xBaud)=13.

Die richtige Formel für UBRR ist aber (FCPU/(16xBaud))-1.

>Ich möchte schon meine
>Applikation ohne MKII mit der programmierten Geschwindigkeit laufen
>lassen.

Wer hindert dich daran? Allerdings kannst du eine stabile Verbindung mit 
dem internen Oszillator vergessen.

MfG Spess
#2701835
Lesenswert?

Guten Morgen!

Fuses sind auf 0xC3 und 0xD9. Alles soweit original, bis auf den "Int. 
RC Osc. 4 MHz; Start-up time: 6 CK + 0 ms". Das dieser interne 
Oszillator ohne einen ungeraden Baudratenquarz mit Fehlern bei 
asynchroner Übertragung behaftet ist, ist mir schon bewusst. Ich weiß 
nur immer noch nicht, warum sich die Baudrate ändert wenn ich den AVRISP 
MKII anstöpsel. Da sich der Code nicht ändert kann sich ja nur die 
Taktrate ändern. Da gibts ja noch die SPI Frequenz, die steht aber 
weiterhin auf 125kHz. Ich stehe da gerade ein bischen auf dem Schlauch - 
vor allem weil die Baudrate nur dann passt, wenn der MKII angeklemmt 
ist.

Hier mal der Vorkopf und das USART_INIT.
1
#include<avr/io.h>
2

3
#define BAUD 2400UL
4
//#define TAKT 1000000UL
5
#define F_CPU 4000000UL  
6

7
unsigned char Banane;
8
int Zahl;
9
int Zahl2;
10
int BAUD2 = 19200;
11

12
void INIT_USART(void)
13
{
14

15
  UBRRL = (F_CPU / (16ul * BAUD2))-1;
16
  UBRRH = 0;
17
  UCSRA |= (0 << U2X);
18
  UCSRB |= (1 << TXEN) | (1 << RXEN);
19
  UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
20

21
}

Gruss Robert
#2701845
Lesenswert?

Ich hab nen Terminal nebenbei am laufen. Da hat mal ein Tobias Hammer 
einen richtig guten Terminal namens hterm irgendwo im Netz gepostet, da 
kann ich während der Übertragung quasi ausprobieren, mt welcher 
Übertragungsrate das Board nun sendet. Die Übertragungsrate stimmt dann 
auch mit z.Bsp. Hyperterminal oder Term95 vom frühen NC überein. Habe 
auch ne LED bei jedem Sendevorgang aufleuchten lassen, der Blinktakt 
verlangsamt sich wenn das MKII dran steckt.

Robert
Gast #2701870
Lesenswert?

Hi

An dieser Stelle hast du schon mal einen Fehler:

  UBRRL = (F_CPU / (16ul * BAUD2))-1;
  UBRRH = 0;

16-Bit-Register werden in der Reihenfolge H-L geschrieben. Siehe 
'Accessing 16-bit Registers' im Datenblatt.

MfG Spess
#2702026
Lesenswert?

... schrieb:
> Versuch mal die Fuses auf 0xE3 und 0xD9.
> Weil mit 6 CK und 0 ms, kann es bei einer "langsam" ansteigenden
> Versorgungsspannung zu Problemen kommen.

Das hat funktioniert, bin jetzt auf "Int. RC Osc. 4 MHz; Start-up time: 
6 CK + 64 ms" gegangen, die Taktfrequenz ist gleich geblieben. D.h. er 
hatte gleich beim einschalten seine 4 Mhz, beim aufstecken des ISP 
behielt er seine Taktfrequenz bei. Sehr schön. Ich war eben bei Conrad 
einkaufen und habe das gleiche mit einem anderen 8515 ausprobiert - 
funktioniert auch. Ihr seid klasse!


Gruss Robert
Gast #2702067
Lesenswert?

Hi

>Sehr schön. Ich war eben bei Conrad
>einkaufen und habe das gleiche mit einem anderen 8515 ausprobiert -
>funktioniert auch.

Dann hättest du auch mal einen anständigen AVR kaufen können. Da gibt es 
diese Effekte nicht.

MfG Spess
Gast #2702161
Lesenswert?

spess53 schrieb:
> Dann hättest du auch mal einen anständigen AVR kaufen können. Da gibt es
>
> diese Effekte nicht.

Den Effekt hast du bei jedem Atmel weil, du musst dem Oszillator schon 
Gelegenheit zum Einschwingen geben bevor du die Taktfrequenz frei gibst.

Kürzere Zeiten kannst du nur einstellen, wenn du mit einem externen 
Quarzozillator arbeitest.
Gast #2702202
Lesenswert?

Hi

>Den Effekt hast du bei jedem Atmel weil, du musst dem Oszillator schon
>Gelegenheit zum Einschwingen geben bevor du die Taktfrequenz frei gibst.

Beim ATMega8515 bleibt der Takt nach dem Einschalten auf 8MHz, obwohl 
per Fuses 4MHz eingestellt sind.
Bei angeschlossenem ISP sind die 8MHz auch kurzzeitig sichtbar, schalten 
dann aber auf die 4MHz um. Möglicherweise löst der AVR ISP MKII nochmal 
einen Reset aus.

Im Datenblatt findet sich lediglich der Hinweis, das die 6CK+0ms beim 
internen RC-Oszillator in Verbindung mit der BOD zu benutzen ist. Hat 
aber bei mir keinen Einfluss gehabt.

Mit einem ATMega644P habe ich den Effekt nicht nachvollziehen können. 
Kann natürlich daran liegen, das auf die 4MHz per Software umgeschaltet 
werden muss. Das waren aber bei mir die ersten zwei Befehle (Assembler) 
im Programm.

MfG Spess
Gast #2702284
Lesenswert?

spess53 schrieb:
> Im Datenblatt findet sich lediglich der Hinweis, das die 6CK+0ms beim
>
> internen RC-Oszillator in Verbindung mit der BOD zu benutzen ist.

Da findet sich aber auch der Hinweis auf Fast rising power und Slowly 
rising Power:

Table 13. Start-up Times for the Internal Calibrated RC Oscillator Clock 
Additional Delay from
Reset (VCC = 5.0V) Recommended Usage
 6 CK – BOD enabled
 6 CK 4.1 ms Fast rising power
 6 CK 65 ms Slowly rising power

spess53 schrieb:
> Mit einem ATMega644P habe ich den Effekt nicht nachvollziehen können.

Geht auch nicht, da der von zu Hause aus nur 8MHz macht. Da kann dann 
noch der Clockdivider durch 8 per Fuse eingeschaltet werden.
Aber auch da findest du die verschiedenen Additional Delays.
Gast #2702291
Lesenswert?

HI

>Da findet sich aber auch der Hinweis auf Fast rising power und Slowly
>rising Power:

Und auch auf BOD. Lt. der von dir zitierten Tabelle ist 6CK+0ms in 
Verbindung mit eingeschalteter BOD zulässig. Oder?

MfG Spess

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