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 Klaus B. - 10.07.2006 10:08)
Als Antwort auf Re: Timer mit 100µs von PeterS - 8.07.2006 13:06
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board
Hallo Peter,
hoffentlich war Dein Urlaub wenigstens stressfrei...

Ich hab Deinen Hinweis getestet, jedoch: bei 300µs ist Ende.
Auch wenn ich Timer 1 und 3 verwende, wird's nicht schneller. Die Definition der IRQ-Routinen 1+2
hab ich vor die while-Schleife mal gesetzt, auch das spart nix.
Timer 0 bringt auch nix, bei 300µs ist wieder Schlu�. Der Interpreter ist vom 15.05.2006

GruÃ? Klaus



> 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 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)