Atmel TIMER1CAPT Problem mit Registern
Hi!
Ich möchte gerne die Drehzahlüberwachung über die InputCapturePin's (ICP) [Mega64L] lösen.
Programmiert wird in e-Lab's AVRco.
Zum Initialisieren hab ich folgende Register gesetzt:
Code:
INCL(TIMSK,5); //Input Capture enable PD4
INCL(TCCR1B,0); //clk
INCL(TCCR1B,6); //ICESn: Input Capture Edge Select
Und immer bei einem Interrupt wird folgende Routine ausgelöst:
Code:
interrupt TIMER1CAPT;
begin
x:=word(ICR1L)+256*word(ICR1H);
speed:=word(abs(integer(x) - integer(xold)));
xold:=x;
end;
Leider funktioniert das irgendwie noch nicht wirklich, denn ich bekomme unheimlich sprigende Werte (z.B. "55,67,116,133,52,58,151,37,139,65,25,83,93,35 ") und das ICR1H-Register wird auch nicht beschrieben...
Weiß jemand an was das liegt?
Muss ich ev. bei jedem Interrupt ein Register wieder leeren o.Ä.?
Gruß, ähM_Key
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Read(LOW) --> du bekommst LOW und TEMP:=HIGH
Read(HIGH) --> du bekommst den Inhalt von TEMP
Ist schon richtig so wie's dasteht.
'Systick' sagt mir nix, ich kenn die Sprache nicht nur die AVR-Hardware ist mir etwas vertraut. Möglicherweise unterstützt die Sprache direkt das Lesen eines 16 Bit mit foo := ICR1
Ich glaube das wird nicht unterstützt, aber wenn es so funktioniert (bzw. funktionieren müsste 8-[ ) muss man sich ja darüber erstmal nicht mehr den Kopf zerbrechen.
Hm, keine Ahnung was das für ein Modus ist; ist ein HardwarePWM der von Timer 1 abhängt und an OC1A, B und C ausgibt.
Ursprünglich wollte ich die im Compiler integrierte 'FreqCount'-Funktion nutzen, da ich aber 2 PWM-Frequenzen erzeugen muss (Timer1) und 2 Frequenzen einlesen möchte (Freqcount braucht für jede Frequenz nen eigenen Timer) und der Atmel nur 2 Timer (1 und 3 [desswegen Timer2 nicht möglich]) hat, geht das nicht.
Ja, in 5ms müsste sich einiges reißen lassen...
Wobei wenn ich jetzt dran denke, dass ich aufgrund der auch benötigten ADC-Wandlung 12ms 'Zwangs Pause' einlegen muss - tja, da wird mal wohl nicht um Multitasking drum rum kommen und stat nem Delay Sleep nutzen; naja bis jetzt ist das aber alles in dem Testprogramm noch nicht implementiert, kann also auch keine Fehlerquelle sein.
___
Ok, hab jetzt mal den ganzen PWM-Quatsch rausgenommen, und siehe da, es funktioniert!!!
Aber wie soll mein Roboter ohne PWM fahren können? SoftPWM?
Ich dreh hier gleich durch...
MK
EDIT: Im Anhang mal der Aufgezeichnete Verlauf mit meiner Software (hab den Motor auf 100% betrieben [da kein PWM möglich] und ihn 'per Hand' abgebremst/belastet)...da wird noch ein bisschen Filterarbeit nötig sein