|
mega8 + ad77705, нужен код |
|
|
|
Jan 19 2009, 16:02
|
Участник

Группа: Новичок
Сообщений: 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++; }
|
|
|
|
|
 |
Ответов
|
Jan 19 2009, 19:26
|
Участник

Группа: Новичок
Сообщений: 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; }
|
|
|
|
|
Jan 20 2009, 08:19
|
Знающий
   
Группа: Участник
Сообщений: 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++; } }  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 } ....  OFF Анатолий.
|
|
|
|
|
Jan 20 2009, 14:59
|
Участник

Группа: Новичок
Сообщений: 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; }
|
|
|
|
|
Jan 20 2009, 17:07
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
Сообщений в этой теме
simsim mega8 + ad77705 Jan 19 2009, 16:02 simsim схема Jan 19 2009, 17:28     demiurg_spb Цитата(simsim @ Jan 20 2009, 20:07) Код#d... Jan 21 2009, 09:31      simsim Цитата(demiurg_spb @ Jan 21 2009, 13:31) ... Jan 21 2009, 09:58       Сергей Борщ Цитата(simsim @ Jan 21 2009, 11:58) пробу... Jan 21 2009, 11:25        simsim ну и головняк эта 7705...
с 7816 работал нормально... Jan 21 2009, 12:38         Сергей Борщ Цитата(simsim @ Jan 21 2009, 14:38) заказ... Jan 21 2009, 13:01 MrYuran Цитатаwrite7705(20);
write7705(1C);
write7705(28);... Jan 21 2009, 12:46 simsim Цитата(MrYuran @ Jan 21 2009, 16:46) чё, ... Jan 21 2009, 14:41 rezident Цитата(MrYuran @ Jan 21 2009, 17:46) ??? ... Jan 21 2009, 15:06  simsim посадил RESET 7705 на мегу...
нашел готовый код h... Jan 21 2009, 17:49   Сергей Борщ Цитата(simsim @ Jan 21 2009, 19:49) нашел... Jan 21 2009, 19:05
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|