OCR1A lässt sich nicht schreiben?

Gast #180542
Lesenswert?

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
Angehängte Dateien:
Gast #180545
Lesenswert?

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.
Gast #180547
Lesenswert?

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.
Gast #180548
Lesenswert?

@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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren