ATtiny 13a taktet falsch

Gast #5393394
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?
Gast #5393412
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.
#5393420
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
Gast #5393434
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!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.