schnelleren Takt erzeugen

Gast #2229294
Lesenswert?

Hallo

ich muss mit uCOS einen Takt erzeugen. So funktioniert zwar der Code 
jedoch mein Problem ist die Frequenz. Die Frequenz ist bei 100Hz ich 
bräuchte jedoch um die 20kHz.

Wie könnte ich das Problem lösen?

MfG

1
void TaskMotor(void *pdata)
2
{
3
    //Taster X+
4
    DDRB &= ~(1<<DDB0);
5

6
  
7
    //Motor Clock X        
8
    DDRB |= (1<<DDB5);
9
    PORTB |= (1<<PORTB5);
10
   
11
    static int variable = 0; 
12

13

14
    while (1)
15
    {
16

17
        if (~PINB & (1<<PB0))
18
        {
19

20
            if(variable == 0)
21
            {
22
                PORTB &= ~(1<<PB5);
23
                variable = 1;
24

25
            }
26
            else if (variable == 1)
27
            {
28
                PORTB |= (1<<PB5);
29
                variable = 0;
30
            }
31
        }
32

33
    OSTimeDly(1);
34
    }
35
}
Gast #2229328
Lesenswert?

Hallo,

abcde schrieb:
> OSTimeDly(1);

Ist das ein Delay oder was ???

Ansonsten statt

abcde schrieb:
> if (~PINB & (1<<PB0))
>         {
>
>             if(variable == 0)
>             {
>                 PORTB &= ~(1<<PB5);
>                 variable = 1;
>
>             }
>             else if (variable == 1)
>             {
>                 PORTB |= (1<<PB5);
>                 variable = 0;
>             }
>         }

mal

 if (~PINB & (1<<PB0))
   {
       PORTB ^= (1<<PB5);
   }

probieren

Gruss Thomas
Gast #2232879
Lesenswert?

"toggle OCx on compare match" kann ich nicht verwenden

Deswegen überlege ich es auf diese Art zu programmieren.

Wie lange ist das Compare flag gesetzt.
1
while((taste1 gedrückt) || (taste2 gedrückt) || (taste3 gedrückt)) 
2
{
3
  if(compare flag gesetzt)
4
  {
5
    //pin1, pin2 oder pin 3 toggeln 
6
  }
7
}

MfG

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren