Forum: Mikrocontroller und Digitale Elektronik 1Khz PWM zu 30Khz PWM umbauen


von Patrick E. (f4550tim)


Lesenswert?

Hallo liebe Gemeinde.

Ich stehe vor dem Problem das ich ein 1Khz PWM Signal habe.
Für ein Netzteil brauche ich aber ein 30KHz PWM Signal.

Das einzige was wichtig ist, dass das Impuls-Pausen-Verhälniss erhalten 
bleibt.

Welcher Lösungsansatz ist der beste ?

Die PWM erst in ein analogwert per Tiefpass bringen, diesen AD - 
wandeln, und dann daraus eine PWM generieren ?

Oder kann ich rein digital die PWM Freuenz erhöhen, ohne dabei über den 
analogen Weg zu gehen.



Vielen Dank

Tim

von Reinhard Kern (Gast)


Lesenswert?

Patrick E. schrieb:
> Die PWM erst in ein analogwert per Tiefpass bringen

Wozu denn, du kannst das Tastverhältnis nicht nur genausogut, sondern 
viel exakter digital ausmessen. Du wirst für das Problem eh einen 
µController oder programmierbare Logik brauchen.

Gruss Reinhard

von Falk B. (falk)


Lesenswert?

@ Patrick E. (f4550tim)

>Die PWM erst in ein analogwert per Tiefpass bringen, diesen AD -
>wandeln, und dann daraus eine PWM generieren ?

Ist eher einfach machbar.

>Oder kann ich rein digital die PWM Freuenz erhöhen, ohne dabei über den
>analogen Weg zu gehen.

Ja, ist aber aufwändiger. Wenn man es mit AVR & Co macht, bekommt man 
Probleme mit Tastverhältnissen nahe 0% und 100%, weil dann die 
Pulsbreiten sehr kurz werden, das kann man auch mit ICP nur schlecht 
messen. Mit einem kleinen CPLD kein Problem.

High-Speed capture mit ATmega Timer

von Falk B. (falk)


Lesenswert?

Mit einem AVR mit 2 ICPs geht es, das sind aber schon größere Typen.

von Patrick E. (f4550tim)


Lesenswert?

Vielen Dank für die Antworten bis jetzt.

Entschuldigung wenn ich mich anfangs vergessen habe.

Ich habe da an Atmega Chips gedacht. Da habe ich z.B Atynis25 und Atmega 
8.

Die digitale Messung würde ich auch bevor zugen, doch leider weis ich 
nicht wie ich das Taskverhältnis logisch messen kann. Wäre da über einen 
Denkanstoß recht erfreut.

LG Tim

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

du startest z.B. mit der steigenden Flanke einen Timer, der die µs oder 
sowas zählt und stoppst mit der fallenden Flanke (Interrupt), damit 
startest du einen Timer, der wiederum bis zur steigenden Flanke zählt. 
Es gibt da mehrere Möglichkeiten. Alternativ kannst du von steigender zu 
steigender Flanke zählen und den Zwischenwert bei der fallenden Flanke 
festhalten, je nachdem was an Hardware zur Verfügung steht. 
Wahrscheinlich musst du noch eine extra Erkennung einbauen für die Fälle 
immer 0 und immer 1.

Mein Vorschlag:
IRQ 0->1 : vorherigen Wert für Tzyk erfassen (Messzyklus fertig), Timer1 
auf 0 setzen. Ton/Tzyk kann jetzt berechnet werden.
IRQ 1->0 : Wert für Ton erfassen
Timer2-Überlauf-IRQ : kein Puls, nachsehen ob 0 oder 1 anliegt -> 0 oder 
100%.

Gruss Reinhard

von Patrick E. (f4550tim)


Lesenswert?

Hallo,

vielen Dank für die Idee Reiner.
Das bedeutet dann für den Anfang ich bauche zwei Timer.
Der erste Timer nimmt die Impulslänge, und der andere Timer nimmt die 
Puls breite.
Das ist schonmal ein erster Schritt.

Bei einem KHz besteht eine Periode aus (t=1/f) 1ms.

Ich möchte an dieser Stelle einfach einmal von einem Atmega8 ausgehen.
Dieser hat 3 Timer. Timer0 mit 8bit und Timer1 mit 8bit Auflösung und 
Timer2 mit 16bit. Dann muss man ja den kleinsten nenner Finden damit die 
gemessenen werte der Timer die selbe Einheit haben.
Heißt ich verwende beide Timer mit 8bit.
Von den Extremen heraus könnte es ja sein das der EIN - Impuls 0.999ms 
lang ist. Genauso könnte es der LOW-Impuls sein. -> Die 8 bit des Timers 
müssen maximal 1ms fassen. 1ms/8bit sind pro Bit 3,921 ~ 4µs.

Daraus folgere ich das das raufzählen des Zählers nicht länger als ~4µs 
dauern darf. - Wie stelle ich das an ? Ist da eine einfache i++ 
operation sinnvoll.

LG

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

da fehlen Grundlagen: Timer/Counter sind Hardware, die zählen 
Zeitschritte oder Eingangsimpulse. Hat mit C-Befehlen wie i++ auch nicht 
im entferntesten was zu tun.

Lies dich erst mal ein in µController, Timer, Interrupts, sonst ist das 
Projekt aussichtslos.

Gruss Reinhard

von M. N. (Gast)


Lesenswert?

Patrick E. schrieb:
> Ich stehe vor dem Problem das ich ein 1Khz PWM Signal habe.
> Für ein Netzteil brauche ich aber ein 30KHz PWM Signal.

Ich würde das Problem von der Ausgangsseite angehen. 30kHz PWM bei einem 
Standard-ATtiny/mega mit 16MHz Takt ermöglichen eine max. Auflösung von 
rund 9 Bit. Diese sollte bzw. muß man mit einer Tx-PWM erzeugen, am 
besten natürlich mit Timer1.

Die Erfassung der Eingangspulsweiten kann Faktor 30 langsamer ablaufen, 
wobei eine Auflösung der Zeiten mit rund 2µs doch ein leichtes Spiel 
sind, zumal der µC - soweit ich sehe - nichts anderes zu erledigen hat.

von Patrick E. (f4550tim)


Lesenswert?

Hallo,

war das WE leider weg, konnte noch nicht zurück schreiben.

Also das was ich da letzte Woche Freitag verzapft habe habe ich mir 
heute nochmal durchgelesen..... Pfui

Ich arbeite mittlerweile schon seit 2 Jahren mit µC und weis auch was 
Hard & Software ist.
Ich hatte da einen anderen Gedankengang was das increment i++ war. Das 
das kein Timer ist weiß ich auch ;D
Dennoch danke für die Anmerkung Reinhard!

@ M.N.

Ich habe noch nie von einer Tx PWM gelesen oder gehört.
Es gibt für mich 2 Arten von PWM einmal die Hardwareseitige über die PWM 
Hardware, oder eine rein softwareseitige PWM Lösung.
Ich habe auch schon danach gegoogelt,doch habe ich keinen einizigen 
Beitrag über eine "Tx PWM" gefunden und lesen können.

Könntest du mir kurz sagen warum du diese Art von PWM bevorzugen würdest 
und was der Unterschied ist.
Oder aber natürlich einen Link wo ich das selber nachlesen kann.

Und ja, das ist das einzige was der µC tun soll. Im entferntesten soll 
noch ein einfaches LCD ran um die  Werte auszugeben, aber das ist ja 
kein Thema!

LG Patrick

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Vergesst die PLL nicht - der Tiny 25 hat eine 64 MHz PLL für Timer 1. 
Damit kann man dann entweder die schnelle PWM erzeugen oder mit ein 
wenig Software Aufwand die eingehende PWM gut erfassen.
Für ein optionales LCD wirds dann allerdings mit den Pins eng. Es würde 
gerade noch für ein I2C LCD reichen.

von M. N. (Gast)


Lesenswert?

Patrick E. schrieb:
> Ich habe noch nie von einer Tx PWM gelesen oder gehört.

Ein ATtiny25 hat einen Timer0 und einen Timer1, oder abgekürzt T0 und 
T1. Bei einem ATmega8 kommt noch T2 hinzu, der bei einem ATmega88 sehr 
viel "schöner" ist.
Um einen x-beliebigen Timer zu bezeichnen habe ich daher Tx gewählt. Mit 
Tx PWM ist die Hardware PWM-Funktion eines x-beliebigen Timers gemeint.

Da Du keine näheren Angaben zur Auflösung der 30kHz-PWM gemacht hattest, 
hatte ich versucht, zu ergründen, was max. möglich wäre.

Matthias Sch. schrieb:
> Vergesst die PLL nicht - der Tiny 25 hat eine 64 MHz PLL für Timer 1.

Da T1 auch nur 8 bit Auflösung bietet und die Ausgangsfrequenz ca. 30kHz 
sein soll, kann man die "64 MHz PLL" des Tiny25 ruhig vergessen :-)

von M. N. (Gast)


Lesenswert?

Patrick E. schrieb:
> Und ja, das ist das einzige was der µC tun soll. Im entferntesten soll
> noch ein einfaches LCD ran um die  Werte auszugeben,

Um das noch aufzugreifen: 
http://www.mino-elektronik.de/7-Segment-Variationen/LCD.htm#lcd1

An PB4 kann man mit OC1B die Ausgangs-PWM erzeugen und per PCINT3 die 
Eingangs-PWM auswerten. Über einen sehr hohen Wert in OSCCAL kann man 
den internen RC-Oszillator auf rund 15-16 MHz 'ziehen', sofern die 
exakte Taktfrequenz nicht im Vordergrund steht.

von Ulrich (Gast)


Lesenswert?

Mit 16 oder 20 MHz kommt man auf eine Maximale Auflösung von den schon 
erwähnten rund 9 Bit. Wenn das nicht reicht, könnte man ggf. durch 
Dithering noch 1-2 Bit mehr heraus hohlen, also den PWM Wert leicht 
modulieren im letzten Bit. Das gibt dann zwar ein kleine Komponenten bei 
niedrigeren Frequenzen, ist aber bei vielen Anwendungen noch zu 
tolerieren weil die Amplitude klein ist.

Wegen des 16 Bit timers wäre der Mega8 oder als kleinere Lösung ggf. 
auch der Tiny2313 vorzuziehen. Bei nur 1 kHz Frequenz für das 
Eingangssignal sollten die Pulse nicht so kurz werden, so dass man auch 
gut die ICP Funktion nutzen kann, auch wenn es per Interrupt auch noch 
mit 8 Bit timern geht, aber schon nicht mehr so einfach - ein weiterer 
Grund für einen 16 Bit Timer.
Ganz einfach ist es aber nicht den einen 16 Bit timer für die PWM 
Erzeugung und die Zeitmessung per ICP zu verwenden, müsste aber gehen.

von Patrick E. (f4550tim)


Lesenswert?

Ok, das mit Tx war ein Interpretationsfehler meinerseits. Habe meinen 
Interpretationsdetektor zum reparieren gegeben :)

Die Lösung mit dem Display von N.M. ist echt gut. Aber bevor ich so 
einen Hardwareaufwand betreibe, nehme ich lieber einen Prozessor mit 5 
Beinchen mehr ;D
Zur Auflösung: Also ein 8bit PWM reicht vollkommen aus. Wichtig ist in 
diesem Fall nur die Frequenz von 30 KHz.

Auch die Idee den 16bit Timer2 zu teilen ist gut und interessant!, aber 
gang ehrlich, der Aufwand der dadurch entsteht, ist ja nicht nötig wenn 
3 Timer zur Verfügung stehen. T0 T1 T2.
Natürlich ist der Atmega8 für diesen Zweck super überdimensioniert, aber 
ich habe 20 Stück günstig erworben, dann kann ich die ruhigem Gewissens 
auch verbauen.

von Falk B. (falk)


Lesenswert?

Hmm, wenn man es per Input Capture machen will und nur einen davon hat, 
gibt es Grenzen für die minimale Pulsbreite. Denn man muss per Software 
zwischen steigender und fallender Flanke per Interrupt umschalten. 
Wenn man mal 100 Takt dafür ansetzt dauert das bei 8 MHz ~ 13us. Das 
sind bei 1 kHz schon 1,3%. Treten diese Extremwerte 0-1,3% bzw. 
98,7-100% auf?

Die Lösung mit RC-Tiefpass und AD-Wandler hat dieses Problem nicht.

OK, die ganz harten Jungs nehmen Assembler, für diese einfache Funktion 
ist das kein Problem. Dann kriegt man den Interrupt auch in 10-20 Takten 
hin. Oder gleich ganz ohne Interrupt, nur per Polling. Ist noch etwas 
schneller und kriegt man auch in C so schnell wie Assembler hin.

von oszi40 (Gast)


Lesenswert?

Patrick E. schrieb:
> brauche ich aber ein 30KHz PWM Signal.

Eine Schaltung, die für 1kHz berechnet wurde ist, etwas anders bei 
30kHz.
http://schmidt-walter.eit.h-da.de/smps/smps.html
http://www.planet3dnow.de/vbulletin/showthread.php?t=396386&garpg=6#content_start

von Reinhard Kern (Gast)


Lesenswert?

Falk Brunner schrieb:
> Denn man muss per Software
> zwischen steigender und fallender Flanke per Interrupt umschalten.

Möglichkeit: man schliesst die Input-PWM an 2 Eingänge an und 
programmiert einen auf L-H, den anderen auf H-L. Zusätzlich sichert der 
Timer Overflow den Fall ab dass garkeine Impulse kommen und setzt das 
Ergebnis auf 0 oder 100%. Alle 3 ISRs sind in Assembler nur ein paar 
Befehle lang.

Gruss Reinhard

von Falk B. (falk)


Lesenswert?

@ Reinhard Kern (Firma: RK elektronik GmbH) (rk-elektronik)

>> Denn man muss per Software
>> zwischen steigender und fallender Flanke per Interrupt umschalten.

>Möglichkeit: man schliesst die Input-PWM an 2 Eingänge an und
>programmiert einen auf L-H, den anderen auf H-L.

Wenn man das aber sehr genau per ICP machen will, braucht man einen 
recht großen AVR mit 2 ICPs. Ist aber denke ich Overkill. Mit der 
Pollingmethode kommt man auf unter 1us Zeitauflösung, das ist 1 Promille 
bei 1kHz Takt.

>Ergebnis auf 0 oder 100%. Alle 3 ISRs sind in Assembler nur ein paar
>Befehle lang.

Ohne ISR ist es noch schneller und die CPU hat sowieso nix besseres zu 
tun. Ein kleiner ATtiny2313 mit timer0 und 1 reicht. OK, der OP hat 
ATmega8, geht auch.

von Reinhard Kern (Gast)


Lesenswert?

Falk Brunner schrieb:
> Wenn man das aber sehr genau per ICP machen will, braucht man einen
> recht großen AVR mit 2 ICPs.

Du bist wohl nicht bereit, meinen Programmvorschlag überhaupt in 
Betracht zu ziehen - ich brauche sowas wie ICP nicht, es reicht ein 
GPIO-Interrupt, in dem der Timerstand ausgelesen wird. Die paar Takte 
zusätzlich spielen wahrscheinlich keine Rolle und ausserdem könnte man 
das noch korrigieren. Und überhaupt könnte man mit einem einzigen Timer 
für Impulsmessung und Overflow hinkommen, wie beschrieben.

Wenn du nicht bereit bist fremde Vorschläge zu diskutieren, kann ich dem 
TO nur empfehlen, mir eine PM zu senden, wenn er an einer einfachen 
Lösung interessiert ist, hier wird das wohl nichts.

Gruss Reinhard

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

@ Reinhard Kern (Firma: RK elektronik GmbH) (rk-elektronik)

>Du bist wohl nicht bereit, meinen Programmvorschlag überhaupt in
>Betracht zu ziehen - ich brauche sowas wie ICP nicht, es reicht ein
>GPIO-Interrupt, in dem der Timerstand ausgelesen wird.

Doch, aber es geht besser ;-)

>Die paar Takte
>zusätzlich spielen wahrscheinlich keine Rolle und ausserdem könnte man
>das noch korrigieren. Und überhaupt könnte man mit einem einzigen Timer
>für Impulsmessung und Overflow hinkommen, wie beschrieben.

Für gesparte Timer gibt es kein Geld zurück.

>Wenn du nicht bereit bist fremde Vorschläge zu diskutieren, kann ich dem
>TO nur empfehlen, mir eine PM zu senden, wenn er an einer einfachen
>Lösung interessiert ist, hier wird das wohl nichts.

Warum so gereizt?

Hier mal meine Variante, könnte so klappen. Interner 8 MHz RC-Oszillator 
könnte reichen. AVR Fuses passend einstellen.

MfG
Falk

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Also wenn man ins .lss FIle schaut sieht man, dass man es per Hand in 
Assembler kaum besser hinkriegt. Hat der GCC gute Arbeit geleistet.

von Peter D. (peda)


Lesenswert?

Die Frage ist erstmal, welche Auflösung wird benötigt?

Bei 8MHz kann man die 30kHz nur mit 8Bit auflösen. Reicht das denn?

von M. N. (Gast)


Lesenswert?

Patrick E. schrieb:
> Zur Auflösung: Also ein 8bit PWM reicht vollkommen aus.

von Patrick E. (f4550tim)


Lesenswert?

Vielen Herzlichen Dank an all die Tollen Ideen und Vorschläge.

Darüber zu streiten welches eine Bessere Möglichkeit ist, halte ich 
nicht für sinnvoll. Jede Idee hat eine Daseinsberechtigung.

Was am Ende resursensparender ist und günsiger, das kann man ja ganz 
einfach beschreiben.

Zu dem Thema der oberen und unteren 1,? %. Das ist irrelevant. Es wird 
hauptsächlich zwischen 10 und 90% liegen.

@ Falk:
Danke für das tolle Code Beispiel ! Das wird ja auf einem Atmega8 locker 
Platz finden. Ist fast einfacher als man denkt!

Ich werde heute noch eine Platine entwerfen, so das die Sache bis zum 
Ende der Woche stehen kann. Ich denke ich werde deinen Code als Vorlage 
verwenden.

Da du schriebst das ich nicht vergessen darf die Fußes richtig zu 
stellen, habe ich überlegt was ich außer die Standarteinstellungen 
verändern muss ?


LG

von Patrick E. (f4550tim)


Lesenswert?

oszi40 schrieb:
> Patrick E. schrieb:
>> brauche ich aber ein 30KHz PWM Signal.
>
> Eine Schaltung, die für 1kHz berechnet wurde ist, etwas anders bei
> 30kHz.
> http://schmidt-walter.eit.h-da.de/smps/smps.html
> 
http://www.planet3dnow.de/vbulletin/showthread.php?t=396386&garpg=6#content_start

Danke oszi40. Wobei ich schon ein fertiges Netzteil habe. Bin nicht am 
Bau eines solchen. Die Seiten sind interessant!

Ein kleinen Fehler in deiner Interpunktion ist mir aufgefallen. Das "," 
hinter "ist" gehört hinter "wurde".

LG

von M. N. (Gast)


Lesenswert?

Patrick E. schrieb:
> Ein kleinen Fehler in deiner Interpunktion ist mir aufgefallen. Das ","
> hinter "ist" gehört hinter "wurde".

Der Witz ist richtig gut!

von kobi briant (Gast)


Lesenswert?

warum geht das nicht mit einer einfachen pll welche auf ein 30khz 
rechteck aufsynchronisiert wird?

von Falk B. (falk)


Lesenswert?

@ kobi briant (Gast)

>warum geht das nicht mit einer einfachen pll welche auf ein 30khz
>rechteck aufsynchronisiert wird?

Ein PLL interssiert sich in den meisten Fällen nicht für das 
Tastverhältnis, die multipliziert nur Takte und Phasenlagen einer 
Flanke.

von Patrick E. (f4550tim)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich habe mich einmal an den Schaltplan gesetzt.

Die R´s am Ein & Ausgang sind als Schutzbeschaltung mit der Diode D1 
gedacht. Habe gemessen das vom Netzteil manchmal Negative Peaks von 2 
Volt an der steigenden Flanke kommen. Ich gehe stark davon aus das 4,3V 
an stadt von 5V reichen müssen.
Ich denke einen Impedanzwandler kann man hier am Ausgang sparen.

Bitte um Verbesserungen des Planes, und oder Ideen.

Danke

LG

von Falk B. (falk)


Lesenswert?

AREF bleibt offen, Dort kommt bestenfalls ein 100nF C gegen GND ran.
Dein ISP-Adapter wid nicht glücklich sein, wenn er die LED mit 47 Ohm 
Vorwiderstand treiben soll. Dort muss ein Puffer rein. Oder ein Jumper, 
um die LED abzuklemmen, wenn du programmierst.

Sonst passt es.

von Patrick E. (f4550tim)


Lesenswert?

Das mit AREF ist ok.

Aber welche LED ?
Das ist eine Schutz Diode für den Pin des Atmegas.
Wenn ich Programmiere ist da ein sehr großer R am Ausgang drann.

LG Tim

von Michael A. (Gast)


Lesenswert?

Patrick E. schrieb:
> Welcher Lösungsansatz ist der beste ?

Du hast noch einen dritten Weg vergessen:

1kHz PWM tiefpassfiltern und auf einen Komparator geben, der mit einem 
30kHz Sägezahn vergleicht.

von Falk B. (falk)


Lesenswert?

@ Patrick E. (f4550tim)

>Aber welche LED ?

Ahh, D1 ist eine normale ;-)

>Das ist eine Schutz Diode für den Pin des Atmegas.

Was soll die WIE schützen? Sie verunstaltet dir eher den Ausgang, der 
nicht mehr aktiv auf LOW ziehen kann.

von Patrick E. (f4550tim)


Lesenswert?

Dann sollte am Ende noch ein Pulldown R hin. So 1K Ohm.

Die Diode schützt den Prozessor vor negativen Peaks, wie z.B. -2V

LG

von Patrick E. (f4550tim)


Lesenswert?

So,

was könnte ich anderes verwenden als die Diode D1 um zu verhindern das 
Störimpulse in den µC eingekoppelt werden ?

Das mit dem Pulldown is völliger Blödsinn.
Das würde niemals schöne Flanken geben.


LG

von Falk B. (falk)


Lesenswert?

Ein Widerstand reicht. Nicht zu groß, nicht zu klein. Was hängt denn am 
Ausgang dran?

von Patrick E. (f4550tim)


Angehängte Dateien:

Lesenswert?

Habe das Board soweit geeaglet. Da wo nun noch die Diode ist, könnte man 
dann eine Lötbrücke reinmachen.

Es hängt ein 40W CO2 Laser Netzteil drann. Das produziert meinen 
Messungen nach ein paar störende Peaks.

