Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR + Micrel
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
jekler
Приветсвую!
нужно было организовать передачу данных(пока односторонюю) всего на 10 метров
решил было помучаться с чипконами
даже приобрел пару сс2500 но припаять возможности не было решил отложить на время и приобрел micrf022bm и micrf102bm
делал все по даташиту
обвязка стандартная
6 МГц резонаторы ( 390 МГц )
на приемнике дросселя на антенне 10 и 47 (43 не нашел) нГн согласно таблице для данной частоты
Кондер к антенне на приемнике не паял
А передатчик полностью по даташиту со всеми номиналами изготовлен разве что резонатор другой частоты
Изготовил тестовый стендик на авр
одна микруха отправляла 1 на 0.5 сек а потом 0 на 0.5 сек и по кругу
другая принимала сигнал с приемника и по идее должна была зажигать светодиод на 0.5 сек и тушить его.
ну ессесно ничего не работало smile.gif
я в радио-передачах полный чайник и делал все тупо и на прямую без каких либо расчетов.
Кто с ними возился расскажите пожалуйста все нюансы...
и ошибки мои...
да кстати с анти-статикой вышел казус(заземление теоретически было на руке провод и на паялке) но потом стукнуло меня после окончания пайки что я забыл проверить а нормальное ли заземление было т.к на батарее была царапина без краски и я к туда примотал провод
оказалось что заземления нет т.к провод хреново прижимался
так вот мог ли я статикой убить их? или они вплотную друг к другу должны что-либо передавать?
собсно стэндик: Нажмите для просмотра прикрепленного файла
jekler
да забыл сказать что если прямой проводок без радио-модулей кинуть между микрухами то все работает smile.gif
а то что на батарею - так больше некуда smile.gif
beer_warrior
С этими микрухами не знаком, но радио занимался.
Итак вопросы:
1.Какой протокол обмена (размер пакетов, конторльные суммы итп.)?
2.Сделано ли NRZ кодирование(или оно обеспечивается аппаратно.)?
3.Если запустить передатчик, видно ли что-то на выходе приемника?
По результату можно судить, где проблема в радиотракте или в софте.
jekler
никаких протоколов пока не использую
Просто посылаю набор 0 и 1 со скважностью 5 мксек
а микруха на приемнике просто слушает эфир
нога установленна в 1 и если будет 0 то должен загорется светодиод
светодиод не загорается
осцилографа нет поэтому все осложняется
beer_warrior
Цитата
осцилографа нет поэтому все осложняется

OK, тогда код в студию smile.gif
jekler
Звуковуха есть
делать лень
надеялся что и без него обойдусь
Вообще ничего в коде сложного нет, по моим идеям сигнал на приемнике хоть какой-то должен быть...

Код:
Кодевижн:
Передатчик:
Код
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date    : 16.06.2006
Author  : leo                            
Company : nkrp                            
Comments:


Chip type           : ATmega16L
Program type        : Application
Clock frequency     : 4,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>

#define BUTTON PIND.6
#define LED1 PORTB.7
#define SIGNAL PORTB.0

// Declare your global variables here

int but;

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=0
PORTB=0x00;
DDRB=0x81;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=P State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x40;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

but=0;

while (1)
      {
      // Place your code here
      delay_ms(200);
      if(!BUTTON)
      but++;
      if(but>2)
      {
       LED1=1;
       for(but=3;but<1000;but++)
       {
        SIGNAL=1;
        delay_us(500); // Тут перепробовал разные значения
        SIGNAL=0;
       }
       LED1=0;
       but=0;
       SIGNAL=0;
      }
      };
}


Приемник:
Код
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date    : 16.06.2006
Author  : leo                            
Company : nkrp                            
Comments:


Chip type           : AT90S2313
Clock frequency     : 4,000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*****************************************************/

#include <90s2313.h>
#include <delay.h>
#define SIGNAL PINB.7
#define LED1 PORTB.2
#define LED2 PORTB.4
// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=Out Func1=In Func0=In
// State7=P State6=T State5=T State4=1 State3=T State2=1 State1=T State0=T
PORTB=0x94;
DDRB=0x14;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1 output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

LED1=0;
while (1)
      {
      // Place your code here
       if(!SIGNAL)
       {
        LED1=1;
        LED2=0;
       }      
      };
}
WHALE
и че,этот код работает?имхо сомнительно cranky.gif
для приемника я-бы добавил else {LED1=0;LED2=1;}
кстати,зачем 2 портами дергать?
И передающий какой-то кривой-гораздо проще настроить таймер на нужную длительность и в прерыва-
нии от него менять значеник посылаемого бита.
Кстати,если в DS рекомендуется использовать NRZ,тогда это вообще не пройдет.
И без спектроанализатора при проверке передающего модуля вам тяжело прийдется.
beer_warrior
Присоединюсь к мнению WHALE и добавлю, что если без спектроанализатора еще можно покрутить, без осцилла делать негего.
Советую почитать, немножко теории на тему кодирования и поиска несущей при беспроводных соединениях, сейчас полно аппликэйшенов и журнальных статей на эту тему.
Harbinger
Может быть, что сигнал передатчика не попадает в полосу пропускания приемника (хотя если там несколько сотен кГц, должен попасть...) По опыту работы с синтезаторами, при частоте кварца порядка 10 МГц на 400 МГц может набежать ошибка в 50...150 кГц, ее приходится емкостями убирать. С керамическими резонаторами ситуация гораздо хуже. А если еще в передатчике и приемнике отклонение в разные стороны...
NRZ там непонятно как реализовать - обычная амплитудная манипуляция.
Для настройки мне по минимуму понадобился бы частотомер. А так, чтобы обойтись без танцев с бубном - HP8920 в самый раз smile.gif
jekler
Спасибо за советы smile.gif
попробую еще програмно похимичить...
мож всеж обойдусь без осцилографа smile.gif
beer_warrior
Цитата
Может быть, что сигнал передатчика не попадает в полосу пропускания приемника

Если при прямом проводном соединении работает, то скорее всего модуляция/демодуляция проходят.
На мой взгляд тут одна из следующих проблем:
1.Несогласование антенн.
2.Несогласование уровней приемника и передатчика с уровнями АВР.
3.Ошибка в софте.
Тут надо включать передатчик и смотреть наличие и качество сигнала на выходе приемника.По результатам плясать далее.
Цитата
NRZ там непонятно как реализовать - обычная амплитудная манипуляция.

А где же NRZ делать как не на АМ?
2 jekler попробуйте для начала, хотя бы сделать меандр не 1Гц,
а где-то на уровне килогерца, и подключить светодиод прямо на выход приемника.
Сергей Борщ
Цитата(beer_warrior @ Jun 18 2006, 06:25) *
2 jekler попробуйте для начала, хотя бы сделать меандр не 1Гц,
а где-то на уровне килогерца, и подключить светодиод прямо на выход приемника.
А чтобы не сломать глаз разглядывая на светодиоде 1 КГц, подключите к выходу приемника через конденсатор порядка 0.1мкф наушник.
beer_warrior
Совет хороший, только меандр со скважностью два, на светодиоде тоже неплохо виден (отличим от постоянного уровня)smile.gif
Harbinger
Цитата(beer_warrior @ Jun 18 2006, 06:25) *
Если при прямом проводном соединении работает, то скорее всего модуляция/демодуляция проходят.
На мой взгляд тут одна из следующих проблем:
1.Несогласование антенн.
2.Несогласование уровней приемника и передатчика с уровнями АВР.

Прямое проводное соединение было без радиомодулей. Но их же можно проверить даже без всякого софта, если подключиться к приемнику осциллографом и пощелкать кнопкой на входе "ASK" MICRF102 (или меандр подать, что удобнее).
Насчет несогласования антенн - казалось бы, не все так фатально при столь мизерных мощности и расстоянии smile.gif, но петлевая антенна является индуктивностью контура ГУН. Если этот контур настроен слишком далеко от номинальной частоты (индуктивность антенны существенно отличается от расчетной), ФАПЧ не справится. Потому я и упоминал о частотомере. Приемник вогнать в захват можно будет после настройки передатчика.
В даташите на передатчик обнаружилась непонятка. В одном месте - "PC Input Range" от 150 до 350 мВ, в другом - делитель пополам с 5 В. Может, выставить все же милливольт 200?
(Жаль, микрелов под руками нет - поставил бы эксперимент на досуге).
GeorgyBey
Цитата(jekler @ Jun 16 2006, 20:33) *
...
6 МГц резонаторы ( 390 МГц )
..
А передатчик ... разве что резонатор другой частоты ..... ??????????????????????????????????????????
..........


Если для приемника один резонатор, а для передатчика "другой частоты" cranky.gif

Без всяких контроллеров - подавайте на передатчик напряжение питания и смотрите что приемник делает? Если как то заметно, что принимает - можно дергаться дальше.
А если приемник, при работающем передатчике, "не дышит" - при чем тут АВРы и коды blink.gif
cheers.gif
Harbinger
"Резонатор другой частоты" - забавно, конечно. Сразу и не заметил. На 390,000 МГц для приемника получается 6,03 или 6,06 МГц, для передатчика - F(tx)/32=12,1875 МГц. На 385,5 - 5,96 (5,99) и 12,0468 МГц соответственно. А что стоит у автора темы?
(Вот за что не люблю синтезаторы с фиксированным коэффициентом, это за то, что нужны экзотические кварцы).
И напоследок. Для того, чтобы "вылететь" за полосу пропускания (наверняка - на 3 МГц в сторону), достаточно отклонения частоты резонатора в передатчике 100 кГц и 50 кГц в приемнике.

В общем-то эта тема не для раздела AVR, не находите? smile.gif
jekler
на приемнике стоит 12.2 Мгц
видимо расхождения всеже есть т.к не работает
доберусь до осцилографа и померю хотябы


Вообще у меня расхождения сильные в резонаторах
на передатчике 6 ровно на приемнике 12.2 ровно
других не нашел и не знаю где и искать такие
а вообще я по теме нашел про радиомаячек
http://www.rowalt.de/mc/avr/fox/fox01.htm

Обвязка там отличается немного от моей....

имеются под рукой 6.144 мгц нуна попробовать
но все равно не те
WHALE
Осцилом не получится-погрешность большая,меряй частотомером.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.