Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 10.01.2009, 02:04  
Alexandr_Il
Частый гость
 
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alexandr_Il на пути к лучшему
По умолчанию

Сообщение от urry
выделите регистр и меняйте биты в нем, а потом его весь выдавайте в порт.
ну.. оно конечно можно так извратиться.., но мне хотелось бы понять, это глюк протеуса или особенность данного контроллера? или компилятора..

Суть в том, что такая обработка сильно усложнит мне жизнь.. мне в дальнейшем нужно будет расчитывать время накопления энергии в катушке зажигания, чтобы еще до переключения сигнала успеть заранее накопить энергию в катушке, чтобы в момент переключения уже могла проскочить искра в свече...
Реклама:
Alexandr_Il вне форума  
Непрочитано 10.01.2009, 02:25  
lyk
Гражданин KAZUS.RU
 
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
lyk на пути к лучшему
По умолчанию

Сообщение от Alexandr_Il
Неа.. с temp=GPIO он не сбрасывает флаг GPIF и тут же заходит обратно в прерывание.. Я ж вижу, что с GPIF = 0 он корректно выходит и заходит в прерывание.
А с какого перепугу эта строка должна флаг сбросить.
Если посмотреть в даташит, то наверно надо так:
temp = GPIO;
GPIO = temp;
GPIF = 0;
Ну насчет GP3/MCLR, то независимо от настроек без резюка навесного МК запустить у меня не получилось, может у тебя получится.
lyk вне форума  
Непрочитано 10.01.2009, 02:42  
lyk
Гражданин KAZUS.RU
 
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
lyk на пути к лучшему
По умолчанию

Сообщение от Alexandr_Il
ну.. оно конечно можно так извратиться.., но мне хотелось бы понять, это глюк протеуса или особенность данного контроллера? или компилятора..
Несомненно глюков везде хватает, но сюда еще надо добавить глюк программера
lyk вне форума  
Непрочитано 10.01.2009, 09:21  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Относительно даташита - Вам сделали правильное замечание. Итак, "на пальцах" - напряжение логического "0" в пиках - 3,5 вольта и ниже. Изменение состояния порта происходит по принципу - чтение -модификация - запись. Пусть Вы выдали на ножку 1 и под влиянием нагрузки напряжение на этой ноге упало до 3 с половиной вольт. В этом случае, когда Вы меняете соседнюю ногу, то в порт читается значение этой ноги - 3,5 - как логический 0.
Поэтому значение меняется - порт становится в логический 0.
Это же касается и измененения трис.
__________________
warez
urry вне форума  
Непрочитано 10.01.2009, 11:32  
Alexandr_Il
Частый гость
 
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alexandr_Il на пути к лучшему
По умолчанию

Сообщение от 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›
Alexandr_Il вне форума  
Непрочитано 10.01.2009, 11:35  
Alexandr_Il
Частый гость
 
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alexandr_Il на пути к лучшему
По умолчанию

Сообщение от urry
Изменение состояния порта происходит по принципу - чтение -модификация - запись.
Вот тут похоже в протеусе и глючок.. Когда я читаю из порта, который настроен на выход командой
temp = GPIO
у меня читаются все 0, соответственно и симмулятор видимо тоже читает все 0, поэтому и сбрасывает все выходы..
Alexandr_Il вне форума  
Непрочитано 10.01.2009, 13:05  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Глюк в модели есть - ну как же без него - например, не сбрасывается сторожевой таймер - Вот в приложении ясно видно, что глючит. А относительно - запись всего в порт - я уже ставлю регистр туда автоматом - а в 18 серии выделены специальные регистры LAT именно для этой цели.
Васик я не знаю и честно говоря, знать не хочу...Дизайн в приложении.
И тема, млин, неубиваемая...
http://www.microchip.su/showthread.p...1975#post51975

Прикрепленный файл: 4292561.rar
__________________
warez
urry вне форума  
Непрочитано 10.01.2009, 14:34  
lyk
Гражданин KAZUS.RU
 
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
lyk на пути к лучшему
По умолчанию

Сообщение от Alexandr_Il
Вот тут похоже в протеусе и глючок.. Когда я читаю из порта, который настроен на выход командой
temp = GPIO
у меня читаются все 0, соответственно и симмулятор видимо тоже читает все 0, поэтому и сбрасывает все выходы..
Я тебе уже писал, перед тем как назначать какой вывод порта вход/выход надо определить в каком режиме твои входы/выходы будут работать- аналог/цифра. Записи в TRISIO не достаточно! Надо CMCON=0x07; перед этим написать для цифры. Читай даташит, на микрочип.ру есть перевод на этот МК.
Научишся правильно писать протеус меньше глючить будет.
А чем MPLab тебе не нравиться? Отлажуй в нем. Есть конвертор файлов микроэлектроники в MPLabовский ASM.
lyk вне форума  
Непрочитано 10.01.2009, 23:18  
Alexandr_Il
Частый гость
 
Регистрация: 09.11.2008
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alexandr_Il на пути к лучшему
По умолчанию

Сообщение от lyk
Я тебе уже писал, перед тем как назначать какой вывод порта вход/выход надо определить в каком режиме твои входы/выходы будут работать- аналог/цифра. Записи в TRISIO не достаточно! Надо CMCON=0x07; перед этим написать для цифры. Читай даташит, на микрочип.ру есть перевод на этот МК.
Да.. даташит надо внимательно читать..

В общем, все заработало, действительно нужно было вначале перевести выходы в цифровой режим.. Иначе, когда пик читает сигнал из GPIO перед изменением, получает 0 по всем выходам..
Только за это отвечает 4 младшие бита регистра ANSEL..
Регистр CMCON отвечает за компаратор, который тоже отключать нужно.
Alexandr_Il вне форума  
Непрочитано 11.01.2009, 00:12  
lyk
Гражданин KAZUS.RU
 
Регистрация: 20.05.2005
Сообщений: 659
Сказал спасибо: 40
Сказали Спасибо 186 раз(а) в 116 сообщении(ях)
lyk на пути к лучшему
По умолчанию

Сообщение от Alexandr_Il
Только за это отвечает 4 младшие бита регистра ANSEL..
Регистр CMCON отвечает за компаратор, который тоже отключать нужно.
Угу, забыл что на твоем ацп есть, спутал с 629, но на этом твои мучения с этим камнем еще не закончились...
lyk вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot