Ob der Timer PWM erzeugt oder nicht, ist dem Pin erstmal wurscht. Erst,
wenn er auf Ausgang geschaltet wird, erscheint PWM, entsprechend den
gesetzten COM Bits.
Stehen die also für OCRA auf 0, ist der Pin als I/O benutzbar. Deswegen
vermute ich
Tino Kühn schrieb:> TCCR1A |= (1<<COM1B1) | (1<<COM1B0) | (1<<WGM10);
Du veroderst nur. Wenn also vorher schon mal was im TCCR1A gestanden
hat, dann wird das so erhalten. Wenn du nur einmal TCCR1A beschreibst,
nimm ruhig ein = statt dem |=. Das kann auch beim TCCR1B nicht schaden.
Tino Kühn schrieb:> Oder was mache ich falsch?
Du könntest den kompletten Code posten.
Matthias Sch. schrieb:> Ob der Timer PWM erzeugt oder nicht, ist dem Pin erstmal wurscht. Erst,> wenn er auf Ausgang geschaltet wird, erscheint PWM, entsprechend den> gesetzten COM Bits.> Stehen die also für OCRA auf 0, ist der Pin als I/O benutzbar. Deswegen> vermute ich>> Tino Kühn schrieb:>> TCCR1A |= (1<<COM1B1) | (1<<COM1B0) | (1<<WGM10);>> Du veroderst nur. Wenn also vorher schon mal was im TCCR1A gestanden> hat, dann wird das so erhalten. Wenn du nur einmal TCCR1A beschreibst,> nimm ruhig ein = statt dem |=. Das kann auch beim TCCR1B nicht schaden.>> Tino Kühn schrieb:>> Oder was mache ich falsch?>> Du könntest den kompletten Code posten.
Das Ändern von |= auf = hatt ekeinerlei Erfolg. ich habe weiter versucht
rauszubekommen, was passiert. Jedenfalls denke ich, dass sich der
Controller zu einer bestimmten Zeit "aufhängt", und zwar genau wenn ein
Programmteil die Pins PB1 auch benutzen will.
main, alles raus was nicht wichtig war
write_instruction_DOGM163(0x1D);// Bias (Spannung), {0 0 0 1 BS 1 0 Fx} = 00010101, es kann 15/1D gewählt werden, dann leuchtet der Hintergrund stark nach
Durch rumprobieren weiss ich jetzt, dass es nicht geht wenn der Timer1
auf die Pins zugreifen will. Aber das sollte doch wenn man sie nicht
definiert funktionieren? Ich verstehe es auch nicht mehr...
Tino Kühn schrieb:> Durch rumprobieren weiss ich jetzt, dass es nicht geht wenn der Timer1> auf die Pins zugreifen will. Aber das sollte doch wenn man sie nicht> definiert funktionieren? Ich verstehe es auch nicht mehr...
Was geht nicht wie mit welchem angespeckten kompletten kopmilierbaren
lauffähigen Testprogramm? Eventuell HW Fehler zB Schluß mit PB2, etc.
Aus den gegebenen Infos kann man nicht ableiten warum PB1 nicht
reagiert.
grundschüler schrieb:> CS als PWM?
Das sehe ich auch so, PB2 ist da doppelt belegt. Ich würde dir
vorschlagen, mal einen Pinplan zu erstellen und das ein wenig
auseinander zu fusseln. Das komplette Programm ist das übrigens immer
noch nicht - wer weiss, was da noch für Seiteneffekte mitprogrammiert
sind.
Der geneigte Leser des Datenblatts
hat gelegentlich die folgende Stelle gefunden und erkannt, dass bei PWM
die Sache etwas komplizierter liegt:
>
16-bit Timer/Counter
Register Description
Timer/Counter 1 Control
Register A – TCCR1A
When the OC1A or OC1B is connected to the pin, the function of the
COM1x1:0 bits is dependent of the WGM13:0 bits setting.
<
In den folgenden Tabelle kann man die entsprechenden Werte finden.
Man könnte daraus erkennen, ob das möglich ist, was man "möchte":
Tino Kühn schrieb:> Ich möchte auf dem OCR1B (PB2) beim Mega8 das PWM signal> haben.Tino Kühn schrieb:> Das funktioniert auch ABER: Der Pin PB1 ist jetzt "tot".
So, Sonntag war Sonntag aber jetzt hier mein Projekt als ZIP File (nur
die *.c Dateien und der Schaltplan). Ich hoffe das erklärt sich.
Zu der Anmerkung, warum SS/PB2 auch in der SPI Routine verwendet wird:
Es wird bei der Initialisierung vom SPI beim Mega8 erwartet, dass dieser
Pin ein Ausgang ist. Der wird aber vom SPI nicht benutzt und ohne diese
Deklaration funktioniert das SPI nicht. Das hatte ich schon vor Jahren
mal rausbekommen.
OK, nochmal meine Frage zusammengefasst: PB1/OC1A kann nicht mehr als
normaler Port verwendet werden, wenn Timer1 als PWM defeniert wird
(PB2/OC1B soll als PWM Signal die Helligkeit steuern und PB1 als
normaler Port dienen)
Wer mir die Lösung (ohne neue Hardware) als erster sagt, bekommt einen
Glühwein auf einem der Dresdner Weihnachtsmärkte ausgegeben :-)
Tino Kühn schrieb:> post.zip
Also, ich habe jetzt auch keine Lust mehr. Da fehlt das Hauptprogramm
und ich habe keine Lust zu raten, ob du evtl. aus Versehen in OCR1A den
TOP Wert reinschreibst. Dein System zum Aufteilen der winzigen
Programmstücke auf verschiedene Dateien mit ellenlangen
Registererklärungen macht auch keinen Spass.
Beachte die Bemerkungen zu 'Phase Correct PWM' im Datenblatt. Ich weiss
auch nicht, warum zur Helligkeitsregelung Phase Correct wichtig wäre,
eigentlich reicht da eine simple Fast PWM mit 8 bit.
Matthias Sch. schrieb:> Tino Kühn schrieb:>> post.zip>> Also, ich habe jetzt auch keine Lust mehr. Da fehlt das Hauptprogramm> und ich habe keine Lust zu raten, ob du evtl. aus Versehen in OCR1A den> TOP Wert reinschreibst. Dein System zum Aufteilen der winzigen> Programmstücke auf verschiedene Dateien mit ellenlangen> Registererklärungen macht auch keinen Spass.
Hey Sorry, das habe ich in der Eile vergessen ranzuhängen. Jetzt aber!
> Beachte die Bemerkungen zu 'Phase Correct PWM' im Datenblatt. Ich weiss> auch nicht, warum zur Helligkeitsregelung Phase Correct wichtig wäre,> eigentlich reicht da eine simple Fast PWM mit 8 bit.
Sorry wenn ich vielleicht nicht den richtigen Mode ausgesucht habe. Ich
nehe alles was funktioniert...