-
        

Ergebnis 1 bis 5 von 5

Thema: Sprunghafte Fehler in Timerwerten

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418

    Sprunghafte Fehler in Timerwerten

    Anzeige

    Hi

    ich habe Folgendes Problem

    Mit einem µC erzeuge ich einen gleichmäßigen Takt

    Code:
    $regfile "m8def.dat"
    $crystal = 10000000
    
    Config Portd = Output
    
    Do
    Set Portd.2
    Nop
    Nop
    Nop
    Nop
    Reset Portd.2
    
    Waitms 999
    Loop

    Dies Klappt scheinbar auch soweit Fehlerfrei




    Ein Zweiter µC Stoppt diese Zeit
    Und gibt diesen wert über UART aus

    Code:
    $regfile "m8def.dat"
    $crystal = 10000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    $baud = 9600
    
    Config Timer0 = Timer , Prescale = 1
    Config Timer1 = Timer , Prescale = 256
     Config Int0 = Rising
    '6 Takte für Timer
    
    Enable Interrupts
    
    Enable Int0                                                 'enable the interrupt
    
    On Int0 Send Nosave
    
    
    Stop Timer0
    Stop Timer1
    Timer0 = 0
    Timer1 = 0
    
    Start Timer0
    Start Timer1
    
    Do
    
    Loop
    
    Send:
    Stop Timer0
    Stop Timer1
    
    Print "Timer1= " ; Str(timer1) ; "Timer0= " ; Str(timer0)
    
    Timer0 = 0
    Timer1 = 0
    
    Start Timer0
    Start Timer1
    Return


    So weit so gut

    die Ausgabe sieht wie folgt aus

    Timer1= 37920Timer0= 199
    Timer1= 37920Timer0= 213
    Timer1= 37920Timer0= 233
    Timer1= 37920Timer0= 251
    Timer1= 37920Timer0= 205
    Timer1= 37920Timer0= 223
    Timer1= 37920Timer0= 239
    Timer1= 37920Timer0= 253
    Timer1= 37920Timer0= 203
    Timer1= 37920Timer0= 215
    Timer1= 37920Timer0= 227
    Timer1= 37920Timer0= 239
    Timer1= 37920Timer0= 253
    Timer1= 37919Timer0= 203
    Timer1= 37920Timer0= 219
    Timer1= 37920Timer0= 239
    Timer1= 37920Timer0= 1
    Timer1= 38001Timer0= 19 <-- Woher kann dieser Sprung kommen?
    Timer1= 37960Timer0= 133
    Timer1= 37920Timer0= 247
    Timer1= 37920Timer0= 199
    Timer1= 37920Timer0= 219
    Timer1= 37920Timer0= 235


    Zur Beschaltung

    Gemeinsame Masse
    Gemeinsamme Betriebspannung 7805
    an jedem µC mit 100n abgeblockt

    Quarze haben jeweils 2 33p dran

    Ich hoffe das mir Einer einen Tipp geben kann woher dieser Sprunghafte wert herkommen kann

    Mit Freundlichem Gruß
    Thomas
    was gibt es noch zu sagen

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Code:
    $regfile "m8def.dat"
    $crystal = 10000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    $baud = 9600
    
    Dim Flag As Byte
    Dim Timer0_temp As Byte
    Dim Timer1_temp As Word
    Flag = 0
    
    Config Timer0 = Timer , Prescale = 1
    Config Timer1 = Timer , Prescale = 256
    Config Int0 = Rising
    '6 Takte für Timer
    
    Enable Interrupts
    
    Enable Int0                                                 'enable the interrupt
    
    On Int0 Send Nosave
    
    
    Stop Timer0
    Stop Timer1
    Timer0 = 0
    Timer1 = 0
    
    Start Timer0
    Start Timer1
    
    Do
       If Flag = 1 Then
          Print "Timer1= " ; Str(timer1_temp) ; " " ; "Timer0= " ; Str(timer0_temp)
          Flag = 0
       End If
    Loop
    
    Send:
       Timer0_temp = Timer0
       Timer1_temp = Timer1
       Timer0 = 0
       Timer1 = 0
       Flag = 1
    Return
    (ungetestet)


    Funktioniert es so besser?

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    ich bin verblüfft

    ja so funktioniert es besser

    nun die frage warum geht es denn besser

    der µC hatte doch ewig zeit zum senden oder UART in einer isr nicht so gut?

    So und noch ein Danke ich such die ganze zeit die fehler in der Hardware UART aus der isr raus und es geht

    Thx
    was gibt es noch zu sagen

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Ich vermute, Bascom sendet die Daten über einen Sendepuffer der irgendwann mal voll wird. Ab diesem Zeitpunkt wird dann in der ISR gewartet und der impulsgebende µC ist nicht mehr synchron. Das könnte man etwa so überprüfen:

    Print "Timer1= " ; Str(timer1) ; "Timer0= " ; Str(timer0) ; "dummytext"

    Mehr Text bedeutet Puffer ist schneller voll.

    Wie sieht denn die Ausgabe der verbesserten Variante aus?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    Temp= 9956365 Timer1= 38892 Timer0= 13
    Temp= 9956365 Timer1= 38892 Timer0= 13
    Temp= 9956365 Timer1= 38892 Timer0= 13
    Temp= 9956365 Timer1= 38892 Timer0= 13
    Temp= 9956620 Timer1= 38893 Timer0= 12
    Temp= 9956363 Timer1= 38892 Timer0= 11
    Temp= 9956361 Timer1= 38892 Timer0= 9
    Temp= 9956360 Timer1= 38892 Timer0= 8


    Temp=timer1*256+timer0
    was gibt es noch zu sagen

Ähnliche Themen

  1. Wo ist der Fehler?
    Von Ezalo im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 12.08.2010, 17:48
  2. RP6 Fehler
    Von jonasspieker im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 06.03.2010, 16:20
  3. ADC Fehler?
    Von PICVB im Forum PIC Controller
    Antworten: 4
    Letzter Beitrag: 21.11.2007, 23:48
  4. wo ist der fehler??? please help!
    Von Robotik84 im Forum Asuro
    Antworten: 4
    Letzter Beitrag: 28.11.2006, 17:22
  5. ISP Fehler
    Von Thetis im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 04.10.2006, 17:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •