Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.07.2011, 03:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Не читается микросхема SI4702
Не читаеться микросхема SI4702, вроде всё правильно но нет ответа и всё.
Вот код для CVAVR Mega8
PHP код:
|
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define Dout PORTB.0
#define Din PINB.0
#define SCK PORTB.1
#define CS PORTB.2
#define reset PORTD.7
unsigned long R02=0b110000101100000000000001; //h2
unsigned char RR =0b11101011; //0x0B
typedef union
{
unsigned long lg;
unsigned char arr[3];
}un;
un un1;
union adcu
{
uint word;
uchar byte[2];
};
unsigned char spi_(unsigned char data)
{
unsigned char miso = 0;
unsigned char mask = 0x80;
for( ; mask; mask ››= 1)
{
Dout = data & mask;
SCK = 1;
if(Din) miso |= mask;
SCK = 0;
}
return miso;
}
void set_pll()
{
CS=0;
spi_(un1.arr[2]);
spi_(un1.arr[1]);
spi_(un1.arr[0]);
CS=1;
delay_us(10);
};
uint max_read(void)
{
union adcu adc_data;
{
CS=0; imp_1; //чип селект,+ шлём 1 клок
spi_(RR); //шлём адрес для чтения + бит R/W
// while (Din)
adc_data.byte[1]=spi_(0); //читаем
adc_data.byte[0]=spi_(0); //читаем
CS=1; imp_1; //чип деселект, + шлём 1 клок
}
return (adc_data.word);
}
#define out_lcd() { gotoxy(0,7); out_array_(max_read()); print_string(arr_);}
uchar arr_[]=" ";
flash ulong step_razr[]={10000000,1000000,100000,10000,1000,100,10,1};
void out_array_(ulong reg)
{
uchar i,atemp;
ulong val,temp;
val=reg;
for (i=0; i‹8; i++)
{ temp=step_razr[i];
atemp=0;
while(val ›= temp)
{ atemp++; val-=temp; }
arr_[i]=atemp+0x30;
}
}
void init_4702(void)
{
reset=0;
delay_ms(10);
reset=1;
delay_ms(1);
un1.lg=R02; set_pll();
max_read();
out_lcd();
};
//------------------------------
|
Может кто подскажет где косяк.
Вот ещё по протоколу доташит.
На передачу всё в порядке.
Последний раз редактировалось sdsrem; 06.07.2011 в 20:49.
|
|
|
|
05.07.2011, 07:00
|
|
Прописка
Регистрация: 19.07.2006
Адрес: Russia,Yekaterinburg
Сообщений: 184
Сказал спасибо: 12
Сказали Спасибо 75 раз(а) в 43 сообщении(ях)
|
Re: Не читаеться микросхема SI4702
Сообщение от sdsrem
|
На передачу всё в порядке.
|
А на мой взгляд косяк у вас там закрался
Сообщение от sdsrem
|
Dout = data & mask;
|
Надо или так(предпочтительней ибо быстрее)
Цитата:
|
Dout = 0;
if(data & mask )
Dout = 1;
|
или
Цитата:
|
if(data & mask )
Dout = 1;
else
Dout = 0;
|
А то в вашем коде при spi_(0хFF) вы просто в PORTB.0 шлете от 0х01 до 0х80 хотя переменная должна быть битовой и либо 0 либо 1.
И что он записывает в битовую переменную при отправке туда байта я лишь догадыватся могу, но наверное лишь первый бит
__________________
Разработка электроники на заказ, написание ПО для ПК и МК.Обращайтесь в личку.
Последний раз редактировалось mobil2005; 05.07.2011 в 07:09.
|
|
|
Сказали "Спасибо" mobil2005
|
|
|
05.07.2011, 08:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Не читаеться микросхема SI4702
Сообщение от mobil2005
|
А на мой взгляд косяк у вас там закрался
Надо или так(предпочтительней ибо быстрее)
или
А то в вашем коде при spi_(0хFF) вы просто в PORTB.0 шлете от 0х01 до 0х80 хотя переменная должна быть битовой и либо 0 либо 1.
И что он записывает в битовую переменную при отправке туда байта я лишь догадыватся могу, но наверное лишь первый бит
|
Нет с выводом полный порядок, хотя можно сделать как предложили вы, я так тоже делал.
Дело не в этом, дело в приёме, нет приёма, совсем нет.
|
|
|
|
05.07.2011, 08:45
|
|
Прописка
Регистрация: 19.07.2006
Адрес: Russia,Yekaterinburg
Сообщений: 184
Сказал спасибо: 12
Сказали Спасибо 75 раз(а) в 43 сообщении(ях)
|
Re: Не читаеться микросхема SI4702
Сообщение от sdsrem
|
Нет с выводом полный порядок
|
И как же вы определили с ним все в порядке если у вас ничего не работает
__________________
Разработка электроники на заказ, написание ПО для ПК и МК.Обращайтесь в личку.
|
|
|
Сказали "Спасибо" mobil2005
|
|
|
05.07.2011, 13:37
|
|
Гражданин KAZUS.RU
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Не читаеться микросхема SI4702
Цитата:
|
CS=0;imp_1; //чип селект,+ шлём 1 клок
|
Его можно вообще не дергать. CS=0; в начале
С++ в Mega8 не есть хорошо. В С ошибок меньше будет и отлаживать проще.
Может использовать 2-проводный режим - похож на I2C (навскидку)?
|
|
|
Сказали "Спасибо" XoDoK11
|
|
|
05.07.2011, 13:57
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Не читается микросхема SI4702
Сообщение от sdsrem
|
Dout = data & mask;
SCK = 1;
if(Din) miso |= mask;
SCK = 0;
|
После выдачи данных на PORTB.0 наверное стоит переключить порт в режим ввода?
|
|
|
Сказали "Спасибо" heady69
|
|
|
05.07.2011, 17:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Не читаеться микросхема SI4702
Сообщение от mobil2005
|
И как же вы определили с ним все в порядке если у вас ничего не работает
|
Да радио работает, поёт и пляшет, и каналы и звук меняются.
(Его можно вообще не дергать. CS=0; в начале
С++ в Mega8 не есть хорошо. В С ошибок меньше будет и отлаживать проще.
Может использовать 2-проводный режим - похож на I2C (навскидку)? )
CS= непременное условие после каждого слова.
Да сдесь вроде как не на C++ а просто C .
С двухпроводном режимом нет проблем, по i2c всё работает и читает и пишит.
(После выдачи данных на PORTB.0 наверное стоит переключить порт в режим ввода?)
Ну дык вроде с этим делом тоже порядок
#define Dout PORTB.0
#define Din PINB.0
или нет ???
|
|
|
|
05.07.2011, 18:11
|
|
Гражданин KAZUS.RU
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Не читаеться микросхема SI4702
Сообщение от sdsrem
|
Да радио работает, поёт и пляшет, и каналы и звук меняются.
С двухпроводном режимом нет проблем, по i2c всё работает и читает и пишит.
|
А двухпроводный чем не устраивает?
|
|
|
Сказали "Спасибо" XoDoK11
|
|
|
05.07.2011, 19:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: Не читаеться микросхема SI4702
Сообщение от XoDoK11
|
А двухпроводный чем не устраивает?
|
Скорость низкая
Всем спасибо, решил проблему.
Последний раз редактировалось sdsrem; 06.07.2011 в 09:11.
|
|
|
|
06.07.2011, 09:39
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Не читается микросхема SI4702
Сообщение от sdsrem
|
#define Dout PORTB.0
#define Din PINB.0
или нет ???
|
За направление передачи данных разряда 0 порта B отвечает бит 0 регистра DDRB(=1 - выход, 0-вход) что-то в программе не просматривается изменение этого бита
Последний раз редактировалось heady69; 06.07.2011 в 09:42.
|
|
|
Сказали "Спасибо" heady69
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:48.
|
|