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

Re: Problem mit Frequenzgenarator Kategorie: Programmierung C (von Peter W. - 18.07.2007 9:59)
Als Antwort auf Problem mit Frequenzgenarator von Helmut Isele - 8.07.2007 20:53
Ich nutze:
C-Control Pro Mega32
Ich benutze die 32er-Version die ja bekanntlich keinen Timer3 hat,
deshalb kann ich dein Programm leider nicht austesten. Was mir
aber aufgefallen ist, ist der logische Fehler in deinem Programm!
Die case-Anweisung für 1 wird niemals ausgeführt, da der Wert der
Variablen nach der Initialisierung und dem anschlieÃ?enden ++ immer
mit dem Wert 2 beginnt! Besser ist also: int_akt = 0;

Peter



> Hallo C-Control- Anwender,
>
> Ich habe mit dem Frequenzgenerator folgendes Problem : Beim zyklischen Ausgeben
> von verschiedenen Frequenzen werden bestimmte Frequenzen "verschluckt".
>  
> Der folgende Programmabschnitt soll  8  verschiedene  Frequenzen
> zyklisch ausgeben werden, doch leider geschieht das nur nur sporadisch.
> Die fehlenden Frequenzen treten nach wiederkehrendem Fehlermustern
> auf.
>
> Das ganze passiert bei Verwendung von Timer 3 wie auch bei Timer 1.
>
> Kann mir zu diesem Fehlerbild jemand helfen?
>
>
> int_akt = 1;
>     do
>     {
>       int_akt++;
>
>       switch( int_akt )
>         {
>         case 1:
>             t_fakt=260;  //55Hz
>             break;
>         case 2:
>             t_fakt=130;  //110Hz
>             break;
>          case 3:
>             t_fakt=65;   //220Hz
>             break;
>           case 4:
>             t_fakt=32;    //440Hz
>             break;
>          case 5:
>             t_fakt=16;    //880Hz
>             break;
>          case 6:
>             t_fakt=8;     //1760Hz
>             break;
>          case 7:
>             t_fakt=4;     //3520Hz
>             break;
>          case 8:
>             t_fakt=2;      //7040Hz
>             break;
>          case 9:
>             t_fakt=1;     //14080Hz
>             break;
>         }
>
>         if (int_akt==9)
>          int_akt = 1;
>
>
>         Timer_T3Stop();
>         AbsDelay(100);
>         Timer_T3FRQ(t_fakt,PS_1024);
>         AbsDelay(100);
>         Timer_T3Start(PS_1024);
>         AbsDelay(2000);
>
>            }
>     while (1);
>


    Antwort schreiben


Antworten: