Guten Abend, Ich habe ein Problem mit meinem ATTiny85, dieser arbeitet als Boost Converter bzw. soll er das. Wenn man den Chip programmiert funktioniert alles wie vorgesehen. Mit dem Poti kann ich die Ausgangsspannung einstellen und wenn der Ausgang belastet wird ändert sich der Dutycycle abhängig von der Last. Alles super. Das Problem kommt sobald man die Platine stromlos macht und wieder mit Stromversorgt. Dann ist im ersten Moment die Feedback Spannung vom Schaltregler noch 0V und das Poti hat weiterhin seine festeingestellte Spannung. Normalerweise sollte der Controller jetzt den Dutycycle anheben bis sich Feedback Spannung und Poti Spannung angleichen und oszillieren. Nur tut aus irgend ein Grund der Mikrocontroller nach einem Neustart dieses nicht sondern erhöht lediglich die Variable "pwmVal" von 0 auf 1 und bleibt dann bei 1 hängen. Aber der entsprechende Codeteil wird jedes mal wieder neu aufgerufen. Habe um das zu testen den USI als UART Konfiguriert und mir die pwmVal Variable ans Terminal gesendet. Nach dem Programmieren beginnt der Controller damit die Variable pwmVal zu erhöhen bis Poti und Feedback Spannung gleich ist. Nachdem die Platine stromlosgemacht wurde und wieder saft draufgeben wird bleibt er immer bei 1 hängen. Hat jemand ne Ahnung woran das liegen kann? Programmiert habe ich den Chip mittels eines Usbasp. Habe mal die Programmdatei angehängt und falls es relevant sein sollte auch mal den Schaltplan davon sowie wie es auf dem PCB ist. Mfg
Hallo, hängt das Resetsignal in der Luft? Laut Schaltplan ja.
Veit D. schrieb: > Hallo, > > hängt das Resetsignal in der Luft? Laut Schaltplan ja. Moin, Ja nach außen hin hängt er in der Luft. Laut Datenblatt ist der Reset Pin intern über ein Pull-Up Widerstand nach Vcc gezogen. Daher habe ich mir den externen Widerstand gespart. Rrst soll zwischen 30 und 60 kOhm liegen. Mfg
if (potiInput > feedbackInput) {trallala} else if (potiInput < feedbackInput) {trallala} Was ist mit der DRITTEN Möglichkeit: potiInput GLEICH feedbackInput ? Nebenbei: Deine Quelltext-Formatierung kommt einer völligen Katastrophe gleich, das ist unglaublich ärgerlich!
Hallo, resete ihn mal kurz nach Spannung anlegen. Das wäre der Effekt wie nach flashen nur eben ohne flashen. Ansonsten teste durchaus einmal 10k am Resetpin.
Hermann Kokoschka schrieb: > Was ist mit der DRITTEN Möglichkeit: > potiInput GLEICH feedbackInput ? Was sollte ich in diesem Fall den machen? Habe den Fall nicht behandelt weil es eigentlich nichts gibt was dann gemacht werden muss wenn die beiden wirklich gleich sind kann ich ja weder den PWM Wert erhöhen noch verkleinern. Daher messe ich nur die beiden Spannungen wieder. Für diesen Fall wäre dann der Tastgrad ja fix und sobald sich die Last ja gleich verändert trifft ja wieder einer der beiden Fällen ein. Weil die Feedback Spannung steigt oder sinkt. Hermann Kokoschka schrieb: > Nebenbei: > Deine Quelltext-Formatierung kommt einer völligen Katastrophe gleich, Habs gerade auch gesehen. Ist die Originale C Datei aus meiner Projektmappe. In Atmel Studio 7 sieht es ganz normal aus. Hermann Kokoschka schrieb: > das ist unglaublich ärgerlich! Tut mir leid. Wenn du mir sagt was ich ändern muss damit es passt kann ich den Source Code wohl nochmal uploaden. Veit D. schrieb: > resete ihn mal kurz nach Spannung anlegen. Das wäre der Effekt wie nach > flashen nur eben ohne flashen. Bin mir nicht ganz sicher ob es nur am Resetpin liegt. Diese Platine die jetzt habe ist Revision 2.0. Auf der 1.0 ist die fast gleiche Schaltung drauf bzw. um den Mikrocontroller rum ist es die gleiche nur ist bei Rev 1.0 ein PDIP Chip verbaut. Aufgrund des Platzmangels musste ich bei Rev 2.0 ein SMD Chip einsetzten. Veit D. schrieb: >Ansonsten teste durchaus einmal 10k am > Resetpin. Also im Moment läuft er wieder ohne Problem an, hab's erst mit 10k ausprobiert danach noch ein paar mal ein und ausgeschaltet ohne Widerstand. Software habe ich nicht geändert. Muss morgen nochmal schauen. Wie es dann aussieht. Mfg
Hermann Kokoschka schrieb: > Nebenbei: > Deine Quelltext-Formatierung kommt einer völligen Katastrophe gleich, > das ist unglaublich ärgerlich! Das macht übrigens die Forensoftware. Wenn man es runterlädt sieht es in einem Editor, abgesehen von der Kommentarspalte, ordentlich aus. Ich habe auch keinen Fehler entdecken können. Abgesehen vom Warten auf den ADC beim read. Das hätte ich in einem IRQ abgefragt. Aber das hat mehr mit dem Zeitverhalten als der Nichtfunktion zu tun. Evtl. steigt die Betriebsspannung zu langsam an, so daß er nicht ordentlich resettet. Das Neubrennen erzeugt im Prinzip einen Reset. Gleiches erreicht man übrigens auch mit den Aufruf von avrdude ohne schreiben.
Felix N. schrieb: > Hat jemand ne Ahnung woran das liegen kann? Das nicht direkt, aber was mir aufgefallen ist: Du berücksichtigst in keinster Weise, was das DB an Verfahrensweisen für die Initialisierung des Timer1 mit PLL-Takt empfiehlt. Ob das mit dem beobachteten Fehlverhalten zu tun hat? Keine Ahnung. Ich mache es nämlich immer so, wie es das DB empfiehlt und meine Schaltregler funktionieren dann. Immer und nicht nur direkt nach dem Programmieren...
Felix N. schrieb: > Nur tut aus irgend ein Grund der Mikrocontroller nach einem Neustart > dieses nicht (...) > Hat jemand ne Ahnung woran das liegen kann? Warum deaktivierst Du den Brownout-Detektor, wenn Du Probleme mit dem Power-Up hast? > B.O.D: Disabled Grüßle Volker
:
Bearbeitet durch User
Andreas B. schrieb: >> Deine Quelltext-Formatierung kommt einer völligen Katastrophe gleich, >> das ist unglaublich ärgerlich! > Das macht übrigens die Forensoftware. Wenn man es runterlädt sieht es in > einem Editor, abgesehen von der Kommentarspalte, ordentlich aus. Vermutlich ist in deinem Editor die Tab-Weite auf 4 gestellt, während die Forensoftware eine Tab-Weite von 8 hat. Wenn du den Editor mal auf 8 stellst, sieht es genauso ausgefranst aus. Das ist einer der Hauptgründe, weshalb man Tabs meiner Meinung nach nie zur Quellcodeformatierung nutzen sollte.
Bezüglich des Fehlverhaltens kann ich leider nichts beitragen, aber zwei Anmerkungen: 'OCR1C = 212; //Set PWM Frequency to 150KHz' ohne dass CTC1 gesetzt ist? 'TIMSK |= (1<<OCF0A);' funktioniert nur dank der Weitsicht (Faulheit?) der Atmel-Entwickler.
Rolf M. schrieb: > Das ist einer der > Hauptgründe, weshalb man Tabs meiner Meinung nach nie zur > Quellcodeformatierung nutzen sollte. Alle Programmierer, die ich kenne sind sich da einig. Umso erstaunlicher finde ich, dass beinahe jede IDE dennoch Tabs zum Einrücken vorgibt. Ich würde auch dringend empfehlen, den Reset Pin zu beschalten. Der interne Pull-Up hat ungefähr 40kΩ. Die Leitung zum ISP Stecker stellt damit eine wunderbare Antenne für Radiowellen dar. Und davon hast du in der Umgebung reichlich. Dazu kommt, dass dieser Pin schon bei viel weniger Spannung (unterhalb von VCC) auslöst, als ein normaler Logik-Pin.
S. Landolt schrieb: > Bezüglich des Fehlverhaltens kann ich leider nichts beitragen, aber zwei > Anmerkungen: > > 'OCR1C = 212; //Set PWM Frequency to 150KHz' ohne dass CTC1 gesetzt ist? Im PWM-Modus würde er tatsächlich 300kHz erzeugen, wäre da nicht auch noch die Wahl des Prescalers: > TCCR1 |= (1<<CS11); //Prescaler PCK/2 Also, insofern passt das schon.
Rolf M. schrieb: > Vermutlich ist in deinem Editor die Tab-Weite auf 4 gestellt, Gerade mal geschaut: Stimmt, das ist bei mir die Voreinstellung und es sind Tabs im Code. Ich verwende zwar auch keine Tabs, aber das: Hermann Kokoschka schrieb: > Deine Quelltext-Formatierung kommt einer völligen Katastrophe gleich, > das ist unglaublich ärgerlich! Ist dann doch etwas übertrieben. ;-) Zumal eine Tabweite von 8 in einer Editoransicht doch etwas ungewöhnlich ist. Ansonsten: Zum Reset ist schon alles gesagt.
> Also, insofern passt das schon.
Tja, völlig falsch gesehen - mein Wochenende fängt ja gut an.
Andreas B. schrieb: > Zumal eine Tabweite von 8 in einer Editoransicht doch etwas ungewöhnlich > ist. Heute ja, früher war das Standard. Es gab sogar Editoren, die bei einem Tab nicht an die nächster 8er Position sprangen, sondern es wie 8 Leerzeichen darstellten. Also 2 Leerzeichen + Tab ging zur Position 10 (nicht 8 wie es sein sollte).
Wie bist du eigentlich zu der Aussage aus dem Titel gekommen " inkrementiert Variable nicht mehr"?
c-hater schrieb: > Du berücksichtigst in keinster Weise, was das DB an Verfahrensweisen für > die Initialisierung des Timer1 mit PLL-Takt empfiehlt Moin, Doch hatte ich mal, aber damit hatte es nicht funktioniert. Wahrscheinlich habe ich es aber falsch gemacht. Im Datenblatt steht bei mir unter 12.2.1 "Timer/Counter1 Initialization for Asynchronous Mode"
1 | To set Timer/Counter1 in asynchronous mode first enable PLL and then wait 100 μs for PLL to stabilize. Next, poll |
2 | the PLOCK bit until it is set and then set the PCKE bit. |
Darunter verstehe ich PLL Bit in PLLCSR setzten. _delay_us(100) um 100uS zuwarten dann PLOCK setzten und warten das PLOCK gesetzt ist und dann PCKE Bit setzten. Umgesetzt habe ich das so.
1 | PLLCSR = (1<<PLLE); |
2 | _delay_us(100); |
3 | PLLCSR |= (1<<PLOCK); |
4 | while(PLLCSR & (1<<PLOCK)); |
5 | PLLCSR |= (1<<PCKE); |
Bleibt aber in der while Schleife hängen. Im Register PLLCSR für Bit 0 (PLOCK) steht dran noch drin das man das PLOCK Bit prüfen soll bevor man PCK für Timer/Counter1 aktiviert. Aber scheint ja nicht gesetzt zu sein sonst würde er ja nicht in der while Schleife hängen bleiben. Oder? Rolf M. schrieb: > Das ist einer der > Hauptgründe, weshalb man Tabs meiner Meinung nach nie zur > Quellcodeformatierung nutzen sollte. Stefan ⛄ F. schrieb: > dass beinahe jede IDE dennoch Tabs zum Einrücken vorgibt. Ähmm, was soll man dann nehmen? Leerzeichen? Volker B. schrieb: > Warum deaktivierst Du den Brownout-Detektor, wenn Du Probleme mit dem > Power-Up hast? Ist der Brownout-Detektor nicht dafür nur zuständig das der uC sich resetet wenn die Betriebsspannung unter ein gewisses level sinkt also zb. 4,3 V wenn gesetzt. Kann ich gerne aktivieren muss nur den Bootloader dann neubrennen. Die Betriebsspannung sollte keine Probleme machen die liegt bei 5,02V. Zumal es da immer noch ein komisches Verhalten vom Usbasp(vermutlich) gibt (siehe weiter unten). S. Landolt schrieb: > 'OCR1C = 212; //Set PWM Frequency to 150KHz' ohne dass CTC1 gesetzt ist? Ich bin mir nicht sicher ob ich das aktivieren darf ja es gibt das 7 Bit in TCCR1 (CTC1) aber das Datenblatt schreibt zu Bit 6 (PWM1A - Pulse Width Modulator A Enable)
1 | When set (one) this bit enables PWM mode based on comparator OCR1A in Timer/Counter1 and the counter |
2 | value is reset to $00 in the CPU clock cycle after a compare match with OCR1C register value. |
Das der PWM Mode aktiviert wird mit OCR1A und zurückgesetzt wird wenn der Wert von OCR1C gesetzt ist. S. Landolt schrieb: > 'TIMSK |= (1<<OCF0A);' funktioniert nur dank der Weitsicht (Faulheit?) > der Atmel-Entwickler. Upps ist das TIFR Register nicht TIMSK, habs geändert. Hatte ich aber auch nicht selbst geschrieben, war eine mehr oder weniger fertige Lib von Github. Stefan ⛄ F. schrieb: > Ich würde auch dringend empfehlen, den Reset Pin zu beschalten. Der > interne Pull-Up hat ungefähr 40kΩ Ja mache ich glaubig besser. Hatte mir nur dabei nix gedacht weil der hat denn eingebaut hat und ich schon ein paar ATTiny85 eingesetzt habe wenn man nicht so viele I/O-Pins braucht und den Externen Reset nie beschaltet habe und es ehrlich gesagt auch noch nie Probleme damit gegeben hat. Aber ich werde ein SMD oder THT 10K Widerstand schon irgendwie daran bekommen. Stefan ⛄ F. schrieb: > Die Leitung zum ISP Stecker stellt > damit eine wunderbare Antenne für Radiowellen dar. Oh ja mir fällt ja gerade noch was andere ein vllt. hat ja jemand ne Ahnung warum das so sein könnte. Ich programmiere den Chip mittels eines USbasp. Manchmal bzw. ehr schon häufig habe ich das Problem wenn die Schaltung läuft und die Hauptversorgungsspannung eingeschaltet ist also die Platine mit +5V und +12V versorgt wird(Auf der Platine sitzt noch ein ATMega2560 Prozessor für andere Dinge) kann ich den Chip nicht programmieren dann kommt immer nur:
1 | avrdude.exe: auto set sck period (because given equals null) |
2 | avrdude.exe: error: program enable: target doesn't answer. 1 |
3 | avrdude.exe: initialization failed, rc=-1 |
4 | Double check connections and try again, or use -F to override |
5 | this check. |
Ich muss dann die gesamte Platine stromlos machen, den USbasp anschließen er stellt ja sein eigenes Vcc bereit liegt aber nur bei 4,56V da die restliche Platine sich ja auch an dem Vcc bedient. Und dann kann ich ihn programmieren. Bzw. nachdem der Usbasp eingesteckt wurde kann ich die externen +5V auch wieder einschalten. Falls dazu jemand was weiß. Stefan ⛄ F. schrieb: > Wie bist du eigentlich zu der Aussage aus dem Titel gekommen " > inkrementiert Variable nicht mehr"? Weil ich mir den pwmVal Variable mittels des Software UART ausgegeben habe und nach der Programmierung schießt er von 0 auf etwa 38 hoch um +20V am Ausgang zuhalten wenn +12V anliegen bzw. 0 auf 195 wenn keine +12V anliegen. Wenn man ihn dann aber neustartet dann zählte er im ersten Durchlauf von 0 auf 1 hoch, also pwmVal, dann wurde die erste if Schleife immer wieder aufgerufen da Feedback 0V ist und Poti bei etwa 3,2V aber der pwmVal bleibt nur bei 1 er wird nicht weiter erhöht deswegen. Wenn man aber das Poti verstellt ändert sich auch der entsprechende ADC Wert. Aber im Moment tut er wieder wie er soll obwohl ich nix verändert habe gestern Nacht um 2 Uhr sah das noch anderes aus. Mfg
Felix N. schrieb: >> dass beinahe jede IDE dennoch Tabs zum Einrücken vorgibt. > Ähmm, was soll man dann nehmen? Leerzeichen? Ja bitte. Das ist das Erste, was ich bei jedem Texteditor und jeder IDE gleich nach der Installation umstelle. Und ich rate auch jedem Kollegen, es zu tun. In der Firma haben wir für diverse IDEs entsprechende Konfigurations-Sätze vorbereitet, die man nur laden muss.
Felix N. schrieb: > Aber ich werde ein SMD oder THT 10K Widerstand schon > irgendwie daran bekommen. Nimm ruhig noch einen 100nF Kondensator dazu viel weniger Ohm (z.B. 1kΩ). Sicher ist sicher. Zwischen Pin 5 und 6 vom ISP Stecker wäre Platz. Da deine Platine eine eigene Stromversorgung hat, sollst du vom USBASP den Stromversorgung-Jumper abziehen. Für diene Konstellation ist das Ding aber eh suboptimal. Weniger problematisch wäre ein Programmieradapter mit Treiberbaustein, dem es egal ist welche der beiden Seiten zuerst mit Spannung versorgt wird und wie hoch diese ist. > Wenn man ihn dann aber neustartet dann zählte er im > ersten Durchlauf von 0 auf 1 hoch, also pwmVal, dann > wurde die erste if Schleife immer wieder aufgerufen da > Feedback 0V ist und Poti bei etwa 3,2V aber der pwmVal > bleibt nur bei 1 er wird nicht weiter erhöht deswegen. Ich kann dir da nicht ganz Folgen. Ich habe aber das Gefühl, dass deine Schlussfolgerung eventuell falsch ist. Hast du erwägt, dass der µC eventuell gar nicht richtig läuft und z.B. immer wieder einen Reset macht? Um so etwas zu prüfen, lasse ich immer eine LED regelmäßig blinken (in der Hauptschleife, nicht per Interrupt).
>dann wurde die erste if Schleife immer wieder aufgerufen Hartes Brot. ;-) Ein Boost-Converter transportiert Energiehäppchen vom Eingang zum Ausgang. Die ADC des AVR sind eher gemächlich, zudem senken die delay_ms(1) die Zykluszeit weiterhin. Nimm lieber einen Timer und sample äquidistant. Blockierst du zu lange, geht bei fehlender Last der Ausgang durch. Mit einer Zenerdiode und NPN parallel zu R16 kannst du für diesen Ausnahmezustand dem MOSFET die Ansteuerung stilllegen.
Felix N. schrieb: > Doch hatte ich mal, aber damit hatte es nicht funktioniert. > Wahrscheinlich habe ich es aber falsch gemacht. Hast du. Im Datenblatt steht bei > mir unter 12.2.1 "Timer/Counter1 Initialization for Asynchronous Mode" > >
1 | > To set Timer/Counter1 in asynchronous mode first enable PLL and then |
2 | > wait 100 μs for PLL to stabilize. Next, poll |
3 | > the PLOCK bit until it is set and then set the PCKE bit. |
4 | > |
Hier steht doch sehr deutlich, wie es richtig geht. Also deinen Code mal etwas umgepfriemelt:
1 | PLLCSR = (1<<PLLE); |
2 | delay_us(100); |
3 | while(!(PLLCSR & (1<<PLOCK))); |
4 | PLLCSR |= (1<<PCKE); |
Es sei aber angemerkt, dass diese Sache nicht das einzige ist, was zu berücksichtigen ist. Also schön weiter lesen im DB, da kommt noch mehr...
Rolf M. schrieb: > Wenn du den Editor mal auf 8 > stellst, sieht es genauso ausgefranst aus. Ja tut es. In Atmel Studio steht Tab Size auf 4 und Indent size auch auf 4 mit Keep tabs Stefan ⛄ F. schrieb: > Ja bitte. Das ist das Erste, was ich bei jedem Texteditor und jeder IDE > gleich nach der Installation umstelle. Und ich rate auch jedem Kollegen, > es zu tun. In der Firma haben wir für diverse IDEs entsprechende > Konfigurations-Sätze vorbereitet, die man nur laden muss. OK. Kannst du mir auch verraten warum? Seitdem ich mit Java 2013 angefangen habe nutze ich eigentlich nur Tabs für die Formatierung. Stefan ⛄ F. schrieb: > Nimm ruhig noch einen 100nF Kondensator dazu viel weniger Ohm (z.B. > 1kΩ). Sicher ist sicher. Sonst habe ich immer 10k von EXT RST nach Vcc genommen. Und der 100nF Kondensator nach Masse um zu puffern? Stefan ⛄ F. schrieb: > sollst du vom USBASP > den Stromversorgung-Jumper abziehen. Werde ich mal testen. Stefan ⛄ F. schrieb: > Für diene Konstellation ist das > Ding aber eh suboptimal. Wie meinst du das? Stefan ⛄ F. schrieb: > Ich kann dir da nicht ganz Folgen. Ich habe aber das Gefühl, dass deine > Schlussfolgerung eventuell falsch ist. Hast du erwägt, dass der µC > eventuell gar nicht richtig läuft und z.B. immer wieder einen Reset > macht? Ich bin mir nicht ganz genau sicher ob er sich immer wieder selbst resettet wo ich den Code mit der Ausgabe zum Terminal hatte kam er in die erste if Schleife weil die Feedback Spannung 0V war ist auch richtig da ich die +12V nicht angeschlossen hatte die Potentiometer Spannung lag aber um 3,2 V (Einstellung für +20V Ausgangsspannung) und pwmVal wird mit 0 initialisiert. Die erste Ausgabe war daher 0 -> 1. Danach 1 -> 2 usw. Er zählt dann bis 190 hoch, 190 ist das max von OCR1A da sonst das PWM Signal zu weit runter ging vom Pegel her und das es dann für den MOSFET nicht mehr genug ist zum Durchsteuern. Wenn man dann +12v angeschlossen hat wurde durch die zweite if Schleife der PWM Wert wieder runterregelt so das sich eine Ausgangspannung von 20V einstellt. Wenn man dann den Controller "neu gestartet" hat also Platine spannungslos und wieder Spannung drauf kam nur noch 0 -> 1 dann kam der nächste Durchlauf von der if Schleife und da hatte pwmVal ein Wert vor der inkrementierung von 1 und nach der inkrementierung immer noch von 1. Hatte die Variable pwmVal auch mal static gemacht damit sie ein festen Speicherplatz im RAM bekommt hat aber nix geändert. Ob es jetzt wirklich am Reset liegt weiß ich nicht, weil normalerweiße müsste die erste Ausgabe immer dann 0 -> 1 sein und nicht mit 1 -> 1 beginnen da mit 0 initialisiert wird vor der while(true) Schleife. So sah der Code zum Terminal aus:
1 | if(potiInput > feedbackInput) { |
2 | if(pwmVal != 180) { |
3 | sprintf(buffer, "PWMVal before Inc: %d -> ", pwmVal); |
4 | UART_tx_str(buffer); |
5 | pwmVal = pwmVal + 1; |
6 | sprintf(buffer, "%d after increase\r\n", pwmVal); |
7 | UART_tx_str(buffer); |
8 | OCR1A = pwmVal; |
9 | } |
10 | }else if(potiInput < feedbackInput) { |
11 | ... |
12 | } |
Verstehst du was ich meine? c-hater schrieb: > Hier steht doch sehr deutlich, wie es richtig geht. Also deinen Code mal > etwas umgepfriemelt: Wird das PLOCK Bit von selbst gesetzt, sobald sich die PLL eingeschwingt hat? c-hater schrieb: > Es sei aber angemerkt, dass diese Sache nicht das einzige ist, was zu > berücksichtigen ist. Also schön weiter lesen im DB, da kommt noch > mehr... Und was? Danach ist der Timer1 initialisiert und mit OCR1C ist die PWM Frequenz eingestellt. Was soll denn da noch eingestellt werden damit er "richtig" arbeitet? Mfg
Felix N. schrieb: > Kannst du mir auch verraten warum? Um die Probleme zu vermeiden, um die gerade diskutiert wird.
Felix N. schrieb: > Sonst habe ich immer 10k von EXT RST nach Vcc genommen. Und der 100nF > Kondensator nach Masse um zu puffern? Der Kondensator schließt HF Anteile (Radiowellen) kurz. Ohne Kondensator sind weniger Ohm angeraten.
>> Für deine Konstellation ist das Ding aber eh suboptimal. > Wie meinst du das? Du hast das Problem selbst beschrieben. Die Baugruppen blockieren sich gegenseitig, je nach dem welche zuerst mit Strom versorgt wird. Das ist auch ganz leicht zu erklären: Jeder I/O Pin darf nur Spannungen zwischen GND und VCC bekommen. Ohne Versorgungspannung ist das der Bereich zwischen 0V und 0V. Wenn nun eine Baugruppe die schon Versorgt wird ein Signal an eine andere Baugruppe sendet, die nicht versorgt wird, dann brichst du diese Regel und dann blockiert manchmal was. Manchmal geht dabei auch etwas kaputt. Die besseren Programmieradapter haben wie gesagt Treiberbausteine, die vom Target versorgt werden und denen ist es egal, welche Seite zuerst versorgt wird.
Felix N. schrieb: > Wenn man dann den Controller "neu gestartet" hat also Platine > spannungslos und wieder Spannung drauf kam nur noch 0 -> 1 dann kam der > nächste Durchlauf von der if Schleife und da hatte pwmVal ein Wert vor > der inkrementierung von 1 und nach der inkrementierung immer noch von 1. Das kann nicht sein. Wenn du eine Variable inkrementierst dann wird sie inkrementiert. Ich halte es für völlig unmöglich, dass ein Befehl nicht das tut, was er tun soll. Es sei denn, du hast eine instabile Stromversorgung. Diese kann sogar zu Veränderungen des Programms im Flash Speicher führen. Das kannst du mit dem Programmieradapter überprüfen (read/verify).
Felix N. schrieb: > Ähmm, was soll man dann nehmen? Leerzeichen? Ja Felix N. schrieb: > Die Betriebsspannung sollte keine Probleme > machen die liegt bei 5,02V. Es geht nicht um die Betriebsspannung an sich. Wenn die zu langsam beim Einschalten ansteigt, bekommst Du keinen richtigen Reset. Dann wird ein extra Resetbaustein benötigt.
Felix N. schrieb: > Wird das PLOCK Bit von selbst gesetzt, sobald sich die PLL eingeschwingt > hat? "eingeschwungen hat"... Ja, genau so ist es. Das Problem ist nur: es wird auch vorher schon (zu Beginn des Lock-Prozesses) gelegentlich zufällig gesetzt. Deswegen die Wartezeit vor Beginn des Polling. Das Hauptproblem deines Codes war aber natürlich, dass du auf den falschen Bitstatus gewartet hast, nicht auf high, sondern auf low... Man sollte seine selbstgewählte Programmiersprache schon einigermaßen beherrschen, das ist i.A. sehr hilfreich... > Und was? Danach ist der Timer1 initialisiert und mit OCR1C ist die PWM > Frequenz eingestellt. Das ja, weil du die Initialisierung vor die Aktivierung des PLL-Taktes gelegt hast. Dagegen ist nix einzuwenden, mache ich natürlich i.d.R. genau so, weil es viel einfacher ist. Aaaber: ich benutze später dann den Kern der Sache (also das OCR-Register) praktisch immer synchron zum Timer. Du tust das in deiner (dummen) Haupschleife in main() nicht. Deswegen schlägt bei dir an dieser Stelle voll alles an Synchronisierungs-Problemen zu, was das DB im Rahmen der Initialisierung beschreibt. Merke: asynchrone Baugruppen haben praktisch immer fiese Fallen... Auch deswegen (aber nicht nur deswegen) müsste man das ganze Konzept deines Regler als deutlich suboptimal einstufen. Ein guter Schaltregler synchronisiert natürlich auch die Messung der IST-Größe mit den Aktivitäten des Timers (die AVR8-Hardware stellt deswegen die Unterstützung dafür natürlich auch bereit). Und auch der Regler selber läuft sinnvollerweise mit dem Timer synchronisiert und nicht in main() mit kaum vorhersehbarer Aufrufrate. Außerdem gibt es natürlich Regler mit deutlich besseren Regel-Eigenschaften als der von dir gewählte Algorithmus. Der ist nur für Regelungen mit nahezu konstanter Last einigermaßen brauchbar. Stromregelung für ein LCD-Backlight wäre z.B. OK. Ansonsten aber dürfte er für die meisten Anwendungen wenig brauchbar bis vollkommen unbrauchbar sein.
Stefan ⛄ F. schrieb: > Der Kondensator schließt HF Anteile (Radiowellen) kurz. Ohne Kondensator > sind weniger Ohm angeraten. Hallo, So ich habe jetzt auf der Rückseite des PCB am ICSP Anschluss ein 100nF 0805 X7R SMD Kerko zwischen Reset und Masse angelötet sowie ein 1k Ohm Widerstand zwischen +5V und Reset. Gewinnt garantiert kein Schönheitspreis funktioniert aber. Stefan ⛄ F. schrieb: > Die besseren Programmieradapter haben wie gesagt Treiberbausteine, die > vom Target versorgt werden und denen ist es egal, welche Seite zuerst > versorgt wird. Also ich habe das mit dem Entfernten Jumper ausprobiert hat kein Unterschied gemacht. Kann das Ding nur Programmieren wenn der USbasp das Teil alleine versorgt. Was wäre denn deiner Meinung nach ein guter ICSP Programmieradapter? Dieser Atmel STK500? Stefan ⛄ F. schrieb: > Es sei denn, du hast eine instabile Stromversorgung. Diese kann sogar zu > Veränderungen des Programms im Flash Speicher führen. Das kannst du mit > dem Programmieradapter überprüfen (read/verify) Also Spannungsversorgung kann ich ausschließen. Alle IC's haben 100nF Abblockkondensatoren. Und die +5V Rail selbst ist durch ein 2200uF Kondensator noch gepuffert. In der Tat ist manchmal das Verifizieren des Flash fehlgeschlagen, dann habe ich einfach das Programm nochmal hochgeladen. Andreas B. schrieb: > Es geht nicht um die Betriebsspannung an sich. Wenn die zu langsam beim > Einschalten ansteigt, bekommst Du keinen richtigen Reset. Dann wird ein > extra Resetbaustein benötigt. Ja gut aber sollte das wirklich der Fall sein dann müsste die andere CPU die auf der Platine verbaut ist ja ähnliche Probleme herbei führen. Und die läuft wie sie soll. c-hater schrieb: > Man sollte seine selbstgewählte Programmiersprache schon einigermaßen > beherrschen, das ist i.A. sehr hilfreich... Gut bin kein Informatiker, habs mir selbst beigebracht. Hatte das im Datenblatt so verstanden das ich das PLOCK Bit setzten muss und das es dann endgültig im Register gesetzt wird vom Prozessor wenn die PLL Stabil ist. Daher die Abfrage nach HIGH. c-hater schrieb: > ich benutze später dann den Kern der Sache (also das > OCR-Register) praktisch immer synchron zum Timer. Ja gut das ist ja klar der Timer1 läuft ja jetzt viel schneller als die eigentlich CPU hier 16 MHz. Bei 64 MHz PLL Takt und einem Prescaler von 2 läuft der Timer1 ja auf 32 MHz also doppelt so schnell wie die eigentliche CPU. Jetzt mache ich ja nur PWM mit dem Timer. Wenn ich doch in meiner main Schleife jetzt den PWM Wert ändere wird doch eh auf den nächsten Durchlauf vom Timer gewartet damit sich der PWM-Wert ändert oder nicht? Der Timer zählt doch von 0 bis OCR1C. Wie soll man denn dann mit dem CPU Takt synchronisieren über Interrupts? Es gibt ja das "Timer/Counter1 Compare Match B" Interrupt. Wollte beim ADC auch noch den ADC Interrupt aktivieren wenn der ADC fertig ist das ich dann in der ISR die Messwerte auslese kann ich mir zu mindestens das _delay_ms(1); in der readADC Funktion sparen. c-hater schrieb: > Ein guter Schaltregler c-hater schrieb: > Außerdem gibt es natürlich Regler mit deutlich besseren > Regel-Eigenschaften als der von dir gewählte Algorithmus Ich hätte ja auch (am liebsten) ein fertigen Schaltregler genommen wie zB. ein LM2576 gut der LM2576 ist jetzt ein Step Down Wandler aber ein passenden Aufwärtswandler der etwa 30-35 Watt Leistung zur Verfügung stellt habe ich nicht gefunden daher habe ich mich für die "diskrete" Aufbau weiße entschieden. c-hater schrieb: > Ansonsten aber dürfte > er für die meisten Anwendungen wenig brauchbar bis vollkommen > unbrauchbar sein. Betrieben werden damit zwei LED Röhren für mein Aquarium beide haben 16,2 Watt Leistungsaufnahme und erzeugen 1850 Lumen. Macht also 32,2 Watt(3700lm). Falls jemand sich für die Daten interessiert wie mein Boost Converter so performt: Input: U: 12V I: 2,94 A P: 35,3 Watt Output: U: 19,85 V (eingestellt auf 20V) I: 1,59 A P: 31,5 Watt n =~ 89,2 %. Hätte selbst gedacht das der Converter schlechter abschneidet aber mit den 89 % bin ich mehr als zufrieden. Mfg
Felix N. schrieb: > Dieser Atmel STK500? Nein, das Atmel STK500 ist ein teures altes Experimentierbrett. Ich bin mit meinem "Atmel ISP mkII" sehr zufrieden, den kann man aber auch nur gebraucht oder nachgebaut kaufen. Wobei ich nicht weiß wie gut die Nachbauten sind. Ich empfehle gerne den grünen "Diamex USB ISP Stick". Bisher hat sich bei mir und hier im Forum noch keiner beklagt, dass er damit unzufrieden sei. Zu den aktuellen Produkten von Microchip kann ich mich nicht äußern. Da fragst du am besten mal die Community in einem eigenen Thread. Überlege dir mal, ob ein richtige Hardware Debugger für dich interessant wäre. Dann wäre ein "Atmel ICE" zu empfehlen.
Stefan ⛄ F. schrieb: > Nein, das Atmel STK500 ist ein teures altes Experimentierbrett. Ah alles klar. Stefan ⛄ F. schrieb: > Ich bin mit meinem "Atmel ISP mkII" sehr zufrieden, den kann man aber > auch nur gebraucht oder nachgebaut kaufen. Also nachgebaut kann man die zwischen 15,99 und 35,99 Euro auf Amazon kaufen. Muss ich mir mal überlegen Stefan ⛄ F. schrieb: > Ich empfehle gerne den grünen "Diamex USB ISP Stick" Schaue ich mir mal an. Danke. Stefan ⛄ F. schrieb: > Überlege dir mal, ob ein richtige Hardware Debugger für dich interessant > wäre. Dann wäre ein "Atmel ICE" zu empfehlen. Hardware Debugger das heißt das man im Programm auch Breakpoint setzten kann um das Programm anzuhalten und zu analysieren? Also so wie ein Debugger bei einem normalen Programm auf dem Computer? Hat natürlich ein stolzen Preis mit 150 Euro. Nochmal zum Problem. Ich habe jetzt im Programm eine Schleife eingeführt die nach dem Programmstart ca. 1,5 Sekunden wartet und erst dann mit der eigentlichen Reglung anfängt. Ist zwar Holzhammer Methode hoch 10. Aber bis jetzt klappt das eigentlich ganz gut der Converter schaltet sich halt verzögert ein.
1 | while(startUpWait < 1500) { |
2 | OCR1A = 0; |
3 | pwmVal = 0; |
4 | feedbackInput = readADC(3) / 4; |
5 | startUpWait++; |
6 | } |
Es handelt sich ja hier um meine Platine in der Rev 2.0. Der Boost Converter war ja auch schon auf Rev 1.0 vorhanden nur war dort der ATTiny85 in einem IC-Sockel gesockelt drin. Der einzige Unterschied ist das halt auf der neuen Platine der ICSP Stiftleiste mit drauf ist da der uC halt als SMD ausgeführt ist. Wenn ich mich recht erinnere nutze der andere IC damals ein Takt von 8 MHz(intern) und den Timer1 im Synchron Modus. PWM Frequenz lag glaubig bei 62,5KHz oder 32 KHz. Konnte aber mit 150KHz eine deutlich besseren Wirkungsgrad erzielen. Könnte das evtl. auch was mit den 16MHz Takt (PLL) zutun haben dem der Prozessor jetzt läuft? Mfg
Wie kommt man eigentlich auf die Idee, einen MC als Converter-IC zu benutzen? Ja, es geht, und als Abfallprodukt nebenbei kann man das auch machen wenn der MC eh da ist (ich habs noch nie gemacht). Passende ICs gibts in Massen, und die können alles besser. Das einzige, was ich gelten lassen würde: "ich will was lernen". Als tatsächliche Anwendung ziemlich sinnlos.
Stefan ⛄ F. schrieb: > Felix N. schrieb: >>> dass beinahe jede IDE dennoch Tabs zum Einrücken vorgibt. >> Ähmm, was soll man dann nehmen? Leerzeichen? > > Ja bitte. Das ist das Erste, was ich bei jedem Texteditor und jeder IDE > gleich nach der Installation umstelle. Und ich rate auch jedem Kollegen, > es zu tun. In der Firma haben wir für diverse IDEs entsprechende > Konfigurations-Sätze vorbereitet, die man nur laden muss. Man kann sich auch für sein Versionierungstool einen pre-commit hook schreiben, der vor dem Commit alle Tabs durch Leerzeichen ersetzt. Man muss nur daran denken, die Makefiles - sofern vorhanden - davon auszunehmen. Felix N. schrieb: > Stefan ⛄ F. schrieb: >> Ja bitte. Das ist das Erste, was ich bei jedem Texteditor und jeder IDE >> gleich nach der Installation umstelle. Und ich rate auch jedem Kollegen, >> es zu tun. In der Firma haben wir für diverse IDEs entsprechende >> Konfigurations-Sätze vorbereitet, die man nur laden muss. > > OK. Kannst du mir auch verraten warum? Seitdem ich mit Java 2013 > angefangen habe nutze ich eigentlich nur Tabs für die Formatierung. Die Diskussion Tabs vs. Spaces ist schon recht alt und bereits oft genug geführt worden.
Felix N. schrieb: > Und die +5V Rail selbst ist durch ein 2200uF > Kondensator noch gepuffert. Sicher daß Dein Spannungsregler das schafft? Wozu soll das gut sein? Das verschlechtert i.A. die Regeleigenschaften des Spannungsreglers. Das deutet im übrigen schon darauf hin, daß die Spannung beim Einschalten zu langsam ansteigt. QED! Dazu DB Table 21.5 Characteristics of Standard Power-On Reset: Power-on slope rate max 4.5V/ms Das schafft Du mit Deinem 2200uF Elko vermutlich nicht. > Ja gut aber sollte das wirklich der Fall sein dann müsste die andere CPU > die auf der Platine verbaut ist ja ähnliche Probleme herbei führen. Nö, es gibt Bauteiletoleranzen. So etwas mißt man im Zweifelsfall nach und verläßt sich nicht auf die Glaskugel. H.Joachim S. schrieb: > Als > tatsächliche Anwendung ziemlich sinnlos. Sehe ich übrigens genauso. Die Regeleigenschaften lassen sehr zu wünschen übrig. Vor allem wenn man das so simpel macht wie der TO. Aber zum lernen ist es ok, stimmt.
:
Bearbeitet durch User
Andreas B. schrieb: > Power-on slope rate max 4.5V/ms > Das schafft Du mit Deinem 2200uF Elko vermutlich nicht. Sorry, hier gilt min. slope rate 0.01 V/ms. Könnte also noch mit diesem C passen, sollte man aber trotzdem prüfen.
Andreas B. schrieb: > Andreas B. schrieb: >> Power-on slope rate max 4.5V/ms >> Das schafft Du mit Deinem 2200uF Elko vermutlich nicht. > > Sorry, hier gilt min. slope rate 0.01 V/ms. Könnte also noch mit diesem > C passen, sollte man aber trotzdem prüfen. ...deshalb wundere ich mich ja schon die ganze Zeit, warum der TO die Brownout-Detection deaktiviert. Diese würde als Nebeneffekt auch einen sauberen Reset beim Einschalten der Versorgungsspannung liefern und verursacht keinen zusätzlichen Aufwand... Grüßle Volker
:
Bearbeitet durch User
H.Joachim S. schrieb: > Wie kommt man eigentlich auf die Idee, einen MC als Converter-IC zu > benutzen? Ja, es geht, und als Abfallprodukt nebenbei kann man das auch > machen wenn der MC eh da ist (ich habs noch nie gemacht). Das ist eine sehr sinnvolle Anmerkung. Die Umsetzung mittels µC ergibt i.d.R. nur dann einen Sinn, wenn es quasi "nebenbei" noch mit abfällt, weil genug Pins und ein geeigneter Timer "über" sind. Ansonsten nimmt man natürlich besser einen spezialisierten IC. Einen Extra-TinyX5 nur damit zu beschäftigen funktioniert zwar, ist aber viel komplizierter als nötig. Und sehr wahrscheinlich auch suboptimal im Vergleich zum Einsatz eines spezialisierten Wandler-IC.
> H.Joachim S. schrieb: > Wie kommt man eigentlich auf die Idee, einen MC als Converter-IC zu > benutzen? Ja, es geht, und als Abfallprodukt nebenbei kann man das auch > machen wenn der MC eh da ist (ich habs noch nie gemacht). Noch nie? Aber hier das große Wort führen. > Das ist eine sehr sinnvolle Anmerkung. Die Umsetzung mittels µC ergibt ... Von Ihnen ist auch nicht anderes zu erwarten. Fazit: Zwei die nichts können, aber andere belehren wollen. Jämmerlich. P. S. Baue selbst regelmäßig Step-Up & Step-Down Converter mit µCs. Natürlich ohne Probleme.
Herr W. Hausmann schrieb: > Fazit: Zwei die nichts können, aber andere belehren wollen. Jämmerlich. Du musst es ja wissen... > P. S. Baue selbst regelmäßig Step-Up & Step-Down Converter mit µCs. > Natürlich ohne Probleme. Ich auch, so what? Der Einwurf von H.Joachim S. drehte sich ja auch nicht darum, ob es prinzipiell geht (es geht natürlich), es drehte sich vielmehr darum, ob es tatsächlich wirklich sinnvoll ist. Und die Antwort darauf ist eben: ja, es ist sinnvoll, wenn man's im "Hauptcontroller" mit unterbringen kann, und es ist nicht sinnvoll, wenn man einen zusätzlichen µC dafür einsetzen muss. Dann ist ein spezialisierter Schaltwandler-IC praktisch immer die bessere Lösung.
Herr W. Hausmann schrieb: > P. S. Baue selbst regelmäßig Step-Up & Step-Down Converter mit µCs. > Natürlich ohne Probleme. Respekt :-) Jetzt fehlt noch die Aufzählung der Vorteile gegenüber einem Spezial-IC. Naja - was heisst Vorteile? Einer genügt mir auch. Nachteile hätte ich einige.
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.