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
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.
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?
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?
PS: PWM, um eine LED zu dimmen, sieht anders aus, als das was ein Modellbauservo braucht. Steht aber alles in den Tutorials :-)
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.
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.
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
gerne akzeptiert; aber es macht halt stutzig wenn es an elementaren Sprachkonstrukten hakt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.