22.05.2015, 19:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Заработало! И I2C заработал.
Код:
|
U8 opt2_default_setup(){
U8 ret = 0;
U8 val = OPT2 | 0x40;
if(OPT2 & 0x40) return 0;
disableInterrupts();
FLASH_CR2 = 0x80; // enable write OPT
FLASH_NCR2 = ~0x80;
if(!unlock_EEPROM()){ret = 1; goto out;}
if(!(FLASH_CR2 & 0x80)){ret = 3; goto out;}
// set AFR6 in OPT2 & reset in NOPT2
OPT2 = val;
NOPT2 = ~val;
lock_EEPROM();
FLASH_CR2 &= ~0x80; // disable write OPT
FLASH_NCR2 |= 0x80;
ret = 2;
out:
enableInterrupts();
return ret;
} |
Вот же сволочи! Не написали в даташите, что нельзя читать регистры FLASH_CR2/FLASH_NCR2 при записи! Поэтому конструкция |= &= не меняла содержимое регистра и option bytes не разлочивались!
А в таком виде работает.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.05.2015, 20:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Рано радовался: данные отправляются с ошибкой (почему-то ожидание флага BTF по таймауту вываливается, или таймаут маловат?)
И при приеме получаю 0. Видимо, действительно, нужно из errata "патчик" использовать (отрубать прерывания на время приема).
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.05.2015, 21:51
|
|
Заблокирован
Регистрация: 15.04.2010
Адрес: Ижевск
Сообщений: 388
Сказал спасибо: 24
Сказали Спасибо 45 раз(а) в 35 сообщении(ях)
|
Re: FAQ по STM8
можно попробовать уменьшить скорость
воткнуть i2c монитор (на usbee sd dx ax sx pickit serial analyzer usb-i2c )
Последний раз редактировалось selevo; 22.05.2015 в 22:01.
|
|
|
|
23.05.2015, 10:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Итак, I2C заработал. Но как-то хреново: команды на si7005 отправляются исправно (судя по поллингу флага !RDY в процессе ожидания окончания преобразования), а вот считывается какое-то говно. То ли лыжи не едут...
Надо будет еще с какой-нибудь платкой на I2C проверить. А то, скажем, вместо ID=0x50 я получаю 0 до начала преобразований и 1 после. Вместо температуры/влажности тоже хрень какая-то с нулевым старшим байтом.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
23.05.2015, 12:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: FAQ по STM8
OPTION из IAR SRM8 тоже пишется..
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
23.05.2015, 13:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: FAQ по STM8
В ИАРе и отладчик есть... Там за день можно написать и отладить...
Но здесь только анально огороженный хардкор...
|
|
|
|
30.05.2015, 13:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Ура, товарищи! Свершилось! Я таки осилил аппаратный I2C на STM8: SI7005 заработал!!!
Косяки были в том, что я по умолчанию всегда после отправки write писал STOP, хотя при чтении регистров этот STOP нафиг не нужен. Добавил флаги (писать ли STOP после write и ждать ли на read освобождения линии), а также малость отрихтовал макросы (оказалось, что препроцессору sdcc до gcc как раком до Пекина: если бы ассемблерный результат не посмотрел, долго бы гадал, чего он BTF никак не дождется).
Теперь остается еще написать программный I2C, и можно будет на "вольтметры" переносить.
P.S. Барометра у меня нет, так что проверить не могу. Пока щелкал, кажет не хуже 0.3% (что невероятно).
Температуру кажет с STD=0.01% (что вообще невероятно), думаю, все-таки брехать он будет неплохо. Но это нужно по поверенному термометру проверять.
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 30.05.2015 в 13:32.
|
|
|
|
03.06.2015, 20:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
Я таки осилил аппаратный I2C на STM8: заработал!!!
Косяки были в том, что я по умолчанию всегда после отправки write писал STOP, хотя при чтении регистров этот STOP нафиг не нужен.
|
а вот тут я не совсем понял, а зачем "write" "при чтении регистров" ?? обычно, сначала WRITE для установки адреса, STOP а потом READ...
Сообщение от eddy
|
Теперь остается еще написать программный I2C.
|
я написал на асме внутри функци, только на СИ на 16 мгц скорость 400 кгц I2C не успевает...
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 03.06.2015 в 20:50.
|
|
|
|
03.06.2015, 21:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от picavr
|
а зачем "write" "при чтении регистров" ?
|
А как отправить номер устройства и адрес регистра без write?
Сообщение от picavr
|
STOP а потом READ...
|
Нет, SI7005 требует, чтобы перед READ не было STOP, иначе будет считан нулевой регистр.
Сообщение от picavr
|
на СИ на 16 мгц скорость 400 кгц I2C не успевает...
|
На STM8 400кГц если и будет работать, то исключительно аппаратный. Но мне нафиг не надо. Можно и 10кГц сделать — какая нафиг разница? Устройство-то одно!
А программный и на 100кГц может не завестись. Но посмотрим, как там таймер будет успевать прерывания обрабатывать.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
03.06.2015, 22:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: FAQ по STM8
У меня на АТ89С2051 и генераторе 24 МГц (2 мипса) было за 100 кГц... Пришлось нопы добавлять
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:29.
|
|