Я использую эту библиотеку с das-labor.org
rfm12lib.zip, в ней реализованы програмный и аппаратный SPI, работа с модулем по преріванию и опросу, контроль несущей и др. подробней в доке.
Внутри архива перевод доки к библиотеки и пример файла rfm12_config.h с програмным SPI.
Проверена работа на atmega8, atmega16, atmega128 в связке с RFM12B (Uпит.5В!), RFM12, TRC102 - работает в режиме трансивера без вопросов.
Прерывание в примере сконфигурировано под Atmega128, для atmega 8,16 замени на:
/**** INTERRUPT VECTOR
* define the interrupt vector settings here
*/
//the interrupt vector
#define RFM12_INT_VECT (INT0_vect)
//the interrupt mask register
#define RFM12_INT_MSK GICR
//the interrupt bit in the mask register
#define RFM12_INT_BIT (INT0)
//the interrupt flag register
#define RFM12_INT_FLAG GIFR
//the interrupt bit in the flag register
#define RFM12_FLAG_BIT (INTF0)
//setup the interrupt to trigger on negative edge
#define RFM12_INT_SETUP() MCUCR |= (1‹‹ISC01)
---------------------------------------------------------------------------------------------
Пример работы с библиотекой:
#include ‹stdlib.h›
#include ‹avr/io.h›
#include ‹util/delay.h› /// задержки
#include "lcd.h"
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
#include ‹util/delay.h›
#include ‹string.h›
#include ‹avr/sleep.h›
#include "rfm12.h"
char buffer[7];
unsigned char das,a,b,tv;
unsigned int ticker;
int main(
void)
{
uint8_t tv[] = "Мы принимаем";
uint8_t *bufcontents;
uint8_t i;
_delay_ms(150);
rfm12_init();
sei();
lcd_init(LCD_DISP_ON);
lcd_clrscr();
rfm12_tx (sizeof(tv), 0, tv);
rfm12_tick();
_delay_ms(250);
while (1)
{
ticker++;
if (b›15)
{ b=0;
rfm12_tx (sizeof(df), 0, df);
rfm12_tick();
}
b++;
itoa( rfm12_rx_status(), buffer, 10);
lcd_puts(buffer);
if (rfm12_rx_status() == STATUS_COMPLETE)
{ b=0;
ticker = 0;
bufcontents = rfm12_rx_buffer();
for (i=1;i‹rfm12_rx_len();i++)
{
lcd_putc(bufcontents[i]);
}
rfm12_rx_clear();
rfm12_tx (sizeof(df), 0, df);
rfm12_tick();
}
das++;
if(das==10)das=0;
df[0]=das;
df[1]=0;
rfm12_tick()
//Без этого работает не стабильно
}
}
----------------------------------------------------------------------------------------
Библиотека для работы с дисплеем на контроллере hd44780, добавлен символ батарейки и массив для автоматической перекодировки русских символов
hd44780lib.zip
Возникнут вопросы пишите в теме.