Hallo zusammen, ich arbeite derzeit an meiner Bachelorarbeit und muss einen µ-Controller programmieren. Ich habe mir ein myAVR MK2 Plus Experimentierboard zugelegt. Ich möchte per Taster meine PWM einschalten. Die PWM startet einen Motor. Zum abstellen des Motors schalte ich ein Relais. Leider passt irgend etwas in meinem Code noch nicht. Nachdem ich die PWM eingeschaltet habe, lässt sich der Ausgang an dem das Relais liegt nicht mehr per Taster ansteuern. Umgekehrt funktioniert es (Zuerst Relais, dannach PWM). Habe werder mit C noch mit µ-Controllern viel zu tun gehabt. Hoffe ihr habt Tipps und Anregungen für mich, wie ich dies lösen kann. Flo
1 | void pwm(uint16_t top, uint16_t wert, uint16_t zeit) |
2 | |
3 | {
|
4 | // OC1A auf Ausgang
|
5 | DDRB = (1 << PB1 ); //ATMega8 () |
6 | |
7 | ...
|
Damit ist dann deine Pindefinition für die Eingänge hinfällig geworden. Zuweisungen an Register sind nur am Programmanfang sinnvoll. Danach IMMER nur das eine Bit bearbeiten (mittels & bzw |) das verändert werden soll. Dann auch noch
1 | void pwmout() |
2 | |
3 | {
|
4 | TCCR1A = (0<<WGM11)|(0<<WGM10); |
5 | }
|
so werden keine Bits gelöscht. Das ist gleichwertig mit
1 | void pwmout() |
2 | |
3 | {
|
4 | TCCR1A = 0; |
5 | }
|
und du hast das Glück (Pech?), dass das bei dir in diesem Fall genau dasselbe macht.
Sauber, ging ja flott! Funktioniert soweit. Bedanke mich. Tipps zur Kenntnis genommen. Flo
Karl Heinz Buchegger schrieb: > Damit ist dann deine Pindefinition für die Eingänge hinfällig geworden. Ausgänge natürlich. Die Zuweisung hat alles auf Eingang gesetzt, bis auf PB1 nächster Tip: Die DDR Definitionen zieht man normalerweise an den programmanfang zusammen und dort bleiben sie dann auch so. D.h. während das Programm arbeitet wird das DDR Register nicht angerührt. Einzige Ausnahme: wenn ein Pin abwechselnd Ein- / Ausgang sein muss, wie es zb bei I2C Kommunikation notwendig ist. Und arbeite an deiner Codeformatierung. Die ist ja grauenhaft. Wenn du mir sowas abgeben würdest, schmeiss ich es dir aus formalen Gründen zurück.
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.