1kostik1976 писал(а):Фузы выставлял так...
CKDIV8
SUT1
CKSEL1
SPIEN
на эти поставил "галочки",
на остальные "галочки" не ставил.
Кварц не работает-на нем нет генерации...А хочется чтоб работал...
CKDIV8 убери,попробуй прочитать фьюзы-должно работать
чтоб не переставлять мк туда-сюда можно программировать внутрисхемно
CKDIV8 убери - убирал-не помогло (кажется убирал...)
можно программировать внутрисхемно - да, знаю... Какие-то переходики к программатору есть, но по моему под микрочип. Завтра по возможности почитаю описалово на программатор (на работе играюсь...). В ближайших планах слепить домашний программатор юсб...
rus084 писал(а):почему оператор toggle неработает через if then во 2 уровне ветвлений ?
Непонятен вопрос. Пример кода приведите пожалуйста
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
if u<480 or i>511 then
config portb.4 = output
if <480 and i>511 then
toggle portb.4
else
if i>511 then
portb.4 = 1
else
portb.4 = 0
end if
end if
else
config portb.4 = input
endif
if u<480 or i>511 then
config portb.4 = output
if <480 and i>511 then
toggle portb.4
else
if i>511 then
portb.4 = 1
else
portb.4 = 0
end if
end if
else
config portb.4 = input
endif
Пока вижу несколько неточностей в написании, на мой взгляд. Попробуйте так:
if u<480 or i>511 then
config portb.4 = output
if переменная?<480 and i>511 then
toggle portb.4
elseif i>511 then
portb.4 = 1
else
portb.4 = 0
end if
else
config portb.4 = input
endif
Всей вашей задумки не знаю при каких условиях что и как должно настраиваться и работать. Возможно можно вообще эту часть переписать иначе
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
'***********************************************
Soprot: ' измерение сопротивления
Nomer = 0
Start Adc
Cls
Rele = 1 'включаем реле подключаем питание форсунок к источнику тока
Lcd "д1 д2 д3 д4" 'лсд- "ф1 ф2 ф3 ф4"
F1 = 1 'подключаем форсунку № 1
Call Test 'уходим измерять сопротивление
Izm1 = Izmn 'присваиваем измеренное значение первой форсунке
Locate 2 , 1
Lcd Izm1 'выводим на индикатор сопротивление под символом "ф1"
F1 = 0 'отключаем первую
F2 = 1 'включаем вторую
Call Test
Izm2 = Izmn 'тоже с остальными
Locate 2 , 5
Lcd Izm2
F2 = 0
F3 = 1
Call Test
Izm3 = Izmn
Locate 2 , 9
Lcd Izm3
F3 = 0
F4 = 1
Call Test
Izm4 = Izmn
Locate 2 , 13
Lcd Izm4
Vpusk = 0
F1 = 1 'устанавливаем в 1 для дальнейшей работы
F2 = 1
F3 = 1
F4 = 1
Imp = 0
Menu = 9 '9 чтобы остались показания на индикаторе после измерения
Goto Nachalo
Sub Test 'измеряем
Incr Nomer 'прибавляем каждый раз по еденице чтобы в случае неисправности
Wait 1 'вывести номер неисправной форсунки
Izmn = Getadc(0)
Izmn = Izmn - 134 'вычитаем для компенсации перехода транзистора (возможно надо подобрать)
Izmn = Izmn / 2 'чтобы было в Омах
Там где 14 11 6 17 сразу после второй цифры был знак "Омега"
И еще добавить коректировку компенсации перехода транзистора в каждый канал, а не общая для всех.
Лучше так, чтоб я добавил цифру со знаком, например +2 или -1 (Ом) и оно учитывалось при выводе на дисплей.
Помогите разобраться. Написал программу выводящую температуру и пр ерунду на экран. Добавил потом также функцию тахометра. Экран использую нокия 3310. Так вот как только добавил тахометр и разрешил преывание по захвату на экране начинает творится неизвестно что, все символы сбиваются и плывут. В чем может быть проблема?
Dnepr_1186 писал(а):Помогите разобраться. Написал программу выводящую температуру и пр ерунду на экран. Добавил потом также функцию тахометра. Экран использую нокия 3310. Так вот как только добавил тахометр и разрешил преывание по захвату на экране начинает творится неизвестно что, все символы сбиваются и плывут. В чем может быть проблема?
сам нарывался на подобное,решилось так-перед тем как обратиться к индикатору надо запрещать прерывания,вроде стало боле-менее,но глюки иногда выскакивали,попробуйте так же
Павел, спасибо! Действительно помогло! В протеусе все работает на ура. Частота измняется при подаче сигнала от генератора как надо.
А вот в железе, идет погрешность 1-3герца, в основнмо на частотах выше 15герц. Из за чего это? Из за вмешательства в прерывание? Или все же является следствием того что я использую внутренний генератор мк а не кварц?
видимо просто пропуски прерываний раз мы их отключили,как вариант можно попробовать делать наоборот-создаем переменную flag as bit,ставим метку label перед тем местосм,где начинается обращение к индикатору,как только наступил момент когда идет обращение к индикатору флаг=1(дошли до метки),когда индикатор обновился флаг=0(перед loop в вашем случае),так вот-когда наступает прерывание то в его конце проверяем флаг,если он =1===индикатор не обновился до конца и снова идем на обновление индикации-нашу метку
.........
Dim flag as bit
............
Ee = Str(fff)
Ee = Ee + " "
End If
label:
flag=1
Call D3310position(1 , 0)
Call D3310print( "ENGINE TEMP:")
Call D3310position(1 , 1)
Call D3310print( "LEFT:")
Call D3310position(8 , 1).....
flag=0
loop
..........
Capt: 'обработка прерывания
Timcount = Capture1 'считывание из регистра захвата
Timer1 = 0 'сброс таймера
if flag=1 then goto label
Return
примерно так-надо сидеть,пробовать
нет, с флагами не прокатывает. Я думаю ведь время обращения к экрану у нас всегда одинаковое. Возможно надо просто ввести поправочный коэфициент для частоты, чтобы показания установились правильно
это тах для машины или какого-то пропеллера ? Если для машины, то рекомендую производить серию замеров, типа 10 захватов, потом суммируем и делим на 10 - в железе(на авто) работает стабильней. А с одним измерением красиво только от генератора импульсов на столе получается, а на реальном авто неравномерность всетаки какая-то, а по усредненному уже ближе к теме. Ds18b20 тоже не любит прерываний в момент своего общения и иногда можете ересь показывать.
Да и вобще выводить данные на экран достаточно раз в 1-2сек., и на это время отключать замер частоты - ничего страшного не случится
Приветствую всех. У меня такая проблема: надо сделать терморегулятор для управления ТЭНом. В принципе прога работает, но никак не могу победить подпрограмму настройки температуры срабатывания. Надо, чтобы был виден процесс установки температуры. В программировании я новичок, поэтому прошу подсказать, как мне победить этого зверя. Условия работы девайса: интервал темп. - от 10 до 60град. , индикатор с ОК, двухразрядный, выводятся только целые числа.
Просто нужно синхронизировать работу таймера и индикации и всё.
Индикацию выводить после срабатывания прерывания по таймеру.
Т.е. по прерыванию ставим флаг. В цикле выводим индикацию по флагу, и сбрасываем флаг.Дальше ждём следующего прерывания
Времени на индикацию хватит.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Я опять по поводу термостата. Не могу понять, как прикрепить файлы к своему сообщению - схема.jpeg и прога.bas. А то без этого трудно понять, чего я добиваюсь.