Guten Abend Hoffe hier kann mir einer helfen bzw. findet den Fehler. Teste schon das ganze Wochenende rum!! Zum AVR: es wird auf 8 Kanälen PWM erzeugt und an PortB (STK 500) ausgegeben --> gut das funktioniert. Da ich das PWM zu einer Gleichspannung per RC-Siebung/OP verwandle wollte ich das ganze testen d.h. PWM rauf und runter reeln und Spannungen prüfen. Tja wie regle ich das PWM --> da es nur zum testen ist habe ich im Hauptprogramm einfach einen Sprung auf das Unterprogramm "Tasten" gesetzt! Das Unterprogramm fragt den Status der Tasten ab an PinD --> entprellt diese und addiert bzw. subtrahiert einen Zahl vom Sollwert des PWM --> somit kann ich das PWM rauf und runter regeln. Wenn ich das ganze im AVRStudio 4 teste funktioniert das auch super --> nur wenn ich das ganze in echt auf dem AVR teste gehen die Tasten nicht. Vielleicht kann mir einer helfen Thanks @ all
Hi Sammy... - Du verwendest in Haupt: RCALL ohne RET, das gibt Stack-Überlauf. - Du fragst die Tasten in der Hauptschleife ab, das ist zu schnell. Das solltest du mit in der Timer-ISR erledigen. - Deine Tastenentprellung kann ich nicht ganz nachvollziehen, schau die mal die Routine von Peter Dannegger an, die ist absolut sicher: http://www.mikrocontroller.net/forum/read-1-140056.html#140084 - Das Verändern der PWM-Werte um 50 ist etwas heftig, außerdem gibt es keinen Schutz gegen Überlauf. Ansonsten kommt mir das Programm sehr bekannt vor ;-) ...
Abend HanneS Sorry für späte Antwort --> bin erst vor kurzem von Arbeit gekommen. Thanks für deine Datei bzw. Mühe. - Du verwendest in Haupt: RCALL ohne RET, das gibt Stack-Überlauf. Tja das war der Grund warum nix funktioniert hat. Da habe ich mir meinen Stack schön zugemüllt --> da kanns nett gehen. Wie kann ich nur so einen Fehler übersehen??????????? - Deine Tastenentprellung kann ich nicht ganz nachvollziehen, schau die mal die Routine von Peter Dannegger an, die ist absolut sicher: http://www.mikrocontroller.net/forum/read-1-140056.html#140084 Wenn Bock hast kannst dir den Dateianhang ansehen. In meinem ersten Post/Dateianhang war ein Fehler im Interrupt Timer0--> kleiner Dreher von setze und lösche die Flags. Jetzt habe ich auch ne Erklärung hingeschrieben. Das Prinzip habe ich mal in einem Buch gelesen --> was haltest Du bzw. Ihr davon??? - Du fragst die Tasten in der Hauptschleife ab, das ist zu schnell. Das solltest du mit in der Timer-ISR erledigen. Ist klar das es zu schnell ist --> war nur ein Test Da der AVR überhaupt nett auf die Tasten reagiert hat (dank rcall) hatte ich einiges im Programm raus genommen (Fehler eingrenzen). - Das Verändern der PWM-Werte um 50 ist etwas heftig, außerdem gibt es keinen Schutz gegen Überlauf. Da die LED`s auf dem STK500 nicht jede Änderung des PWM sichtbar machen, deswegen der Wert 50 --> da gibt es dann nur an, aus und blinken --> so sehe ich sicher das der AVR die Taste mal einliest. Zum Thema Überlauf Wie gesagt die Tasten sind nur zu Testen --> PWM rauf und runter und schauen was die Glättung macht. Später kommen Tasten raus und der AVR bekommt seine Sollwerte von Windows per USB in das EEPROM geschrieben --> dauert noch etwas. Vielen Dank
Warum wieder das gesamte Projekt als Zip?? Nur die ASM-Datei hätte doch gereicht. Dein Programm ist doch einteilig. Ich habe mal kurz reingesehen, aber es nicht vollständig analysiert. Nimms mir nicht übel, aber es ist mir etwas zu undurchsichtig und hektisch. Wenn ich schon sehe, dass mit RJMP aus der ISR rausgesprungen wird. Schau mal, wieviele Takte du für diese Spaghettispringerei vertrödelst, die ISR soll möglichst kurz und übersichtlich sein. Deine Entprellung ist auch bedeutend länger als die von Peter und irgendwie auch umständlicher. Ich kann mich damit nicht anfreunden. Funktioniert sie denn wenigstens? Und hast du mal die oben gepostete "Test2.asm" angesehen, assembliert und getestet? Einen alten PC-Turboschalter (oder Reset-Taster) als Shift-Taste wirst du doch sicher finden, passt direkt auf die Stiftleiste von PortA auf GND und PA6 des STK500. Siehe Anhang... ...
Was soll das eigentlich mal werden, eine Lüftersteuerung für den PC?? Dann reichen weniger PWM-Stufen. Und dann sollte die PWM nicht bei Null (aus) beginnen, sondern bei einem Wert, bei dem die Lüfter noch sicher drehen. ...
Guten Morgen Stimmt die ASM-Datei reicht, poste ich auch in Zukunft. Ja ok, etwas hektisch. Das so mancher Takt vertrödelt wird ist auch richtig. Habe das gestern nur schnell nach Arbeit geschrieben, weil du gesagt hast du kannst die Tastenentprellung nicht nachvollziehen --> da kann man noch einiges optimieren! Ja, deine ASM läuft grad auf meinem AVR. Bin grad dabei das zu analysieren. Werde ich mal heute Abend weitermachen, da ich jetzt auf Arbeit muß. Lüftersteuerung für PC sagt dir nix? Das System ist ein AMD A64 mit Wasserkühlung --> da sollen die Radiator-, Gehäuselüfter je nach Lastzustand des Systems bzw. Wasser-,CPU- und Gehäusetemperatur geregelt werden. Warum --> der Geräuschpegel soll so klein wie möglich sein. Was meinst genau mit PWM-Stufen? Die 8 Kanäle oder Zählerumfang 100? Das von PWM 0 weg der Lüfter nicht sicher anläuft ist klar --> PWM 0 da ich die Lüfter auch anhalten will. Thanks nochmal an dich.
Hi... Sicher sagt mir Lüftersteuerung was. Ich wusste nur nicht, dass eine Wasserkühlung 8 Lüfter hat, also 8-fach PWM erfordert. So eine Lüftersteuerung ist ja auch eine feine Sache, wenn es nicht zum Selbstzweck ausartet. (Soll keine Kritik sein.) Da gibt es nur einige Dinge zu bedenken. Z.B. mögen viele bürstenlose Lüftermotoren keine PWM. Bei einigen spinnt dann die Elektronik, andere pfeifen mit der PWM-Frequenz. Statt leiser wird der PC lauter. Also glättet man die PWM. Das bedeutet aber, dass man die Lüfter mit geglättetem Gleichstrom betreibt. Aber wo glättet man? Direkt an der Last wird es recht aufwendig, also macht man das davor. Das bedeutet, dass das "Stellglied" für den Lüfter (Transistor, Spannungsregler...) Gleichspannung/Gleichstrom "dosieren" muss, was wiederum Leistung in Wärme umsetzt. Diese muss man nun zusätzlich abführen. Doch eigentlich wollte man doch die Wärme so gering wie möglich halten, oder? Wenn man nun den Wärmehaushalt und Lärm des PC als Ganzes betrachtet, wird Vieles fraglich weil oft das Gegenteil von dem erreicht wird was man eigentlich wollte. Dann soll das System per USB gesteuert werden. Was passiert, wenn sich der PC mal aufhängt? (soll ja gelegentlich vorkommen) Dann fehlen der Lüftersteuerung die Daten. Angenommen die Lüfter sind gerade recht langsam eingestellt, der PC läuft Amok, kommt aber nicht mehr in das Programm, das per USB mit der Lüftersteuerung kommuniziert. Das wäre mir zu heiß. Daher meine ich, dass eine Lüfter"steuerung" besser eine "Regelung" sein sollte, die ihre eigenen Sensoren hat und unabhängig vom PC funktioniert. So kann diese die Lüfter immernoch anpassen, wenn der PC sich schon lange aufgehängt haben sollte. Und eine Datenschnittstelle zum PC zur Visualisierung der aktuellen Werte kann ja trotzdem vorhanden sein. Dein 8515 bekommt also noch allerhand zu tun. Vielleicht muss auch ein anderer AVR-Typ her, der andere Features bietet (ADC?). Zumindest ist es sinnvoll, gleich von Anfang an etwas auf die Rechenzeit (also den sinnvollen Umgang mit Prozessortakten) zu achten. Die Timer-ISR wird ja nun periodisch aufgerufen, sie sollte daher extrem kurz sein. Zumindest, wenn man die PWM-Frequenz möglichst hoch haben möchte, um den Hardwareaufwand bei der Glättung in Grenzen zu halten. Der PWM-Zählumfang (also die Anzahl der Tempostufen) sollte nicht höher als erforderlich sein, den je geringer er ist, desto schneller wird die PWM-Frequenz. Ich denke mal, dass ich nicht in der Lage bin, mehr als 20...30 Tempostufen unterscheiden zu können, eher noch weniger. Kann sein, dass 10 Stufen schon genügen. Dass ich mich wehre, deine Entprellung zu analysieren, ist eine Frage des Aufwandes. Es ist nämlich schon ein schönes Stück Arbeit, fremden Code zu analysieren. Besonders, wenn er unzureichend kommentiert ist, wenn also die Kommentare das gleiche aussagen wie die Befehle selbst (war jetzt leicht übertrieben, was dich betrifft). Und wenn ich dann sehe, dass schonmal rund doppelt soviel Code erforderlich ist wie bei der Bulletproof-Routine von Peter, dann stellt sich die Frage warum sollte ich das analysieren, denn es kann doch garnicht besser sein. Wenn jemand ein (kleines) fehlerhaftes Programm veröffentlicht, um Hilfe bei der Fehlersuche zu bekommen, dann sollte das als unkomprimierte ASM-Datei (also sofort lesbarer Text!) erfolgen. Wenn ich erst entzippen mus, einen Ordner auf meiner Platte anlegen muss um mir die Textdatei anzusehen, dann ist der Lustfaktor schonmal bedeutend kleiner. Wenn ich aber mit einem Klick auf den Anhang einen gut lesbaren Programmtext angezeigt bekomme, bei dem sogar noch die Tabulator-Einrückungen halbwegs formatiert dargestellt werden, dann schau ich da gerne mal drüber. Dabei möchte ich anhand der Kommentare aber schon wissen, warum das so und nicht anders gemacht wurde. Wenn ich beim bloßen Lesen des Quelltextes Fehler entdecke, dann kann ich auch helfen. Wenn ich das aber erst in AVR-Studio simulieren muss oder gar in einen eigenen AVR brennen soll, dann frage ich mich, ob das den Aufwand wert ist, denn das artet in Arbeit aus. Deine Fehler (Stack) sind mir durch bloßes Lesen des Quelltextes aufgefallen. Ich höre allerdings mit dem Lesen auf, wenn unsinnig hinundher gesprungen wird, wenn der Code mangels Kommentare nicht nachvollziehbar ist bzw. wenn ich sehe, dass der Autor selbst nicht weiß was er tut. Drangeblieben bin ich eigentlich nur, weil ich feststellte, dass Teile des Programms von mir abgeschrieben sind (so wie ich auch gute Algorithmen anderer Leute übernehme). ...
Abend HanneS Ja acht Lüfter ist etwas viel, sind im Moment noch 2 Reserve bei ;-) . Am Anfang habe ich die Lüfter auch direkt mit PWM betrieben, wie du schreibst kann man das in die Tonne tretten. Ne saubere Gleichspannung muß her. Eine Glättung auf der Leistungsseite scheidet aus, da 1. zu hohe Verlustleitung und 2. zu hohe Spannungsfälle. Da sind wir beim nächsten Prob --> habe max. +12V vom Netzteil brauche nach Regelung aber +12V --> dürfte nicht machbar sein d.h. Spannungsfälle müssen so klein wie möglich bleiben. Meine grobe Idee ist: AVR erzeugt PWM --> RC-Glättung --> OPV soll/ist Regelung --> FET. Das scheint mir das beste zu sein, was meinst du dazu. Das mit USB ist falsch rüber gekommen --> der AVR und somit die Steuerung läuft absolut unabhängig von Win! Der AVR bekommt nur meine Sollwerte per Win über USB in den EEPROM geschrieben und liefert Messwerte (Temp, Drehzahl, Durchflußmenge usw.) an Win zurück. Sollten meine Sollwerte/Drehzahlen der Lüfter nicht reichen das Sys zu kühlen regelt der AVR per Kennlinie automatisch nach, sollte er zumindest mal machen wenn`s fertig ist. Du brauchst dich nicht rechtfertigen, ist schon ok so. Bin dir sehr dankbar für deine Mühe die test2.asm zu schreiben für mich. Bin etwas raus aus AVR und wirklich viel Erfahrung habe ich noch nicht, da ist man für jeden Tipp dankbar. Habe meine Entprellung nur nochmal gepostet weil ich dachte dich würde es interessieren --> die von Peter ist klasse keine Frage. Mit abgeschrieben meinst deine Sicherung der Carry-Flags beim PWM, oder?? Das ist raus aus diesem Forum. Mein PWM war gut doppelt so lang --> wenn´s einfacher geht, warum nicht. Werde in der Zukunft wenn ich einen Code hier rein stellen deine Ratschläge beachten. Thanks an dich
@Samy: Das "Einsammeln der Carry's" habe ich mir auch nur von Peter abgeguckt. Aber eben aus einem im Forum veröffentlichten Code und nicht aus einem gewerblich vertriebenem Programm. ;-) Bekannt kamen mir bei dir die Variablennamen (Register-Alias) vor. (PWZ, SOLL0...SOLL7) Eigentlich war das kein "Rechtfertigen". Mir war einfach mal danach, meine Meinung zu diesem Thema zu äußern. Das hat nichtmal was mit dir zu tun sondern ganz allgemein, in der Hoffnung, dass das auch Andere lesen. Und auf meine sarkastisch-humorige Art wird das eben manchmal stark überspitzt dargestellt. Klar, sowas wird manchmal als Frechheit aufgefasst, ist mir vorhin auch wieder passiert, weil jemand Rat sucht, aber seinen Quelltext nicht postet (http://www.mikrocontroller.net/forum/read-1-148287.html#148510). Und ohne Quelltext kann ich das Problem nicht lösen, ich bin ja kein Hellseher. Der große "Helfer" bin ich da aber auch nicht, denn ich zähle mich eigentlich immer noch zu den (relativen) Anfängern. Und da ich auch alle meine Anfängerfehler gemacht habe und noch mache, hilft es mir auch, solche Fehler zu suchen, wenn mal jemand Probleme hat. Oft muss ich darüber lachen, dass es genau die Fehler sind, die ich vor garnicht langer Zeit selbst gemacht habe. Ich überfliege daher ganz gerne mal fremden Code, wenn er halbwegs strukturiert und gut kommentiert ist. Allerdings breche ich auch schnell ab, wenn ich merke, dass es Spaghetticode ist oder mangels aussagekräftiger Kommentare nicht nachvollziehbar ist. Meine ersten AVR-Programme waren für den AT90S1200, da gibt es kein SRAM. Auch waren diese Programme recht zeitkritisch, wegen Impulsbreitenmessung und PWM im RC-Modellbau. Da fäng man dann schon an, Takte zu zählen. Und heute schäme ich mich fast für das, was ich damals so zusammenprogrammiert hatte. Einen kleinen Teil davon habe ich auch ins Netz gestellt: www.hannes.de.md. Gruß... ...HanneS...
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.