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

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

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

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

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

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


Закрытая тема
Опции темы
Непрочитано 26.10.2012, 23:02   #21
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

Сообщение от mimuh64 Посмотреть сообщение
Но я про Си, просто про Си. Если просто писать на Си то есть различия...
Разработчик, в первую очередь, должен понимать, что делает и знать возможности применяемого железа. Если длительность машинного цикла больше требуемой задержки, то её при данных условиях не сформировать никак.

Сообщение от mimuh64 Посмотреть сообщение
Там есть пример как выглядит delay_us(1) после компиляции (это например для boostc).
Да какая разница, под какой компилятор.
Сообщение от mimuh64 Посмотреть сообщение
...Так что дело не в либе, так написаны паузы...
А они разве не библиотечные?
Напишите свою либу, учитывающую эти тонкости и проблема уйдёт.
Раз и навсегда.
Реклама:

Последний раз редактировалось omercury; 26.10.2012 в 23:07.
omercury вне форума  
Непрочитано 26.10.2012, 23:11   #22
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

Сообщение от omercury Посмотреть сообщение
Разработчик, в первую очередь, должен понимать, что делает и знать возможности применяемого железа. Если длительность машинного цикла больше требуемой задержки, то её при данных условиях не сформировать никак. Да какая разница, под какой компилятор. Напишите свою либу, учитывающую эти тонкости и проблема уйдёт.
Лично я понимаю, поэтому у меня все работает. и на ПИКах и на АВР (я пишу что для тех, что для других...)
С Вами тяжело общаться... Вы кроме себя никого не слышите...
Про библиотеку объясняйте ТС, а не мне, для себя, я использую то что мне нужно. А другие должны понять что спрятано в стандартных либах, а отсюда и понимать почему у них не работает.
Я спать пошел, спокойной ночи...
mimuh64 вне форума  
Сказали "Спасибо" mimuh64
nicosha (29.10.2012)
Непрочитано 28.10.2012, 00:13   #23
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

компилятор CCS очень точно составляет задержки delay
вместо delay_us(1) - nop
вместо delay_us(2) - nop nop
delay_us(60) - шестидесятикоммандный цикл
прерывания я не использую, компараторы отключены, 4 и 14 МГц - опечатки нет
немного корректировал паузы 1-10-50 2-8-60 мкс и др.
а результата так и нет
: - (
yellow87 вне форума  
Непрочитано 28.10.2012, 02:58   #24
rubel
Гражданин KAZUS.RU
 
Аватар для rubel
 
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 612
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
rubel на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

Может быть не в задержках дело?
покажите код, если есть возможность.
не так может быть, к примеру, вот это:

Сообщение от yellow87 Посмотреть сообщение
...
Потом тот же самый код залил в ПИК12Ф629 с записью измерений во флэш, получил все результаты=255...
если вы пишете в EEPROM(вы наверно, очепятались, написав "во флэш"), а затем читаете из нее и выводите на индикатор - то, в случае неудачной записи - в ячейке памяти остаётся 0xFF( если я не ошибаюсь). но, это - как вариант...
Вложения:
Тип файла: rar DS_PIC12F629.rar (88.6 Кб, 90 просмотров)

Последний раз редактировалось rubel; 28.10.2012 в 03:08.
rubel вне форума  
Непрочитано 28.10.2012, 18:13   #25
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

да, rubel, именно в EEPROM
к 12Ф629 нет возможности подключить индикатор - ножек не хватает
Поэтому для проверки правильности измерений, я пока заполняю всю EEPROM результатами
затем, программатором считываю состояние EEPROM
в каждую третью ячейку записываю номер измерения, для теста самой записи
В результате получаю: 1 255 255 2 255 255 3 255 255 4 255 255 и тд до конца
.................................................. .............
#include ‹12F629.h›
#use delay(clock=4000000)
#fuses INTRC_IO, NOWDT, NOMCLR, NOPROTECT
#byte PORTA=5
#bit DS = 5.5
#bit LED = 5.4
#byte OSCCAL = 0x90

/////////////////////////////
int DS_Reset(void)
{
if(!input(PIN_A5))return 2;
output_bit(PIN_A5, 0);
delay_us(495);
output_bit(PIN_A5, 1);
delay_us(90);
i=input(PIN_A5);
delay_us(405);
if(i)return 1;
return 0;
}

///////////////////////////////
void DS_Write(int Comm)
{
for(i=0; i‹8; i++)
{
output_bit(PIN_A5, 0);
delay_us(1);
if(Comm & 1‹‹i) output_bit(PIN_A5, 1);
delay_us(60);
output_bit(PIN_A5, 1);
delay_us(2);
}
}

///////////////////////////////
int DS_Read(void)
{
int res;
res=0;
for(i=0; i‹8; i++)
{
output_bit(PIN_A5, 0);
delay_us(1);
output_bit(PIN_A5, 1);
delay_us(15);
if(input(PIN_A5)) res |= 1‹‹i;
delay_us(45);
}
return res;
}

/////////////////////////////
void main(void)
{
int o, e, ds_tempH, ds_tempL;
e=0;
OSCCAL=28;
SET_TRIS_A(0b00101111);
SETUP_COMPARATOR(NC_NC_NC_NC);
do {
o=DS_Reset();
DS_Write(0xCC);
DS_Write(0x44);
delay_ms(800);
o=DS_Reset();
DS_Write(0xCC);
DS_Write(0xBE);
ds_tempL=DS_Read();
ds_tempH=DS_Read();
if(o==2)
{
LED=1;
continue;
}
if(o==1)
{
LED=!LED;
continue;
}
LED=0;
write_eeprom(e,e);
write_eeprom(++e, ds_tempH);
write_eeprom(++e, ds_tempL);
}while(++e ‹ 12;
}
yellow87 вне форума  
Непрочитано 28.10.2012, 20:52   #26
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

output_bit(PIN_A5, 1); - как это определено? В этом месте должно быть всего лишь TRISIO5=1; (ну или как допускает CCS - настроить бит на вход). Это называется "отпустить шину". Кроме того, я бы убрал delay_us(1); вообще и delay_us(15); заменил на delay_us(10);
Прокрути все это хотя бы в Протеусе. Что-то после увиденного output_bit(PIN_A5, 1); есть сомнения что все работало ранее правильно...
Можно еще попробовать заменить PIN_A5 на PIN_A0.

Последний раз редактировалось mimuh64; 28.10.2012 в 20:55.
mimuh64 вне форума  
Непрочитано 28.10.2012, 23:28   #27
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

я убирал delay_us(1)
ведь и без него во время проверки шина прижата к нулю
(вернул потом просто для читабельности)
delay_us(15) на 10 менял(это я ещё в самом вопросе указал)
А чтобы изменить TRIS нужно перейти в другой банк, а output_bit(PIN_A5, 1); именно так и устроен
yellow87 вне форума  
Непрочитано 28.10.2012, 23:35   #28
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

Сообщение от yellow87 Посмотреть сообщение
А чтобы изменить TRIS нужно перейти в другой банк, а output_bit(PIN_A5, 1); именно так и устроен
Чтобы изменить TRIS в Си, банк за тебя переключит компилятор... если это нужно.
Обычно такие определения "output_bit(PIN, 1);" (если их писал не ты) это сначала TRIS=0 , а затем OUT - в данном случае выдача единицы, что не есть хорошо... То есть TRIS=0 - на выдачу, а нужно TRIS=1 на вход. А вот input(PIN_A5) это TRIS=1 и чтение пина...
Ты примеры выше смотрел?, там хорошо написано... Там ручками прописаны определения TRIS.

Последний раз редактировалось mimuh64; 29.10.2012 в 00:00.
mimuh64 вне форума  
Непрочитано 29.10.2012, 02:13   #29
rubel
Гражданин KAZUS.RU
 
Аватар для rubel
 
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 612
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
rubel на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

Сообщение от mimuh64 Посмотреть сообщение
...Что-то после увиденного output_bit(PIN_A5, 1); есть сомнения что все работало ранее правильно...
Могло и работать, ведь в PIC16F876A имеется порт с OK - RA4, кажись...
rubel вне форума  
Непрочитано 29.10.2012, 03:38   #30
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: DS18B20 и два ПИКа

В PIC16F876A я использовал PIN_C5
yellow87 вне форума  
Закрытая тема

Закладки


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DS18B20 Vrungel Микроконтроллеры, АЦП, память и т.д 77 30.06.2011 09:52
Дизассемблер для 24 пика SGordon Микроконтроллеры, АЦП, память и т.д 0 05.09.2008 11:37
VGA для ПИКа Popeye Микроконтроллеры, АЦП, память и т.д 0 18.08.2008 17:46
Обмен данными ПИКа с внешней флэш Boris_Britva Микроконтроллеры, АЦП, память и т.д 2 18.06.2008 11:19
Два дросселя PetroF Источники питания и свет 3 13.11.2007 12:36


Часовой пояс GMT +4, время: 13:17.


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