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ß
estama schrieb:> Laut oszi habe ich auch genau 5ms on Zeit, die off Zeit des ports> beträgt aber gut 7,5ms.
Vielleicht musst du doch mal deine Code "offenlegen"?
Hallo,
spess53 schrieb:> Das passt aber nicht zu
Siehe den Nachtrag. Zum Zeitpunkt des Tests war das delay auf 5, ich hab
das noch für nen weiteren Test angepasst, und nun unabsichtlich die
Version mit "1" hochgeladen, sorry.
Danke!
Gruß
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
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.
Hi
>nach dem zweiten Delay wird die Schleife wiederholt. Dieser Rücksprung>braucht auch etwas Zeit.
Ja, aber selbst bei 1MHz Takt nur ein paar µs. Keine Relation zu den
2ms.
MfG Spess
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.
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ß
Karl Heinz schrieb:> ändert sich was an deiner Zeitverteilung?> Wenn ja, dann hast du ungewollte Resets.
Hallo,
nein, da ändert sich leider nichts an der Zeitverteilung. Ich habe zwar
die 500ms delay beim startup, an der Zeitverteilung danach verändert
sich aber nichts.
Danke!
Gruß
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
Matthias Sch. schrieb:> Schreib einfach mal in den Quellcode vor das #include util/delay.h ein>
1
>#defineF_CPU3684000UL
2
>
Hallo,
Danke, du hattest recht, das funktioniert. Warum war vorher dann die ON
Phase richtig, und nur die OFF falsch?
Und wie kommst du auf 3,684MHz?
Danke!
Gruß
Hallo,
Nachtrag: Die Lösung stimmt leider nicht ganz. Ich habe nun zwar gleich
lange ON und OFF Perioden, beide sind nun aber 3,xx ms lang, und nicht
eine.
Danke!
Gruß
estama schrieb:> Nachtrag: Die Lösung stimmt leider nicht ganz. Ich habe nun zwar gleich> lange ON und OFF Perioden, beide sind nun aber 3,xx ms lang, und nicht> eine.
Ja du wirst es sicher noch schaffen das define F_CPU so
richtigzustellen dass es den wahren Gegebenheiten deiner
Schaltung entspricht.
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ß
estama schrieb:> Laut Datenblatt sollte der standardtakt 1MHz sein. Nehme ich 8mhz, so> dauern alle perideon 8ms, somit 8x zu viel
Fuse DIV8.
wendelsberg
Hallo,
Danke!
Ich habe zwar das Fusebit für /8 nicht gefunden, aber mit einem Fusebit
generator den Takt auf 8Mhz angehoben, nun passt die Zeit auch. Danke!
:)
Gruß