реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> mega8 + ad77705, нужен код
simsim
сообщение Jan 19 2009, 16:02
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



подскажите плиз как правильно сконфигурировать 7705 для измерения напряжения 50 раз в секунду. и будет ли вообще работать 7705 с таким кварцем? и с мегой на 1Мгц...
примеров видел много,но ни один не работает...нужен код на Си...что лучше - через стандартный SPI или своими циклами ?
CODE
DDRB = ((1<<MOSI)|(1<<SCLK)|(1<<SS));

//Enable SPI, Select Master, SCLK idles high,
//Sample on rising edge Setup on falling edge,
//SCLK=F_CPU/4
SPCR =0x52; //((1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA));

//Serially reset the Chip
SPDR = 0xFF;

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

//Serially reset the Chip
SPDR = 0xFF;

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

//Serially reset the Chip
SPDR = 0xFF;

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

//Serially reset the Chip
SPDR = 0xFF;

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

//Serially reset the Chip
SPDR = 0xFF;

//Wait for transfer
while(!(SPSR & (1<<SPIF)));


//Send to Comm Reg: Next Write Clk
SPDR = 0b00100000; //0x20

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

//Send to ClkReg: Clock Bits and Update rate
SPDR = 0x18; //0b00011000;

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

//Send to Comm Reg: write setup
SPDR = 0b00010000; //0x10

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

//Send to Setup: FSYNC, Gain, Conditions, Self Calibration
SPDR = 0b01000100;

//Wait for transfer
while(!(SPSR & (1<<SPIF)));

