Forum: Compiler & IDEs OCR1A lässt sich nicht schreiben?


von Woeba (Gast)


Angehängte Dateien:

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

von Woeba (Gast)


Angehängte Dateien:

Lesenswert?

Hier die servo.h

von Woeba (Gast)


Angehängte Dateien:

Lesenswert?

...und die adc.h

von thkais (Gast)


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.

von Woeba (Gast)


Lesenswert?

O_o

Das höhrt sich doch sehr sinnvoll an! Ist vollkommen logisch, aber ich
habe es 1000x übersehen.

Danke!

von Jörg Wunsch (Gast)


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.

von thkais (Gast)


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.

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
Noch kein Account? Hier anmelden.