Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
10.11.2006, 18:54
|
|
Частый гость
Регистрация: 10.11.2006
Сообщений: 23
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Нужна помощь новичку. Или я глючу, или Протеус или КодеВизио
Привет,
Начинающий в программировании микроконтроллеров.
Тем не менее, собрал схемку в протеусе, написал маленькую программку в КодеВизионе и теперь наблюдаю, как оно обнуляет глобальную переменную. Не могу найти источник граблей - помогите, где искать?
Протеус 6.9 сп4
Вот объявление переменных
volatile unsigned char nextdigit=0x00;
volatile unsigned char segment=0x02;
Вот функция, в которую они приходят
interrupt [TIM2_OVF] void timer2_overflow(void)
{
//if (segment==0x03) segment=0x00;
// else segment++;
if (segment==0x00) PORTD=0b10000000;
if (segment==0x01) PORTD=0b01000000;
if (segment==0x02) PORTD=0b00100000;
if (segment==0x03) {
PORTD=0b00010000;
segment=0x00;};
segment++;
nextdigit++;
//PORTD=segment;
}
Вся программа то и состоит из этой функции и сетупа портов/таймеров - собственно сетуп второго таймера на асинхронное действие по внешнему часовому кварцу.
Вочдог выключен. Смена переменной происходит в аккурат( за два такта по дебаггеру) до начала обработки интеррапта.
Заранее спасибо!
|
|
|
|
10.11.2006, 19:46
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Делаешь выод на 7сегметный индикатор?
Наверное часы, индикаторов 4....
В протеусе в watch window задай бряк по условию
равенства твоей переменной нулю.
А лучше бы выложил здесь проект ,нет времени собирать.
|
|
|
|
10.11.2006, 22:11
|
|
Частый гость
Регистрация: 10.11.2006
Сообщений: 23
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Эта...
Привет,
Делаю. На 7-ми сегментный. 4 штуки. Хочу 176ид2 поставить и потом понаклеить термометра и управления нагрузкой, но сути глюка это не меняет.
Воч я ставил на смену переменных. Аккурат за два такта до входа в прерывание в нуль сбрасывает. По исходнику в С не видать. По асму тоже не понял, где это его скрутило.
Вот файло прикрепил. Там все.
Написано ужасно и совсем чуть-чуть. Пока только наработка путей решения.
Прикрепленный файл: 7076956.rar
|
|
|
|
11.11.2006, 00:14
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Ни чего страшного, просто лень самому собирать..
Сейчас взгляну...
|
|
|
|
11.11.2006, 00:23
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Пока не ответ на вопрос а совет,
Не используй аналоговых элементов , когда программу отлаживаешь, замени транзисторы или инверторами или на прямую.
Разгрузишь процессор.
|
|
|
|
11.11.2006, 00:30
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
nextdigit эту обнуляет?
И иницилизируешь ты ее 0 ?
А приращаешь в прерывании...
|
|
|
|
11.11.2006, 00:51
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Так ...насколько я понял ты хотел динаммическую идикацию
изобразить....
У тебя нет перебора разрядов индикатора
на выходах S0-S3 торчат 0 постоянно
Первый раз на прерывание от timer2 влетаем через
2 секунлы , второй раз через секунду....
Это много для динаммической идикации.
|
|
|
|
11.11.2006, 00:56
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Наврал прерывание раз в секунду ,
но это все равно много.....
|
|
|
|
11.11.2006, 01:03
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Чего то я не понял общие выводы ты повесил на PORTD0-D3 а перебираешь старшие разряды PORTD4-7
И причем активный у тебя должен быть 0 , а ты перебираешь 1.
|
|
|
|
11.11.2006, 01:06
|
|
Частый гость
Регистрация: 10.11.2006
Сообщений: 23
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
С фанатизмом.
Сообщение от dosikus
|
Чего то я не понял общие выводы ты повесил на PORTD0-D3 а перебираешь старшие разряды PORTD4-7
И причем активный у тебя должен быть 0 , а ты перебираешь 1.
|
ПОка идет только проба "а как это работает?"!
Логики там нету почти никакой.
Я по кускам смотрю что и как отрабатывает, потом буду логику давать и собирать докучи. Главная проблема, что обе переменных обнуляются.
Тем не менее спасибо за помощь и любые комментарии!!!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:49.
|
|