logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

programowy reset układu do komunikacji radiowej -rfm12

ciacho23 23 Maj 2012 16:57 1511 4
REKLAMA
  • #1 10926923
    ciacho23
    Poziom 11  
    Mam problem z zresetowaniem układu służącego do komunikacji radiowej -rfm12. W nocie katalogowej czytałem że da się to zrobić programowo poprzez wysłanie komendy FE00h. U mnie jednak to nie che działać. Potrzebuje tego do wybudzania układu po zadziałaniu w programie Watchdoga. Resetował ktoś może ten układ programowo?
  • REKLAMA
  • #2 10927037
    Zocha24
    Poziom 21  
    Jedyny programowy reset to watchdog, bo skok do FE00h powoduje restart avr-ka ale nie ustawia domyślnie rejestrów
  • REKLAMA
  • #3 10927397
    ciacho23
    Poziom 11  
    Z góry dziękuje za zainteresowanie:)

    Tylko że mi nie chodzi o to żeby resetować AVR-ka ale układ służący do komunikacji radjowej "RFM12" który jest podłączony do AVR-ra przez SPI. Jak zresetuje AVR to program zapisany na mikrokontrolerze odpala się od nowa ale nie nawiązuje połączenia z układem "RFM12". No więc chce się dowiedzieć jak to się robi programowo bo mi coś nie wychodzi.
  • REKLAMA
  • #4 10927429
    Zocha24
    Poziom 21  
    Spróbuj Software-Reset (0xFE00), konfiguracja i dopiero próba połączenia
  • #5 10928899
    ciacho23
    Poziom 11  
    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
REKLAMA