www.mikrocontroller.net

Forum: HF, Funk und Felder RFM12 mit AT89C4051


Autor: C.Polo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich wollte bei meinem Projekt das RFM12 Module mit einem AT89C4051 
ansteuern. Finde aber nur Programme/Hilfe für AVR controller. Da ich AVR 
überhaupt nicht kenne, find ich mich nicht so zurecht wie ich die 
Programme von AVR auf meinen Controller "übersetzen" kann. (Ich 
programmiere in C)

Gibt es da jemand der mir helfen könnte?

schonmal danke im vorraus

Autor: C.Polo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mir vorallem zu denken gibt, wofür werden diese 3 Anschlüsse im 
Programm verwendet. Das Beispielprogramm habe ich von diesem Forum.

#define RF_PORT  PORTB
#define RF_DDR  DDRB
#define RF_PIN  PINB

Was ich bis jetzt weis ist: PORTB ist halt ein normaler Port, mit DDRB 
sagt man welche Pins beim PORTB Ausgänge oder Eingänge sind. PINB weis 
ich nicht, aber nach dem Name würde ich sagen es ist ein Pin von PORTB?

Und wofür ist cbi und sbi?

Diese werden glaub ich nur in diesen Teilen des Programms verwendet.
unsigned short rf12_trans(unsigned short wert)
{  unsigned short werti=0;
  unsigned char i;

  cbi(RF_PORT, CS);
  for (i=0; i<16; i++)
  {  if (wert&32768)
      sbi(RF_PORT, SDI);
    else
      cbi(RF_PORT, SDI);
    werti<<=1;
    if (RF_PIN&(1<<SDO))
      werti|=1;
    sbi(RF_PORT, SCK);
    wert<<=1;
    _delay_us(0.3);
    cbi(RF_PORT, SCK);
  }
  sbi(RF_PORT, CS);
  return werti;
}
void rf12_ready(void)
{  cbi(RF_PORT, CS);
  while (!(RF_PIN&(1<<SDO))); // wait until FIFO ready
}
void rf12_init(void)
{
  RF_DDR=(1<<SDI)|(1<<SCK)|(1<<CS);
  RF_PORT=(1<<CS);

  for (unsigned char i=0; i<10; i++)
    _delay_ms(10);      // wait until POR done

  rf12_trans(0xC0E0);      // AVR CLK: 10MHz
  rf12_trans(0x80D7);      // Enable FIFO
  rf12_trans(0xC2AB);      // Data Filter: internal
  rf12_trans(0xCA81);      // Set FIFO mode
  rf12_trans(0xE000);      // disable wakeuptimer
  rf12_trans(0xC800);      // disable low duty cycle
  rf12_trans(0xC4F7);      // AFC settings: autotuning: -10kHz...+7,5kHz
}

Autor: JL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls du schon länger du in C programmierst sollte dir klar sein das cbi 
bzw sbi eine Funktion oder ein Makro ist. Wahrscheinlich ein Macro. Also 
im Beispielcode mal danach suchen.

Desweiteren sind die Namen eigentlich fast eindeutig:
 CBI: clear bit from given parameter (RF_PORT -> PORT B, SCK -> 
spezielles bitposition für Clockanschluss)
 SBI: set bit ....



JL

Autor: C.Polo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Name sind schon klar, jedoch wie genau die Ports bei AVR 
funktionieren wusste ich nicht(hast mich wohl falsch verstanden, oder 
ich mich falsch ausgedrückt :P). Habe aber eine sehr hilfreiche Doku 
gefunden(nach ewigem googeln):

http://www.tschallener.net/AVR/AVR-Ports.pdf

Ich programmiere zwar seit ca. 2 Jahre, aber dafür nicht so häufig. Und 
cbi und sbi habe ich bis jetzt noch nie gebraucht.

naja das meiste ist mir jetzt eigentlich klar. Werd dann beim nächsten 
Problem wieder hier posten.

mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.