Hallo Leute!
Ich möchte gerne mit meinem Mikrocontroller einen 1ms Interrupt 
erzeugen. Jetzt hab ich grad n kleines Problem...
Mein Aufbau ist folgendermaßen:
| 1 |  XT2 3.6864MHz        XT1 32.768kHz
 | 
| 2 |       ||                    ||
 | 
| 3 |   --------------------------------
 | 
| 4 |  |                                |
 | 
| 5 |  |            MSP430              |
 | 
| 6 |   --------------------------------
 | 
Der XT2 ist logischerweise der Systemtakt, der Uhrenquarz soll die Zeit 
zählen. XT2 ist wegen UART usw. ein Baudratenquarz mit dieser krummen 
Frequenz.
Jetzt hab ich zwei Probleme:
1.)
Um eine genaue Zeitbasis von 1ms zu bekommen, bräuchte ich ja nun 
entweder vom XT1 einen Zählwert von 32,768 -> geht nicht, also 32 (zu 
schnell) oder 33 (zu langsam) :-\ ungünstig dafür
Der XT2 eignet sich ebensowenig, da auch aus ihm keine genaue 
1ms-Zeitbasis generiert werden kann. Hier könnte ich jetzt immer bis 
3686,4 zählen, was aber selbiges Problem wie oben ist.
Mir scheint, als ist der Baudratenquarz dafür ungeeignet und man sollte 
lieber eine gerade Zahl nehmen und den UART modulieren.
Eigent sich der Uhrenquarz NUR für ganze Sekunden? Ich raffs nicht so 
ganz - ich muss hier doch nen Denkfehler haben. Wieso dann genau 
32.768kHz und nicht auch eine gerade Zahl - gut vergesst die Frage - 
wegen binärem Teilen.
2.)
Wenn ich den Timer mit 32 oder 33 laufen lasse, um ~1ms zu erhalten, 
dann ist mein uC zumindest in meiner momentanen vorgehensweise nicht in 
der Lage, diesen Timer hochzuzählen, da er zu langsam ist. Konnte ich 
mir irgendwie nicht so wirklich vorstellen, aber kann das sein?
Software:
| 1 | timer_flag;
 | 
| 2 | 
 | 
| 3 | main
 | 
| 4 | {
 | 
| 5 |   ...mach bisschen was;
 | 
| 6 |   ...mach noch bisschen was anderes;
 | 
| 7 | 
 | 
| 8 |   if( timer_flag )
 | 
| 9 |   {
 | 
| 10 |     timing_advance_ms_counter();
 | 
| 11 |     timer_flag = 0;
 | 
| 12 | 
 | 
| 13 |     KONTROLL_LED_TOGGLEN; // HIER MESSE ICH MIT DEM OSZILLOSKOP
 | 
| 14 |   }
 | 
| 15 | 
 | 
| 16 |   ...
 | 
| 17 | }
 | 
| 18 | 
 | 
| 19 | 
 | 
| 20 | timer_ISR
 | 
| 21 | {
 | 
| 22 |   if( 1ms_timer )
 | 
| 23 |   {
 | 
| 24 |     timer_flag = 1;
 | 
| 25 |   }
 | 
| 26 | }
 | 
| 27 | 
 | 
| 28 | 
 | 
| 29 | void timing_advance_ms_counter( void )
 | 
| 30 | {
 | 
| 31 |   TIMING.milliseconds++;
 | 
| 32 |   
 | 
| 33 |   if( TIMING.milliseconds > 999 )
 | 
| 34 |   {
 | 
| 35 |     TIMING.milliseconds = 0;
 | 
| 36 |     TIMING.seconds++;
 | 
| 37 |     
 | 
| 38 |     if( TIMING.seconds > 59 )
 | 
| 39 |     {
 | 
| 40 |       TIMING.seconds = 0;
 | 
| 41 |       TIMING.minutes++;
 | 
| 42 |       
 | 
| 43 |       if( TIMING.minutes > 59 )
 | 
| 44 |       {
 | 
| 45 |         TIMING.minutes = 0;
 | 
| 46 |         TIMING.hours++;
 | 
| 47 |         
 | 
| 48 |         if( TIMING.hours > 23 )
 | 
| 49 |         {
 | 
| 50 |           TIMING.hours = 0;
 | 
| 51 |           TIMING.days++;
 | 
| 52 |           
 | 
| 53 |           if( TIMING.days > 99 )
 | 
| 54 |           {
 | 
| 55 |             TIMING.days = 0;
 | 
| 56 |           }
 | 
| 57 |         }
 | 
| 58 |       }
 | 
| 59 |     }
 | 
| 60 |   }
 | 
| 61 | }
 | 
Was der Controller sonst noch so gerade macht ist nicht viel - n paar 
Buffer für den UART vorbereiten, paar Integer-Berechnungen.
Jedenfalls bekomme ich am Kontroll-Punkt eine Frequenz von ~200Hz - hier 
sollten wegen des Togglens natürlich 500Hz sein.
Mein Controller ist mit seinen 3.6MHz also zu lahm dafür? :\