Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
AD5310
dimitriy-bc Дата: Пт, 14.12.2012, 16:32  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Всем доброго времени суток. У меня появилась проблема. Необходимо организовать ЦАП. ЦАП на ШИМ получается медленный, ФНЧ тормозит. И если использовать ШИМ от ПРОТОНа, то и дискретность 255 маловата.
В связи с этим решил попробовать на ЦАП AD5310. За основу взял программу на AD5305.
Но пока как надо она не работает. Пошагово просматривал, приращение в переменной value вроде идет нормально и перераспределение в Val1 и Val2 тоже. Вольтметр стартует со значения больше 1В и в дальнейшем абракадабра.
Грешу на сигнал по входу SYNC, но как сдвинуть его в программе, не понимаю. Заранее спасибо.
В архиве даташит на AD5310.
Прикрепления: 0067658.rar (560.4 Kb)
ЯНДЕКС Дата: 14.12.2012
anatol Дата: Пт, 14.12.2012, 22:26  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Обрати внимание на то что разрядность не 8 бит, а 1024 (0-1023) = 10бит. Соответственно переменные двойное слово. Вместо сдвига для проверки можно считать с 4 по 4095.
dimitriy-bc Дата: Сб, 15.12.2012, 20:52  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Всем доброго времени суток.
anatol, в программе переменные I и value объявлены как Word. В даташит на AD5310 указано (если я правильно понял, английский со словарем), что регистр входа организован следующим образом.
Два старших и два младших бита не используются. Со второго по одиннадцатый, отвечают за выходное напряжение, двенадцатый и тринадцатый, за выходное сопротивление.
При пошаговом прогоне в протеусе, при появлении единици в DB2 вольтметр показывает значение 1.27В. Дальше напряжение растет на 0.02В при каждом инкрементировании value и соответственно младшего байта Val2. Это продолжается до достижения Val2 значения 01111100 вольтметр 1.86В). При следующем инкрементировании т.е. Val2 принимает значение 10000000, волтметр показывает 1.25В, и дальше 1.27В…
Когда Val2 переполнен (00000000) и Val1 увеличивается на единицу (00000001), вотметр переходит со значения 1.86В на 3.75В. При дальнейшей работе программы показания вольтметра растут до значения 4.36В (Val2-01111100, Val1-00000001).
В общем, получается следующее
0В (Val2-00000000, Val1-00000000)
1.27В (Val2-00000100, Val1-00000000)
1.86В (Val2-01111100, Val1-00000000)
1.25В (Val2-10000000, Val1-00000000)
1.86В (Val2-11111100, Val1-00000000)
3.75В (Val2-00000000, Val1-00000001)
4.36В (Val2-11111100, Val1-00000001)
3.75В (Val2-10000000, Val1-00000001)
4.36В (Val2-11111100, Val1-00000001)
0В (Val2-00000000, Val1-00000010)
Вот такие у меня непонятки. Помогите кто чем может cry .
Прикрепления: 3201205.rar (560.4 Kb)
anatol Дата: Сб, 15.12.2012, 21:15  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Да! Я вчера с температурой и поздно дал маху. Переменная Word = 2 байтам. Так что ошибся. Здоровье разрешит - посмотрю еще.
Может проблема с функцией вывода? Попробуйте сделать вывод побитово, в цикле, "вручную" устанавливая выводы. Т.е. подергайте пин.
возможно передается 9 бит вместо 8.

Сообщение отредактировал anatol - Сб, 15.12.2012, 21:19
ivan_fd Дата: Вс, 16.12.2012, 01:53  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

C чего Вы взяли, что там протокол I2C? Зачем Вы его используете?

Используйте просто SPI.

Вот пример, все работает!!!
Code
main:                 
PORTA.0 = 1  
  value = 0           
  For I = 0 To 1024         
  DelayMS 50  
   Inc value

   valsnd = value << 2
                      
   PORTA.0 = 0  
    SHOut PORTA.2 , PORTA.1 , MsbFirst , [ valsnd\16 ]
   PORTA.0 = 1    
  Next                       

GoTo main
dimitriy-bc Дата: Вс, 16.12.2012, 02:24  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Всем доброго времени суток.
ivan_fd, почему я так решил объяснить не могу. Наверно слаб я в этом еще. Но, огромное Вам спасибо. Действительно работает великолепно.
  • Страница 1 из 1
  • 1
Поиск: