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
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.
1 | unsigned short rf12_trans(unsigned short wert) |
2 | { unsigned short werti=0; |
3 | unsigned char i; |
4 | |
5 | cbi(RF_PORT, CS); |
6 | for (i=0; i<16; i++) |
7 | { if (wert&32768) |
8 | sbi(RF_PORT, SDI); |
9 | else
|
10 | cbi(RF_PORT, SDI); |
11 | werti<<=1; |
12 | if (RF_PIN&(1<<SDO)) |
13 | werti|=1; |
14 | sbi(RF_PORT, SCK); |
15 | wert<<=1; |
16 | _delay_us(0.3); |
17 | cbi(RF_PORT, SCK); |
18 | }
|
19 | sbi(RF_PORT, CS); |
20 | return werti; |
21 | }
|
1 | void rf12_ready(void) |
2 | { cbi(RF_PORT, CS); |
3 | while (!(RF_PIN&(1<<SDO))); // wait until FIFO ready |
4 | }
|
1 | void rf12_init(void) |
2 | {
|
3 | RF_DDR=(1<<SDI)|(1<<SCK)|(1<<CS); |
4 | RF_PORT=(1<<CS); |
5 | |
6 | for (unsigned char i=0; i<10; i++) |
7 | _delay_ms(10); // wait until POR done |
8 | |
9 | rf12_trans(0xC0E0); // AVR CLK: 10MHz |
10 | rf12_trans(0x80D7); // Enable FIFO |
11 | rf12_trans(0xC2AB); // Data Filter: internal |
12 | rf12_trans(0xCA81); // Set FIFO mode |
13 | rf12_trans(0xE000); // disable wakeuptimer |
14 | rf12_trans(0xC800); // disable low duty cycle |
15 | rf12_trans(0xC4F7); // AFC settings: autotuning: -10kHz...+7,5kHz |
16 | }
|
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.