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 > Hi, > > was mir sofort auffällt: > > 1. Man startet die Threads nur einmal, die Endlosschleife kommt dahinter. > 2. ThreadDelay wird in 10ms Schritten abgegeben: Ein Wert von 1000 wartet daher 10 Sekunden > > > Gruss Peter > > > 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. > > > > <b>Was für Zykluszeiten muß ich einstellen?<b> > > 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! > > > > <b><i>void main(void)</i></b> > > { > > while(true) > > { > > > > Thread_Start(1,temp_thread) > > Thread_Start(2,spuell_thread); > > } > > } > > > > <b><i>void temp_thread(void)</i></b> > > { > > 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); > > } > > } > > > > <b><i>void spuell_thread (void)</i></b> > > { > > while(eingeschaltet?) > > { > > if(tür zu?) > > { > > Ventile ansteuern,Pumpen einschalten <b>waschen<b> > > > > Thread_Delay (62000); <b> 62 Sekunden spülen<b> > > > > Ventile schliessen,Pumpen ausschalten <b>abtropfen<b> > > > > Thread_Delay (10000); <b>10 Sekunden abtropfen<b> > > Ventile öffnen, pumpen einschalten <b>klarspülen<b> > > Thread_Delay (8000); <b>8 Sekunden klarspülen <b> > > > > Ventile schliessen,Pumpen ausschalten.. > > }}} > > > > > >