Przyznaje koledze racje co do resetu.
Jednak ja miałem błąd w programie. Sugerowałem się inicjalizacją jednego kolegi z forum. Która wyglądała następująco:
RF12Cmd(0x80d8); // EL, EF, 433band, 12.5pF
RF12Cmd(0x8209); // EX, DC \\ NONE
RF12Cmd(0xa640); // 434MHz
RF12Cmd(0xc611); // 19.2kbps
RF12Cmd(0x94a0); // VDI, FAST, 137kHz, 0dBm, -103dBm
RF12Cmd(0xc2ac); // AL, S, DQD4
RF12Cmd(0xc487); // A1, FI, OE, EN
RF12Cmd(0x9850); // 90kHz, MAX OUT
// odczekanie na uruchomienie oscylatora
_delay_ms(5);
// zerowanie do odbierania
RF12Cmd(0xca81); //
RF12Cmd(0xca83); // FIFO8, DR
RF12Recv();
Gdzie:
uint16_t RF12Cmd(uint16_t Cmd)
{
uint16_t Data;
SPI_PORT &= ~(1 << SPI_CS);
SPDR = Cmd >> 8;
while (!(SPSR & (1 << SPIF)));
Data = SPDR << 8;
SPDR = Cmd & 0xff;
while (!(SPSR & (1 << SPIF)));
Data |= SPDR;
SPI_PORT |= (1 << SPI_CS);
return Data;
}
a
uint8_t RF12Recv(void)
{
while (RF_IRQ_PIN & (1 << RF_IRQ_BIT));
RF12Cmd(0x0000);
return RF12Cmd(0xb000);
}
Po odłączeniu zasilania i podłączeniu z powrotem(wtedy resetowany był i mikrokontroler i układ rfm12) program przez komendę „RF12Recv();” przechodził. Natomiast jak układ resetowałem (tzn. sam mikrokontroler) to na tej komendzie się zatrzymywał. Zamiast tego wstawiłem tylko odczyt statusu RF12Cmd(0x0000); i teraz działa dobrze.
Użyj funkcji SYNTAX do umieszczania kodu.
Dar.El