Atmel AVR Frequenzgenerator

Gast #3889944
Lesenswert?

Hallo,

ich will mir einen Schaltregler bauen welcher per Atmel AVR gesteuert 
wird.
Ich habe heute dann mal begonnen zum Test meinen ATMega32 mit meinen 
spärlichen C++ Kenntnisen zu beschreiben.

Der Versuch war, einfach mal in einer while schleife, die Ports auf und 
ab zu drehen, in einem 5ms takt.
Laut oszi habe ich auch genau 5ms on Zeit, die off Zeit des ports 
beträgt aber gut 7,5ms.

Gibt es da bessere Möglichkeiten sowas zu realisieren?

Gruß
Gast #3890307
Lesenswert?

HI

>Siehe den Nachtrag.

OK da hat sichetwas überschnitten. Allerdings passen die 7ms Off-Zeit 
auch nicht zu einem _delay_ms(5);

Dir wird es aber trotzdem nicht erspart bleiben dich in die Problematik 
Timer (CTC/PWM) einzuarbeiten.

MfG Spess
Gast #3890325
Lesenswert?

nach dem zweiten Delay wird die Schleife wiederholt. Dieser Rücksprung 
braucht auch etwas Zeit. Zwar nicht soviel, wie Du gemessen hast, aber 
durchaus messbar. Für genaue Timings nutze Assembler oder Timer.
#3890342
Lesenswert?

estama schrieb:
> und nun unabsichtlich die
> Version mit "1" hochgeladen, sorry.

Dann fangen wir doch noch mal von vorne an.

Messe mit der 1ms Verion nochmal die High- und Low-Zeiten.
Und berichte mit welcher Optimierungs-Option du compiliert hast.

Die Delay-Funktionalität arbeitet nur korrekt wenn die Optimierung
auf -Os eingestellt ist.

Abgesehen von der While Schleife (braucht wenige usec, wenn
nicht weniger) sollten da schon 2 mal 1 msec herauskommen.
Gast #3890503
Lesenswert?

Eberhard F. schrieb:
> estama schrieb:
>> und nun unabsichtlich die
>> Version mit "1" hochgeladen, sorry.
>
> Dann fangen wir doch noch mal von vorne an.
>
> Messe mit der 1ms Verion nochmal die High- und Low-Zeiten.
> Und berichte mit welcher Optimierungs-Option du compiliert hast.
>
> Die Delay-Funktionalität arbeitet nur korrekt wenn die Optimierung
> auf -Os eingestellt ist.
>
> Abgesehen von der While Schleife (braucht wenige usec, wenn
> nicht weniger) sollten da schon 2 mal 1 msec herauskommen.

Hallo!

Mit der 1MS Variante habe ich 1,08ms high und 4,76ms low.

-Os ist gesetzt, ich compile per avr-gcc

Bei genauerem betrachten ist mir jedoch aufgefallen, dass der Compiler 
über ein fehlendes F_CPU jammert. Wundert mich aber, dass dann nur die 
low Phase eine falsche Zeit hat, die high Phase aber stimmt. Ich werde 
nun mal den Takt definieren und dann nochmal berichten, danke!

Gruß
(Firma: matzetronics) #3890539
Lesenswert?

estama schrieb:
> Nachtrag: Das Setzen von F_CPU hat keine Änderung gebracht. Anbei die
> Makefile die ich nutze (kopiert aus dem Wiki hier)

Da stimmt was nicht. Das Makefile setzt ein 'F_OSC', das soll aber 
'F_CPU' heissen, sprich, im Aufruf des Kompilers sollte dann '-DF_CPU 
3684000' vorkommen.

Schreib einfach mal in den Quellcode vor das #include util/delay.h ein
1
#define F_CPU 3684000UL
Gast #3890824
Lesenswert?

Hallo!

Laut Datenblatt sollte der standardtakt 1MHz sein. Nehme ich 8mhz, so 
dauern alle perideon 8ms, somit 8x zu viel. Nehme ich 1MHz habe ich 
wieder das seltsame verhalten mit den zu langen OFF Phasen.

Irgendeine Idee?

Danke!

Gruß

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