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
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?
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
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...