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)