Forum: Mikrocontroller und Digitale Elektronik AVR Atmega8, PWM per Taster an


von Flo (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Flo (Gast)


Lesenswert?

Sauber,

ging ja flott! Funktioniert soweit. Bedanke mich. Tipps zur Kenntnis 
genommen.

Flo

von Karl H. (kbuchegg)


Lesenswert?

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