roboforum.ru

Технический форум по робототехнике.


Проблема с SPI

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Проблема с SPI

Сообщение executer » 03 окт 2009, 17:31

Вот вплотную занялся дисплеем от Семена - есть проблема. Какойто бок с аппаратным SPI.

вот собственно все что к нему относится (куски из библиотеки Christian Kranz):

Код: Выделить всёРазвернуть
// настройка портов    
    cbi     LCD_PORT, LCD_RESET     ; display reset
    sbi     LCD_DDR,  LCD_RESET     ; set reset as output
    cbi     LCD_DDR,  LCD_MISO      ; MISO is always input in SPI
    sbi     LCD_DDR,  LCD_MOSI      ; MOSI must be set as output for SPI
    sbi     LCD_PORT, LCD_CS        ; deselect display
    sbi     LCD_DDR,  LCD_CS        ; SS must be output for Master mode to work


    cbi     LCD_PORT, LCD_SCK       ; set SCK lo
    sbi     LCD_DDR,  LCD_SCK       ; set SCK as output
    sbi     LCD_PORT, LCD_MISO      ; enable pull up of MISO to avoid floating input

    sbi     LCD_PORT, LCD_RS        ; start with RS=high
    sbi     LCD_DDR, LCD_RS         ; RS signal is output

    ; setup serial data interface
    ; select clock phase positive going in middle of data
    ; master mode
    ; enable SPI
    ; speed is CPUclock/2

    ldi     r24,(1<<MSTR) | (1<<SPE)
    out     LCD_SPCR,r24

    ldi     r24,1              ; double speed bit
    out     LCD_SPSR,r24

// задержка
   
    sbi     LCD_PORT, LCD_RESET ; release reset
    in      r24,LCD_SPSR        ; clear status   

// задержка

    ; ports and SPI are now configured

    ldi     T1,0xFD
    rcall   glcdDispCommand   <<- отсюда МК уже не возвращается
...


Смотрим что там в glcdDispCommand (откуда МК уже не выходит):
Код: Выделить всёРазвернуть
       cbi     LCD_PORT,LCD_CS        ; select Display
       sbi     LCD_PORT,LCD_RS        ; set RS line
       rjmp    SPI_SEND
....
PI_SEND:
    sbi     LCD_SPCR,SPE        ;enable SPI
    out     LCD_SPDR,T1         ;load byte in SPI data register

SPI_SEND_0:
    sbis    LCD_SPSR,SPIF
    rjmp    SPI_SEND_0            <<- вот из этого лупа уже никогда не выходит

ПОЧЕМУ МОЖЕТ НЕ ВЫСТАВЛЯТСЯ SPIF ???
 
.....
    ret


с дисплеем и проводами вроде все в порядке - загружал прогу на БАСКОМ - там программный SPI - картинку показывало. подумал может провода длинные - попробовал снизить скорость SPI - не помогло тоже.
Кто глубоко работал с SPI? Домоможить!! :O:

Добавлено спустя 1 минуту 45 секунд:
с этой библиотекой работал на другой плате - макетке - иногда висло через несколько часов работы, но SPI хотяб работал

Добавлено спустя 1 минуту 27 секунд:
SPI когда передает данные - он вообще слейва видит както? или просто выставляет данные, выдате такт 8 раз и передача окончена? Слейв никак не маякует что все в порядке?

Добавлено спустя 2 минуты 36 секунд:
попробую в другой МК залить :no: . мож этот нехороший...
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Проблема с SPI

Сообщение blindman » 03 окт 2009, 17:57

LCD_PORT, LCD_CS, LCD_DDR - как определены? Контроллер какой?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Проблема с SPI

Сообщение contr » 03 окт 2009, 17:58

SPI когда передает данные - он вообще слейва видит както? или просто выставляет данные, выдате такт 8 раз и передача окончена? Слейв никак не маякует что все в порядке?

я с этими дисплеями работал, правда без SPI.
Кой-чего маяковать GLСD могут, в сотиках используется, в прочих девайсах - нет.
Просто шлем байтики в сторону LСD. Тактовая не более 4МГц для монохромных и 10..13 для цветных.
Контролем можно считать инициализацию дисплея. Получив набор байтиков с правильными кодами и таймингами, дисплей просыпается и высвечивает мусор. Мусор можно не увидеть, если параметры не так выставлены, но ток увеличивается.
Последний раз редактировалось contr 03 окт 2009, 18:08, всего редактировалось 1 раз.
contr
 
Сообщения: 987
Зарегистрирован: 17 апр 2009, 15:09
Откуда: Rostov-Don
Предупреждения: -1

Re: Проблема с SPI

Сообщение blindman » 03 окт 2009, 18:00

contr, к чему этот опус? Вопрос прочитай ещё раз
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Проблема с SPI

Сообщение executer » 03 окт 2009, 18:05

Вот так (уже три раза сверился со схемой)

Код: Выделить всёРазвернуть
  #elif defined (__AVR_ATmega32__)
  #define   LCD_PORT                _SFR_IO_ADDR(PORTB)
  #define   LCD_PIN                 _SFR_IO_ADDR(PINB)
  #define   LCD_DDR                 _SFR_IO_ADDR(DDRB)
  #define   LCD_CS      PB2
  #define   LCD_RESET   PB3
  #define   LCD_RS      PB1
  #define   LCD_MOSI    PB5
  #define   LCD_MISO    PB6
  #define   LCD_SCK     PB7


МК в мэйкфайле :

# MCU name
MCU = atmega32

МК виснет на первой же отправке комманды по SPI (место зависания отмечено в первом посте)

Добавлено спустя 4 минуты 49 секунд:
Залил на другой, такойже МК - ничего.
Вложения
Software.rar
На всякий пожарный
(488.18 КиБ) Скачиваний: 9
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Проблема с SPI

Сообщение blindman » 03 окт 2009, 18:06

PB4 (SS) должен быть настроен как выход. Иначе SPI master не работает, и ждать установки флага можно до второго пришествия :)
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Проблема с SPI

Сообщение executer » 03 окт 2009, 18:28

сейчас попробую.

Епатий-Коловратий, да ты гуру, blindman!!!! :Bravo: Уже который раз подряд выручаеш! :good:
Спасибо тебе огромное.
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28