Gast
#256474
Zum Anfang das ganze wird ein Tacho fürs Motorrad. Zum ersten Problem.
Ich wollte der Einfachheit halber mit dem Codevision den 16bit Zugriff
auf das Timerregister nutzen. Hab da etwas probiert und gemerkt das das
beim Codevision noch nicht vordefiniert ist. Hab dann schnell die
Headerdatei des Atmega32 umgeschrieben und dachte nun geht es.
Umgeschrieben habe ich es so:
....
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrb ICR1=0x26; // 16 bit access
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28; // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
...
Nun dachte ich kann ich einfach:
....
word startwert=0, endwert=0;
byte i=2;
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
i^=3;
if (i==1) startwert = (word)ICR1;
else endwert = (word)ICR1;
}
....
das so auslesen und es funktioniert. Nur leider tut es das nicht
bekomme nur die Lowbits. Mache ich etwas falsch??
So und zum zweiten Problem. Ich habe einen Reedkontakt der leider stark
nach prellt. Bekomme da anstatt einen Captureinterrupt leider zwei pro
Umdrehung. Habs mir mit dem Oszi angeschaut und wirklich es isnd zwei
Impulse. Dachte nun ich mache einfach einen Tiefpass vor dem Eingang
des μC. Erwarte nur eine Frequenz von unter 50Hz. Funzt nun auch
super nur stelle ich fest das sich hier der Kondensator dauerhaft über
den Port des μC lädt. Obwohl dieser ja als Eingang definiert ist.
Meine Frage ist nun wie gut das für den μC ist?? Oder sollte man
dann lieber einen Hochpass nehmen ??
Vielen Dank schon mal
Stephan