26.10.2012, 23:02
|
#21
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: DS18B20 и два ПИКа
Сообщение от mimuh64
|
Но я про Си, просто про Си. Если просто писать на Си то есть различия...
|
Разработчик, в первую очередь, должен понимать, что делает и знать возможности применяемого железа. Если длительность машинного цикла больше требуемой задержки, то её при данных условиях не сформировать никак.
Сообщение от mimuh64
|
Там есть пример как выглядит delay_us(1) после компиляции (это например для boostc).
|
Да какая разница, под какой компилятор.
Сообщение от mimuh64
|
...Так что дело не в либе, так написаны паузы...
|
А они разве не библиотечные?
Напишите свою либу, учитывающую эти тонкости и проблема уйдёт.
Раз и навсегда.
Последний раз редактировалось omercury; 26.10.2012 в 23:07.
|
|
|
|
26.10.2012, 23:11
|
#22
|
Прописка
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
|
Re: DS18B20 и два ПИКа
Сообщение от omercury
|
Разработчик, в первую очередь, должен понимать, что делает и знать возможности применяемого железа. Если длительность машинного цикла больше требуемой задержки, то её при данных условиях не сформировать никак. Да какая разница, под какой компилятор. Напишите свою либу, учитывающую эти тонкости и проблема уйдёт.
|
Лично я понимаю, поэтому у меня все работает. и на ПИКах и на АВР (я пишу что для тех, что для других...)
С Вами тяжело общаться... Вы кроме себя никого не слышите...
Про библиотеку объясняйте ТС, а не мне, для себя, я использую то что мне нужно. А другие должны понять что спрятано в стандартных либах, а отсюда и понимать почему у них не работает.
Я спать пошел, спокойной ночи...
|
|
|
Сказали "Спасибо" mimuh64
|
|
|
28.10.2012, 00:13
|
#23
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: DS18B20 и два ПИКа
компилятор CCS очень точно составляет задержки delay
вместо delay_us(1) - nop
вместо delay_us(2) - nop nop
delay_us(60) - шестидесятикоммандный цикл
прерывания я не использую, компараторы отключены, 4 и 14 МГц - опечатки нет
немного корректировал паузы 1-10-50 2-8-60 мкс и др.
а результата так и нет
: - (
|
|
|
|
28.10.2012, 02:58
|
#24
|
Гражданин KAZUS.RU
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 612
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
|
Re: DS18B20 и два ПИКа
Может быть не в задержках дело?
покажите код, если есть возможность.
не так может быть, к примеру, вот это:
Сообщение от yellow87
|
...
Потом тот же самый код залил в ПИК12Ф629 с записью измерений во флэш, получил все результаты=255...
|
если вы пишете в EEPROM(вы наверно, очепятались, написав "во флэш"), а затем читаете из нее и выводите на индикатор - то, в случае неудачной записи - в ячейке памяти остаётся 0xFF( если я не ошибаюсь). но, это - как вариант...
Последний раз редактировалось rubel; 28.10.2012 в 03:08.
|
|
|
|
28.10.2012, 18:13
|
#25
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
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 ![Горд собой](images/smilies/icon_dovl.gif) ;
}
|
|
|
|
28.10.2012, 20:52
|
#26
|
Прописка
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
|
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.
|
|
|
|
28.10.2012, 23:28
|
#27
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: DS18B20 и два ПИКа
я убирал delay_us(1)
ведь и без него во время проверки шина прижата к нулю
(вернул потом просто для читабельности)
delay_us(15) на 10 менял(это я ещё в самом вопросе указал)
А чтобы изменить TRIS нужно перейти в другой банк, а output_bit(PIN_A5, 1); именно так и устроен
|
|
|
|
28.10.2012, 23:35
|
#28
|
Прописка
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
|
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.
|
|
|
|
29.10.2012, 02:13
|
#29
|
Гражданин KAZUS.RU
Регистрация: 24.11.2006
Адрес: ДНР
Сообщений: 612
Сказал спасибо: 553
Сказали Спасибо 314 раз(а) в 142 сообщении(ях)
|
Re: DS18B20 и два ПИКа
Сообщение от mimuh64
|
...Что-то после увиденного output_bit(PIN_A5, 1); есть сомнения что все работало ранее правильно...
|
Могло и работать, ведь в PIC16F876A имеется порт с OK - RA4, кажись...
|
|
|
|
29.10.2012, 03:38
|
#30
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: DS18B20 и два ПИКа
В PIC16F876A я использовал PIN_C5
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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.
|
|