Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Beta 2.12.06 Timer Probleme Kategorie: Programmierung Basic (von PeterS - 23.12.2010 14:19)
Als Antwort auf Beta 2.12.06 Timer Probleme von Christian - 22.12.2010 23:12

> Hallo,
> ich will die DCF Funktion nutzen und habe sie in den Timer2 reingelegt.
> Nun möchte ich aber 1x in der Sekunde Daten auf eine SD-Karte schreiben.
>
> Diese Funktion ist im Timer0 hinterlegt.
>
> Sub Main()
>
>     DCF_Initialisierung()
>
>     SPI_Init_Byte = 80  '3,6 Mhz
>
>     SPI_Enable(SPI_Init_Byte)
>
>     I2C_Init(I2C_100kHz)
>
>     Serial_Init(0,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD38400)
> ..
>  Irq_SetVect(INT_TIM2COMP,INT_10ms)      ' Interrupt Service Routine definieren
>    
>  'Interrupt Service Routine definieren - Timer0
>  Irq_SetVect(INT_TIM0COMP,Step_0_Timer_0)
>  Timer_T0Time(144,PS0_1024) 'Zeit festlegen, Timer0 starten 144,44 * 69,44us= 9,966 ms
> ..
> ' Main
>
>     Do While True   'Endlosschleife
>
>     If Test_Bit = 0 Then
>         Port_WriteBit(7,1)      'PortA.7 - LED
>         Test_Bit = 1
>     Else
>         Port_WriteBit(7,0)      'PortA.7 - LED
>         Test_Bit = 0
>     End If
>
>     Temperatur_einlesen_Step_1() 'Multiplex - Kanal wechseln
>     Thread_Wait(0,10) '10*10ms
>     Temperatur_einlesen_Step_2() 'Kanal I2C einlesen
>
>     RS232_Write()
>
>     End While
> End Sub()
>
> Sub INT_10ms()
>  Dim irqcnt As Integer
>  DCF_INT_10ms()
>  irqcnt=Irq_GetCount(INT_TIM2COMP)       ' Interrupt Request Counter
> Retrun
> End Sub
>
> Sub Step_0_Timer_0()
>  Dim Temp_Int As Integer
>     'Aufruf alle 10ms
>
>     If Timer0_10ms_counter = 50 Then
>         SD_Karte_main()
>     End If
>
>     Timer0_10ms_counter = Timer0_10ms_counter + 1
>
>     If Timer0_10ms_counter >100 Then     '10ms * 100 = ca. 1 Sekunde
>         Timer0_10ms_counter = 0
>     End If
>
>     'Interrupt Request Counter
>     Temp_Int = Irq_GetCount(INT_TIM0COMP)
>
>     Return
> End Sub
>
> Wenn jetzt auf die SD-Karte geschrieben wird bleibt in diesem Moment das Hochzählen der Sekunden stehen.
> Eine Sekunde dauert dann ca. 2sek.
>
> Was kann ich Ă„ndern, damit der Timer2 vorrang hat (DCF Funktion)
>
> Gruss Christian

Hallo Christian,

wie schon andere hier gesagt haben, liegt es an den SD-Card Aufrufen, die atomar
ausgeführt werden. Wenn die länger als der Interrupt dauern, dann gehen Interrupts
verloren. Wenn es um Uhrzeit Funktionen geht, kann ich hier die Clock Funktionen
der Library empfehlen. Diese laufen ohne Störung durch die SD-Card Zugriffe, da
bei Clock Routinen die Interrupts auf Assemblerebene laufen.

Gruss Peter


    Antwort schreiben


Antworten:

Re: Beta 2.12.06 Timer Probleme (von Joerg - 23.12.2010 18:32)