2 Проекта порознь работают, вместе никак. Всю голову сломал

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

В архиве 2 проекта в CVAVR,

1) В папке "Digit_display" функция для отображения любого числа на 7 сегментном индикаторе динамическим способом.
Число вносится в переменную "indication" и прекрасно отображается.

2) В папке "RC5_only code" функция- декодер сигнала с пульта-
тоже отлично работает (отдельное спасибо Aheir -у)

в оставшейся папке попытка их объединить.
Сначала пробовал в декодер RC5 внести функции заполнения массива числами и отрисовки дисплее в виде отдельных функций.
Все что записано в обработчике прерываний-прекрасно исполняется, а дисплей просто пустой....
Если в тела функций заполнения массива числами и отображения вписать нечто простейшее, вроде зажечь 1 сегмент индикатора, или -другой--работает.
Вставляешь рабочий код обратно вместо только что работавшего простейшего --опять пустой дисплей :o

Пробовал в рабочую функцию декодирования и отображения чисел на дисплее (папка Digit_display) впихивать код декодера RC5, ессно инициализацию делал соответственно, ---тут уже дисплей работает, все отображает, а декодер RС5-нет. Даже в прерывание не заходит.

Полтергейст какой-то :shock: :shock: :shock:

Структура программы:
1) объявления переменных, массивов, вложения хидеров
2) обработчик прерываний INT0. куда подключен TSOP
3) обработчик прерывания по переполнению таймера
4) функция декодирования чисел-если число, пусть-28, то она
в 0-ой элемент массива пишет 8, в первый-2, во второй минус
5)так же отд. функция вывода этих элементов массива на индикатор


void main(void) {
инициализация МК
разрешение прерываний

while(1){
функция 4 ();
функция 5 ();
};
}

Так вот, если ничего другого не трогать вообще, а всего лишо в while(1) в тела функций 4 и 5, выше по тексту вписать нечто простейшее, то все работает как надо... А стоит вписать куски кода, работавшие в отд. проекте---глухо как в танке





Если кому не лень- укажите чайнику, что же происходит? С дебаггером сложно. Не знаю асм.
Вложения
projects.rar
(125.81 КБ) 209 скачиваний
Последний раз редактировалось megasvintus Пн июл 21, 2008 23:00:59, всего редактировалось 1 раз.
Трудно быть деревянным, совсем трудно....
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Ну для начала можеш попробывать написать такой код который при 1 - зажигает светодиод1, при 2 - зажигает светодиод 2, и т.д... Если всё будет работать нормально, то значить код не совместимый, так как чудес в Си не бывает. :))
Изображение
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Так я же уже сказал в предисловии что вместо неработающих в данном случае кусков вставлял подобное-все работает.

:cry:
Трудно быть деревянным, совсем трудно....
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Ну дак чего ты вципился именно за тот кусок индикации?! что самому написать или у когото подсмотреть код индикации никак? Да вот попробуй с таймером. Вот например http://avru.cwx.ru/viewtopic.php?t=16 (не подумайте что реклама)... :)
Изображение
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Да елки зелёные.... Код индикации я написал сам. интересно почему ОН , ИМЕННО ОН не работает и только ЗДЕСЬ...
Трудно быть деревянным, совсем трудно....
Реклама
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Поясни, зачем в функции risuem стоит условие для переменной aaa? И ее кстати, надо бы проинициализировать перед использованием.

И еще - есть ли уверенность в корректном применении всеми функциями программы одной и той же цикловой переменной i? Я вот думаю, что если прерывание прервет выполнение цикла в функции декодера например, то i после выхода из прерывания не восстановит своего "допрерывного" значения. Или я неправ?
Знание - сила!
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

1)Я тоже об этом думал. Делал переменные для всех, до единой, функций свои.
2)запрещал прерывание по переполнению таймера, оно срабатывает почти стазу при старте программы
3) не жал кнопку пульта секунд 30 сначала(не вызывая тем самым второе прерывание INT0)
4) перед всеми переменными перед объявление писал volatile

Все вышеперечисленное было бесполезно. Сдаётся мне, что по неопытности делаю какой-то простой и глупый промах. Ведь компиллятор не выдает даже warning-ов. С его точки зрения все хорошо.

Выяснилось только одно- программа не исполняет ни одну функций для работы с индикотором. Ни декодер, ни функцию отображения
Трудно быть деревянным, совсем трудно....
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Получилось! Счастье есть :)))
Трудно быть деревянным, совсем трудно....
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

И в чем было дело?
Знание - сила!
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Снял галку в свойствах проекта, где все переменные типа char принудительно делались unsigned, это раз. (я обычно снимаю ее, и всё объявляю вручную, а тут чего-то забыл)


Объявил все переменные и массивы в самом верху, ДО каких-либо функций и обработчиков прерываний. это два.
(Послушал вас)

И все заработало как надо. Кстати глобальные и внутрение переменные i не конфликтуют.

Доработал код: вы, Пухич, совершенно правильно подметили, что в функции risuem, if вообще не в тему.

Но мне кажется что такие перлы-нормально, ведь я всего месяц как с полного нуля изучаю МК и СИ, хотя уже все больше понимаю что написано в чужих исходниках. 8)

Когда я до начала плотного изучения всего этого заглянул в исходник функции-декодера RC5 от Аheirа, это было зимой, то подумал: во мрак... нииииичё не понятно. А сейчас кажется что это несложно. 8)
Трудно быть деревянным, совсем трудно....
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Лиха беда - начало :) Вы еще сами потом удивитесь, что дальше будете творить...
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»