LG

von Falk B. (falk)


Lesenswert?

@ Patrick E. (f4550tim)

>Habe das Board soweit geeaglet.

Auf Lochraster hättest du das in 1h aufgebaut und könntest testen. DANN 
kann man es schön machen.

>Es hängt ein 40W CO2 Laser Netzteil drann. Das produziert meinen
>Messungen nach ein paar störende Peaks.

Wahrscheinlich Messfehler, weil ein starker DCDC Wandler Dreck in die 
Umgebung spuckt.

von Patrick E. (f4550tim)


Lesenswert?

@ Falk,

das ist ja die Testplatine. Ich habe die Atmegas neu, und keinen Adapter 
da. Und bevor ich jetzt einen Adapter ätzt, kann ich auch die Platte 
ätzen. Außer ich programmiere das eben auf einen anderen Typen.

Werde mal sehen was da ist.

LG Tim

von Patrick E. (f4550tim)


Lesenswert?

Also, ich habe nur einen Atmega48 noch da, das ist das nächste.

Ich werde die Platine testweise aufbauen, und dann daran entwickeln.

Sobald die Platine fertig ist, gebe ich hier bescheid !

LG

von Patrick E. (f4550tim)


Angehängte Dateien:

Lesenswert?

Hallo,

hat nun ein wenig länger gedauert als ich gedacht habe.

Die Platine ist fertig gestellt und mein Programmer erkennt den darauf 
befindlichen Atmega8. Habe mir die Platine unter dem Mikroskop 
angeschaut und konnte keine Fehler feststellen.

Ich habe einen anderen Atmega mit einem Poti ausgestatted, welcher ein 
1KHz PWM Signal erzeugt. Durch das Poti kann ich die Pulsbreite von 0 
bis 100 stellen. Das sollte zum testen ausreichend sein.

Jetzt geht es an die Programmierung.
Hier werde ich von euch Hilfe brauchen, da ich eher der Hardwaremensch 
bin.
Aber ich bin mir sicher, das Ihr mir helfen werdet. Ich will ja nicht 
das Ihr mir die Arbeit nehmt, sondern das ich Unterstützung bekomme. Und 
ich denke da bin ich hier richtig :D

Ich programmiere in Bascom. Das vorab. Ich werde jetzt einmal ein kurzes 
Programm schreiben welches die Flanken über Interrupts erkennt, und 
werde das hier dann posten.

Bis dann

LG

von Falk B. (falk)


Lesenswert?

@ Patrick E. (f4550tim)

>1KHz PWM Signal erzeugt. Durch das Poti kann ich die Pulsbreite von 0
>bis 100 stellen. Das sollte zum testen ausreichend sein.

Ja.


>Jetzt geht es an die Programmierung.

Warum testest du nicht erstmal meinen Vorschlag?

Beitrag "Re: 1Khz PWM zu 30Khz PWM umbauen"

>Ich programmiere in Bascom.

Das dürfte eng werden, den BASCOM hat hier eion paar Schwächen, es ist 
stellenweise deutlich ineffizienter als C. Vielleicht hat man Glück und 
es geht doch, weil die kritische Sequenz eher kurz ist und BASCOM hier 
villeicht nich allzuviel Overhead erzeugt.

von Patrick E. (f4550tim)


Lesenswert?

Hallo Falk,

das habe ich ganz vergessen. Ich werde dein Hexflile nun einmal in den 
Atmega reinpacken. Melde mich gleich wieder !

LG

von Patrick E. (f4550tim)


Lesenswert?

Ich werde verrückt...

habe jetzt eben versucht meinen Code in den Atmega zu flashen, doch ich 
bekomme immer wieder timeout errors bei der Kommunikation.

Aber er kann die Chip ID auslesen.... Es sagt mir das ein Atmega8 
angeschlossen ist, aber beschreiben kann er Ihn nicht, auch kann ich 
keine Fuses setzen...

So kann ich leider dein Testfile nicht flashen.

Was gibt es für Alternative software um mit meinem MySmartUSB light den 
Atmega zu flashen ?

LG


PS: Ich habe mir jetzt AVR Studio 6 geladen, und werde versuchen ob ich 
den Mega8 damit flashen kann.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Patrick E. schrieb:
> Ich stehe vor dem Problem das ich ein 1Khz PWM Signal habe.
> Für ein Netzteil brauche ich aber ein 30KHz PWM Signal.
Ich bin mir nicht ganz sicher, ob das wirklich das ist, was du brauchst.

Vor ich hier antworten würde, hätte ich noch ein paar Fragen:
Woher kommt das Signal, welche Information trägt es, wofür wird es 
gebraucht und was wird damit wie angesteuert. Und auch: kannst du die 
Regelung deines Netzteils tatsächlich schnell genug in die Software 
packen? Immerhin schient da was Wertvolles und tendenziell Gefährliches 
dranzuhängen...

von Patrick E. (f4550tim)


Lesenswert?

Hallo Lothar,

also die Software ist Mach3, die macht das schon ;D

Auch ist es ein CO2 Laser Netzteil welches ein einfaches 30KHz PWM 
Signal braucht. Nicht mehr und nicht weniger. Die Pulsbreite reguliert 
die Leistung.

Das Signal kommt vom Parallelport auf die Schrittmotorsteuerung welche 
das PWM weitergibt.

LG

von Patrick E. (f4550tim)


Lesenswert?

Kann man einen Mega8 wenn dieser auf Fuse Extern Osc. steht, ohne das 
ein Quarz dran hängt mit dem Programmer wieder auf Intern 8MHz stellen ?

Dafür müsste doch an der ICSP Schnittstelle die TCk Leitung gut sein.

Weil nachdem ich die Fuße auf 8MHz gestellt und beschreiben wollte, 
stand plötzlich Extern Osc. geschrieben, und wenn ich Ihn auf 8MHz 
stelle kann ich Ihn nicht mehr beschreiben....

Ich hasse BASCOM AVR !!!
Ich glaube ich sollte mich mit C in AVRStudio anfreunden !!!!


LG

PS: Ich installiere grade das Studio6. Mal sehen ob ich damit zurecht 
komme.

von Falk B. (falk)


Lesenswert?

@ Patrick E. (f4550tim)

>Kann man einen Mega8 wenn dieser auf Fuse Extern Osc. steht, ohne das
>ein Quarz dran hängt mit dem Programmer wieder auf Intern 8MHz stellen ?

Nein.

>Dafür müsste doch an der ICSP Schnittstelle die TCk Leitung gut sein.

Nein.

AVR Fuses

>Ich hasse BASCOM AVR !!!

BASCOM ist selten Schuld.

von Patrick E. (f4550tim)


Lesenswert?

Falk Brunner schrieb:
> @ Patrick E. (f4550tim)
>
>>Kann man einen Mega8 wenn dieser auf Fuse Extern Osc. steht, ohne das
>>ein Quarz dran hängt mit dem Programmer wieder auf Intern 8MHz stellen ?
>
> Nein.
>
>>Dafür müsste doch an der ICSP Schnittstelle die TCk Leitung gut sein.
>
> Nein.
>
> AVR Fuses
>
>>Ich hasse BASCOM AVR !!!
>
> BASCOM ist selten Schuld.


Dann werde ich am Montag einen Quarz dran bauen und zurück stellen.
und dann wieder diese Lastkondensatoren.....

von Helmut L. (helmi1)


Lesenswert?

Patrick E. schrieb:
> Dann werde ich am Montag einen Quarz dran bauen und zurück stellen.
> und dann wieder diese Lastkondensatoren.....

Boh, ich kann dein Leid verstehen. Immer diese Bauteile die man da 
einbauen muss. Wo ist das Problem. 2 x 22pF dran und die Sache laeuft.

von Patrick E. (f4550tim)


Lesenswert?

So Quarz und C dran. Geht !


Dein Hex in den Atmega reingeflasht und angesteckt.

-> geht nicht.

Er hat einen 8MHz internen OSC in den Fuses.

Die Diode habe ich durch eine Drahtbrücke ersetzt. Denn pulldown habe 
ich rausgelassen.


Hast du noch ne Idee ?

LG

von Falk B. (falk)


Lesenswert?

Was geht denn nicht? Es muss ja mindestens eine PWM rauskommen.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hier mal ein neues Hexfile. Ohne jegliche BEschaltung müsse an PB3 eine 
PWM mit 50% und 31 kHz rauskommen.

von Patrick E. (f4550tim)


Lesenswert?

Sorry Falk,

habe vorhin ein Bild vergessen was ich gemessen habe.

Habe dein neues HEX-File im Controller und ich bekomme eine schöne 32KHz 
PWM !!

SUPI !

Ich werde jetzt nochmal das andere Programm reinflashen !

LG

von Patrick E. (f4550tim)


Lesenswert?

Habe dein altes File reingeflashed und das geht nun auch !!!


Die PWM ist invertet. Wie im C-File zu sehen.

Das ist für den Zweck aber nicht wirklich sinnvoll, da ich das am PC 
nicht ändern kann. Eine kurze Pulsbreite muss eine kurze Pulsbreite am 
Ausgang haben. Das doofe ist eben das man dann diese Overflowpeaks bei 
100 hat.
Bei 100% ist das nicht schlimm. Aber bei 0 muss auch LOW an dem PIN 
anliegen.

Könntest du noch eine Zeile einfügen in der die Bedingung wenn die PWM 
kleiner als ca. 2 % ist das sie dann einfach ausgeschalten wird, und 
drüber wird sie eingeschalten. Fraglich ist nur ob das mit den 30KHz 
geht.

LG

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hier die neue Version.

von Patrick E. (f4550tim)


Angehängte Dateien:

Lesenswert?

Danke Falk das du dich hier so sehr beteiligst.

Habe dein neues File geflashed, und festgestellt, das jetzt etwas ganz 
komisches rauskommt.

Ich erhalte Pausen wo keine sein sollte. Allerdings bei 0 ist nun auch 
0.
Zeischen 1 und 99% Pulsbreite erhalte ich ein Signal wie auf Bild1 zu 
sehen. Wenn ich ein 100% high am input habe, bekomme ich am Ausgang 0 
raus. Das macht soweit nichts.

Wenn ich 99% Pulsdauer habe, also fast high, dann kommt am Ausgang eine 
PWM raus siehe Bild2.

LG

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hmm, Lapsus. Neue Version im Anhang.

von Patrick E. (f4550tim)


Lesenswert?

Hallo Falk,

konnte erst jetzt erneut testen. Vorsb schonmal herzlichen Dank für 
deine Bemühungen!!!

Jetzt sind es nurnoch 2 Kleinigkeiten.

Wenn ich die Pulsbreite über 84% bringe, entsteht am Ausgang eine PWM wo 
die PWM nichts mehr mit der Eingangspwm zu tun hat. Irgendwas von 
40%/60%.
Wenn ich dann auf knappe 99% gehe, springt der Ausgang auf 0. Gut das 
wäre nicht dramatisch.

Hier kommt aber noch die zweite Problematik. Wenn ich unter 1% oder eben 
über 99% stelle, geht der Ausgang auf low, und wenn ich dann die PWM am 
Eingang wieder verändere, muss ich den Atmega8 reseten (Hardware). Dann 
kommt am Ausgang wieder eine PWM.


LG Tim

von Patrick E. (f4550tim)


Lesenswert?

Also ich habe jetzt auch noch die Hardware kontrolliert, ob da etwas 
nicht passt. Das ist es aber nicht.

Da ich kein Bisschen C kann, würde ich mich freuen wenn du das ein 
letztes mal fixen könntest. Im Bezug auf den Reset. Ich vermute das die 
PWM ausgeschalten wird, und nicht mehr eingeschalten wird.

LG

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Neuer Versuch.

von Patrick E. (f4550tim)


Lesenswert?

Hallo Falk,

einen erneuten Dank für deine Bemühungen.
Entschuldige bitte das ich erst jetzt schreibe, aber ich war im Urlaub 
und dann im Anschluss gleich noch ein Wochenende weg.

Ich habe gestern deinen neuen Code geflashed, und muss sagen das er nun 
so läuft und man keinen Reset benötigt, damit er aus den Extremen wieder 
aufwacht.

Eine letzte Kleinigkeit ist mir nun aber doch noch aufgefallen, und zwar 
muss ich den Controller einmalig resetten wenn er an Spannung 
angeschlossen wird, sonnst läuft er nicht an. Manchmal läuft er an, aber 
mit 60KHz am Ausgang. Wenn ich ihn dann resette, kommt die passende 
~30KHz PWM.

Ich hatte noch einen letzten Fall durchdacht. Wenn sich der Controller 
einmal aufhängt, dann würde hinten irgendetwas undefinierbares 
rauskommen, und das könnte rein theoretisch gefährlich werden. Wieviel 
Arbeit würde es dir noch machen den WD in die mainschleife mit rein zu 
ziehen?


Grüße

von Falk B. (falk)


Lesenswert?

@Patrick E. (f4550tim)

>muss ich den Controller einmalig resetten wenn er an Spannung
>angeschlossen wird, sonnst läuft er nicht an.

Aktiviere den Brown Out Detektor per Fuses.

>Ich hatte noch einen letzten Fall durchdacht. Wenn sich der Controller
>einmal aufhängt, dann würde hinten irgendetwas undefinierbares
>rauskommen, und das könnte rein theoretisch gefährlich werden. Wieviel
>Arbeit würde es dir noch machen den WD in die mainschleife mit rein zu
>ziehen?

Naja, der Watchdog ist nur ein Feigenblatt. Der rettet nicht sooo viel. 
Kann man aber einbauen, wenn es dich beruhigt. Mach ich heute abend.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Schitte böhn

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.