Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 23.03.2007, 14:08  
Iamuser
Частый гость
 
Регистрация: 18.07.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Iamuser на пути к лучшему
По умолчанию Опрос АЦП через программный SPI AVR

Описание:
Необходимо опрашивать два последовательных АЦП (AD7476) одновременно (чем меньше задержка, тем лучше).
Попробовал переделать код от ATMELa:
//START 1
asm("cbi 0x15,5");//SCK to "0"
asm("sbic 0x13,4");//бит по первому каналу
asm("inc %Il");
asm("sbic 0x13,2");//бит по второму каналу
asm("inc %Ul");
asm("sbi 0x15,5");//SCK to "1"
asm("lsl %Il");
asm("rol %Ih");
asm("lsl %Ul");
asm("rol %Uh");
//и так 16 раз
Проблема: не работает, блин. По одному из каналов показывает число в два раза больше(сдвиг влево, наверное)
Вопрос: обычный, что делать?
Реклама:
__________________
Кривые руки компенсируются прямыми извилинами
Iamuser вне форума  
Непрочитано 23.03.2007, 15:57  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Опрос АЦП через программный SPI AVR

Сообщение от Iamuser
Проблема: не работает, блин. По одному из каналов показывает число в два раза больше(сдвиг влево, наверное)
Вопрос: обычный, что делать?
Почитать даташит.

1) считывание надо делать не по спаду, а по фронту
2) последний 16-й такт - данные не брать
3) ну и наверное - сперва сдвигать, потом inc.

-- Прилагается рисунок: --

nml вне форума  
Непрочитано 23.03.2007, 16:25  
Iamuser
Частый гость
 
Регистрация: 18.07.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Iamuser на пути к лучшему
По умолчанию

Ув.nml
Делал так:
asm("sbic 0x13,4");
asm("inc %Il");
asm("sbic 0x13,2");
asm("inc %Ul");
//Повтор следующей части
asm("cbi 0x15,5");//SCK to "0"
asm("lsl %Il");
asm("rol %Ih");
asm("lsl %Ul");
asm("rol %Uh");
asm("sbi 0x15,5");//SCK to "1"
asm("sbic 0x13,4");
asm("inc %Il");
asm("sbic 0x13,2");
asm("inc %Ul");
---------------
Все равно не работает, только сбой сразу в обоих каналах.
В ступор вводит тот факт что один АЦП опрашивается правильно. Проблема может быть в временах SPI?
Подскажите пожалуйста, в какой момент времени считывать данные и как долго они будут держаться после фронта? И если не трудно, объясните пожалуйста разницу между временами t4 и t7.

Даташит читаю уже несколько дней. Указанную Вами страничку распечатал и повесил рядом с монитором.
__________________
Кривые руки компенсируются прямыми извилинами
Iamuser вне форума  
Непрочитано 23.03.2007, 17:04  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от Iamuser
В ступор вводит тот факт что один АЦП опрашивается правильно. Проблема может быть в временах SPI?
Подскажите пожалуйста, в какой момент времени считывать данные и как долго они будут держаться после фронта? И если не трудно, объясните пожалуйста разницу между временами t4 и t7.
Данные выставляются по переходу в 0, и держатся до следующего перехода в 0. Потому их и читать по переходу в 1 - в это время они уж точно действительны. И тогда наплевать на t4 и t7... Разбираться с ними лениво и смысла нету.
nml вне форума  
Непрочитано 23.03.2007, 17:57  
Iamuser
Частый гость
 
Регистрация: 18.07.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Iamuser на пути к лучшему
По умолчанию

Подправил программу, кажется работает. Результат можно назвать 15-разрядным двуканальным SPI-приемником. Почему 15 а не 16, незнаю, ну и ладно. Главное что работает.

nml, большое спасибо!

Конечный код (если кому надо):
CLI();
asm("eor %Il,%Il");//Il=0
asm("eor %Ih,%Ih");//Ih=0
asm("eor %Ul,%Ul");//Ul=0
asm("eor %Uh,%Uh");//Uh=0
asm("cbi 0x15,3");//CS to "0"
//START 1
asm("cbi 0x15,5");//SCK to "0"
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("sbi 0x15,5");//SCK to "1"
asm("sbic 0x13,4");
asm("inc %Il");
asm("sbic 0x13,2");
asm("inc %Ul");
//START 2
asm("cbi 0x15,5");//SCK to "0"
asm("lsl %Il");
asm("rol %Ih");
asm("lsl %Ul");
asm("rol %Uh");
asm("sbi 0x15,5");//SCK to "1"
asm("sbic 0x13,4");
asm("inc %Il");
asm("sbic 0x13,2");
asm("inc %Ul");
//START 3
//то же что и START2
//START 4
//то же что и START2
//START 5
//то же что и START2
//START 6
//то же что и START2
//START 7
//то же что и START2
//START 8
//то же что и START2
//START 9
//то же что и START2
//START 10
//то же что и START2
//START 11
//то же что и START2
//START 12
//то же что и START2
//START 13
//то же что и START2
//START 14
//то же что и START2
//START 15
//то же что и START2
asm("cbi 0x15,5");//SCK to "0"
asm("lsl %Il");
asm("rol %Ih");
asm("lsl %Ul");
asm("rol %Uh");
asm("sbi 0x15,5");//SCK to "1"
asm("sbic 0x13,4");
asm("inc %Il");
asm("sbic 0x13,2");
asm("inc %Ul");
//START 16
asm("cbi 0x15,5");//SCK to "0"
asm("sbi 0x15,5");//SCK to "1"
asm("sbi 0x15,3");//CS to "1"
I=Ih*0xFF+Il;
U=Uh*0xFF+Ul;
SEI();
__________________
Кривые руки компенсируются прямыми извилинами
Iamuser вне форума  
Непрочитано 23.03.2007, 18:06  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от Iamuser
Подправил программу, кажется работает. Результат можно назвать 15-разрядным двуканальным SPI-приемником. Почему 15 а не 16, незнаю, ну и ладно. Главное что работает.
Я только одного не пойму - зачем там ассемблерные вставки. Нормальный компилятор кода лишнего не насует, а читаться будет куда легче.
nml вне форума  
Непрочитано 23.03.2007, 18:15  
Iamuser
Частый гость
 
Регистрация: 18.07.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Iamuser на пути к лучшему
По умолчанию

1. Си знаю чють хуже, чем хотелось бы.
2. Дальше вычисляю мощность, написал пару строчек 16-разрядного умножителя (16р*16р=16р), типа такого:
Код:
p=Uh*Il+Ul*Ih;
 asm("mul %Il,%Ul");
 asm("mov %Il,R1");
 asm("mul %Ih,%Uh");
 asm("mov %Ih,R0");
 p=p+Il+Ih*0xFF;
Как это сделать на Си,читать нехочется. Язык конечно хороший, только навороченный.
__________________
Кривые руки компенсируются прямыми извилинами
Iamuser вне форума  
Непрочитано 23.03.2007, 18:29  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от Iamuser
Как это сделать на Си,читать нехочется.
А придется...
На Си это напишется просто.
Код:
p = U*I;
nml вне форума  
Непрочитано 23.03.2007, 18:33  
Iamuser
Частый гость
 
Регистрация: 18.07.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Iamuser на пути к лучшему
По умолчанию

Ага, результат будет 32битный, потом нужно сдвигать или делить.
А мне нужно будет их потом 10мс/20мкс штук сложить, в unsigned Long не влезет:(
__________________
Кривые руки компенсируются прямыми извилинами
Iamuser вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заливка Atmega128 через SPI ua_gruzin Микроконтроллеры, АЦП, память и т.д 7 02.03.2009 17:50
Работа с АЦП AD7888 по SPI konstsm Микроконтроллеры, АЦП, память и т.д 0 13.08.2008 09:26
Связь двух МК через SPI или .... malyshevsergey Электроника - это просто 9 06.08.2008 22:09
Fuse-биты & программирование через SPI bureau Микроконтроллеры, АЦП, память и т.д 7 03.02.2007 00:22
[Решено] c АЦП через rs485 t0wer Измерительное оборудование 2 05.11.2004 11:40


Часовой пояс GMT +4, время: 22:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot