Mit welcher Taktfrequenz läuft mein ATtinyxxx wirklich?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 07 1 2025  00:28:37      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Mit welcher Taktfrequenz läuft mein ATtinyxxx wirklich?

    







BID = 162684

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein
 

  


Vielleicht eine blöde Frage, aber wie kann ich die Taktfrequenz meßtechnisch feststellen - insbesondre weil ich nur den internen Oszillator verwenden möchte!

Kann mir vorstellen, mit einem Timer - Interrupt und umschalten eines Pin's, aber wie genau ist das?
Gibt's da Erfahrungen oder/und evtl. schon eine Testschaltung mit Programm?

Greets
Hajo

BID = 162690

Benedikt

Inventar

Beiträge: 6241

 

  

Schreib dir ein kleines Programm, das einen Port bei jedem Durchlauf umschaltet. Mit einem Frequenzzähler kannst du die Frequenz dann messen. Weiterhin weißt du, dass dein Programm für jeden Durchlauf x Takte braucht, und daraus kannst du dann die Taktfrequenz berechnen.

BID = 163390

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

... ist leider in "C" nicht ganz so einfach (Takte pro Befehl).

Vielleicht kann mir jemand erklären, warum bei einem Wert von "5000" gerade eine Dauer von 10 msec zwischen den IRQs vergeht. Ich betreibe den AVR mit internem Oszillator bei 4 Mhz (?)

Mit einigen Versuchen habe ich herausgefunden, daß bei einem Port Pin genau 10msec zwischen jedem Umschalten vergehen, wenn ich folgendes Programm einspiele (WinAVR): (ATtiny2313)

#include <main.h>
// hier drin definitionen für Variable
#include <avr/interrupt.h>
#include <avr/signal.h>

// 5000 => 10 msec Interrupt
#define DURATION 5000

void init(void);

//Hauptprogramm
int main (void)
{
init();
while (1)
{
}

return (1);
}

void init(void)
{
// Ausgänge initialisieren
outp(0x0f,DDRB); // Der halbe Port B = Ausgang
sei(); // Globalen Interrupt freigeben
TIMSK =_BV(OCIE1A); // Vergleichswertüberlauf Interrupt einschalten
TCCR1B = _BV(CS10); // Vorteiler =1
OCR1A = DURATION - 1; //
}
}

/***********************
Interruptroutine wird aufgerufen
************************/
SIGNAL(SIG_TIMER1_COMPA)
{
outp((cent & 1),PORTB);
cent++;
TCNT1 = 0x0000; // Rücksetzen
}

BID = 163682

uc

Neu hier



Beiträge: 28

Das geht nur in Assebler!

BID = 163720

giwer

Stammposter



Beiträge: 202

Versuch es mit der Funktion Delay.
Die Funktion _delay_loop_2(uint16_t __count) braucht zum abarbeiten genau 4 Systemzyklen

z.B
#include <avr/delay.h>
.
.
PORTB |= _BV(0); // Bit 0 setzen.
_delay_loop_2(1000); // 4000 Zyklen warten
PORTB & = ~_BV(0); // Bit 0 löschen

Jetzt musst nur die Impulslänge am PORTB(0) messen und die Frequenz ausrechnen.

BID = 163801

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Jetzt musst nur die Impulslänge am PORTB(0) messen

Das kann nicht jeder.
Günstiger wär es wohl einen 1s Timer zu programmieren.
Dann kann man durch Vergleich mit einem gewöhnlichen Wecker feststellen, wieviel der vor- oder nach geht.

_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

BID = 164193

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

@perl:
Genau das hab' ich ja versucht (100 Hz Takt, s.o.), allerdings durch Trial & Error.
Bin dann auf die "5000" als Zählerwert gekommen. Nun interessiert mich halt, wie schnell denn der Contoller wirklich läuft...

BID = 164231

giwer

Stammposter



Beiträge: 202

Der TCNT1- Zähler muss in der erste Zeile der Interruptroutine zurückgesetzt werden, da TCNT1 weiter zählt während outp((cent & 1),PORTB); und cent++;
abgearbeitet wird.

4000000 / 5000 – 1 ergibt eine Interruptfrequenz von 800 Hz.
Ist auch wirklich 4 MHz intern eingestellt ?


BID = 164674

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

Habe mal die Flash - Bits angesehen... es ist der interne Oszi eingestellt (CKSEL 0010).
Evtl. ist noch ein Prescaler (8) eingestellt (... würde meine Ergebnisse bestätigen).

Leider hab' ich aber keinen Zugang mehr zum Chip - irgendwie läßt sich das Ding nicht mehr ansprechen / Programmieren.

Mit dem Prog: TWINAVR (Stand-Alone Programmer) hab' ich das Teil bis jetzt immer wieder löschen können, bevor ich mit sp12 (in WinAVR eingebunden mittels avrdude) ein Prog eingespielt habe. Geht jetzt aber nicht mehr... stellt sich irgendwie tot

Weiter testen und ggf. Reserve chip aus meinem Lauflich abzweigen (ist dann aber einer der letzten, die ich zur Verfügung habe.)
Wo gibt's die Teile günstig???

Greets
Hajo

BID = 164734

giwer

Stammposter



Beiträge: 202

http://www.reichelt.de/
2.00€ inkl. MwSt.

BID = 164744

giwer

Stammposter



Beiträge: 202

Mit der AVRprog Software lässt sich die Frequenz einstellen und die Einstellungen auslesen, sowie Flach und Eeprom getrennt beschreiben, vergleichen, löschen und vieles mehr. Programmer und Software findest du hier.
http://www.klaus-leidinger.de/mp/Mi.....t2313


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 22 Beiträge im Durchschnitt pro Tag       heute wurden bisher 0 Beiträge verfasst
© x sparkkelsputz        Besucher : 182686773   Heute : 86    Gestern : 7485    Online : 530        7.1.2025    0:28
3 Besucher in den letzten 60 Sekunden        alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0774681568146