АЦП нормально принимает команды от контроллера, но не получается считывать данные из регистра данных АЦП, в даташите есть пример работы на Си, я полностью воспроизвёл данный алгоритм на АСМе, но АЦП передаёт только единицы ;(, уже неделю ломаю стену головой, перепробовал всё что в голову пришло. АЦП достаточно популярное, думаю кто-нибудь уже с ним работал, помогите люди добрые
Помогите разобраться с АЦП AD7715
-
Filimon
Помогите разобраться с АЦП AD7715
Добрый день! Делаю весы на ацп AD7715 и ATMega8535, проблема вот в чём:
АЦП нормально принимает команды от контроллера, но не получается считывать данные из регистра данных АЦП, в даташите есть пример работы на Си, я полностью воспроизвёл данный алгоритм на АСМе, но АЦП передаёт только единицы ;(, уже неделю ломаю стену головой, перепробовал всё что в голову пришло. АЦП достаточно популярное, думаю кто-нибудь уже с ним работал, помогите люди добрые
АЦП нормально принимает команды от контроллера, но не получается считывать данные из регистра данных АЦП, в даташите есть пример работы на Си, я полностью воспроизвёл данный алгоритм на АСМе, но АЦП передаёт только единицы ;(, уже неделю ломаю стену головой, перепробовал всё что в голову пришло. АЦП достаточно популярное, думаю кто-нибудь уже с ним работал, помогите люди добрые
- Реклама
-
Filimon
Схема есть только в одном экземляре, нарисована ручкой на листе 
4 разрядный светодиодный индикатор, драйвер этого индикатора MAX7219, опорник REF195, датчик тензорезистивный, мостовой HUNTLEIGH 1022 на 6КГ подключен напрямую к АЦП. Всех хозяйством управляет ATMega8535, на самом деле комплектация специально не подбиралась, взял то что было под рукой.
4 разрядный светодиодный индикатор, драйвер этого индикатора MAX7219, опорник REF195, датчик тензорезистивный, мостовой HUNTLEIGH 1022 на 6КГ подключен напрямую к АЦП. Всех хозяйством управляет ATMega8535, на самом деле комплектация специально не подбиралась, взял то что было под рукой.
-
Гость
Re: Помогите разобраться с АЦП AD7715
Филимон, и чем дело закончилось? Сам маюсь. DDRY выставляется, а считывается всякая хрень - у меня нулиFilimon писал(а):Добрый день! Делаю весы на ацп AD7715 и ATMega8535, проблема вот в чём:
АЦП нормально принимает команды от контроллера, но не получается считывать данные из регистра данных АЦП, в даташите есть пример работы на Си, я полностью воспроизвёл данный алгоритм на АСМе, но АЦП передаёт только единицы ;(, уже неделю ломаю стену головой, перепробовал всё что в голову пришло. АЦП достаточно популярное, думаю кто-нибудь уже с ним работал, помогите люди добрые
- Реклама
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
Re: Помогите разобраться с АЦП AD7715
Значит не полностью. Полностью компиялтор может быстро сделать.Filimon писал(а):в даташите есть пример работы на Си, я полностью воспроизвёл данный алгоритм на АСМе
-
Гость
Данные передаются старшим битом вперед, также и считываются.
DIN выставляется при низком уровне SCLK, DOUT считывается при высоком.
На ножке CS 0.
Вот фрагмент моей программы
//************************************
//* П/П записывает команду в AD7715 **
//************************************
void Writetoreg (unsigned char byteword)
{ //
for (i=0;i<8;i++) //
{ //
PORTC&=~(1<<PC5); // DIN=0
PORTC&=~(1<<PC3); // Подаем синхроимпульс: SCLK=0
if (byteword & 0x80) PORTC|=(1<<PC5);// Если выделенный бит =1, то DIN=1
byteword=byteword<<1; // Сдвигаем byteword на один разряд влево
// для выделения следующего бита
PORTC|=(1<<PC3); // SCLK=1
_NOP(); //
}
_WDR();
}
//************************************
//** П/П считывает данные из AD7715 **
//************************************
unsigned int Read (void)
{
unsigned int tmp=0; //
for (i=0;i<16;i++) //
{
PORTC&=~(1<<PC3); // SCLK=0 Подаем синхроимпульс
_NOP(); //
_NOP(); //
PORTC|=(1<<PC3); // SCLK=1
tmp=tmp<<1; // Если DOUT=0, тогда просто сдвигаем tmp влево
if (PINF & 0x20) tmp=tmp+1; // Если DOUT=1 - тогда прибавляем еще единицу
} //
return tmp; // Возвращаем 16-и разрядное слово
}
DIN выставляется при низком уровне SCLK, DOUT считывается при высоком.
На ножке CS 0.
Вот фрагмент моей программы
//************************************
//* П/П записывает команду в AD7715 **
//************************************
void Writetoreg (unsigned char byteword)
{ //
for (i=0;i<8;i++) //
{ //
PORTC&=~(1<<PC5); // DIN=0
PORTC&=~(1<<PC3); // Подаем синхроимпульс: SCLK=0
if (byteword & 0x80) PORTC|=(1<<PC5);// Если выделенный бит =1, то DIN=1
byteword=byteword<<1; // Сдвигаем byteword на один разряд влево
// для выделения следующего бита
PORTC|=(1<<PC3); // SCLK=1
_NOP(); //
}
_WDR();
}
//************************************
//** П/П считывает данные из AD7715 **
//************************************
unsigned int Read (void)
{
unsigned int tmp=0; //
for (i=0;i<16;i++) //
{
PORTC&=~(1<<PC3); // SCLK=0 Подаем синхроимпульс
_NOP(); //
_NOP(); //
PORTC|=(1<<PC3); // SCLK=1
tmp=tmp<<1; // Если DOUT=0, тогда просто сдвигаем tmp влево
if (PINF & 0x20) tmp=tmp+1; // Если DOUT=1 - тогда прибавляем еще единицу
} //
return tmp; // Возвращаем 16-и разрядное слово
}
-
Filimon
Закончилось всё нормально, весы работают
Кварц на АЦП 1МГц, если что в листинге не понятно спрашивайте...
init_ACP: Настройка АЦП
ldi temp1,0b1011111
out SPCR,temp1 ;Настройка SPI
cbi porta,0 ;CS на АЦП
ldi temp1,0b00010011 ;Кус 128
out SPDR,temp1
rcall wait_spi ; Ждём пока данные уйдут
ldi temp1,0b01010100 ;F дискретизации 100Гц
out SPDR,temp1
rcall wait_spi
sbi porta,0
ret
read_acp: Чтение данных
ldi temp1,0b1011111
out SPCR,temp1
cbi porta,0
ldi temp1,0b111011 ;Команда на чтение данных
out SPDR,temp1
rcall wait_spi
rcall acp_wait ;Ждём DRDY
clr temp1
out SPDR,temp1
rcall wait_spi
in temp2,SPDR ;Первый байт
clr temp1
out SPDR,temp1
rcall wait_spi
in temp3,SPDR ;Второй байт
sbi porta,0
ret
init_ACP: Настройка АЦП
ldi temp1,0b1011111
out SPCR,temp1 ;Настройка SPI
cbi porta,0 ;CS на АЦП
ldi temp1,0b00010011 ;Кус 128
out SPDR,temp1
rcall wait_spi ; Ждём пока данные уйдут
ldi temp1,0b01010100 ;F дискретизации 100Гц
out SPDR,temp1
rcall wait_spi
sbi porta,0
ret
read_acp: Чтение данных
ldi temp1,0b1011111
out SPCR,temp1
cbi porta,0
ldi temp1,0b111011 ;Команда на чтение данных
out SPDR,temp1
rcall wait_spi
rcall acp_wait ;Ждём DRDY
clr temp1
out SPDR,temp1
rcall wait_spi
in temp2,SPDR ;Первый байт
clr temp1
out SPDR,temp1
rcall wait_spi
in temp3,SPDR ;Второй байт
sbi porta,0
ret
Re: Помогите разобраться
Извините за нескромный вопрос .
У меня напольные торговые весы, я слышала, что их можно запрограммировать , чтобы вес показывали немного больше, 10 грамм на 1 киллограмме или 100 грамм на 10 киллограммах.
Очень прошу научите знатоки.
У меня напольные торговые весы, я слышала, что их можно запрограммировать , чтобы вес показывали немного больше, 10 грамм на 1 киллограмме или 100 грамм на 10 киллограммах.
Очень прошу научите знатоки.
Re: Помогите разобраться с АЦП AD7715
смотря для чего?)))
я за чесность)
Re: Помогите разобраться с АЦП AD7715
Так за чеснок или честь?
Re: Помогите разобраться
Это возможно полюбому, но первая проверка и будет штраф и х. знает еще чего. У нас на фирмы весы ремонтируются, а затем их поверяют и пломбу ставят. Так что не советуюafrica писал(а):Извините за нескромный вопрос .
У меня напольные торговые весы, я слышала, что их можно запрограммировать , чтобы вес показывали немного больше, 10 грамм на 1 киллограмме или 100 грамм на 10 киллограммах.
Очень прошу научите знатоки.
- zim
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Вт ноя 01, 2011 10:30:00
- Откуда: Украина
- Контактная информация:
Re: Помогите разобраться с АЦП AD7715
Немогу разобратся с AD7715 .Проблема такая .При подаче питания на АЦП, выставляю ноль на RESET а затем единицу .Насколько я понял из
даташита на DRDY lдолжен появится высокий уровинь а у меня низкий
даташита на DRDY lдолжен появится высокий уровинь а у меня низкий


