Forum: Mikrocontroller und Digitale Elektronik [PIC] PIC 16F887 + I2C + Philips TEA5768HL RADIO


von Shifty R. (shiftyroxx)


Angehängte Dateien:

Lesenswert?

Servus,

Ich bin neu auf den Board hier =)

Ich hab ein Problem mit meiner Programmierung, es handelt sich hierbei 
um die Prüfungsschaltung der IHK Sommer 2010, jedoch lass ich das 
Programm über den neuen µcontroller einschub laufen via adaper.

Mein Problem, ich kann die Frequenz nicht richtig aus dem Baustein 
auslesen :-(

Das beschreiben des Bausteins geschieht mittels diesen Funktionen:

void PLLWert(long PLL)          //longwert für PLL
{
   int Bit;                     //

   for(Bit=0;Bit<14;++Bit)      //Long in 2 Int verwandeln
   {
      if(bit_test(PLL,Bit)==true) //Auslesen der PLL
      {
         if(Bit<=7)               //unteren 8 Bit
            bit_set(FMSetup[2],Bit);
         else                     //oberen 8 Bit
            bit_set(FMSetup[1],Bit-8);
      }
      else
      {
         if(Bit<=7)             //unteren 8 Bit
            bit_clear(FMSetup[2],Bit);
         else                   //oberen 8 Bit
            bit_clear(FMSetup[1],Bit-8);
      }
   }

}
void SetFrequenz_kHz (int32 Frequenz)
{
   int32 temp;                 //Verarbeitete Frequenz
   long temp2;                 //long für PLLwert im PIC
   if (bit_test(FMSetup[3],4)) //Teste auf Highsideinjection
      temp = (Frequenz + 225) * 1000;
   else
      temp = (Frequenz - 225) * 1000;

   temp2 = (temp * 4) / 32768;
    PLLWert(temp2);
}



Auslesen würde ich die Frequenz, in umgekehrter Reihenfolge:

   long PLL_lesen ()
   {
   int16 Bit;
   int32 PLL =0;

   for(Bit=0;Bit<14;++Bit)      //2 int in ein long verwandeln
   {
      if(Bit<=7)
      {
         if(bit_test(FMData[2],Bit)==true)
            bit_set(PLL,Bit);
         else
            bit_clear(PLL,Bit);
      }
      else
      {
         if(bit_test(FMData[1],Bit-8)==true)
            bit_set(PLL,Bit);
         else
            bit_clear(PLL,Bit);
      }
   }
   return(PLL);
   }

   void GetFrequenz_kHz ()
   {
    int32 PLL;
    int32 temp; //Frequenz die noch angepasst werden muss
    PLL = PLL_lesen (); //PLLwert auslesen

    temp = (((PLL * 32768) / 4) / 1000);

    if (bit_test(FMSetup[3],4))

      temp = temp - 225;

    else

      temp = temp + 225;

    freq = temp;

   }

wenn ich die Funktion "PLL_lesen" als Funktion mit void deklariere kann, 
ich ja mit return keinen wert übergeben.
Ich vermute dass das auslesen der Bit's zu zwei Byte zu einer Variable 
Probleme macht.

Das Einstellen der Radiofrequenz funktioniert einwandfrei, aber den wert 
der vorher beschrieben wurde z.B.: 97.300MHz(Bayern 3) wird nach dem 
Auslesen als 132.698MHz angezeigt ???


Ich Hoffe ich hab mich verständlich ausgerückt, und es macht sich jemand 
die mühe sich in der Komplexen programmierung zurecht zu finden.


Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.