Ahoi, kleine Frage, große Verzweiflung. Ich möchte beim ATMEGA32 den Timer1 nutzen als 1ms Zeitquelle. Konfiguration wie folgt: TCCR1A = 0x00; TCCR1B = (1<<WGM12)|(1<<CS10); OCR1AH = 0x39; OCR1AL = 0x99; TIMSK |= (1<<OCIE1A); bei 14,745610 Mhz funktioniert das. Sobald ich aber OCR1A nicht direkt beschreibe, sondern einen errechnetrten Werte nehme, z.B unit32_t mainclk = 14745610; ocra_value = mainclk/1000 OCR1AH = ocra_value<<8; OCR1AL = ocra_value; dann ist die Timerfrequenz viel höcher. Kann mir das mal einer kurz erklären. Ich weiß gerade nicht weiter? Eine Frage noch: Wenn ich schreibe #define MAINCLK 14745610, was ist dann MAINCLK für ein Datentyp, wenn ich MAINCLK beispielsweise irgendwo zum Rechneen verwende? Danke, Alex
Alex wrote: > ocra_value = mainclk/1000 > OCR1AH = ocra_value<<8; ^^ > OCR1AL = ocra_value; OCR1AH = ocra_value>>8;
Alex wrote: > ocra_value = mainclk/1000 > OCR1AH = ocra_value<<8; andere Richtung schieben OCR1AH = ocra_value >> 8; du willst ja an das High Byte ran > OCR1AL = ocra_value; Eigentlich müsste auch OCR1A = ocra_value; funktionieren. Dann kümmert sich der Compiler um die richtige Verteilung von High und Low Byte. > Eine Frage noch: Wenn ich schreibe #define MAINCLK 14745610, was ist > dann MAINCLK für ein Datentyp gar keiner. MAINCLK ist einfach nur ein Makro. Dort wo MAINCLK im Quelltext vorkommt, wird es durch den Ersatztext 14745610 ersetzt. > wenn ich MAINCLK beispielsweise irgendwo > zum Rechneen verwende? MAINCLK wird durch 14745610 ersetzt. In einer Berechnung hat diese Konstante den Datentyp long, da sie für einen int zu groß ist (auf dem AVR-gcc)
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.