Re: ISR_10ms Kategorie: Programmierung Basic (von Thomas - 8.03.2010 18:47) | ||
Als Antwort auf Re: ISR_10ms von PeterS - 8.03.2010 13:43 | ||
| ||
> > 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 > > > > > > '------------------------------------------------------------------------------ > > ' 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 | ||
Antwort schreiben Antworten: Re: ISR_10ms (von PeterS - 9.03.2010 9:50) Re: ISR_10ms (von Tron - 11.04.2010 17:34) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum