mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timerschwankungen beim 8051


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich muß euch noch einmal um Hilfe bitten. Ich habe die unten stehende
Timerroutine um untzerschiedlich lange Gates zu erzeugen (von 1ms bis
zu 10sek).
Nur wenn ich mir das Ausgangssignal auf dem Oszilloscop ansehe, dann
schwankt die Länge des Gates immer um 1µs und ich weiß nicht wiso.

Wenn ich das Hautpprogramm nach dem Starten des Timers in eine
Endlosschleife schicke, dann tritt das schwanken nicht auf. Wenn er
aber das normale Hauptprogramm abarbeitet dann schon.
Ich frage mich langsam, ob das an einem ungünstig liegenden Befehl oder
einer Unterfunktion liegt, die atomar abgearbeitet wird. Weiß da jemand
etwas genaueres?

Der Compiler ist übrigens µVision von Keil


MfG Mike
void v_Timer0(void) interrupt 1
{
   static unsigned int bursttime = 0;
   static unsigned int offTime = 0;

   TR0 = 0;                  // Timer0:STOP (Timer zum neu laden anhalten)

   TL0 = (unsigned char) (64569 & 0x00FF);              
   TH0 = (unsigned char) ((64569 & 0xFF00) >> 8);              

   TR0 = 1;                  // Timer0:START

   timer0_tick++;
 
   if (qfpc.gate == true)
      {

      if (bursttime == timer0_tick)
         {
         bursttime = 0;
         _nop_();
         _nop_();
         puls_Port = 0;
         }
      else 
         {
         if (bursttime ==0 && offTime == 0)
            {          
            puls_Port = 1;
            bursttime= timer0_tick + qfpc.GateTime; 
            if (qfpc.offTime == 49)
               offTime =  bursttime + 1;
            else
               offTime  = bursttime + qfpc.offTime-1;            
            }
         if ( offTime == timer0_tick)
            {
            offTime= 0;
            }
         } 
      }
   else
      {
      bursttime = 0;
      offTime   = 0;
      }
}

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie machst Du es, bei 1ms noch 1µs auf dem Oszi zu sehen ?

Sind max 0,1% Abweichung wirklich so schlimm ?


Die Interruptlatenz steht im Datenblatt und auch, durch welche Faktoren
sie differiert, das ist also voll normal.

Wenn Du wirklich zyklusgenaue Pinumschaltung haben willst, geht das nur
mit dem Toggle-Pin von T2 oder mit den Compare-Outputs des PCA.

Die erfolgen von der Latenzzeit unabhängig per Hardware.


Peter

Autor: dds5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da kein auto-reload timer verwendet wird, tippe ich auf ein Problem mit
der Interrupt latency.
Je nach Befehl (1 oder 2 Byte), der gerade abgearbeitet wird dauert es
unteschiedlich lang bis der Int ausgeführt wird und damit ändert sich
auch die Länge des Impulses.

Dieter

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter: Da es ein Digitales Oszi ist, verschiebe ich einfach den
Triggerpunkt nach links bis ich die entsprechende Flanke auf dem Schirm
habe.

Den entsprechenden Abschnitt habe ich im Datenblatt zwar noch nicht
gefunden, aber gedacht habe ich mir schon. Vor allem da 1µs genau ein
Maschinentakt ist. Und jetzt habe ich ja von euch die Bestätigung.

Viel Dank für die schnellen Infos.

Mike

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.