Forum: Mikrocontroller und Digitale Elektronik Attiny13 PWM Frequenz problem


von Dex (Gast)


Lesenswert?

teste gerade ein wenig die pwm einstellungen von meinem Attiny13A.
habe dafür folgenden Code:
1
 #include <avr/io.h>
2
 #include <util/delay.h>
3
4
5
int main(void)
6
 {
7
 TCCR0A = (1<<WGM01)|(1<<WGM00)|(1<<COM0A1)|(1<<COM0A0);          // invertierte 8-Bit Fast PWM an OC0A
8
 TCCR0B = (1<<CS00);             // precaler=1
9
10
11
 
12
DDRB |= (1<<PB0);           // OC0A an PB 0
13
 
14
while(1) {
15
 OCR0A=150;
16
17
return 0;
18
 }
19
20
21
 }

ich verwende den internen clock mit 9,6mhz und jetzt sollte eigentlich 
eine pwm freqeunz von 37,5khz rauskommen. allerdings bekomme ich bei 
einer messung mit dem Oszi nur knapp 33,8 khz raus. das sind immerhin 
4khz differenz.

die CLKDIV8 fuse habe ich bereits deaktiviert. ansonsten fällt mir 
nichts mehr ein was ich machen kann.


hab ich etwas vergessen bzw. nicht durchdacht?

von Stone (Gast)


Lesenswert?

Der interne RC oszillator hat +-10% Toleranz was sehr genau hinkommen 
würde bei -10%

von Thomas E. (thomase)


Lesenswert?

Dex schrieb:
> while(1) {
>  OCR0A=150;
>
> return 0;
>  }
>

Rück das vernünftig ein, dann siehst du sofort, was da schief läuft:
1
while(1)
2
{
3
  OCR0A = 150;
4
  return 0;
5
}

mfg.

von spess53 (Gast)


Lesenswert?

Hi

hab ich etwas vergessen bzw. nicht durchdacht?

Calibration Byte.

MfG Spess

von Dex (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Rück das vernünftig ein, dann siehst du sofort, was da schief läuft:
> while(1)
> {
>   OCR0A = 150;
>   return 0;
> }
>
> mfg.

und was ist es?

von Thomas E. (thomase)


Lesenswert?

Dex schrieb:
> Thomas Eckmann schrieb:
>> Rück das vernünftig ein, dann siehst du sofort, was da schief läuft:
>> while(1)
>> {
>>   OCR0A = 150;
>>   return 0;
>> }
>>
>> mfg.
>
> und was ist es?

return 0;
Was hat das da zu suchen?

mfg.

: Bearbeitet durch User
von Sudo (Gast)


Lesenswert?

Du hast recht das es ein Fehler ist, aber die Frequenzabweichung hat 
nichts damit zu tun.

von Thomas E. (thomase)


Lesenswert?

Sudo schrieb:
> Du hast recht das es ein Fehler ist, aber die Frequenzabweichung hat
> nichts damit zu tun.

Ach nein?
Das Teil läuft überhaupt nicht, du Schlauberger.

mfg.

von Dex (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Ach nein?
> Das Teil läuft überhaupt nicht, du Schlauberger.
>
> mfg.

doch es läuft, sonst hätte ich das PWM signal nicht messen können. aber 
hab es trotzdem mal entfernt und es hat keine änderung gebracht

von Sudo (Gast)


Lesenswert?

Klar läuft das Ding, du weist blos nicht wo und was es anrichtet. Wie 
und warum sollte er stoppen. Das ist ein µC und kein Computer. Was auch 
immer nach dem Return im Flash steht wird einfach abgearbeitet. Kannst 
es ja durch den Simulator jagen wenn du mir nicht glaubst.

>du Schlauberger.

Ganz schön dreist für jemanden der keine Ahnung hat.

von Dex (Gast)


Lesenswert?

danke auf jeden fall an sudo und spess53

so wie es scheint lässt sich diese ungenauigkeit durch toleranzen des 
Oscillators begründen.
beschreiben des calibration bytes scheint abhilfe zu schaffen, wobei mir 
nicht klar ist wie groß die verbesserung dann ist.

eine andere alternative wäre dann wohl ein externer quarz oder?

von Thomas E. (thomase)


Lesenswert?

Sudo schrieb:
> Klar läuft das Ding, du weist blos nicht wo und was es anrichtet. Wie
> und warum sollte er stoppen. Das ist ein µC und kein Computer. Was auch
> immer nach dem Return im Flash steht wird einfach abgearbeitet. Kannst
> es ja durch den Simulator jagen wenn du mir nicht glaubst.
>
>>du Schlauberger.
>
> Ganz schön dreist für jemanden der keine Ahnung hat.
Halt dich zurück Schlauberger.

Zufällig läuft der Timer noch. Trotzdem lässt man so eine Scheisse da 
nicht stehen.

mfg.

von Sudo (Gast)


Lesenswert?

Das hat nichts mit Zufällig zu tun. Der Timer läuft so lange bis ein 
Reset auftritt, der µC in den passenden Sleep geht oder das Register 
geändert wird.
Deine Anmerkung mit den return war richtig, aber definitiv nicht die 
Antwort auf seine Frage oder hilfreich bei der Lösung seines Problems.

Wenn du Halbwahrheiten verbreitest von wegen
>Das Teil läuft überhaupt nicht
brauchst du nicht meckern nur weil dir jemand widerspricht.

von Hannes L. (hannes)


Lesenswert?

Dex schrieb:
> eine andere alternative wäre dann wohl ein externer quarz oder?

Du solltest mal anfangen, Datenblätter zu lesen. Dann würdest Du 
vielleicht merken, dass der ATTiny13 nicht für externen Quarz vorgesehen 
ist. Du könntest zwar einen externen Takt zuführen, aber das wird Dein 
Problem nicht lösen. Willst Du Präzision, dann musst Du schon etwas 
Anderes als den ATTiny13 nehmen... ;-)

...

von Dex (Gast)


Lesenswert?

Hannes Lux schrieb:
> Dex schrieb:
>> eine andere alternative wäre dann wohl ein externer quarz oder?
>
> Du solltest mal anfangen, Datenblätter zu lesen. Dann würdest Du
> vielleicht merken, dass der ATTiny13 nicht für externen Quarz vorgesehen
> ist. Du könntest zwar einen externen Takt zuführen, aber das wird Dein
> Problem nicht lösen. Willst Du Präzision, dann musst Du schon etwas
> Anderes als den ATTiny13 nehmen... ;-)
>
> ...

ich habe kein problem zu lösen ;-). Das mache ich aus reiner neugier.
Mich würde schon interessieren wieso ein externer Clk das problem nicht 
lösen würde. Die Option hat der attiny ja, also bitte klär mich auf.

mfg

von Hannes L. (hannes)


Lesenswert?

Dex schrieb:
> Mich würde schon interessieren wieso ein externer Clk das problem nicht
> lösen würde. Die Option hat der attiny ja, also bitte klär mich auf.

Ein externer Takt würde den Tiny13 genauer klappern lassen. Ein Externer 
Quarz ist aber etwas völlig Anderes als ein externer Takt.

Dex schrieb:
> eine andere alternative wäre dann wohl ein externer quarz oder?

Und externen Quarz unterstützt der Tiny13 (als einer von sehr wenigen) 
nunmal leider nicht.

Und ehe es zur Haarspalterei kommt, solltest Du die Kapitel "Clock 
Sources" der Datenblätter von Tiny13 und z.B. Tiny2313 (oder einem 
anderen AVR, der mit Quarz arbeiten kann) vergleichen.

...

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Hannes Lux schrieb:
> Und ehe es zur Haarspalterei kommt, ...

Und ehe noch jemand anders spaltet:  ;-)
Bei den AVR-Mikrocontrollern ist ein Quarz immer etwas Externes, einen 
internen gibt es da nicht.

