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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> инициализация SPI на PIC
KAPTEP
сообщение Nov 26 2010, 07:21
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 25-02-10
Пользователь №: 55 657



В общем с пиками дел мало имел, хочу инициализировать 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 ...... А вокруг тишина....
Go to the top of the page
 
+Quote Post
Vlad27
сообщение Nov 26 2010, 08:05
Сообщение #2


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

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Так они же (SCK, SDO) у вас как входы сконфигурированы.
Go to the top of the page
 
+Quote Post
KAPTEP
сообщение Nov 27 2010, 04:16
Сообщение #3





Группа: Участник
Сообщений: 10
Регистрация: 25-02-10
Пользователь №: 55 657



Ну хорошо, просто я и так и так пробовал, сейчас поиенял, ситуация не изменилась....что еще может быть
Go to the top of the page
 
+Quote Post
Danis
сообщение Nov 27 2010, 13:16
Сообщение #4


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(KAPTEP @ Nov 27 2010, 07:16) *
Ну хорошо, просто я и так и так пробовал, сейчас поиенял, ситуация не изменилась....что еще может быть


PIC16 не использовал. Но в PIC18, PIC24 SPI часто посажена на аналоговые пины и нужно указать что пины цифровые, иначе ниче не получается.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
KAPTEP
сообщение Nov 29 2010, 12:45
Сообщение #5





Группа: Участник
Сообщений: 10
Регистрация: 25-02-10
Пользователь №: 55 657



Да, спасибо...заработала....хреновина -)
Go to the top of the page
 
+Quote Post
HammerN
сообщение Jan 17 2011, 06:41
Сообщение #6





Группа: Новичок
Сообщений: 4
Регистрация: 17-01-11
Пользователь №: 62 273



Уже какой день бьюсь с инициализацией 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 устанавливается в прерывании, в которое он так не хочет упорно входить, соответственно так и остается в цикле.
Go to the top of the page
 
+Quote Post
Vlad27
сообщение Jan 17 2011, 11:40
Сообщение #7


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

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Микроконтроллер какой? Соответствует ли ассемблерный листинг сишной программке?
Go to the top of the page
 
+Quote Post
HammerN
сообщение Jan 17 2011, 14:09
Сообщение #8





Группа: Новичок
Сообщений: 4
Регистрация: 17-01-11
Пользователь №: 62 273



Микроконтроллер PIC16F689. Листинг соответствует сишной программе, т.е компилятор ничего не оптимизировал и не удалил.

Сообщение отредактировал HammerN - Jan 17 2011, 14:10
Go to the top of the page
 
+Quote Post
stas00n
сообщение Jan 18 2011, 04:53
Сообщение #9


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

Группа: Участник
Сообщений: 181
Регистрация: 26-11-10
Пользователь №: 61 198



HammerN, а разве не надо биты TRIS, соответствующие всем выводам SSP установить в "1" (сделать входами)? Посмотрите в даташите схему соответствующих выводов портов, возможно, выходы модуля SSP у Вас "закорочены" на выходную защелку PORTx
Цитата
SPI_FLAG устанавливается в прерывании
А обработчик прерывания покажите, может в нем проблема? Или прерывание вообще не возникает? Что в отладке видно?
Go to the top of the page
 
+Quote Post
HammerN
сообщение Jan 18 2011, 05:12
Сообщение #10





Группа: Новичок
Сообщений: 4
Регистрация: 17-01-11
Пользователь №: 62 273



TRIS устанавливал в соответствие с даташитом, как указано в разделе SPI.

вот обработчик, но тут все просто, выставлет флаг и все.
Код
void interrupt isr(void)  
{
   if ((SSPIE) && (SSPIF))
   {
        SPI_FLAG= 1;
        SSPIF= 0;
   }
}


прерывание вообще не возникает, такое ощущение что SPI просто выключен, раз он даже флаг не ставит, а отладка просто виснет в бесконечном цикле, т.к флаг выставлять никто не хочет.
Go to the top of the page
 
+Quote Post
Vlad27
сообщение Jan 18 2011, 09:53
Сообщение #11


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

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Посмотрите еррату 80243m.pdf, возможно ваш случай.
Go to the top of the page
 
+Quote Post
stas00n
сообщение Jan 18 2011, 13:37
Сообщение #12


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

Группа: Участник
Сообщений: 181
Регистрация: 26-11-10
Пользователь №: 61 198



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 ( 52.03 килобайт ) Кол-во скачиваний: 32
 
Go to the top of the page
 
+Quote Post
Vlad27
сообщение Jan 18 2011, 15:27
Сообщение #13


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

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Цитата(stas00n @ Jan 18 2011, 15:37) *
Vlad27, там про прием в режиме ведомого - не тот случай.


Совершенно верно, проглядел.
Go to the top of the page
 
+Quote Post
HammerN
сообщение Jan 18 2011, 19:08
Сообщение #14





Группа: Новичок
Сообщений: 4
Регистрация: 17-01-11
Пользователь №: 62 273



stas00n, СПАСИБО огромное! уж на что, а на симулятор я даже и не подумал.
Go to the top of the page
 
+Quote Post
MMMika
сообщение Feb 4 2011, 06:20
Сообщение #15





Группа: Новичок
Сообщений: 3
Регистрация: 2-02-11
Пользователь №: 62 641



Господа специалисты.
Помогите новичку!
Имеется блок с PIC18F6520, который после сбоя по питанию ЧАСТИЧНО перестал нормально функционировать.
На блоке есть разъем (DB9), далее MAX232, дальше USART2 выводы контроллера (6;8;5;4).
Мои попытки связаться с контроллером из различных программ (MPLAB, PCWHD Compiler)
с ноутбука безрезультатны. (пишет нет связи, или проверьте кабель)
Кабель и MAX232 исправны.
В блоке есть возможность установки нескольких перемычек, возможно какие-то
использовались для организации связи через USART2.
Помогите установить связь с ноутбука с PIC18F6520.
С уважением Mika
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 00:01
Рейтинг@Mail.ru


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