_delay_ms(..) abhängig von ATTiny Taktung?

Gast #3127672
Lesenswert?

Hallo,

ich will einen ATTiny45 z.B.mit 3,3V betreiben. Im Programm möchte ich 
gern _delay_ms(..) verwenden. Nun stelle ich mir die Frage, ob das 
_delay_ms() relativ/nahezu unabhängig von der Taktung ist, also ob bei 
128kHZ genauso wie bei 8Mhz die Verzögerung entsteht (muss nicht extrem 
genau sein z.B. +-5%), oder muss ich da umrechnen?

Über einen Tipp wäre ich sehr dankbar.


Gruß Markus
Gast #3128077
Lesenswert?

mgolbs schrieb:
> Nun stelle ich mir die Frage, ob das
> _delay_ms() relativ/nahezu unabhängig von der Taktung ist, also ob bei
> 128kHZ genauso wie bei 8Mhz die Verzögerung entsteht (muss nicht extrem
> genau sein z.B. +-5%), oder muss ich da umrechnen?

Das macht der Compiler für dich. Die Funktion _delay_ms() heißt 
"_delay_ms", weil sie als Argument die Zeit in Einheiten von ms erwartet 
und den Prozessor entsprechend lange durch Ausführung einer 
Programmschleife beschäftigt.
Gast #3128805
Lesenswert?

Hallo,

danke für die vielen Antworten. Ich habe eigentlich alles so im Code wie 
beschrieben.
1
// #define F_CPU 8000000UL
2
#define F_CPU 128000UL  // 128 kHz
3
// http://www.mikrocontroller.net/topic/292629#new
4

5
//  http://www.engbedded.com/fusecalc
6

7
/* fuer ATTiny 45*/
8
#include <avr/io.h>
9
#include <util/delay.h>
10
#include <avr/interrupt.h> 
11
#include <avr/sleep.h>

Fuse sind gesetzt, 62 df ff.

Irgend wie läuft das Programm etwa 4xschneller als erwartet. Lib ist die 
1.7.1.

Gilt _delay_ms(6000) für 6 Sekunden auch bei 128kHz?

Gruß und Dank Markus
#3128916
Lesenswert?

mgolbs schrieb:

> // #define F_CPU 8000000UL
> #define F_CPU 128000UL  // 128 kHz

128kHz?


> Fuse sind gesetzt, 62 df ff.

http://www.engbedded.com/fusecalc

Das ist aber die Standardkonfiguration ab Werk.
Damit ist gesetzt
  8Mhz interner Oszillator, CKDIV8 ist gesetzt.

d.h. effektiv hat dein Tiny eine Taktfrequenz von 1Mhz


und lass die 18kHz bleiben.
Gerade für einen Neuling ist eine derart niedrige Taktfrequenz nicht 
sinnvoll und macht dir nur Probleme. Zb beim ISP Flashen.
Gast #3128946
Lesenswert?

Hallo,

da sind mir die Fuse doch irgend wie wieder auf Standard gerutscht, 
warum auch immer (Schusslichkeit..). Hatte schon mal die 44 DF FF 
herausgesucht. Werde es damit noch einmal probieren. Das würde auch den 
Effekt erklären. Ich brauch die niedrigen Frequenzen (geringer 
Energieverbrauch) bei einer anderen Anwendung, und will es jetzt mit 
dieser schon mal zum laufen bekommen.

Gruß und Dank Markus
Gast #3129179
Lesenswert?

Hallo,

danke für die Hinweise. Das mit den 4x schneller liegt wohl wirklich an 
der nicht wie gewollt gestellten Fuse. Ich bin damit nicht mit 128kHz 
unterwegs, sondern wie von  Karl Heinz Buchegger geschrieben wohl noch 
mit 1MHz. An den delay.h Fehler hatte ich anfänglich auch gedacht. Wobei 
zwischen 128kHz und 1MHz mehr als Faktor 4 liegt.?

Ich werde erst einmal die Fuse wie gewünscht setzen nicht wie aktuell 62 
df ff sondern dann 44 DF FF

Das Problem mit dem Flashen ist mir bewusst, habe schon in dieser 
Richtung im Netz gelesen.

Machbar sollten die 128kHz zum Flashen doch sein?

Ich habe neben dem STK500 noch zwei weitere Programmer. Derzeit nutze 
ich arvdude an ttyS0, nativ. Mit avrdude, dem Atmel Studio 4 oder 5 bzw. 
Ponyprog oder einem anderen Tool muss das doch irgend wie gehen, ob nun 
unter Linux oder Windows?

Kann man beim avrdude nicht was mit -b bzw. -B einstellen, um die 
Übertragungsgeschwindigkeit zu reduzieren? Wie weit runter kommt man 
damit?


Gruß und Dank Markus

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