Hast du dir schon mal überlegt, vom ATtiny13 auf einen ATtiny85 
umzusteigen?
Gleiches Gehäuse, gleiche Anschlussbelegung, aber mehr Speicherplatz, 
bessere Ausstattung und vor allem mit der Möglichkeit, einen Quarz 
anzuschließen.

von Bastler (Gast)


Lesenswert?

Dex schrieb:
> Thomas Eckmann schrieb:
>> Rück das vernünftig ein, dann siehst du sofort, was da schief läuft:
>> while(1)
>> {
>>   OCR0A = 150;
>>   return 0;
>> }
>>
>> mfg.
>
> und was ist es?

Sicher nicht mit Absicht so codiert, aber: (ich nehme mal GCC an)
Nach dem return(0) geht's zurück in die crt0, wo _exit() gerufen wird, 
was wiederum die Interrupts sperrt, die hier auch gar nicht benutzt 
werden, und dann in einer Endlosschleife auf Reset/Spannungsausfall 
wartet. Der Timer läuft natürlich weiter und bedient die Ports wie 
konfiguriert. Also sicher nicht so geplant, aber nicht wirklich falsch.

von Hannes L. (hannes)


Lesenswert?

Markus Weber schrieb:
> Hannes Lux schrieb:
>> Und ehe es zur Haarspalterei kommt, ...

Da Du mich ansprichst:

>
> Und ehe noch jemand anders spaltet:  ;-)
> Bei den AVR-Mikrocontrollern ist ein Quarz immer etwas Externes, einen
> internen gibt es da nicht.

Ja, das ist allgemein bekannt.

>
> Hast du dir schon mal überlegt, vom ATtiny13 auf einen ATtiny85
> umzusteigen?

Wieso umsteigen? Beide haben ihre Berechtigung, genauso wie die anderen 
AVRs auch. Für 'nen Servo-Controller, der z.B. auf ein H/L-Signal einen 
Gartenbahnlok-Entkuppler betätigt, reicht mir der Tiny13, für ein 
Soundmodul für Dampfloks (Grundgeräusch, Kolbenschläge, Pfeife, Glocke) 
oder Dieselloks (Anlasser, Motor, Horn, Glocke) nehme ich dann den 
Tiny85. Wobei mir ein ATTiny1285 oder 2565 (also ein ATTiny mit 
Highspeed-PWM über PLL und verdammt viel Flash oder EEP) lieber wäre, 
weil da mehr Sound-Bytes reinpassen würden. Aber man kann nicht alles 
haben... ;-)

> Gleiches Gehäuse, gleiche Anschlussbelegung, aber mehr Speicherplatz,
> bessere Ausstattung und vor allem mit der Möglichkeit, einen Quarz
> anzuschließen.

Alles richtig, aber bei mir rennst Du offene Türen ein...

...

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Hannes Lux schrieb:
> Alles richtig, aber bei mir rennst Du offene Türen ein...

Hey Hannes, das weiß ich doch. :-)

Mein Vorschlag war für Dex gedacht, der ja anscheinend unbedingt eine 
genaue Zeitbasis haben will.

Ich selber verwende kaum Quarze, nicht mal für unseren Programmer.

Am liebsten spiel ich mit dem ATtiny10, da sind eh kaum Pins frei für so 
einen Schnickschnack wie einen Quarz. ;-)

von Hannes L. (hannes)


Lesenswert?

Markus Weber schrieb:
> Mein Vorschlag war für Dex gedacht,

Das dachte ich mir. ;-)

Markus Weber schrieb:
> Am liebsten spiel ich mit dem ATtiny10, da sind eh kaum Pins frei für so
> einen Schnickschnack wie einen Quarz. ;-)

Da bin ich noch nicht angekommen und komme da vermutlich auch nicht mehr 
hin. Wird wohl von STK500 und Dragon nicht unterstützt, und von meinen 
diabeteszerfressenen Netzhäuten der Augen gleich gar nicht. Man kann 
eben nicht alles haben...

...

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.