-
-
Erfahrener Benutzer
Roboter Experte
Okay, dann würd´ ich es so machen (aber ohne Gewähr, dass es nicht vielleicht einfacher geht
):
1. Die variable Frequenz erzeugst Du mit Timer2 im "CTC"-Modus. Clear Timer on Compare bedeutet, dass der Timer solange hochzählt, bis der Zähler den Wert des Output-Compare-Registers (OCR2) erreicht. Bei "Gleichstand" wird der Output-Compare-Pin (B.3 beim Mega
getoggelt und der Timer auf 0 zurückgesetzt. Somit hast Du ein Rechtcksignal, dessen Frequenz Du mit dem OCR2-Register beeinflussen kannst.
2. In das OCR2-Register muss also ein Wert, der einer halben (!) Wellenumdrehung entspricht (da der Output-Compare-Pin ja getoggelt wird, und der Timer deshalb für einen vollen Ausgangszyklus zweimal hochzählen muss), +/- einem Wert, den Du mit dem Poti generiertst. Hierfür nimmst Du den andren 8Bit-Timer (Timer0):
Du lässt Timer0 für eine komplette Umdrehung hochzählen und teilst den Wert durch 2. Damit hast Du immer genaue Werte, auch wenn Dein Wellen-Signal nicht 100% symmetrisch ist.
(Wellensignal an einen Interrupt-Engang, z.B. auf fallende Flanke konfigurieren, und in der ISR: Drehzahl = Timer0, Timer0 = 0, return )
Drehzahl = Drehzahl/2 kannst Du dann im Hauptprogramm machen...
3. Mit dem Poti und Getadc(x) erzeugst Du einen Wert zwischen 0 und 1023, den Du nur auf die gewünschte Größenordnung zuschneiden und zu "Drehzahl" addieren müsstest. Dieses Ergebnis wird dann in´s OCR2-Register geschrieben - fertich!
Im Datenblatt auf S. 111 ist ein schönes Diagramm zum CTC-Modus, ein Bild sagt mehr als 1000 Worte
. Etwas erschwerend ist, dass Bascom den CTC-Mdus offenbar nicht direkt unterstützt. Aber diese Funktion inklusive Prescaler etc. wird von nur einem einzigen Register (TCCR2) kontrolliert, das man ganz enfach "zu Fuß" setzen kann. Mehr dazu auf Seite 117!
Gutes Gelingen,
Daniel
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen