Forum: Compiler & IDEs ATMEGA 8 PWM geht nicht


von Bernd M. (adventureman1972)


Angehängte Dateien:

Lesenswert?

Hallo!

Da ich im Forum nicht fündig geworden bin, hoffe ich jetzt die passende 
Lösung zu bekommen.

Programmfunktion:

Ich möchte ein Solarpanel über zwei Achsen der Sonne nachführen. Der 
ATmega8 (1MHz) soll alle 30 Minuten den Sonnenstand überprüfen. Steht 
das Panel nicht richtig zur Sonne, wird es erst in horizontaler dann in 
vertikaler Richtung gedreht, um ein möglichst hohe Stromausbeute zu 
bekommen. Die Drehungen werden gestoppt, wenn die Sensoren gleich stark 
von der Sonne beleuchtet werden. Regnet es oder reicht das Licht nicht 
mehr aus, wird das Solarpanel in die waagerechte Position gefahren. 
Durch die Wegeendschalter soll ein weiterdrehen über den Endpunkt nicht 
möglich sein.

Die Bewegung wird durch zwei als Getriebemotoren umgebaute Servos 
erledigt. Diese sollen mit jeweils einer PWM (OCR1A und OCR1B) in der 
Geschwindigkeit geregelt werden.



Da liegt mein Problem. Da das mein erstes Projekt mit einem ATMEGA8 ist, 
bekomme ich die PWM nicht zu laufen. Verschiedene Einstellungen ergaben 
eine feste PWM oder eine dunkel Test-LED an Ausgängen.

Das Testprogramm für eine Achse auf einem ATtiny13 läuft sehr gut.

Was übersehe ich bei den Einstellungen oder bei meinem Programm?


Der ATMEGA 8 ist mit den Fuses im Auslieferungszustand.

Programmiertechnisch bin ich noch am Anfang...

Danke

von Klaus W. (mfgkw)


Lesenswert?

Welche Art Servos denn?

von Bernd M. (adventureman1972)


Lesenswert?

Die Standartservos von Conrad...

von Stefan E. (sternst)


Lesenswert?

1
  TCCR1B  |= (1<<WGM13 );
2
  TCCR1B  |= (1<<WGM12 );      // Binäre Zählung bei WGM02 -> WGM00
3
//  TCCR1A  |= (1<<WGM11 );      // Waveform Generation Mode
4
  TCCR1A  |= (1<<WGM10 );      // Table 11-8 on Page 72 (ATTiny13(doc2535).pdf)
Und jetzt schaust du mal im Datenblatt nach, was für ein Timer-Mode das 
ist. Und zwar im Datenblatt vom ATmega8, denn das im Kommentar erwähnte 
Datenblatt ist hier irrelevant.

PS: Und dann solltest du in deinem C-Buch auch noch mal den Unterschied 
zwischen & und && nachschlagen.

von Bernd M. (adventureman1972)


Lesenswert?

JaJa, kopiern und einfügen. Die Kommentare passen nicht zu den 
Einstellungen.

Dies ist die letzte von mir in Verzeiflung ausprobierte Einstellung, um 
vieleicht doch zum Ergebnis zu kommen.

Habe die ganze Palette von WGM 0 bis 15 durch, aber nichts hat geklappt.

Bei Atmega 16 und ATTiny 13 ist es etwas anders. Man stellt FAST PWM 
oder CTC ein und kann dann mit OCRxx den Bereich kreuz und quer 
durchfahren.

Soetwas möchte ich jetzt auch wieder haben! Aber es klappt halt nicht.

P.S.: Im C-Buch ist && nicht beschrieben. Wo liegt der Unterschied zum 
einfachen & ?? Was verändert sich dadurch?

von Klaus W. (mfgkw)


Lesenswert?

Bernd M. schrieb:
> JaJa, kopiern und einfügen. Die Kommentare passen nicht zu den
> Einstellungen.

