[PIC] PIC 16F887 + I2C + Philips TEA5768HL RADIO

OP #2280177
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
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.