13.11.2011, 15:25
|
|
Временная регистрация
Регистрация: 04.01.2008
Сообщений: 93
Сказал спасибо: 19
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Отладочные платы для STM32
Сообщение от Easyrider83
|
Если возвращает два одинаковых - значит ошибка.
|
А в каком случае он может возвратить два одинаковых, вот что я имел ввиду? Или на эти ошибки можно не обращать внимания?
|
|
|
|
13.11.2011, 15:44
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Отладочные платы для STM32
Сообщение от CMaxx22
|
А в каком случае он может возвратить два одинаковых, вот что я имел ввиду?
|
Ну теоретически на ум приходит две причины - физические ошибки передачи (шумная линия, слабая подтяжка, не точно подобраны временные интервалы).
Только что опробовал симмуляцию в протеусе с восемью датчиками. Сейчас красиво оформлю и пришлю для ознакомления.
Сообщение от CMaxx22
|
Или на эти ошибки можно не обращать внимания?
|
Ни в коем случае. Это критические ошибки. По ним мы собственно и будем диагностировать шину на стабильность.
Последний раз редактировалось Easyrider83; 13.11.2011 в 15:49.
|
|
|
|
13.11.2011, 16:32
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Отладочные платы для STM32
Ну вот. Я загнан в тупик. Ошибка аналогичная. Что-то процедура делает не так, как надо. Я слегка простудился и голова варит с трудом. Может быть из общественности кто поможет.
Удивительно то, что пример лабцентра C:\Program Files\Labcenter Electronics\Proteus 7 Professional\SAMPLES\VSM for AVR\One-Wire\NETWORK ничем не отличается от того, что делаем мы. Только у них работает, а у нас нет )))
Думаю, проблема во временных интервалах. Будем думать.
Последний раз редактировалось Easyrider83; 13.11.2011 в 17:03.
|
|
|
|
13.11.2011, 18:56
|
|
Временная регистрация
Регистрация: 04.01.2008
Сообщений: 93
Сказал спасибо: 19
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Отладочные платы для STM32
А я уже спаял всё в один кусок чтобы исключить возможность шумной шины Всё равно показывает 3 ошибки. У вас такаяже неполадка, показывает ошибки на шине?
Вот пытаюсь вкуриться в это:
Цитата:
|
Микроконтроллер выполняет инициализацию 1-Wire устройств и посылает команду SEARCH ROM, которая инициирует цикл чтения 64 разрядного кода. Затем он формирует на 1-Wire шине два тайм слота чтения, в течение которых датчики DS18B20 должны выдать первый бит своего адреса и его инвертированное значение.
Если испускаемый бит адреса у всех датчиков один и тот же, например, единица, тогда в первый тайм слот микроконтроллер примет единицу, а во второй ноль.
Если испускаемый бит адреса у одного или нескольких датчиков отличается, например, у первого датчика бит – единица, у второго – ноль, тогда в оба тайм слота микроконтроллер примет ноль. Почему? Потому что датчики подключены к шине по схеме монтажного И, а значит логический ноль «перетянет» логические единицы.
Если на шине активных устройств нет - микроконтроллер в оба тайм слота примет единицу.
В ситуации, когда микроконтроллер принимает два нуля, возникает неоднозначность – непонятно у каких датчиков DS18B20 преданный бит адреса ноль, а у каких единица. Чтобы устранить эту неоднозначность микроконтроллер должен ответить датчикам, с какими из них он будет продолжать работу. Для этого он выставляет на шине соответствующий бит — ноль или единицу.
|
Эти 3 ошибки случайно не те самые неоднозначности?
|
|
|
|
13.11.2011, 20:12
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Отладочные платы для STM32
Да похоже на то. Вы совершенно правы. У меня поднялась температура я и уже совсем плохо соображаю. Так что попробуйте сами исправить процедуру. Я приду на помощь, когда немного полегчает.
|
|
|
|
13.11.2011, 21:48
|
|
Временная регистрация
Регистрация: 04.01.2008
Сообщений: 93
Сказал спасибо: 19
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Отладочные платы для STM32
Хорошо я попробую. Выздоравливайте!
|
|
|
|
13.11.2011, 23:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Отладочные платы для STM32
Сообщение от Easyrider83
|
Думаю, проблема во временных интервалах. Будем думать.
|
Откуда там проблеммы? Пишется по даташиту и всё работает. А шумы откуда. У вас что там.. километровые линии? ... с 20 датчиками на линии поиск работает до 50 метров устойчиво.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 13.11.2011 в 23:16.
|
|
|
|
13.11.2011, 23:53
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Отладочные платы для STM32
picavr, я знаю все это. Ошибка в работе функции unsigned int DS1822_Search_Rom (unsigned long PIN, char sens_num)
Пока не могу догнать, как исправить.
|
|
|
|
14.11.2011, 10:21
|
|
Временная регистрация
Регистрация: 04.01.2008
Сообщений: 93
Сказал спасибо: 19
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Отладочные платы для STM32
Не могу раскурить. Плохо тянется. Вот функция поиска адреса которая тоже возвращает неоднозначность:
Цитата:
|
unsigned char OWI_SearchRom(unsigned char * bitPattern, unsigned char lastDeviation, unsigned char pin)
{
unsigned char currentBit = 1;
unsigned char newDeviation = 0;
unsigned char bitMask = 0x01;
unsigned char bitA;
unsigned char bitB;
// Send SEARCH ROM command on the bus.
OWI_SendByte(OWI_ROM_SEARCH, pin);
// Walk through all 64 bits.
while (currentBit ‹= 64)
{
// Read bit from bus twice.
bitA = OWI_ReadBit(pin);
bitB = OWI_ReadBit(pin);
if (bitA && bitB)
{
// Both bits 1 (Error).
newDeviation = OWI_ROM_SEARCH_FAILED;
return SEARCH_ERROR;
}
else if (bitA ^ bitB)
{
// Bits A and B are different. All devices have the same bit here.
// Set the bit in bitPattern to this value.
if (bitA)
{
(*bitPattern) |= bitMask;
}
else
{
(*bitPattern) &= ~bitMask;
}
}
else // Both bits 0
{
// If this is where a choice was made the last time,
// a '1' bit is selected this time.
if (currentBit == lastDeviation)
{
(*bitPattern) |= bitMask;
}
// For the rest of the id, '0' bits are selected when
// discrepancies occur.
else if (currentBit › lastDeviation)
{
(*bitPattern) &= ~bitMask;
newDeviation = currentBit;
}
// If current bit in bit pattern = 0, then this is
// out new deviation.
else if ( !(*bitPattern & bitMask))
{
newDeviation = currentBit;
}
// IF the bit is already 1, do nothing.
else
{
}
}
// Send the selected bit to the bus.
if ((*bitPattern) & bitMask)
{
OWI_WriteBit1(pin);
}
else
{
OWI_WriteBit0(pin);
}
// Increment current bit.
currentBit++;
// Adjust bitMask and bitPattern pointer.
bitMask ‹‹= 1;
if (!bitMask)
{
bitMask = 0x01;
bitPattern++;
}
}
return newDeviation;
}
|
Как видно она поболее нашей В основном изза комментов.
А эта по идее должна обрабатывать неоднозначности и заносить проверенные номера в массив:
Цитата:
|
unsigned char OWI_SearchDevices(OWI_device * devices, unsigned char numDevices, unsigned char pin, unsigned char *num)
{
unsigned char i, j;
unsigned char * newID;
unsigned char * currentID;
unsigned char lastDeviation;
unsigned char numFoundDevices;
unsigned char flag = SEARCH_SUCCESSFUL;
//сбрасываем адреса 1Wire устройств
for (i = 0; i ‹ numDevices; i++)
{
for (j = 0; j ‹ 8; j++)
{
devices[i].id[j] = 0x00;
}
}
numFoundDevices = 0;
newID = devices[0].id;
lastDeviation = 0;
currentID = newID;
do
{
memcpy(newID, currentID, ;
if (!OWI_DetectPresence(pin)){
return SEARCH_ERROR;
};
lastDeviation = OWI_SearchRom(newID, lastDeviation, pin);
currentID = newID;
numFoundDevices++;
newID=devices[numFoundDevices].id;
} while(lastDeviation != OWI_ROM_SEARCH_FINISHED);
// Go through all the devices and do CRC check.
for (i = 0; i ‹ numFoundDevices; i++)
{
// If any id has a crc error, return error.
if(OWI_CheckRomCRC(devices[i].id) != OWI_CRC_OK)
{
flag = SEARCH_CRC_ERROR;
}
else
{
(*num)++;
}
}
// Else, return Successful.
return flag;
}
|
Не хватает мозга перенести это в проект. Похоже нужно писать ещё одну процедуру для обработки неоднозначностей...
|
|
|
|
19.11.2011, 15:30
|
|
Вид на жительство
Регистрация: 15.03.2005
Сообщений: 381
Сказал спасибо: 11
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
|
Re: Отладочные платы для STM32
А что общественность думает о такой http://www.ebay.com/itm/ARM-NXP-LPC1...item1c16b91fd6 плате?
Я так понял отладчик в нее уже встроен и jlink не нужен для нее?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:06.
|
|