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

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

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

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

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

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


 
Опции темы
Непрочитано 19.05.2015, 12:25  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

Там i2c прекрасно на прерываниях работает.
Хотя я скинул коды из готового проекта, который уже полтора года без выключения трудится. ))
Реклама:

Последний раз редактировалось Easyrider83; 19.05.2015 в 12:29.
Easyrider83 вне форума  
Непрочитано 19.05.2015, 12:40  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

Ну вот, там работает, а у меня почему-то не заводится.
Хотя вроде бы все правильно сделал: настроил PB4/PB5 на opendrain выходы; установил их в 1; настроил тайминги (как в даташите + в примерах от STM аналогично сделано), запустил I2C. А вот при отправке ничего не выходит, хоть я и сделал как у STM (т.е. при поллинге флага BUSY устанавливаю флаг STOP): цикл по таймауту завершается, BUSY так и остается == 1.

В общем, похоже, надо делать софтовый I2C, коли осилить аппаратный не получается.
__________________
Союз Советских Социалистических Округов Северной Америки

Последний раз редактировалось eddy; 19.05.2015 в 12:42.
eddy вне форума  
Непрочитано 19.05.2015, 12:45  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

Не кипиши. Давай свой проект. Может кто попробует у себя его? Я пока не могу. В Швеции в командировке.
Easyrider83 вне форума  
Непрочитано 19.05.2015, 12:48  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: FAQ по STM8

Лапки-то выжили?
Светиками попробуй помигать сначала, от питания к земле подёргать.

Вдруг статика....
omercury вне форума  
Непрочитано 19.05.2015, 13:05  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

Попробую ногами подрыгать. Действительно - вдруг спалил (хотя как?)
Я сейчас на работе, а домашний компьютер выключен - пока файлы скинуть не могу. Вечерком дам ссылку.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 19.05.2015, 13:47  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

Вот - код на сосфорже.
Собственно, инициализация:
Код:
void i2c_setup(){
    // configure pins: PB5 - I2C_SDA; PB4 - I2C_SCL (both opendrain)
    PORT(PB, ODR) |= GPIO_PIN4|GPIO_PIN5; // set to 1
    PORT(PB, DDR) |= GPIO_PIN4|GPIO_PIN5;
    PORT(PB, CR2) |= GPIO_PIN4|GPIO_PIN5; // fast mode
    // Don't forget to connect pullup resistor to I2C foots
    I2C_FREQR = 8; // 8MHz fmaster
    I2C_TRISER = 9; // rise time 1000ns
    I2C_CCRL = 0x28; // 100kHz
    I2C_CCRH = 0;
    I2C_ITR = 0; // disable all I2C interrupts
    I2C_CR2 |= 4; // ACK
    I2C_CR1 |= 1; // enable I2C
}
А вот так я пытаюсь один байт отправить:
Код:
 
static U16 _c;
#define I2C_WAIT(evt) do{for(_c = 0; _c ‹ 16000; _c++){ \
        if(evt) break;} if(_c == 16000) return ret;}while(0)
 
static U8 _d;
#define I2C_LINEWAIT() do{ for(_d = 0; _d ‹ 16; _d++){\
        if(!(I2C_SR3 & 2)) break; I2C_CR2 |= 2;\
        for(_c = 0; _c ‹ 1000; _c++) if(!(I2C_CR2 & 2)) break;} \
        if(_d == 16) return I2C_LINEBUSY; }while(0)

i2c_status i2c_7bit_send_onebyte(U8 data){
    i2c_status ret = I2C_TMOUT;
    I2C_LINEWAIT();
    I2C_CR2 |= 1; // send START
    I2C_WAIT(I2C_SR1 & 1); // wait for SB
    I2C_DR = addr7w;
    ret = I2C_NOADDR;
    I2C_WAIT((I2C_SR1 & 2) || I2C_SR2); // wait for ADDR
    if(I2C_SR2){ // NACK or other error
        ret = I2C_NACK;
        goto endoftransmission;
    }
    ret = I2C_HWPROBLEM;
    if(!(I2C_SR3 & 4)) goto endoftransmission; // interface is in receiver mode
    I2C_WAIT((I2C_SR1 & 0x80) || I2C_SR2); // wait for TXE
    if(I2C_SR2){
        ret = I2C_NACK;
        goto endoftransmission;
    }
    I2C_DR = data; // send data
    I2C_WAIT((I2C_SR1 & 0x84 == 0x84) || I2C_SR2); // wait for TXE & BTF
    if(!I2C_SR2) ret = I2C_OK;
    else ret = I2C_NACK;
endoftransmission:
    I2C_SR2 = 0; // clear all error flagss
    I2C_CR2 |= 2; // set STOP
    while(I2C_CR2 & 2); // wait for STOP sent
    return ret;
}
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 19.05.2015, 13:56  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: FAQ по STM8

Уже 10027627989 раз говорили, И2ЦЭ самый задротный, от рождения, априори. Тебе же не 4Мбит гонять туда-сюда, делай софтовый и не мучайся. Это если слэйв, тогда да, а на мастере - нефиг и мозги парить, оно того не стоит.
STM32F0 вне форума  
Непрочитано 19.05.2015, 20:08  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от STM32F0 Посмотреть сообщение
нефиг и мозги парить, оно того не стоит.
Вот вот, я тоже так решил и сразу написал софтверный, правда внутри все функции полностью на ассемблере )))
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Непрочитано 19.05.2015, 20:34  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: FAQ по STM8

С софтовым I2C другая проблема может возникнуть, схожая с аппаратным: если изделие уже распаяно, то может оказаться так, что доступные для софтового I2C ноги уже использованы. Хотя, надо отдать должное разработчикам: даже на 20-ногом STM8S003 чуть ли не половина ног подключена к таймерам.
Жаль вот только, что DMA нет: на высоких скоростях МК тупо повиснет в обработчиках прерываний.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 19.05.2015, 20:37  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FAQ по STM8

Под I2C использованы ноги с пометкой (Т), а не (HS), что означает открытый коллектор. Вообще все должно работать и с хардваром. Разбираться надо. Нельзя убегать от проблем.
Easyrider83 вне форума  
 

Закладки

Метки
arm, cortex, stm32, stm8
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импульсная зарядка для авто-аккумуляторов (новодел) Falconist Источники питания и свет 1915 14.03.2024 19:56
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
STM8(S/L), первые впечатления kison STM8 1423 19.05.2018 19:23
Вопросы и замечания по топику - FAQ по PROTEUS avr123-nm-ru Proteus 291 05.06.2015 20:49
FAQ Импульсный трансформатор alberio Источники питания и свет 87 13.11.2012 18:07


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


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