Hallo! Ich habe folgendes Problem und komme nicht weiter: Ich habe eine kleine Routine geschrieben, die folgendes machen soll: Die Spannung an einem Poti auslesen, und ein daszu proportionales PWM Signal für einen Servo machen. Mein Problem ist, dass sich der Wert im OCR1A Register des Controllers (MCU) nicht mehr ändern lässt, nachdem ich ihn initialisiert habe. Laut JTAG beleibt der konstant, und auch das Oszi sagt dass sich das Tastverhältniss am Ausgang nicht ändert wenn ich am Poti drehe. Das verrückte ist, dass ich die kleine include Datei früher zum ansteuern eines Servos verwendet habe, und zwar ohne Probleme. Habt Ihr eine Idee? THX schonmal Woeba
void set_servo_1(unsigned char position) { OCR1A=(unsigned short) (((position/256)*2800)+1200); }; Du übergibst bei Deinem Aufruf aus der Main einen unsigned char. Zuerst wird die Rechenoperation (position/256) durchgeführt, da kommt 0 raus, weil ein unsigned char / 256 = 0. Die anschließende Multiplikation geht ins leere, die Addition dürfte den Wert auf 1200 festlegen. Ich würde zuerst multiplizieren und dann dividieren.
O_o Das höhrt sich doch sehr sinnvoll an! Ist vollkommen logisch, aber ich habe es 1000x übersehen. Danke!
Btw., wenn du wiedermal mehr als eine Datei anhängen willst, nimm besser irgendein Archiv (.tar.gz, .zip oder so). Außerdem sind Headerdateien per Konvention eigentlich nicht dafür da, Code zu erzeugen, sondern sie sollten Interface-Deklarationen aufnehmen für Code, der in anderen C-Quelldateien implementiert ist (die dann alle gemeinsam gelinkt werden). Insofern hättest du natürlich auch gleich alles in eine Datei schreiben können, es wäre dasselbe. Aber das Ding mit der Division einer uint8_t-Zahl durch 256 hatte ich auch nicht entdeckt.
@Jörg: Das erfüllt mein Herz mit Stolz, daß ich als C-Newbie auch einem alten Hasen wie Dir einen Schritt voraus sein kann ;) Mir stach das irgendwie sofort ins Auge... Ist aber oftmals so: Man wurschtelt tagelang an einem Problem herum, und dann kommt jemand daher, der die Lösung sofort sieht. Irgendwie verennt man sich, und dann kann etwas Abstand (im wahrsten Sinne des Wortes) sehr schnell helfen.
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.