Und du erwartest, daß wir das in Einklang bringen?

>
> Dies ist die letzte von mir in Verzeiflung ausprobierte Einstellung, um
> vieleicht doch zum Ergebnis zu kommen.

Vor der Verzweiflung könnte man vielleicht etwas C lernen, dann das 
Tutorial http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial 
durchmachen (selber, nicht nur kopieren) dann 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Servo

Wenn dann konkrete Fragen vernünftig gestellt werden, findet sich hier 
sicher Hilfe.

Aber nur eben hier etwas hinrotzen und und eine Lösung haben wollen, 
geht wahrscheinlich schief.

Bernd M. schrieb:
> Im C-Buch ist && nicht beschrieben.

Welches C-Buch hast du denn?

von Klaus W. (mfgkw)


Lesenswert?

PS: PWM, um eine LED zu dimmen, sieht anders aus, als das was ein 
Modellbauservo braucht.
Steht aber alles in den Tutorials :-)

von Klaus W. (mfgkw)


Lesenswert?

PPS: Es heißt immer noch Standard, nicht Standart :-))

von Stefan E. (sternst)


Lesenswert?

Bernd M. schrieb:
> Habe die ganze Palette von WGM 0 bis 15 durch, aber nichts hat geklappt.

Try&Error ist keine gute Methode Programme zu schreiben.
Jetzt suchst du als erstes mal den Modus raus, von dem du meinst, es sei 
der Richtige, und dann sehen wir weiter.

Bernd M. schrieb:
> Aber es klappt halt nicht.

Wie kommst du eigentlich darauf, dass es an der PWM-Generierung des 
Timers liegt? Der gezeigte Code besteht ja noch aus diversem anderen. 
Wie schließt du das als Fehlerquelle aus?

Bernd M. schrieb:
> P.S.: Im C-Buch ist && nicht beschrieben.

Doch, bestimmt. Schau nochmal genauer nach. Sollte es entgegen allen 
Erwartungen tatsächlich nicht drin stehen, dann kannst du dieses 
"C-Buch" getrost in die nächste Altpapiertonne entsorgen.

von Klaus W. (mfgkw)


Lesenswert?

PPPS: Man tut sich keinen Gefallen, wenn man gleich alles in ein 
Programm packt, was es zum Schluß können soll.

Man hat mehrere Teilprobleme zu lösen:
- C lernen (geht besser am PC)
- mit atmega8 zurecht kommen (geht am besten ohne Solarkram)
- Sensoren lesen (am besten gar nicht an die Motoren denken)
- Motoren bedienen (egal, was es mit den Sensoren auf sich hat)
- ...

Wenn man so alle Teilprobleme verstanden hat, geht man am besten
erst dran, das alles stückweise zusammen zu führen.

von Bernd M. (adventureman1972)


Lesenswert?

Ist mir schon klar.

Es geht ja auch nicht um das Programm, welches mit rein logisch 
geschalteten Ausgängen anstelle der PWM-Ausgänge funktioniert, sondern 
um die Einstellungen für die PWM!!!
Die Sensoren, Motoren und Gedöns Ringsrum tun schon ihren Dienst. Nur 
die PWM wollen nicht und darum wäre ich für eine LÖSUNG und dankbar...

mfG

von Klaus W. (mfgkw)


Lesenswert?

gerne akzeptiert; aber es macht halt stutzig wenn es an elementaren 
Sprachkonstrukten hakt.

von Bernd M. (adventureman1972)


Lesenswert?

Habe alles raus geschmissen und nur eine hoch- und runterlaufende PWM 
programmiert.

Es klappt nur mit der Einstellung:
1
TCCR1A  |= (1<<WGM10 );

Werde mir jetzt die "Regelstrecke" vornehmen; ohne wenn und aber

Das sich LEDs und Motoren anders ist mir auch bekannt. Dafür brauche ich 
keine C-Kenntnisse.



Danke...

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.