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

Re: Timer mit 100µs Kategorie: Programmierung C (von PeterS - 8.07.2006 13:06)
Als Antwort auf Re: Timer mit 100µs von PeterS - 8.07.2006 12:39
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128
Hallo ich opimiere mal das ganze Programm. Da ich unter Stress stehe kann ich es nicht testen,
aber sollte bis auf Syntax Fehler funktioieren:

void main(void)  
{
Port_DataDirBit(0,1);                   //Port PA.0 auf Ausgang
Port_DataDirBit(1,1);                   //Port PA.1 auf Ausgang
Port_WriteBit(0,0);                      //Ausgang PA.0 wird zurückgesetzt
Port_WriteBit(1,0);

while (true)
    {
          busy=1;
          Irq_SetVect(INT_TIM3COMPA,Timer3_ISR_1);
          Timer_T3Time(30,PS_64);          // Differenzzeit 30 x 4,34µs
           while (busy);                      // warten auf IRQ

           busy=1;
           Irq_SetVect(INT_TIM3COMPA,Timer3_ISR_2);
           Timer_T3Time(50,PS_64);        // Aus-Zeit  festlegen und Timer1 starten
           while (busy);
           Port_WriteBit(0,0);                   // Port 50 zurücksetzen
           Port_WriteBit(1,0);                   // Port 51 zurücksetzen
    }
 }
 
 void Timer3_ISR_1(void)
 {
     Port_WriteBit(0,1);                   // Port 51 setzen
     busy=0;
     Irq_GetCount(INT_TIM3COMPA);    
 }

 void Timer3_ISR_2(void)
 {
     Port_WriteBit(1,1);                   // Port 50 setzen
     busy=0;
     Irq_GetCount(INT_TIM3COMPA);    
 }


Ich hoffe das Primzip ist klar.


Gruss Peter



> Hi,
>
> ich konnte mich wegen Urlaubs nicht um das Forum kümmern, deshalb verspätet:
>
> Pack das "Port_WriteBit(1,1);  // Port 50 setzen" doch direkt in die ISR:
>
> void Timer3_ISR(void)
> {
>      Port_WriteBit(1,1);  // Port 50 setzen  
>       irq_GetCount(INT_TIM3COMPA);    
>  }
>
> das sollte min doppelt so schnell gehen wie die vorherige Methode. Wenn man den Wert von "irqcnt"
> nicht braucht, kann man sich die Zuweisung auch sparen.
>
> Man kann in einer Interruptroutine alles machen.
>
> Gruss Peter
>
> > Hallo,
> > 2 Ports sollen nacheinander eingeschaltet werden (Differenzzeit).
> > Die Zeit dazwischen 100µs, die Auszeit ist unkritisch.
> > Bei 300µs ist Schlu�, kürzer geht offentsichtlich nicht. (Interpreter zu langsam?)
> >
> > Lä�t sich das Problem überhaupt lösen?
> >
> > GruÃ? Klaus
> >
> > void main(void)  
> > {
> > Port_DataDirBit(0,1);                   //Port PA.0 auf Ausgang
> > Port_DataDirBit(1,1);                   //Port PA.1 auf Ausgang
> > Port_WriteBit(0,0);                      //Ausgang PA.0 wird zurückgesetzt
> > Port_WriteBit(1,0);
> > Irq_SetVect(INT_TIM3COMPA,Timer3_ISR);
> >
> > while (true)
> >     {
> >           Timer_T3Time(30,PS_64);          // Differenzzeit 30 x 4,34µs
> >            Port_WriteBit(0,1);                   // Port 51 setzen
> >            busy=1;
> >            while (busy==1);                      // warten auf IRQ
> >            Port_WriteBit(1,1);                   // Port 50 setzen
> >            Timer_T3Time(50,PS_64);        // Aus-Zeit  festlegen und Timer1 starten
> >            busy=1;
> >            while (busy==1);
> >            Port_WriteBit(0,0);                   // Port 50 zurücksetzen
> >            Port_WriteBit(1,0);                   // Port 51 zurücksetzen
> >     }
> >  }
> >  
> >  void Timer3_ISR(void)
> >  {
> >      int irqcnt;
> >      busy=0;
> >      irqcnt=Irq_GetCount(INT_TIM3COMPA);    
> >  }


    Antwort schreiben


Antworten:

Re: Timer mit 100µs (von Klaus B. - 10.07.2006 10:08)
    Re: Timer mit 100µs (von PeterS - 10.07.2006 10:39)
        Re: Timer mit 100µs (von Klaus B. - 10.07.2006 16:03)
            Re: Timer mit 100µs (von PeterS - 10.07.2006 17:53)
                Re: Timer mit 100µs (von Klaus B. - 11.07.2006 7:43)
                    Re: Timer mit 100µs (von Klaus B. - 13.07.2006 6:44)