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

 
 
 
Reply to this topicStart new topic
> помогите победить pcf8591 (ilf8591), пример бы сишный, с twi.c
d71
сообщение Feb 20 2006, 01:57
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614



бьюсь, измотанной мухой об стекло sad.gif

прога - смотреть не на что, функции i2c написаны и работают, проверил на 24с16 и 24с64, а вот с 8591
затык вышел, читать ацп - никаких траблов, в вот цап sad.gif
не получается. посылаю адрес устройства - подтвреждает, контрольный байт - не подтвержнает sad.gif до самого байта данных так дело и не доходит. мысли кончились sad.gif
плиз-з-з-з-з-з-з

Сообщение отредактировал d71 - Feb 20 2006, 01:59


--------------------
нет ничего невозможного, есть трудные пути... других не ищем
Go to the top of the page
 
+Quote Post
d71
сообщение Feb 20 2006, 05:04
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614



народ в протеусе кто пробовал 8591? проблем не было?


--------------------
нет ничего невозможного, есть трудные пути... других не ищем
Go to the top of the page
 
+Quote Post
Halfback
сообщение Apr 19 2009, 09:04
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



тоже прошу помощи.
Компилятор - CAVR v2.03.9 , использую его же драйвер для i2c.
На плате с датчиком температуры DS1820 и экспандером портов PCA9557 всё работает а PCF8591 по всем каналам присылает 0xFF
Решил отладиться в протеусе - тоже самое (см. пример). Физический адрес = 1. Хочу прочитать что на AIN1. Автоинкремент для считывания всех входов АЦП пока не трогаю.
Вот мой код:
Код
....
unsigned int i;
.......
//бла-бла-бла
......

// I2C Bus initialization
i2c_init();

while (1)
      {
      // Place your code here  
      i=0;
      
      i2c_start();        
      i2c_write(0b10010101);
      i2c_write(0b00000001);
      i= i2c_read(0);
      i2c_stop();
      PORTD = (unsigned int) i;    
      delay_ms(100);
      };

Порт в состоянии 0xFF. По осциллографу видно что на линии SDA тоже 0xFF в тот промежуток времени, когда полевик в АЦП должен долбить оцифровку напряжения на входе AIN1.

Вобщем прошу помощи. АЦП не ахти но достаточно известный. ДУмаю много тут кто с нм мел дело.

Сообщение отредактировал Halfback - Apr 19 2009, 09:08
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 19 2009, 13:44
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(d71 @ Feb 20 2006, 05:57) *
бьюсь, измотанной мухой об стекло sad.gif

прога - смотреть не на что, функции i2c написаны и работают, проверил на 24с16 и 24с64, а вот с 8591
затык вышел, читать ацп - никаких траблов, в вот цап sad.gif
не получается. посылаю адрес устройства - подтвреждает, контрольный байт - не подтвержнает sad.gif до самого байта данных так дело и не доходит. мысли кончились sad.gif
плиз-з-з-з-з-з-з

Скорость ? Судя по DS не выше 100


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Apr 20 2009, 12:12
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Работал с этой м/с - никаких траблов в режиме ЦАП не наблюдал.
Может, как тут говорил "ILYAUL", скорость не та? Должна быть не больше 100кГц. У меня на плате было 55кГц. Если получилось в режиме чтения, то должно получиться и в режиме записи. У вас ведь получилось сконфигурировать АЦП?

Ой! smile.gif Прошу прощения, ответил не тому, очень старое сообщение.

Halfback, эта АЦП выдаёт результат предыдущего преобразования! То есть, чтобы прочитать достоверный результат, её надо дважды прочитать. Первое чтение выдает состояние её внутреннего буфера!

Сообщение отредактировал AndreyKeil - Apr 20 2009, 12:33
Go to the top of the page
 
+Quote Post
Halfback
сообщение Apr 21 2009, 15:30
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Разобрался наконец. В том числе и про то что упомянул AndreyKeil. имхо криво как-то АЦП работает но бог с ним...
Вот примеры рабочего кода для АЦП и ЦАП.

Код
unsigned char GET_ADC_VALUE(unsigned char num_ch) {
        unsigned char value;    
        if(num_ch>3) return 0;
        i2c_start();
        i2c_write(0b10010000);
        i2c_write((1<<6) | num_ch);
        i2c_stop();
        delay_ms(1);
        i2c_start();
        i2c_write(0b10010001);
        value = (unsigned char) i2c_read(1);        
        value = (unsigned char) i2c_read(0);
        i2c_stop();          
        return value;
        }


Код
void SET_DAC_VALUE(unsigned char value) {
        i2c_start();
        i2c_write(0b10010000);
        i2c_write(1<<6);
        i2c_write(value);
        i2c_stop();
        }


Сообщение отредактировал Halfback - Apr 21 2009, 15:32
Go to the top of the page
 
+Quote Post

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

 


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


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