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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> at91sam7s spi, Помогите понять что происходит
shrek
сообщение May 27 2010, 15:18
Сообщение #16


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Цитата
...и данные сместились на бит, а никак не на байт. А уж PDC тут вообще ни при чем.

сместились все правильно. если это был последний тактовый импульс для данного байта, но не последний для пакета или последний какая разница помеха может возникнуть в любом месте пакета, то SPI генерит флаг что мол буфер полный этот байт идет в PDC. Данные сместились то есть как бы слейв посчитал что пакет например из 9 байт принял, а мастер еще передает. Судя из моих рассуждений по идее данные смещались бы на биты, но не на байты, признаю ошибку, но... На осцыле данные смещались строго на 1 - 2 байта!!! laughing.gif бывали случаи даже гуляли по пакету (правда в одну сторону левую, если смотреть на осциле).

Сообщение отредактировал shrek - May 27 2010, 15:20
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 27 2010, 15:29
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(shrek @ May 27 2010, 19:18) *
На осцыле данные смещались строго на 1 - 2 байта!!! laughing.gif

Тогда причину нужно искать в программе.
Go to the top of the page
 
+Quote Post
shrek
сообщение May 28 2010, 07:09
Сообщение #18


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Цитата
Тогда причину нужно искать в программе.

До включения ШИМ все работает как часы, без ошибок длительное время. На сколько включал на столько и работал прибор до включения ШИМ. Даю команду включения ШИМ каналов по SPI. Вот собственно вся дурь после этого и начинается... Причем канал ШИМ работает на шинный усилитель, шинный усилитель работает на пару транзисторов Si2301 Si2302, эта пара работает на транзистор IRLIZ34, последний работает на индуктивную нагрузку (обмотка двигателя). Таких каналов 7. 4 канала работают на шаговый двигатель, 1 канал комутит двигатель постоянного тока. причем 4 канала (которые работают на ШД) расположены ближе к разьему с которого раздается питание. Как только грубо говоря включаю двигатель постоянного тока начинает лезть помеха но влияния особого не оказывает (иногда возникают ошибки примерно раз в 5 - 10 минут). Как только включаю ШД то тут все и начинается smile.gif. Ошибки каждую секунду идут. laughing.gif

Сообщение отредактировал shrek - May 28 2010, 07:17
Go to the top of the page
 
+Quote Post
romazan
сообщение Mar 22 2011, 13:23
Сообщение #19





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



Всем привет.
У меня такая проблема, шлю данные в дисплей, он не запускается. Ладно. Начинаю вручную отлаживать - F11, данные начинают выходить и дисплей нормально запускается. Пробовал ставить задержки в секунду!!! Такая-же байда. У кого есть идеи?
Прикрепленные файлы
Прикрепленный файл  Blinky.rar ( 137.79 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2011, 13:54
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (romazan @ Mar 22 2011, 15:23) *
У кого есть идеи?
Я бы поменял местами дерганье RS и ожидание окончания передачи:
CODE
    while(!(SPI0->SPI_SR & AT91C_SPI_TDRE))
       ;
    if(cmd==1){
        PIOB->PIO_SODR = LCD_RS;
        }
    else{
        PIOB->PIO_CODR = LCD_RS;
        }



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
romazan
сообщение Mar 22 2011, 20:25
Сообщение #21





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



Вроде помогло, но глюков дофига! maniac.gif Баги! Баги! В ручном режиме данные идут нормально - как запускаю в автомат, начинается ппц. То может вместо постановки курсора в позицию (0:0) унести его куда угодно, то вместо 3 в порт идёт 1. Добавил функцию Image - выводин изображение из массива, так на экране какая-то какофония из пикселей.
CODE
static void image(void){
volatile word a;
LcdSend( 0x20, LCD_CMD, 0);
LcdSend( 0x40, LCD_CMD, 0);
LcdSend( 0x80, LCD_CMD, 0);
for(a=0;a<=614;a++)
{
LcdSend(ImageGraf[a], LCD_DAT, 0);
};
};
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 22 2011, 20:40
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Для отслеживания окончания передачи следует опрашивать флаг TXEMPTY, а не TDRF. В противном случае RS будет переключаться когда попало.
Go to the top of the page
 
+Quote Post
romazan
сообщение Mar 25 2011, 10:27
Сообщение #23





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



Спасибо за советы. Заработало. Буду с дисплеем разбираться, почему-то медленно заливается, вроде скорость на максимум поставил, но он всё равно тупит.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 11:52
Рейтинг@Mail.ru


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