Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Was für Zykluszeiten muß ich einstellen? An was kann es liegen? Kategorie: Programmierung C (von Markus - 27.06.2008 1:28)
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
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)