Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
#1

Как глюк поймать с переферией SPI? - Atmega AVR микроконтроллер

05.10.2013, 13:00. Просмотров 9573. Ответов 17
Метки нет (Все метки)

Делаю для автоматизации ряд устройств - их общая черта это связь с контроллером умного дома через радио модули с чипами nrf24
Сейчас отлаживаю очередное устройство - оно считает расход воды со счетчиков, замеряет температуру ds18b20, имеет два входа с передачей на контроллер по радио и 5 выходов с управлением из консоли умного дома
Написал весь функционал - работает шикарно. Но... Поработает 5-10-20 минут и перестает передавать и принимать сообщения по радио. Это железно ясно из логов умного дома - исчезает активность, хотя по другим устройствам все ок. Отключение питание решает проблему но не надолго. Причем достаточно просто отключить питание переферии - при подключенной батарее и отключенной сети МК продолжает работать, а переферия отключается - т.е после снятия питания переферии все снова начинает работать, правда при возврате на сетевое питание переферия заново инициализируется
Из переферии - nrf24 и 74hc595 на одной шине spi, дисплей на другой шине spi
Весь spi програмный, железный не инициализируется. Мк mega168pa
Несколько практических таких же по схематике устройств работают 24х7 без проблем
Даже если ресетятся по сторожевому таймеру то радио не страдает

В этом проекте внешние помехи практически исключаем так как устройство еще не подключено ни к чему кроме розетки
Есть еще одна особенность - купленный на farnel интегрированный модуль питания на пять вольт и мощность 2.75вт на практике проседает по питанию на десятые доли вольта при токак заметно ниже номинальных. Например включение резе с обмоткой 50ма дает 0,1 в просадки. МК питается напрямую от модуля, а дисплей и nrf24 от стабилизатора 3.3в
Но врядли это причина - проблема есть даже если ничего что дант заметную просадку не включать
Поделитесь опытом - как выявить причину. Не понимаю куда копать

Т.е ошибка накапливается и через 5-20 минут работы все вроде ок, но радио перестает работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 13:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как глюк поймать с переферией SPI? (Atmega AVR микроконтроллер):

SPI и массив байт, странный глюк
Есть 2 меги 16, одна SPI mostir, другая slave. Слейв получает 3 байта и...

Сопряжение двух ATMega16 через SPI, непонятный глюк
Помогите пожалуйста найти косяк! Всё вроде работает, но периодически ведомый...

SPI -> 485->SPI
Есть необходимость переводить SPI на 485 интерфейс. Хотел бы уточнить, драйвер...

Как связать мегу16 по spi с радиомудулем rfm02-433-d
подскажите???нужно для базовой платы робота!!!

SPI Flash 25q128 как SD в SPI mode ?
ну задача использовать spi флешки вместо sd карт. Как это зделать? Будет...

Модуль СМА Siemens 5 560 001 448, Управляет переферией периодами
К сожалению имеется только модуль с проводкой.Выбирается программа,нажимаешь...

17
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
05.10.2013, 13:19 #2
Я думаю, сначала надо отдиагностировать - как именно оно перестаёт работать. Вероятно, SPI тут совсем не при чём.
Возможно, nrf24 виснет? Хватает ли ему конденсаторов по питанию?
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
05.10.2013, 14:09 #3
Конденсатор танталовый припаян прямо под раз емом модуля
Пробовал модуль с припаянеым на самом модуле танталом и без - нет разницы
Такой точно модуль у меня работает в другом устройстве без проблем
0
Johmmy0007
0 / 0 / 0
Регистрация: 30.08.2011
Сообщений: 9,944
05.10.2013, 15:04 #4
>>Такой точно модуль у меня работает в другом устройстве без проблем

надо не точно такой же, а этот же проверять. может брак. надо модуль заменить и проверить
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
05.10.2013, 16:56 #5
пробовал разные модули - результат один
да и что там такого может быть с модулем? там кроме чипа практически больше ничего нет
0
kytikot
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 3,435
05.10.2013, 17:19 #6
Значит, в алгоритме косяк. Попробуй чем-то заменить модуль, например, парой светодиодов или еще какой "заглушкой", или вообще терминал туда воткни.

У меня был подобный глюк с другим модулем - МК ждал отпределенного ответа, а модуль присылал другое... которое я еще не учел и не обрабатывал...
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
05.10.2013, 18:01 #7
Может и в программе...
Оставил на пару часов уже с неработающим радио, вернулся обнаружил логи взаимодействия судя по которым устройство перезапустилось (отдельный сопрос почему, по какой то причине произошел толи сброс толи сторожевой таймер) - так радио работает. Значит наверно необязательно снимать питание с переферии, возможно достаточно повторной инциализации или прогрпмного сброса
Могу воткнуть логический анализатор вместо модуля, но что мне это даст?
Маловероятно что радио чип перестает работать, либо нарушается с ним связь либо непредсказуемо нарушается настройка его рабочих регистров. Вот только с чего и как это понять?

Когда я писал про то что другие устройства работают то подразумевал что там "почти все тоже". Там используется железный SPI. В этом устройстве програмный (сделал ошибке в схемотехнике с подключением вывода SS). Железный spi настроен на делитель /4. Програмный реализован без задержек. По даташиту nrf24 допускает spi до 10мгц. Вроде должно все и без задержек работать, мена на 8мгц осцииляторе. Да и если бы не должно было работать наверно бы вообще не работало?

Сейчас пока думаю вставить чтение какого нибудь рабочего регистра nrf24, если верно что из за чего то нарушается пабота с ним то значение будет неверно
Больше идей пока нет
Прямо в ступоре, готов был все уже установаиь и на тебе
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
05.10.2013, 18:32 #8
кстати еще что может быть важно
иногда после заливки программы происходит тоже самое - модуль не запускается при этом происходит перезапуск по сторожевому таймеру в бесконечном цикле. достаточно сбросить питание с переферии и все начинает работать
не понимаю как заливка скетча может сбивать модуль
а еще обнаружил что периодически на контроллер умного дома приходит мусор по радио

схема ниже, ума не приложу откуда может быть помехи на радио чип:

0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
05.10.2013, 22:18 #9
Вариант - на высокой частоте искажается форма импульсов. Звон, завал фронтов. У меня были проблемы с SPI из-за высокой частоты. Уменьшил частоту, все заработало. Так как тогда дело дальше макета не пошло, никаких способов для увеличения частоты не применял. Попробуйте уменьшить частоту. Если все заработает, значит спрашивайте у бывалых, как добиться высокой частоты SPI.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
05.10.2013, 22:53 #10
Цитата Сообщение от oxytt
иногда после заливки программы происходит тоже самое - модуль не запускается при этом происходит перезапуск по сторожевому таймеру в бесконечном цикле. достаточно сбросить питание с переферии и все начинает работать
не понимаю как заливка скетча может сбивать модуль
Предположение:
Возможно, МК не всё инициализирует в nRFе. При снятии/возобновлении питания все внутренности nRF приходят в дефолтное состояние, а если подавать только сброс на МК без снятия питания (то же самое - и при заливке скетча, и по watchdogу тоже), то nRF инициализируется лишь в такой степени, в какой предусмотрено программой МК. Чего-то в программе не хватает.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
05.10.2013, 23:21 #11
Отруби все оставь только радио , пусть "мусор" гонит. WDT тоже отруби. Пусть погоняются в такой связке . , Затем плавненнько подключай остальное и см.
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
06.10.2013, 00:00 #12
Цитата Сообщение от YTYOUT
Отруби все оставь только радио , пусть "мусор" гонит. WDT тоже отруби. Пусть погоняются в такой связке . , Затем плавненнько подключай остальное и см.
программно отрубить? железно сейчас уже проблематично
чип явно гонит мусор, в радио я могу видеть это мусор, он исчезает только если я отключаю питание устройства
значит или чип не понимает МК (ставить задержки?) или кто то шумит на шине
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
06.10.2013, 00:01 #13
Цитата Сообщение от OtyxPM
Возможно, МК не всё инициализирует в nRFе. При снятии/возобновлении питания все внутренности nRF приходят в дефолтное состояние, а если подавать только сброс на МК без снятия питания (то же самое - и при заливке скетча, и по watchdogу тоже), то nRF инициализируется лишь в такой степени, в какой предусмотрено программой МК. Чего-то в программе не хватает.
из всего что есть в интернет это самая грамотная библиотека RF24 изначально написанная под ардуино, я использую порт на AVR
с железным SPI таких проблем не наблюдал, драйер софтверного SPI скопировал из другой библиотеки, надо пробовать ставить задеркжи
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
06.10.2013, 00:04 #14
Конечно программно , "мусор" я брал в кавычки не зря - он должен быть осмысленный - типа "Привет это я"
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
06.10.2013, 00:24 #15
Цитата Сообщение от YTYOUT
Конечно программно , "мусор" я брал в кавычки не зря - он должен быть осмысленный - типа "Привет это я"
я понял, можно попробовать закоментарить по максимуму и ловить "жучка"
почему-то последняя версия студии приказала долго жить моему jtagice и я не могу использовать отладку - это бы упростило поиски
поддержка атмела которую неделю разводит руками

кстати, почему после прошивки иногда чип сходит с ума? какой бы не был мой скетч это врядли может влиять на то, что чип не инициализируется сразу после старта. Может косяк искать в пайке? Плату делал сам, я не большой дока в этом, несколько косяков с замыканием и разрывом дорожки исправлял на этой плате.
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
06.10.2013, 01:04 #16
вот такой драйвер у меня для SPI, вроде все тривиально
думаю вставить задержку в начале функции и в цикле после выставления 1 на SCK
буду признателен за комментарии, так надо делать или не так

Код
uint8_t send_spi(uint8_t tx)
{
uint8_t i = 0;
uint8_t rx = 0;

SPI_PORT &= ~(1 << SPI_SCK_PIN);
_delay_us(50);

//nrf24_sck_digitalWrite(LOW);

for(i=0;i<8;i++)
{
if(tx & (1<<(7-i)))
{
SPI_PORT |= (1 << SPI_MOSI_PIN);
//nrf24_mosi_digitalWrite(HIGH);
}
else
{
SPI_PORT &= ~(1 << SPI_MOSI_PIN);
//nrf24_mosi_digitalWrite(LOW);
}

SPI_PORT |= (1 << SPI_SCK_PIN);
//nrf24_sck_digitalWrite(HIGH);
_delay_us(50);

rx = rx << 1;
if(SPI_PIN & (1 << SPI_MISO_PIN))
//if(nrf24_miso_digitalRead())
{
rx |= 0x01;
}

//nrf24_sck_digitalWrite(LOW);
SPI_PORT &= ~(1 << SPI_SCK_PIN);

}

return rx;
}
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
06.10.2013, 03:03 #17
сейчас буду обязан рвать волосы на своей голове :)
меня осенило какую я глупую вещь сделал!

через несколько макросов и функций абстрагировал для себя то как дергаю биппеер и моргаю светодиодом.
сделал это "красиво" на перываниях
но!!! получается я в прерываниях дергаю сдвиговый регистр к которому у меня этот бипер и этот светодиод подключены

и что потом удивляться, что радио глючит? :)
еще умудрился активировать моргание перед посылкой радио - тем самым гарантировал себе коллизию

правда что странно - некий мусор в эфире все равно остался, но то что я обнаружил сто процентов должно было мешать
буду копать дальше
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
06.10.2013, 11:33 #18
спасибо всем за поддержку
уже 6 часов работает без сбоя, надеюсь так и будет работать
пока сюда не написал как-то в голову не приходило, что сам ошибся
0
06.10.2013, 11:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2013, 11:33
Привет! Вот еще темы с решениями:

ILI9341 SPI DMA, SPI, UART библиотеки
Доброго времени, форумчане... Посоветуйте библиотек плиз... 0) Либа для...

СМА SAMSUNG DIAMOND WF9592GQR/YLP Y20E5ADZA01268L, схема соединения электронного модуля с переферией
Доброго времени суток всем. Все собственно в названии темы. DC92-00567...

Как поймать NaN
Как быть, если вместо нужного числа получаю NaN.Мне нужно поимать этот и...

Как поймать ошибку
Проблема: Пользователь открывает основную страничку, на которой стоит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru