Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.03.2009, 20:11
|
|
Частый гость
Регистрация: 30.09.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
pic18f4550 + max1270
Здравствуйте, Уважаемые...
Помогите студенту связать две микросхемы по SPI
Код:
|
TRISCbits.TRISC7=0; //sdo
TRISBbits.TRISB1=0; //sck
TRISAbits.TRISA5=0; //ss
TRISBbits.TRISB0=1; //sdi
LATAbits.LATA5=1;
OpenSPI(SPI_FOSC_64,MODE_00,SMPEND);
while(1)
{ USBDeviceTasks();
ProcessIO();
LATAbits.LATA5=0;
WriteSPI(conf); // char conf=0xAD;
LATAbits.LATA5=1;
adc = ReadSPI();
} |
что неверно? (MCC1
сделал всё в железе, а результата нет.
схема и разводка в архиве
Прикрепленный файл: 246955.zip
|
|
|
|
17.03.2009, 10:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: pic18f4550 + max1270
Сообщение от Binary_Man
|
Здравствуйте, Уважаемые...
Помогите студенту связать две микросхемы по SPI
Код:
|
{ USBDeviceTasks();
ProcessIO();
LATAbits.LATA5=0; // Выбрали кристалл
WriteSPI(conf); // char conf=0xAD;
LATAbits.LATA5=1; // сняли выборку
adc = ReadSPI();
} |
что неверно? (MCC1
сделал всё в железе, а результата нет.
схема и разводка в архиве
|
Вообще-то работу с SPI нужно было-бы делать внутри ProcessIO().
МАХ1270 для меня не знаком, поэтому два варианта.
Первый - если между чтением и записью выборку кристалла нужно снимать
Код:
|
{ USBDeviceTasks();
ProcessIO();
LATAbits.LATA5=0; // Выбрали кристалл
WriteSPI(conf); // char conf=0xAD;
LATAbits.LATA5=1; // сняли выборку
//возможно нужна будет дополнительная задержка
LATAbits.LATA5=0; // Выбрали кристалл
adc = ReadSPI();
LATAbits.LATA5=1; // сняли выборку
} |
Второй - если МАХ допускает подряд операции чтения-записи
Код:
|
{ USBDeviceTasks();
ProcessIO();
LATAbits.LATA5=0; // Выбрали кристалл
WriteSPI(conf); // char conf=0xAD;
adc = ReadSPI();
LATAbits.LATA5=1; // сняли выборку
} |
Прикрепленный файл: 246955.zip
|
|
|
|
17.03.2009, 10:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Только что посмотред даташит на МАХ, и думаю, что проще будет не заморачиваться со стандартными SPI-функциями, а написать своё, т.к. физически интерфейс SPI, но логика работы не стандартная. Если хочется стандартных функций, то я бы воспользовался CCS вместо MCC18, но там тоже не все однозначно.
|
|
|
|
17.03.2009, 15:50
|
|
Частый гость
Регистрация: 30.09.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Ваши полезные советы в первом посте не помогли...
Скажите, а в чем нестандартность МАКСовского SPI?
Код:
|
//(внутри ProcessIO() )
LATAbits.LATA5=0; //CS=0
WriteSPI(conf);
Delay10TCYx(2); //задержка 20 клоков
ads = ReadSPI();
//по рисунку CS=1 вроде как не нужен |
вроде по даташиту,но не работает
Придется осваивать CSS?
или вообще отказаться от библиотек?
-- Прилагается рисунок: --
|
|
|
|
17.03.2009, 16:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Я бы выбрал второе. Самому написать - 15 мин работы. Уже от многих людей слышал - гемор с аппаратным spi - оно того не стоит.Никакого выигрыша - ни по коду - ни по быстроте. Пока сохранишь контекст прерывания, пока восстановишь...
(С) Чукча не виноват, стюардесса виновата - то отстегните ремни, то пристегните ремни...
|
|
|
|
17.03.2009, 17:42
|
|
Частый гость
Регистрация: 30.09.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
За 15 минут у меня не получиться...
нн да
попал...
|
|
|
|
17.03.2009, 21:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Не так страшен черт как его малютка (с) всего-то делов - два цикла формирующие 25 импульсов. И запись- чтение битов. Собственно и все.
|
|
|
|
17.03.2009, 21:48
|
|
Частый гость
Регистрация: 30.09.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
А примерчика у Вас случайно не будет?
|
|
|
|
18.03.2009, 18:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
когда-то давно делал так
Код:
|
#define aS_Data PORTB,3
#define aCarry STATUS,0
char XferByte(char val) //via SPI
{
char cnt=8;
char out_data=0;
spi_data=val;
while (cnt›0)
{
S_Clk=0;
Rlcf(spi_data,1,1);
out_data*=2;
if (SDI==1) out_data++;
_asm
btfss aCarry,0
bcf aS_Data,0
btfsc aCarry,0
bsf aS_Data,0
_endasm;
Delay10TCYx(1);
S_Clk=1;
Delay10TCYx(1);
cnt--;
}
} |
этот код был написан давно, поэтому 100% гарантию работоспособности дать не могу.
|
|
|
|
18.03.2009, 19:42
|
|
Частый гость
Регистрация: 30.09.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Спасибо.
Вы мне сильно помогли.
щас дело должно пойти...
А для других АЦП,трансиверов и прочего встроенные функции SPI тоже криво работают ? или только один MAXim отличился ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
PIC18F4550 в CDC режиме
|
Binary_Man |
Микроконтроллеры, АЦП, память и т.д |
17 |
14.03.2009 17:38 |
Проблема с PIC18f4550
|
byeloruss |
Микроконтроллеры, АЦП, память и т.д |
0 |
06.11.2008 19:27 |
USB в PIC18F4550 реально ли для радиолюбителя
|
Simbr |
Микроконтроллеры, АЦП, память и т.д |
3 |
26.06.2008 18:49 |
USB HID PIC18F4550 нужна помощь!
|
tower2007 |
Микроконтроллеры, АЦП, память и т.д |
0 |
17.04.2008 04:33 |
Программатор Willem и pic18f4550.
|
urry |
Микроконтроллеры, АЦП, память и т.д |
8 |
02.12.2007 13:46 |
Часовой пояс GMT +4, время: 11:59.
|
|