Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
10.01.2009, 02:04
|
|
Частый гость
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
выделите регистр и меняйте биты в нем, а потом его весь выдавайте в порт.
|
ну.. оно конечно можно так извратиться.., но мне хотелось бы понять, это глюк протеуса или особенность данного контроллера? или компилятора..
Суть в том, что такая обработка сильно усложнит мне жизнь.. мне в дальнейшем нужно будет расчитывать время накопления энергии в катушке зажигания, чтобы еще до переключения сигнала успеть заранее накопить энергию в катушке, чтобы в момент переключения уже могла проскочить искра в свече...
|
|
|
|
10.01.2009, 02:25
|
|
Гражданин KAZUS.RU
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
|
Сообщение от Alexandr_Il
|
Неа.. с temp=GPIO он не сбрасывает флаг GPIF и тут же заходит обратно в прерывание.. Я ж вижу, что с GPIF = 0 он корректно выходит и заходит в прерывание.
|
А с какого перепугу эта строка должна флаг сбросить.
Если посмотреть в даташит, то наверно надо так:
temp = GPIO;
GPIO = temp;
GPIF = 0;
Ну насчет GP3/MCLR, то независимо от настроек без резюка навесного МК запустить у меня не получилось, может у тебя получится.
|
|
|
|
10.01.2009, 02:42
|
|
Гражданин KAZUS.RU
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
|
Сообщение от Alexandr_Il
|
ну.. оно конечно можно так извратиться.., но мне хотелось бы понять, это глюк протеуса или особенность данного контроллера? или компилятора..
|
Несомненно глюков везде хватает, но сюда еще надо добавить глюк программера
|
|
|
|
10.01.2009, 09:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Относительно даташита - Вам сделали правильное замечание. Итак, "на пальцах" - напряжение логического "0" в пиках - 3,5 вольта и ниже. Изменение состояния порта происходит по принципу - чтение -модификация - запись. Пусть Вы выдали на ножку 1 и под влиянием нагрузки напряжение на этой ноге упало до 3 с половиной вольт. В этом случае, когда Вы меняете соседнюю ногу, то в порт читается значение этой ноги - 3,5 - как логический 0.
Поэтому значение меняется - порт становится в логический 0.
Это же касается и измененения трис.
|
|
|
|
10.01.2009, 11:32
|
|
Частый гость
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от lyk
|
А с какого перепугу эта строка должна флаг сбросить.
Если посмотреть в даташит, то наверно надо так:
temp = GPIO;
GPIO = temp;
GPIF = 0;
Ну насчет GP3/MCLR, то независимо от настроек без резюка навесного МК запустить у меня не получилось, может у тебя получится.
|
Эти манимуляции вообще приводят к тому, что на всех выходах остается 0 в итоге.
Прикладываю картинку с осциллограммой работы вот этого кода:
Код:
|
sub procedure interrupt ' Процедура прерывания
if GPIF = 1 then
if GPIO.5 = 0 then ' Если на входе 0, то это значит, что нужно подать импульс во второй канал
GPIO.4 = 1
else
GPIO.4 = 0 ' иначе подаем на выход второго канала 0
end if
delay_ms (20)
if GPIO.5 = 1 then ' если на входе 1, то это значит, что нужно подать импульс на первый канал
GPIO.2 = 1
else
GPIO.2 = 0 ' иначе подаем на выход первого канала 0
end if ' Сбрасываем бит прерывания от изменения сигнала на входе
delay_ms (20)
temp = GPIO
GPIO = temp
GPIF = 0
end if
end sub |
Т.е. после каждой операции запись в порт я вставляю задержку 20мсек и наблюдаю импульс на соответствующем выводе, пока задержка не закончится, как только произошла следующая запись в порт, остальные выходы сбрасываются в ноль и сигнал появляется только на том выходе, куда произошла запись. Ну неужели тут мой глюк? Что-то я сомневаюсь, что в железе работает именно так, ибо предыдущий мой проект в железе реагировал на такую запись в порт как и ожидалось от него, а не сбрасывал все остальное...
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/10012009/3752078.jpg" frameborder="0" name="fr9473127" scrolling="yes" width="470" height="868" align="bottom"›[img]nuke/users_images/10012009/3752078.jpg[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.
‹/IFRAME›
‹/center›
|
|
|
|
10.01.2009, 11:35
|
|
Частый гость
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
Изменение состояния порта происходит по принципу - чтение -модификация - запись.
|
Вот тут похоже в протеусе и глючок.. Когда я читаю из порта, который настроен на выход командой
temp = GPIO
у меня читаются все 0, соответственно и симмулятор видимо тоже читает все 0, поэтому и сбрасывает все выходы..
|
|
|
|
10.01.2009, 13:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Глюк в модели есть - ну как же без него - например, не сбрасывается сторожевой таймер - Вот в приложении ясно видно, что глючит. А относительно - запись всего в порт - я уже ставлю регистр туда автоматом - а в 18 серии выделены специальные регистры LAT именно для этой цели.
Васик я не знаю и честно говоря, знать не хочу...Дизайн в приложении.
И тема, млин, неубиваемая...
http://www.microchip.su/showthread.p...1975#post51975
Прикрепленный файл: 4292561.rar
|
|
|
|
10.01.2009, 14:34
|
|
Гражданин KAZUS.RU
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
|
Сообщение от Alexandr_Il
|
Вот тут похоже в протеусе и глючок.. Когда я читаю из порта, который настроен на выход командой
temp = GPIO
у меня читаются все 0, соответственно и симмулятор видимо тоже читает все 0, поэтому и сбрасывает все выходы..
|
Я тебе уже писал, перед тем как назначать какой вывод порта вход/выход надо определить в каком режиме твои входы/выходы будут работать- аналог/цифра. Записи в TRISIO не достаточно! Надо CMCON=0x07; перед этим написать для цифры. Читай даташит, на микрочип.ру есть перевод на этот МК.
Научишся правильно писать протеус меньше глючить будет.
А чем MPLab тебе не нравиться? Отлажуй в нем. Есть конвертор файлов микроэлектроники в MPLabовский ASM.
|
|
|
|
10.01.2009, 23:18
|
|
Частый гость
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от lyk
|
Я тебе уже писал, перед тем как назначать какой вывод порта вход/выход надо определить в каком режиме твои входы/выходы будут работать- аналог/цифра. Записи в TRISIO не достаточно! Надо CMCON=0x07; перед этим написать для цифры. Читай даташит, на микрочип.ру есть перевод на этот МК.
|
Да.. даташит надо внимательно читать..
В общем, все заработало, действительно нужно было вначале перевести выходы в цифровой режим.. Иначе, когда пик читает сигнал из GPIO перед изменением, получает 0 по всем выходам..
Только за это отвечает 4 младшие бита регистра ANSEL..
Регистр CMCON отвечает за компаратор, который тоже отключать нужно.
|
|
|
|
11.01.2009, 00:12
|
|
Гражданин KAZUS.RU
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
|
Сообщение от Alexandr_Il
|
Только за это отвечает 4 младшие бита регистра ANSEL..
Регистр CMCON отвечает за компаратор, который тоже отключать нужно.
|
Угу, забыл что на твоем ацп есть, спутал с 629, но на этом твои мучения с этим камнем еще не закончились...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Симуляция частотомера на PIC в Proteus
|
oscill |
Микроконтроллеры, АЦП, память и т.д |
6 |
15.06.2009 19:26 |
глюк Proteus при работе с ATMEL ATTINY45
|
igoruha727 |
Микроконтроллеры, АЦП, память и т.д |
3 |
23.05.2009 01:00 |
PROTEUS глюк INT2 в ATMEGA16
|
TVMaster |
Микроконтроллеры, АЦП, память и т.д |
7 |
25.09.2008 21:14 |
unsigned long int. Глюк в Proteus-е
|
odn2003 |
Микроконтроллеры, АЦП, память и т.д |
2 |
11.05.2008 12:14 |
Вопрос по отладке в Proteus си-кода от PIC-C
|
vly67 |
Микроконтроллеры, АЦП, память и т.д |
1 |
10.10.2007 04:32 |
Часовой пояс GMT +4, время: 03:48.
|
|