Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.07.2008, 22:15
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Магический МК
В общем не знаю, что и делать...
Есть МК ATmega16, на 4 ноги DDRB (порты настроены на выход) должно подаваться 1 0 1 0...
Но иногда там вообще корявое напряжение, колеблется от 1,2 до 3,5 Вольт...
Всё прошивается нормально, проверял на 2-ух МК, кондёры стоят и на питании самого МК и на питании АЦП, и на 78L05 стоят кондёры, поставил внешний кварц, на нём тоже кондёры, ресет подтянут резистором на плюс...
Что ещё сделать можно? Странные глюки...
|
|
|
|
14.07.2008, 22:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
С завода поступают МК в активированным JTAG.
За счет этого не работает нормально порт С, возможно даже и В.
Нужно отключить JTAG через фузы.
|
|
|
|
15.07.2008, 09:22
|
|
Прохожий
Регистрация: 29.11.2006
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
У вас так:
DDRB = 0x0F;
PORTB = 0x05; // или = 0х0A;
Я правильно понял?
|
|
|
|
15.07.2008, 11:54
|
|
Временная регистрация
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Если измерение проводится вольтметром, то все в норме, т.к. влияет форма сигнала.
Если это показания осциллографа,
1. проверить программу на возможность установки порта на вход или програмный пересброс МК.
2. убедиться в отсутсвии внешнего сброса МК в эти моменты.
|
|
|
|
15.07.2008, 21:13
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
JTAG тут не при чём, иногда всё нормально работает, вот сеййчас включил, померил, всё в норме...
а код выглядит так:
Код:
|
DDRB = 0xFF;
PORTB |= 1‹‹0;
PORTB &= ~(1‹‹1);
PORTB |= 1‹‹2;
PORTB &= ~(1‹‹3); |
Измеряю вольтметром
|
|
|
|
16.07.2008, 00:08
|
|
Прописка
Регистрация: 23.03.2008
Сообщений: 121
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
и переключение идет с частотой пары мегагерц???? А как вольтметр будет мерять такой сигнал???? И сброс собачки надеюсь выполняется?
|
|
|
|
16.07.2008, 07:18
|
|
Временная регистрация
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Код:
|
DDRB = 0xFF;
PORTB |= 1‹‹0;
PORTB &= ~(1‹‹1);
PORTB |= 1‹‹2;
PORTB &= ~(1‹‹3); |
информативно. Говорит о том что порты установлены. Но... в этом отрывке объяснения проблемы не найти. Лучше выложить всю програмку. Тогда можно будет точно сказать есть в ней ошибки или надо смотреть железо.
Схема тоже не помешает.
|
|
|
|
16.07.2008, 10:25
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Никакого переключения не идёт, сейчас это и есть вся программа, потому что я её написал, как раз, чтобы программные ошибки точно были ни при чём
|
|
|
|
16.07.2008, 13:02
|
|
Временная регистрация
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Сообщение от Lockdog
|
Никакого переключения не идёт, сейчас это и есть вся программа, потому что я её написал, как раз, чтобы программные ошибки точно были ни при чём
|
хм.. может в этом проблема?
"Loop:
nop ;ничего не делаем
goto Loop ;переходим на метку Loop
Этими тремя сточками мы реализовали простейший цикл, который заставит бесконечно крутиться микроконтроллер. Первой строкой идет метка Loop, ее микроконтроллер пропускает, но запоминает куда ему нужно будет вернуться. Затем идет команда nop. Она говорит МК ничего не делать. А потом идет команда goto Loop, эта команда безусловного перехода, если перевести на человеческий язык принцип ее работы, то получится примерно следующее: «А теперь возьми и вернись на метку Loop». То есть мы просто перескочим на метку, которую сами и создали и МК снова приступит к выполнению команды nop.
Зачем же надо создавать этот цикл? В принципе, его можно и убрать, но в таком случае я за действия программы уже не отвечаю. Помните, я рассказывал вам про память программы? Так вот, после того, как мы скомпилируем текст нашей программы, у нас получится .hex файл, который нам нужно будет прошить в микроконтроллер. Во время прошивки наша программа как раз и заносится в память программ. Начиная с адреса 0x0000. Так вот, при запуске МК у нас автоматически начинается исполнение команды с этого адтеса. Если бы мы не зациклили нашу программу, то МК дошел бы до конца нашей программы, а потом просто продолжил бы последовательно «выдергивать» команды из памяти программ и выполнять их. Дойдя до последнего адреса памяти, он бы снова перескочил на адрес 0x0000, и все пошло по кругу. То есть заново бы стал выполнять преобразование регистров. Нам такого «счастья» не надо. Мы просто зациклили МК на выполнение одной команды nop, и сидим любуемся на горящие светодиоды."
http://www.pcports.ru/articles/picASM1.php
|
|
|
|
16.07.2008, 13:27
|
|
Временная регистрация
Регистрация: 11.06.2006
Сообщений: 89
Сказал спасибо: 25
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
хм, то есть, мне этот кода надо запихнуть в цикл while(1)?
Надо будет проверить, но по-моему я так уже делал и проблема не решилась
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:59.
|
|