Re: Beta 2.12.06 Timer Probleme Kategorie: Programmierung Basic (von Joerg - 23.12.2010 18:32) | ||
Als Antwort auf Re: Beta 2.12.06 Timer Probleme von PeterS - 23.12.2010 14:19 | ||
| ||
> > 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 Hallo Peter, ist es denn möglich im Hauptprogramm SD-Card Aufrufen durchzuführen, ohne das man 10ms IRQs verliert (z.B beim DCF Empfang)? Grue�e Joerg | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum