Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > 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 > > 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