while(1)
{
//Is DDRY pin low/data ready?

//Send to Comm: next read Data
SPDR = 0b00111000; // 0x38

//Wait for transfer
while(!(SPSR & (1<<SPIF)));
DDRB=0x10;
DDRB.5=1;
CLK=1;
while(DRDY);
delay_us(us1);
CLK=0; delay_us(us1);
while(i<16)
{
CLK=1;delay_us(us1);
adc_rez[i]='0';
if(D_OUT==1) adc_rez[i]='1';
CLK=0;delay_us(us1);
i++;
}
Go to the top of the page
 
+Quote Post
simsim
сообщение Jan 19 2009, 17:28
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



схема
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
simsim
сообщение Jan 19 2009, 19:26
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



или - будет работать такой код ?
у меня не работает, пробую считать регистры,пишет ff...
CODE
write7705(unsigned char u8)
{ unsigned char j=0;
CS=CLK=1;
delay_us(us1);
CS=0;
while(j<8)
{
delay_us(us1);
CLK=0;
delay_us(us1);
if (u8 &(1<<(7-j))) D_IN=1; else D_IN=0;
CLK=1;
j++;
}
delay_us(us1);
CS=1;
}

unsigned read7705(void)
{ unsigned char j=0;
unsigned result=0;
CS=CLK=1;
delay_us(us1);
while(DRDY);
delay_us(us1);
CS=0;
while(j<16)
{
delay_us(us1);
CLK=0;
delay_us(us1);
CLK=1;
delay_us(us1);
adc_rez[j]='0';
if (D_OUT) {adc_rez[j]='1'; result=result+pow(2,15-j);}
j++;
}
CS=1;
return result;
}
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 20 2009, 08:19
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(simsim @ Jan 19 2009, 22:26) *
Код
unsigned read7705(void)
{ unsigned char j=0;    
unsigned result=0;
.....
while(j<16)
{  
.....
  if (D_OUT) {adc_rez[j]='1'; result=result+pow(2,15-j);}  
  j++;
}    
}


bb-offtopic.gif ON
Оригинальнейший способ преобразования последоватольности бит в число. Способ-чемпион по скорости и размеру!

Почитайте в Вашей книге по С, про операторы сдвига. Если лень читать:

Код
00094 u08 i2cGetbyte(UINT last)
00095 {
00096     int i;
00097     u08 c,b = 0;
00098        
......
00101
00102     for(i=7;i>=0;i--)
00103     {
00104         HDEL;
00105         I2C_SCL_HI;             // clock HI
00106         c = inb(SDAPIN) & (1<<SDA);  
00107         b <<= 1;
00108         if(c) b |= 1;
00109         HDEL;
00110         I2C_SCL_LO;             // clock LO
00111     }
....



bb-offtopic.gif OFF

Анатолий.
Go to the top of the page
 
+Quote Post
simsim
сообщение Jan 20 2009, 14:59
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



пробую так...
сделал обнуление D_IN..
сделал сдвиг как научили...
тоже не работает
CODE
void write7705(unsigned char u8)
{ unsigned char j=0;
CS=CLK=1; D_IN=0;
delay_us(us1);
CS=0;
while(j<8)
{
delay_us(us1);
CLK=0;D_IN=0;
if (u8 &(1<<(7-j))) D_IN=1;
delay_us(us1);
CLK=1;
j++;
}
delay_us(us1);
CS=1;
}

unsigned read7705(void)
{ unsigned char j=0;
unsigned result=0;
CS=CLK=1;
delay_us(us1);
while(DRDY);
delay_us(us1);
CS=0;
while(j<16)
{
delay_us(us1);
CLK=0;
delay_us(us1);
adc_rez[j]='0';
result<<=1;
if (D_OUT==1) {adc_rez[j]='1'; result|=1;}
CLK=1;
j++;
}
CS=1;
return result;
}
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 20 2009, 15:22
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(simsim @ Jan 20 2009, 16:59) *
пробую так...
Покажите, как у вас описаны CS, CLK, D_IN, DRDY?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
simsim
сообщение Jan 20 2009, 17:07
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



Цитата(Сергей Борщ @ Jan 20 2009, 19:22) *
Покажите, как у вас описаны CS, CLK, D_IN, DRDY?

Код
#define CS      PORTB.2
#define CLK     PORTB.5
#define DRDY    PINB.0
#define D_IN    PORTB.3
#define D_OUT   PINB.4
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 21 2009, 09:31
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(simsim @ Jan 20 2009, 20:07) *
Код
#define CS      PORTB.2
#define CLK     PORTB.5
#define DRDY    PINB.0
#define D_IN    PORTB.3
#define D_OUT   PINB.4
Наверное надо поменять местами D_IN и D_OUT,
если рассматривать функционал ножек со стороны контроллера, как это обычно делается...
Код
#define D_OUT    PORTB.3  // MOSI
#define D_IN   PINB.4  // MISO


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
simsim
сообщение Jan 21 2009, 09:58
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



Цитата(demiurg_spb @ Jan 21 2009, 13:31) *
Наверное надо поменять местами D_IN и D_OUT,
если рассматривать функционал ножек со стороны контроллера, как это обычно делается...
Код
#define D_OUT    PORTB.3  // MOSI
#define D_IN   PINB.4  // MISO

D_IN,D_OUT это функционал 7705, все подключено правильно.
пробую записать и прочитать Clock registr. i=FF
write7705(20);
write7705(1C);
write7705(28);
i=read7705();
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 21 2009, 11:25
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(simsim @ Jan 21 2009, 11:58) *
пробую записать и прочитать Clock registr. i=FF
Отключите CS от 7705, замкните D_IN и D_OUT. Получаете ли при этом эхо? Если да - проверяйте, что генерится и доходит до 7705  CLK и CS.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
simsim
сообщение Jan 21 2009, 12:38
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



ну и головняк эта 7705...
с 7816 работал нормально,но 12бит не хватает...
заказал 8320, а 7705 на помойку , хоть и интересно почему не заработала...

Цитата(Сергей Борщ @ Jan 21 2009, 15:25) *
Отключите CS от 7705, замкните D_IN и D_OUT. Получаете ли при этом эхо? Если да - проверяйте, что генерится и доходит до 7705  CLK и CS.

раньше CS сидела на земле. мож дело в кварце? 4Мгц много. но регистры должны читаться все-равно ? кварц только для преобразования нужен?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 21 2009, 12:46
Сообщение #12


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата
write7705(20);
write7705(1C);
write7705(28);

чё, прямо вот так?
а может, надо было 0х20, 0х1с и 0х28?
или компилятор шибко умный, сам допрёт?
С 7705 у нас люди работают нормально, нареканий нет, за исключением низкой скорости
Цитата
unsigned read7705(void)

??? unsigned чего?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 21 2009, 13:01
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(simsim @ Jan 21 2009, 14:38) *
заказал 8320, а 7705 на помойку , хоть и интересно почему не заработала...
Вот так всегда. Виноваты кто угодно - микросхема,  компилятор, но не кривые руки.
Цитата(simsim @ Jan 21 2009, 14:38) *
раньше CS сидела на земле. мож дело в кварце?
А может это в даташите написано?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
simsim
сообщение Jan 21 2009, 14:41
Сообщение #14


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 30-10-06
Пользователь №: 21 801



Цитата(MrYuran @ Jan 21 2009, 16:46) *
чё, прямо вот так?
а может, надо было 0х20, 0х1с и 0х28?
или компилятор шибко умный, сам допрёт?
С 7705 у нас люди работают нормально, нареканий нет, за исключением низкой скорости

??? unsigned чего?

конечно же пишу 0х...
unsigned - 0...65535 в CVAVR...
поделитесь плиз процедурками чтения и записи в нее?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 21 2009, 15:06
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(MrYuran @ Jan 21 2009, 17:46) *
??? unsigned чего?
По-умолчанию в Си принимается тип int. Раз написано unsigned, то значит unsigned int. Вы же наверняка не пишете полностью unsigned long int, ограничиваясь unsigned long, не так ли? wink.gif
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01509 секунд с 7
ELECTRONIX ©2004-2016