| Re: ISR_10ms Kategorie: CC-Pro Unit & Appl.Board (von Tron - 11.04.2010 17:34) | ||
| Als Antwort auf Re: ISR_10ms von PeterS - 9.03.2010 9:50 | ||
| ||
|
> > > > Hallo, > > > > ich habe ein kleines Problem. Ich starte bei meiner cc128 den 10ms Interrupt von Timer2. > > > > Darüber möchte ich die Tastatur abfragen und mir die DCF-Zeit holen. > > > > Wenn ich aber jetzt im Sub_main() in der DO...Loop Schleife auch noch Code ausführe dann > > > > verlangsamt sich die Interrupt-Routiene extrem. Teilweise dauert ein Interrupt-Durchlauf 30ms > > > > und mehr.... Unten habe ich mal ein bisschen vom Code eingestellt....... > > > > > > > > > > > > '------------------------------------------------------------------------------ > > > > ' 10ms Interruptroutiene > > > > ' > > > > Sub INT_10ms() > > > > Dim irqcnt As Integer > > > > DCF_PULS() ' DCF_MODE=1 Puls suchen > > > > DCF_SYNC() ' DCF_MODE=2 Synchronisation > > > > DCF_FRAME() ' DCF_MODE=3 Datenaufnahme > > > > Key_Input() ' Funktionsaufrauf: Tastaturabfrage > > > > irqcnt=Irq_GetCount(INT_TIM2COMP) ' Interrupt Request Counter > > > > End Sub > > > Hallo miteinand ich habe mir diese DCF-Lib einmal angeschaut und es ist für mich ein Graus. Wieso ist dies kein eigener Thread? warum verliert die Uhr Zeit? wenn das ganze sowieso läuft warum findet keine regelmäÃ?ige Synchronisation statt? GruÃ? Robert > > > > > > > > '------------------------------------------------------------------------------ > > > > ' Hauptprogramm > > > > ' > > > > Sub main() > > > > > > > > Serial_Disable(1) ' 2. RS232 abschalten > > > > SPI_Disable() ' SPI abschalten > > > > LCD_Init() ' Display initialisieren > > > > LCD_ClearLCD() ' Display löschen > > > > LCD_CursorOff() ' Display Cursor ausschalten > > > > Key_Init() ' Keyboard initialisieren > > > > I2C_Init(I2C_100kHz) ' I2C-Bus mit 100kHz Initialisieren > > > > DCF_INIT() ' Initialisierung des DCF Modes > > > > > > > > Irq_SetVect(INT_TIM2COMP,INT_10ms) ' Interrupt Service Routine definieren für Key & DCF > > > > ' Timer2 erzeugt einen 10ms interrupt > > > > DCF_START() ' Starten des DCF Modes > > > > > > > > > > > > Do While 1 ' Endlosschleife > > > > ' Hier wird eigener code ausgeführt > > > > End While > > > > > > > > > > > > > > > > Nun meine Frage: Tastatur, LCD, DCF und ein Paar Ports schalten ist doch nicht zuviel > > > > verlangt? Oder habe ich einfach nur einen Denkfehler? > > > > > > > > Danke schon jetzt für die Antworten. > > > > > > > > GruÃ? > > > > Thomas > > > > > > Kommt doch immer darauf an, was Du da machst. Gib doch was aus, wenn irq_cnt > 1 ist, dann hast > > > Du ja einen Interrupt verpasst. Dann in der Hauptschleife sukzessive Anweisungen auskommentieren > > > bis man weniger als 10ms braucht. Dann hast Du Deine Antwort, was die Zeit frisst. > > > > > > Gruss Peter > > > > Hallo Peter, > > es hat geklappt. Die unten aufgeführte Funktion war der Ã?beltäter. > > Aber braucht das generieren eines Strings von 20 Zeichen so viel Rechenleistung > > des ATMega 128??? Zumal die Funktion nur jede Sekunde einmal ausgeführt wird. > > Dadurch wird schon 5-6 mal die 10ms Interruptroutiene pro sekunde ausgelassen. > > > > '--------------------------------------------------------------------------------- > > ' Display Buffer schreiben > > ' > > Sub Display_Buffer_Set() > > Dim sep(2) As Char > > Dim sep2(2) As Char > > Dim sep3(2) As Char > > Dim sep_luft(6) As Char > > Dim sep_boden(6) As Char > > Dim sep_feuchte(8) As Char > > Dim sep_c(3) As Char > > > > sep=":" > > sep2="%" > > sep3=" " > > sep_c="'C" > > sep_luft="Luft " > > sep_boden="Boden" > > sep_feuchte="Feuchte" > > > > > > Str_WriteWord(HW_Stunde,10,Zeile1,0,2) ' LCD erste Zeile > > Str_Copy(Zeile1,sep,STR_APPEND) > > Str_WriteWord(HW_Minute,10,Zeile1,STR_APPEND,2) > > Str_Copy(Zeile1,sep3,STR_APPEND) > > Str_WriteWord(DCF_MODE,10,Zeile1,STR_APPEND,1) > > Str_WriteWord(DCF_Status,10,Zeile1,STR_APPEND,1) > > Str_Copy(Zeile1,sep3,STR_APPEND) > > Str_WriteWord(Filter_Error,10,Zeile1,STR_APPEND,1) > > Str_Copy(Zeile1,sep3,STR_APPEND) > > Str_WriteWord(Wasser_Error,10,Zeile1,STR_APPEND,1) > > > > > > Str_Copy(Zeile2,sep_luft,0) ' LCD zweite Zeile > > Str_Copy(Zeile2,sep,STR_APPEND) > > Str_WriteFloat(LM75_Read(Sensor_Luft),1,Zeile2,0) > > Str_Copy(Zeile2,sep_c,STR_APPEND) > > > > Str_Copy(Zeile3,sep_boden,0) ' LCD dritte Zeile > > Str_Copy(Zeile3,sep,STR_APPEND) > > Str_WriteFloat(LM75_Read(Sensor_Boden),1,Zeile3,STR_APPEND) > > Str_Copy(Zeile3,sep_c,STR_APPEND) > > > > Str_Copy(Zeile4,sep_feuchte,0) ' LCD vierte Zeile > > Str_Copy(Zeile4,sep,STR_APPEND) > > Str_WriteWord(RH_Messung(RH_Terrarium),10,Zeile4,STR_APPEND,2) > > Str_Copy(Zeile4,sep2,STR_APPEND) > > > > End Sub > > > > > > GruÃ? Thomas > > Einfach weiterschauen. Hier werden ja nicht nur die Strings erstellt. LM75_Read() und > RH_Messung() kommunizieren mit einem Sensor, gerade dort gibt es immer wieder > Wartezeiten... > > Gruss Peter | ||
Antwort schreiben Antworten: | ||
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

