Forum: Mikrocontroller und Digitale Elektronik ATtiny 13a taktet falsch


von Carotinbombe (Gast)


Lesenswert?

Hey hey! :)

ich bin neu hier und habe erst angefangen mit Atmel Studios zu arbeiten. 
Jetzt habe ich mich mit den Timer-Overflow beschäftigt. Leider musste 
ich feststellen, dass wohl meine Taktfequenz nicht ganz passend zu 
meinen ATtiny läuft. Ich habe eine Betriebsspannung von 5.5 Volt vom USB 
Port. Ich habe den Prescaler gesetzt und auch die Interrupt Service 
Routine definiert. Komischer weiße, dauert alles ewig lang. Ich habe 
dann erstmal die LED blinken lassen mit einen delay von 100ms in der 
while-loop. Das komischer ist, das es sich wie 1 Sekunde verhält, statt 
0,1 Sekunden ?
1
Hier mein Code:
2
3
/*
4
 * Test.c
5
 *
6
 * Created: 13.04.2018 21:47:04
7
 * Author : Robin Gerstmann
8
 */ 
9
10
#ifndef F_CPU
11
#define F_CPU 20000000UL //20MHz
12
#endif
13
14
15
#include <avr/io.h>
16
#include <util/delay.h>
17
#include <avr/interrupt.h>
18
19
ISR(TIM0_COMPA_vect)
20
{
21
  PINB ^=(1<<PB0); //LED AN oder  AUS ^= -> XOR
22
  
23
}
24
25
int main(void)
26
{
27
  //LED Ausgang
28
  DDRB = (1<<PB0);
29
30
  //Timer konfigurieren 
31
  TCCR0B |= (1<<WGM01) | (1<<CS00)| (1<<CS02);//CTC Mode + Prescaler
32
  TIMSK0 |= (1<<OCIE0A); //Interrupt aktiviert
33
  
34
  sei();
35
    while (1) 
36
    {
37
    
38
    
39
    }
40
}

Der ATtiny13a taktet doch laut Datenblatt mit 20MHz bei 5.5 Volt?

von Carotinbombe (Gast)


Lesenswert?


von Michael U. (amiga)


Lesenswert?

Hallo,

Carotinbombe schrieb:
> Der ATtiny13a taktet doch laut Datenblatt mit 20MHz bei 5.5 Volt?

wenn Du ihm die 20MHz extern an CLKI anlegst ja.
Ansonsten dürfte er im Lieferzustand wie üblich miz intern 9,6MHz und 
gesetzter CDIV8 laufen, also mit 1,2MHz.

Gruß aus Berlin
Michael

von Carotinbombe (Gast)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> Carotinbombe schrieb:
>> Der ATtiny13a taktet doch laut Datenblatt mit 20MHz bei 5.5 Volt?
>
> wenn Du ihm die 20MHz extern an CLKI anlegst ja.
> Ansonsten dürfte er im Lieferzustand wie üblich miz intern 9,6MHz und
> gesetzter CDIV8 laufen, also mit 1,2MHz.
>
> Gruß aus Berlin
> Michael

Oha!

Das wusste ich nicht....
Einmal sagst du intern mit 9.6 aber insgesamt mit 1,2 MHz :'D? Ich komme 
da noch nicht ganz mit.

von Michael U. (amiga)


Lesenswert?

Hallo,

Carotinbombe schrieb:
> Einmal sagst du intern mit 9.6 aber insgesamt mit 1,2 MHz :'D? Ich komme
> da noch nicht ganz mit.

schau im Datenblatt nach unter ClockSource.
Die gängigen AVR haben ein Fusebit CDIV8, daß den Takt durch 8 teilt und 
die ist im Lieferzustand gesetzt.
Der interne RC-Oszillator kann 4,8 und 9,6MHz und sollte im 
Lieferzustand auf 9,6MHz sein, macht dann / 8 = 1,2MHz.

Man kann bei den aktuellen AVR auch per Software das 
Clockteilerverhältnis umstellen, müßte ich aber auch erst im Datenblatt 
nachschauen.

Falls die Frage nach #define F_CPU 20000000UL //20MHz kommt:
damit sagst Du dem Compiler mit welchen Takt Dein AVR tatsächlich läuft, 
damit z.B. _delay() usw. richtig berechnet werden können.
Am Takt ändern kannst Du mit dieser Angabe nichts.

Gruß aus Berlin
Michael

von Jakob (Gast)


Lesenswert?

Der Tiny13A wird so ausgeliefert, dass ein interner RC-Oszillator
einen Takt von ungefähr (!) 9,6 MHz liefert. Zusätzlich ist eine
"Fuse" mit dem Namen CKDIV8 so voreingestellt, dass
F_CPU = 9,6 MHz / 8 = ungefähr (!) 1,2 MHz ist.

Damit kann man doch schon mal loslegen...

Die Programmzeile:
    #define F_CPU 20000000UL //20MHz
bewirkt GARNIX.

Sie hilft als KONSTANTE nur beim Berechnen von z.B. Baudratenteilern,
wenn (!) denn auch diese 20 MHz als CPU-Frequenz anliegen.

- Du wirst wohl nicht um das Studium des Datenblatts drumherum-
kommen!

von guest (Gast)


Lesenswert?

Michael U. schrieb:
> Fusebit CDIV8

Das Ding nennt sich "CKDIV8", damit findet man es dann auch im 
verlinkten Datenblatt.

Michael U. schrieb:
> Man kann bei den aktuellen AVR auch per Software das
> Clockteilerverhältnis umstellen, müßte ich aber auch erst im Datenblatt
> nachschauen.

Sind die CLKPS Bits im CLKPR Register, kommt im Datenblatt direkt nach 
"Clock Sources".

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.