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
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
@ 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
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
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
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
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
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.
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
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.
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 :-)
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.
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.
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.
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.
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
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
@ 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.
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
@ 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
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.
Die Frage ist erstmal, welche Auflösung wird benötigt? Bei 8MHz kann man die 30kHz nur mit 8Bit auflösen. Reicht das denn?
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
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
Patrick E. schrieb: > Ein kleinen Fehler in deiner Interpunktion ist mir aufgefallen. Das "," > hinter "ist" gehört hinter "wurde". Der Witz ist richtig gut!
warum geht das nicht mit einer einfachen pll welche auf ein 30khz rechteck aufsynchronisiert wird?
@ 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.
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
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.
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
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.
@ 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.
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
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
Ein Widerstand reicht. Nicht zu groß, nicht zu klein. Was hängt denn am Ausgang dran?
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
@ 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.
@ 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
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
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
@ 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.
Hallo Falk, das habe ich ganz vergessen. Ich werde dein Hexflile nun einmal in den Atmega reinpacken. Melde mich gleich wieder ! LG
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.
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...
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
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.
@ 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.
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.....
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.
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
Hier mal ein neues Hexfile. Ohne jegliche BEschaltung müsse an PB3 eine PWM mit 50% und 31 kHz rauskommen.
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
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
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
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
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
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
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.