Собрал на днях модуль RFM22B + AVR ulricha.
http://www.ulrichradig.de/home/index.php/avr/rfm22-und-atmega88
RFM22B + ATmega88 + USB Adapter
Запрограммировал на передатчик.
Фьюэы выставил -U lfuse:w:0xff:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
Запустился, светодиод мигает...
Второй модуль пока не собирал.
Передает, не передает - не знаю, не проверял...
Больше интересует UART.
Спойлер
/*----------Copyright:
Author: Radig Ulrich
Remarks:
known Problems: none
Version: 14.06.2007
Description: RS232 Routinen
----------*/
#include "usart.h"
//----------
//Init serielle Schnittstelle
void usart_init(unsigned long baudrate)
{
//Enable TXEN im Register UCR TX-Data Enable
UCSRB =(1 << TXEN);
//Teiler wird gesetzt
UBRRH = (unsigned char)((SYSCLK / (baudrate * 16L) - 1)>>8);
UBRRL = (unsigned char)((SYSCLK / (baudrate * 16L) - 1));
}
//----------
void usart_write_P (const char *Buffer,...)
{
va_list ap;
va_start (ap, Buffer);
int format_flag;
char str_buffer[10];
char str_null_buffer[10];
char move = 0;
char Base = 0;
int tmp = 0;
char by;
char *ptr;
//Ausgabe der Zeichen
for(;;)
{
by = pgm_read_byte(Buffer++);
if(by==0) break; // end of format string
if (by == '%')
{
by = pgm_read_byte(Buffer++);
if (isdigit(by)>0)
{
str_null_buffer[0] = by;
str_null_buffer[1] = '\0';
move = atoi(str_null_buffer);
by = pgm_read_byte(Buffer++);
}
switch (by)
{
case 's':
ptr = va_arg(ap,char *);
while(*ptr) { usart_write_char(*ptr++); }
break;
case 'b':
Base = 2;
goto ConversionLoop;
case 'c':
//Int to char
format_flag = va_arg(ap,int);
usart_write_char (format_flag++);
break;
case 'i':
Base = 10;
goto ConversionLoop;
case 'o':
Base = 8;
goto ConversionLoop;
case 'x':
Base = 16;
//****************************
ConversionLoop:
//****************************
itoa(va_arg(ap,int),str_buffer,Base);
int b=0;
while (str_buffer[b++] != 0){};
b--;
if (b<move)
{
move -=b;
for (tmp = 0;tmp<move;tmp++)
{
str_null_buffer[tmp] = '0';
}
//tmp ++;
str_null_buffer[tmp] = '\0';
strcat(str_null_buffer,str_buffer);
strcpy(str_buffer,str_null_buffer);
}
usart_write_str (str_buffer);
move =0;
break;
}
}
else
{
usart_write_char ( by );
}
}
va_end(ap);
}
//----------
//Ausgabe eines Strings
void usart_write_str(char *str)
{
while (*str)
{
usart_write_char(*str++);
}
}
//----------
//Routine fьr die Serielle Ausgabe eines Zeichens
void usart_write_char(char c)
{
if (c == '\n')
usart_write_char('\r');
//Warten solange bis Zeichen gesendet wurde
while(!(UCSRA & (1<<UDRE)));
//Ausgabe des Zeichens
UDR = c;
return;
}
Подключался Terminalом, в ответ тишина...
Никак не могу понять что он должен посылать в UaRT и когда?!
У USB Adapterа - эхо есть...
Коты помогите новичку...
Что в коде UARTa? Для мня С - тьма...
Понял только то что включена передача.
Может я фьюзы неправильно выставил?
Или кто уже собирал?


