Was für Zykluszeiten muß ich einstellen? An was kann es liegen? Kategorie: Programmierung C (von Markus - 27.06.2008 1:28) | ||
| ||
Hallo , ich hab eine Regelung für eine Industriegeschierspülmaschine gebaut. Dazu habe ich zwei Programme geschrieben die in Multithreading zusammen arbeiten sollen. Das eine arbeitet das Spülprogramm ab. Gestartet wird es wenn eingeschaltet und die Tür geschlossen wird. 62 Sekunden waschen, 10 Sekunden abtropfen und 8 Sekunden. klarspülen Nach dem ansteuern der Aktoren versetze ich den Thread die entsprechenden Sekunden in den schlaf (Thread_Delay). Wenn die Tür geöffnet wird soll das Waschprogramm unterbrochen werden.(ISR) Das zweite Programm soll alle 5 Sekunden 2 Temperaturen erfassen und dementsprechend die Heizungen schalten. Die gemessenen Temperaturen werden über den I2C Digital-analog Umsetzer (TDA8444) auf die beiden LED-Bargraf dargestellt Einzeln laufen beide Programme ohne Probleme. In Multithreading nicht richtig. Das Spülprogramm wird gar nicht abgearbeitet. Die Temperatur wir gemessen, wird aber falsch auf den LEDs ausgegeben. Was für Zykluszeiten mu� ich einstellen? An was kann es liegen? Sind die ADC und I2C zugriffe die Ursache? Hat jemand eine Idee wie ich die ISR schreiben mu� wenn sie das Spülprogramm abbrechen soll wenn die Tür geöffnet wird. Springen ist ja nicht möglich! void main(void) { while(true) { Thread_Start(1,temp_thread) Thread_Start(2,spuell_thread); } } void temp_thread(void) { Variablen while(1) { Thread_Lock(1); Tread wechsel während AD wandeln unterbinden ADC_Set(ADC_VREF_VCC,0); ad_wert0=ADC_Read(); ADC_Set(ADC_VREF_VCC,1); ad_wert1=ADC_Read(); ADC_Disable(); Thread_Lock(0); ------- Auswerten von ad_wert 0 und 1 -------- Thread_Lock(1); LED bar über I2C ansteuern I2C_Init(I2C_100kHz ); I2C_Start(); I2C_Write(0x40); I2C_Write(0x00); I2C_Write(adress0); LED_BAR 1 I2C_Write(adress1); LED_BAR 2 I2C_Stop(); Thread_Lock(0); } } void spuell_thread (void) { while(eingeschaltet?) { if(tür zu?) { Ventile ansteuern,Pumpen einschalten waschen Thread_Delay (62000); 62 Sekunden spülen Ventile schliessen,Pumpen ausschalten abtropfen Thread_Delay (10000); 10 Sekunden abtropfen Ventile öffnen, pumpen einschalten klarspülen Thread_Delay (8000); 8 Sekunden klarspülen Ventile schliessen,Pumpen ausschalten.. }}} | ||
Antwort schreiben Antworten: Re: Was für Zykluszeiten muß ich einstellen? An was kann es liegen? (von PeterS - 27.06.2008 8:53) Re: Was für Zykluszeiten muß ich einstellen? An was kann es liegen? (von Markus - 27.06.2008 13:10) Re: Was für Zykluszeiten muß ich einstellen? An was kann es liegen? (von PeterS - 27.06.2008 15:04) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum