gosha_kap 0 26 ноября, 2010 Опубликовано 26 ноября, 2010 · Жалоба В общем с пиками дел мало имел, хочу инициализировать SPI на нем вот то что получилось list p=16F877A #include <p16F877A.inc> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cycle_1 equ 0x20 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;Prepare;;;;;;;;;;;;;;;;;;;; clrf PORTA clrf PORTC clrf PORTD bcf STATUS,RP0 movlw 0x00 movwf INTCON movlw b'11010011' movwf PORTC movlw b'00000100' movwf PORTD movlw b'11111110' movwf PORTA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;Initial;;;;;;;;;;;;;;;;;;; SPI_Initial bsf STATUS,RP0 bsf TRISC,3 bsf TRISC,5 bcf TRISC,2 ;;cs low bcf SSPSTAT,SMP bcf SSPSTAT,CKE bcf STATUS,RP0 ;; 0 bcf SSPCON,0 ;ведущий режим SPI, bcf SSPCON,1 ;тактовый сигнал bcf SSPCON,2 ; =Focs/4 bcf SSPCON,3 bsf SSPCON,4 bsf SSPCON,5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;Power cycle;;;;;;;;;;;;;; bsf STATUS,RP0 bsf TRISC,2 ;;cs high bcf STATUS,RP0 loop movlw 0xFF movwf SSPBUF goto loop end В общем я ожидаю получить на осцилографе импульсы с выхода SCK и SDO ...... А вокруг тишина.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 26 ноября, 2010 Опубликовано 26 ноября, 2010 · Жалоба Так они же (SCK, SDO) у вас как входы сконфигурированы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha_kap 0 27 ноября, 2010 Опубликовано 27 ноября, 2010 · Жалоба Ну хорошо, просто я и так и так пробовал, сейчас поиенял, ситуация не изменилась....что еще может быть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Danis 0 27 ноября, 2010 Опубликовано 27 ноября, 2010 · Жалоба Ну хорошо, просто я и так и так пробовал, сейчас поиенял, ситуация не изменилась....что еще может быть PIC16 не использовал. Но в PIC18, PIC24 SPI часто посажена на аналоговые пины и нужно указать что пины цифровые, иначе ниче не получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha_kap 0 29 ноября, 2010 Опубликовано 29 ноября, 2010 · Жалоба Да, спасибо...заработала....хреновина -) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HammerN 0 17 января, 2011 Опубликовано 17 января, 2011 · Жалоба Уже какой день бьюсь с инициализацией SPI, ничего не выходит, вроде все перепроверил, все норм (вроде), а контроллер не хочет в прерывание входить! Подскажите в чем может быть проблема. ANSEL= 0b00000000; // все выводы как цифровые ANSELH= 0b00000000; // все выводы как цифровые CM1CON0= 0b00000000; // отключаем компаратор CM2CON0= 0b00000000; ADCON0= 0b00000000; // отключаем АЦП TRISA= 0b00001000; TRISB= 0b00010000; // RB6= SCK RB4= SDI/SDA TRISC= 0b00000000; // RC7= SDO RC6= SS RC6= 1; GIE= 1; PEIE= 1; SSPIE= 1; IRCF0= 1; // 111 = 8MHz IRCF1= 1; IRCF2= 1; SMP= 0; CKE= 1; CKP= 1; SSPM0= 0; // 0000 = SPI Master mode, clock = FOSC/4 SSPM1= 0; SSPM2= 0; SSPM3= 0; SSPEN= 1; а вот сама работа с SPI char SPI_RW(char DATA_OUT) // вывод в SPI { SSPBUF= DATA_OUT; while (!SPI_FLAG); SPI_FLAG = 0; return SSPBUF; } SPI_FLAG устанавливается в прерывании, в которое он так не хочет упорно входить, соответственно так и остается в цикле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 17 января, 2011 Опубликовано 17 января, 2011 · Жалоба Микроконтроллер какой? Соответствует ли ассемблерный листинг сишной программке? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HammerN 0 17 января, 2011 Опубликовано 17 января, 2011 (изменено) · Жалоба Микроконтроллер PIC16F689. Листинг соответствует сишной программе, т.е компилятор ничего не оптимизировал и не удалил. Изменено 17 января, 2011 пользователем HammerN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stas00n 0 18 января, 2011 Опубликовано 18 января, 2011 · Жалоба HammerN, а разве не надо биты TRIS, соответствующие всем выводам SSP установить в "1" (сделать входами)? Посмотрите в даташите схему соответствующих выводов портов, возможно, выходы модуля SSP у Вас "закорочены" на выходную защелку PORTx SPI_FLAG устанавливается в прерывании А обработчик прерывания покажите, может в нем проблема? Или прерывание вообще не возникает? Что в отладке видно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HammerN 0 18 января, 2011 Опубликовано 18 января, 2011 · Жалоба TRIS устанавливал в соответствие с даташитом, как указано в разделе SPI. вот обработчик, но тут все просто, выставлет флаг и все. void interrupt isr(void) { if ((SSPIE) && (SSPIF)) { SPI_FLAG= 1; SSPIF= 0; } } прерывание вообще не возникает, такое ощущение что SPI просто выключен, раз он даже флаг не ставит, а отладка просто виснет в бесконечном цикле, т.к флаг выставлять никто не хочет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 18 января, 2011 Опубликовано 18 января, 2011 · Жалоба Посмотрите еррату 80243m.pdf, возможно ваш случай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stas00n 0 18 января, 2011 Опубликовано 18 января, 2011 · Жалоба HammerN, вроде все правильно у Вас, в протеусе работает, а в MPLAB SIM действительно не возникает прерывание, да и не должно, посмотрите ограничения симулятора: For devices with the listed peripherals, these peripherals are NOT supported: ... Serial I/O (i.e., SSP including I2C and SPI). As a result, the SSPSTAT register has been made readable and writable. Note: You can use stimulus to emulate many of the signals of SPI and have firmware read data as if it was SPI. Креплю проект в MPLAB и DSN файл для протеуса. Vlad27, там про прием в режиме ведомого - не тот случай. SSP.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 18 января, 2011 Опубликовано 18 января, 2011 · Жалоба Vlad27, там про прием в режиме ведомого - не тот случай. Совершенно верно, проглядел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HammerN 0 18 января, 2011 Опубликовано 18 января, 2011 · Жалоба stas00n, СПАСИБО огромное! уж на что, а на симулятор я даже и не подумал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MMMika 0 4 февраля, 2011 Опубликовано 4 февраля, 2011 · Жалоба Господа специалисты. Помогите новичку! Имеется блок с PIC18F6520, который после сбоя по питанию ЧАСТИЧНО перестал нормально функционировать. На блоке есть разъем (DB9), далее MAX232, дальше USART2 выводы контроллера (6;8;5;4). Мои попытки связаться с контроллером из различных программ (MPLAB, PCWHD Compiler) с ноутбука безрезультатны. (пишет нет связи, или проверьте кабель) Кабель и MAX232 исправны. В блоке есть возможность установки нескольких перемычек, возможно какие-то использовались для организации связи через USART2. Помогите установить связь с ноутбука с PIC18F6520. С уважением Mika Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться