Hallo zusammen, Endlich konnte ich die damit erzeugte .hex in den ATtiny45 mit Ponyprog laden, aber der MC macht nix. (Die H-Brücke besteht aus 4 NPN, die einen Scheibenwischermotor ansteuern): /* Servosteuerung: Differenz-analogwert an Pin3 ermitteln und Transistoren einer H-Brücke entsprechend mit Softstart ansteuern und durch kurzschließen abstoppen. */ int Wert; // Variable für den Analogwert byte T = 0; void setup() { pinMode( 0, OUTPUT); pinMode( 1, OUTPUT); pinMode( 2, OUTPUT); pinMode( 4, OUTPUT); pinMode( 3, INPUT); } void loop() { noch: Wert = analogRead(3); if (Wert > 130) { if (T = 255) (T = T + 1); digitalWrite( 0, LOW); digitalWrite( 1, HIGH); delay(T); digitalWrite( 0, LOW); digitalWrite( 1, LOW); delay(255-T); goto noch; } if (Wert < 120) { T = T + 1; digitalWrite( 2, LOW); digitalWrite( 4, HIGH); delay(T); digitalWrite( 2, LOW); digitalWrite( 4, LOW); delay(255-T); goto noch; } digitalWrite( 2, HIGH); digitalWrite( 4, HIGH); T = 0; } Das ist mein erster Versuch mit ATtiny ( bisher PIC ) Ist da was falsch? Gruß Helle
Helmut H. schrieb: > if (T = 255) > (T = T + 1); Das Gleich-zeichen ist eine Zuweiseung. Hier setzt du T auf der Wert 255 und die Bedingung ist immer wahr, weil der Wert nicht 0 ist. Du musst "if (T==255)" schreiben. Dann erkläre mal, warum du danach zu dem Byte mit dem Wert 255 eine 1 addierst. Setze es doch gleich auf 0. Warum setzt du an Ende der loop T=0? So kann der Wert niemals fortlaufend hoch gezählt werden. Überlege dir nochmal ganz genau, wann du T hochzählen willst und ob du es überhaupt auf 0 setzen musst. Auf das goto solltest du besser verzichten. Das kannst du mit Schleifen ordentlicher lösen. Wenn du das nächste mal fragst, was in deinem Programm falsch ist, dann gewöhne dir an, es zu kommentieren und zu erklären was es tun soll. Hier ist ziemlich unklar, was du beabsichtit haben könntest. Um das Ergebnis zu prüfen, besorge dir einen Debugger oder wenigstens einen Logic Analyzer.
Richtig Einrücken wäre auch hilfreich, das der Quelltext lesbar wird. Je schwerer du es den Helfern machst, umso weniger Hilfe wirst du bekommen. Um PWM Signale zu erzeugen, benutzt man bei Arduino normalerweise die Funktion analogwrite(). Es fehlt der Schaltplan, man kann so gar nicht erkennen, welcher Ausgang welchem Zweck dient.
Stefan ⛄ F. schrieb: > Richtig Einrücken wäre auch hilfreich, das der Quelltext lesbar wird. Sinnvoll wäre es auch, den Quelltext passend einzupacken (mit [c] und so), oder als Datei mit richtiger Endung anzuhängen. Steht netterweise auch in der Hilfe über dem Textfeld für neue Posts...
Stefan ⛄ F. schrieb: > Helmut H. schrieb: >> if (T = 255) >> (T = T + 1); > > Das Gleich-zeichen ist eine Zuweiseung. Hier setzt du T auf der Wert 255 > und die Bedingung ist immer wahr, weil der Wert nicht 0 ist. > > Du musst "if (T==255)" schreiben. > > Dann erkläre mal, warum du danach zu dem Byte mit dem Wert 255 eine 1 > addierst. Setze es doch gleich auf 0. > > Warum setzt du an Ende der loop T=0? So kann der Wert niemals > fortlaufend hoch gezählt werden. Überlege dir nochmal ganz genau, wann > du T hochzählen willst und ob du es überhaupt auf 0 setzen musst. > > Auf das goto solltest du besser verzichten. Das kannst du mit Schleifen > ordentlicher lösen. > > Wenn du das nächste mal fragst, was in deinem Programm falsch ist, dann > gewöhne dir an, es zu kommentieren und zu erklären was es tun soll. Hier > ist ziemlich unklar, was du beabsichtit haben könntest. > > Um das Ergebnis zu prüfen, besorge dir einen Debugger oder wenigstens > einen Logic Analyzer. Danke, ich kenne eben nur ein wenig Basic, daher die Frage hier. Gut, ich gehe an mir arbeiten... Helle
Alles klar. Sage Bescheid, wenn die Hinweise nicht ausreichen. Die Arduino IDE hat übrigens eine Autoformat-Funktion zum Korrigieren der Einrückungen.
" if (T = 255) (T = T + 1); " Typischer Anfänger/Flüchtigkeitsfehler; passiert mir auch gelegentlich, und der Compiler meckert nicht... Ungleich bedeutet übrigens "!=", nicht wie in BASIC "<>". Für "T=T+1" (auch wieder BASIC) kannst du auch "T++" schreiben. Damit wird T um eins erhöht, T-- funktioniert auch.
Thomas G. schrieb: > Typischer Anfänger/Flüchtigkeitsfehler; passiert mir auch gelegentlich, > und der Compiler meckert nicht... Man könnte aber schreiben
1 | if(255=T) |
Dies meckert er dann an, aber eben nicht, wenn der Vergleichsoperator verwendet wird.
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.