Перейти к содержанию
    

AVR на 16 Мгц и питание 3.6 вольт

Наткнулся на описание контроллера ATmega128RFA1 - из последних, может работать от 3.6 вольт и разгоняться при этом до 16 МГц. Он с радиотрансивером.

 

Интересует следующее - есть ли какие-нибудь другие реинкарнации ATMega128 (важна pin-to-pin совместимость), способные работать на такой частоте при напряжении 3.3 вольт ?

 

Есть проект на ATmega128, задействованы все выводы. ИЗ-за 3 вольтовой периферии вынужден разгонять контроллер всего до 8 МГц, а так хочется 16. Согласнование не прокатит - слишком много линий связи.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нда...

Что самое интересное, в том проекте как раз трансивер отдельный используется, и эта атмега могла бы убить сразу двух зайцев но... зело сложен в ней трансивер....

Изменено пользователем zheka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

зело сложен в ней трансивер....

Что значит сложен? В простейшем случае принять-отправить кадр - это программа на несколько десятков строчек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Taradov Alexander, а Вам приходилось работать с cc2500? Что на Ваш взгляд лучше?

Может ли ATmega работать с PCB-антенной?

 

Кстати - пытался на сайте атмель найти пример кода - не смог. Не ткнете пальцем?

Изменено пользователем zheka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Taradov Alexander, а Вам приходилось работать с cc2500? Что на Ваш взгляд лучше?
Не работал. Я по долгу службы работаю с атмелом :)

 

Может ли ATmega работать с PCB-антенной?

Да, конечно.

 

Кстати - пытался на сайте атмель найти пример кода - не смог. Не ткнете пальцем?

 

Не знаю где это есть на сайте, но вот кусок простейшего кода, который я использовал для тестов.Код грязный, но представление дает. Используются и basic и extended режимы, для basic можно установку адресов пропустить.

 

#include <avr/io.h>
#include <avr/interrupt.h>
#include "atmega128rfa1.h"

#define DEVICE 0
//#define DEVICE 1

#define BASIC 0

#define PANID   (0x1234)
#define SADDR   DEVICE //(0x0001)
#define EADDR   (0xaabbccdd00000000LL | SADDR)

//
// Types
//
typedef struct
{
 uint8_t  phr;
 uint16_t fcf;
 uint8_t  seq;
 uint16_t dpan;
 uint16_t daddr;
 uint16_t saddr;
 uint8_t  data;
 uint16_t crc;
} Frame_t;

//
// Variables
//
uint8_t txCnt = 0;
uint8_t payload = 0;

volatile int rxReceived = 0;
volatile uint8_t rxPayload;

volatile int txWaitInt = 0;

//
// Functions
//
void infBlink(void)
{
 long i;

 cli();
 PORTE = 0;
 while (1)
 {
	PORTE ^= 0xff;
for (i = 0; i< 20000; i++)
  asm("nop");
 }
}

void setState(uint8_t state)
{
 TRX_STATE = CMD_FORCE_TRX_OFF;
 TRX_STATE = state;
 while (state != (TRX_STATUS & REG_TRX_STATUS_TRX_STATUS_MASK));
}

void sendFrame(uint8_t payload)
{
 int i;
 Frame_t frame;

#if BASIC
 setState(TRX_CMD_PLL_ON);
#else
 setState(TRX_CMD_TX_ARET_ON);
#endif

 frame.phr = sizeof(Frame_t)-1;
 frame.fcf = (1 << 0) /*data*/ | (1<<5) /*ackReq*/ | (1<<6) /*panIdComp*/  | (2<<10) /*dstAddrMode*/ | (2<<14) /*srcAddrMode*/;
 frame.dpan = PANID;
 frame.saddr = SADDR;
 frame.daddr = 1-SADDR;
 frame.seq = txCnt++;
 frame.data = payload;

 for (i = 0; i < sizeof(Frame_t); i++)
TRX_FRAME_BUFFER(i) = ((uint8_t *)&frame)[i];

 txWaitInt = 1;
 TRX_STATE = CMD_TX_START;
}

ISR(TRX24_RX_END_vect)
{
 setState(TRX_CMD_PLL_ON);

 PORTE ^= (1<<3);

 rxPayload = TRX_FRAME_BUFFER(9);
 rxReceived = 1;
}

ISR(TRX24_TX_END_vect)
{
 PORTE ^= (1<<2);

 if (txWaitInt)
txWaitInt = 0;
 else
infBlink();
}

void rfInit(void)
{
 TRXPR_struct._trxrst = 1;

 setState(TRX_CMD_TRX_OFF);

 CSMA_SEED_1_struct._aack_set_pd = 1;
 CSMA_SEED_1_struct._aack_dis_ack = 0;

 IRQ_STATUS = IRQ_STATUS_CLEAR_VALUE;
 IRQ_MASK_struct._rx_end_en = 1;
 IRQ_MASK_struct._tx_end_en = 1;
 sei();

 PHY_CC_CCA_struct._channel = 0x0f;
 TRX_CTRL_2_struct._rx_safe_mode = 1;

 CSMA_SEED_0 = (uint8_t)SADDR;

 {
uint16_t vPanId = PANID;
uint8_t *panId = (uint8_t *)&vPanId;
PAN_ID_0 = panId[0];
PAN_ID_1 = panId[1];
 }

 {
uint16_t vShortAddr = SADDR;
uint8_t *shortAddr = (uint8_t *)&vShortAddr;
SHORT_ADDR_0 = shortAddr[0];
SHORT_ADDR_1 = shortAddr[1];
 }

 {
uint64_t vExtAddr = EADDR;
uint8_t *extAddr = (uint8_t *)&vExtAddr;
IEEE_ADDR_0 = extAddr[0];
IEEE_ADDR_1 = extAddr[1];
IEEE_ADDR_2 = extAddr[2];
IEEE_ADDR_3 = extAddr[3];
IEEE_ADDR_4 = extAddr[4];
IEEE_ADDR_5 = extAddr[5];
IEEE_ADDR_6 = extAddr[6];
IEEE_ADDR_7 = extAddr[7];
 }

}

int main()
{
 long i;

 DDRE = 0xff;
 PORTE = 0xff;

 rfInit();

#if DEVICE == 0
#if BASIC
 setState(TRX_CMD_RX_ON);
#else
 setState(TRX_CMD_RX_AACK_ON);
#endif
 while (1)
 {
// Wait for frames
if (rxReceived)
{
  for (i = 0; i < 10000; i++) // Wait a bit
	asm("nop");

  rxReceived = 0;
  sendFrame(rxPayload);
  while (txWaitInt)
	asm("nop");
#if BASIC
  setState(TRX_CMD_RX_ON);
#else
  setState(TRX_CMD_RX_AACK_ON);
#endif
}
 }
#endif

#if DEVICE == 1
 while (1)
 {
for (i = 0; i < 1000000; i++)
  asm("nop");

// Send frame
sendFrame(payload);
while (txWaitInt)
  asm("nop");

// Wait for response
rxReceived = 0;
#if BASIC
setState(TRX_CMD_RX_ON);
#else
setState(TRX_CMD_RX_AACK_ON);
#endif
for (i = 0; i < 1000000; i++)
{
  if (rxReceived)
  {
	if (payload == rxPayload)
	  payload++;
	else
	  infBlink();
	break;
  }
}
 }
#endif

 while (1);

 return 0;
}

Изменено пользователем Taradov Alexander

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

блин, у них на сайте даже нормального описания evaluation kit нет.
Да, есть такая проблема. Но схема есть, и она не сильно сложная - разобраться можно :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да схема и в даташите есть. Мне бы пример топологии с PCB антенной....

Для примера PCB антены можно посмотреть на документацию на кит Raven. Он на отдельном трансивере, но антена не меняется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...