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 | }
|