mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny 13a taktet falsch


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Carotinbombe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?
Hier mein Code:

/*
 * Test.c
 *
 * Created: 13.04.2018 21:47:04
 * Author : Robin Gerstmann
 */ 

#ifndef F_CPU
#define F_CPU 20000000UL //20MHz
#endif


#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

ISR(TIM0_COMPA_vect)
{
  PINB ^=(1<<PB0); //LED AN oder  AUS ^= -> XOR
  
}

int main(void)
{
  //LED Ausgang
  DDRB = (1<<PB0);

  //Timer konfigurieren 
  TCCR0B |= (1<<WGM01) | (1<<CS00)| (1<<CS02);//CTC Mode + Prescaler
  TIMSK0 |= (1<<OCIE0A); //Interrupt aktiviert
  
  sei();
    while (1) 
    {
    
    
    }
}


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

Autor: Carotinbombe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Carotinbombe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jakob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.