|
Hallo,
ich bin gerade dabei die Software für den Universaldimmer zu entwickeln und dabei auf ein Problem gestossen:
Für langame Vorgänge wie andimmen usw. benötige ich einen IRQ alle 0.5ms. Da T0 und T1 bereits benutzt werden dachte ich an den RTC. Allerdings wird dieser IRQ viel zu oft ausgelöst (ca. alle 21us) und zwar unabhängig davon wie er parametriert wird.
Hier ein kleines Testprogramm, dass eigentlich alle 40 Stunden einen Punkt ausgeben sollte. Es tut dies aber alle 1.4 Sekunden!
Hat jemand schon den RTC benutzt? Und ächliche Erfahrungen gemacht? Was mache ich falsch? Kann das jemand verifizieren?
Bitte HILFE !!!
Gruß Rainer (Petzi)
#include <P89LPC922.h> #include "fb_rs232.h"
volatile unsigned long RTC_time; // Zaehler
// RTC Interrupt void RTC_IRQ(void) interrupt 10 // = RTC Interrupt { RTC_time++;
// nur jedes 65536. mal einen Punkt ausgeben if ((RTC_time & 0xFFFF)==0) rs_send('.');
// der punkt wird alle 1.4s ausgegeben, d.h. alle 21us ein IRQ // nach den Parametern sollte aber nur alle 2.2s sein!! Was ist falsch??? }
void main(void) { unsigned char n;
rs_init(); rs_send_s("\nProgrammstart ");
// Real Time Clock setzen RTCH = 0xFF; // RTC auf 0xFFFF * 128 * 0.27us = 2.2s nur alle 2.2s sollte der IRQ ausgelöst werden RTCL = 0xFF; EWDRT = 1; // Enable RTC-IRQ RTC_time = 0; //@todo Startwert unnötig RTCCON = 0x63; EA = 1;
do { } while (1); }
|