Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение scorpi_0n »

Ничем там не надо щёлкать. Это лишнее.
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Дык не заводится стёклышко. :( Отключил DMA и гнал вручную с CS из того же массива - всё работает. С включенным DMA идут те же пачки по 16 бит, но без CS естественно, стекло молчит.
Или трахаться и отправлять посылки по 16 байт склеенные из 9 битных?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Аlex »

Экран принимает 9 бит, а Вы ему шлёте 16. Где логика ? :dont_know:
И причём тут дёрганье CS"ом ? CS - это выбор кристалла, им дёргают только в начале и в конце передачи, выбирая конкретное устройство.
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Вы можете предложить другой вариант?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Аlex »

Запросто - софтовый SPI.
Сначала разберитесь что, когда и зачем нужно "дёргать", а потом уже на железный переходите.
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Я уже пояснил постом выше зачем нужно дёргать CS дисплея. Повторять не вижу смысла.
Спасибо. Разберусь сам.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Аlex »

А я (и не только) говорю ещё раз - во время передачи, CS-ом щёлкать не нужно. Это выбор чипа (Сhip Select), он устанавливается в самом начале всей передачи и сбрасывается в самом конце.
Если на линии SPI всего 1 устройство, его CS вообще можно намертво вешать на одну из линий питания (зависит от активного уровня).
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Аlex »

Не поленился и погуглил (кстати, а Вы это делали ? ). Оказывается далеко ходить не нужно, всё рядом лежит - http://radiokot.ru/articles/53/
Почитайте. Хотя бы дойдите до таблицы с назначением выводов.
Вот ещё ссылка по теме - http://master-electrix.at.ua/lcd_contro ... -6101-.pdf Курите.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение просто КОТ »

Джентльмены! имею вопрос, и не имею понятия как быть. Решил попробовать писать код в открытом онлайновом компиляторе mBed. Вещь набирает популярность, полна своих библиотек, примеров и всего прочего. Многое заработало, над многим ещё тружусь... Но никак не могу победить реализацию 1-Wire через ногодрыг. Пока накидал такое (простите, но язык у них "свой")

Код: Выделить всё

    void send_presence() {
    DS1 = 0;
    wait_us(480);
    DS1 = 1; }
   
    void one_wire_write_bit(uint8_t bit) {
    DS1 = 0;
    wait_us(bit ? 7 : 62);
    DS1 = 1;
    wait_us(bit ? 57 : 7); }
   
    uint8_t one_wire_read_bit() {
    uint8_t bit = 0;
    DS1.mode(OpenDrain); DS1 = 0;
    wait_us(3);
    DS1.mode(OpenDrain); DS1 = 1;
    wait_us(20);
    bit = (DS1 ? 1:0);
    wait_us(30);
    return bit; }
   
    void one_wire_write_byte(uint8_t data) { for(uint8_t i = 0; i<8; i++) one_wire_write_bit(data >> i & 0x01); }

    int Temperature() {
    send_presence();
    wait_us(600);
    one_wire_write_byte(0xCC);
    one_wire_write_byte(0x44);
    wait_ms(400);
    send_presence();
    wait_us(600);
    one_wire_write_byte(0xCC);
    one_wire_write_byte(0xBE);
    wait_us(400);
    uint16_t data = 0;
    for(uint8_t i = 0; i<16; i++) data += (uint16_t)one_wire_read_bit()<<i;
    return data/16.0; }

DS1 -- имя пина PH_15, к которому физически подключён вывод от DS18B20. К плюсу это дело притянуто через 4,7кОм.
В main() написано такое дело:

Код: Выделить всё

    DS1.output(); DS1.mode(OpenDrain); DS1 = 1;
    send_presence();
    wait_us(600);
    one_wire_write_byte(0xCC);
    one_wire_write_byte(0x4E);
    one_wire_write_byte(0x4B);
    one_wire_write_byte(0x46);
    one_wire_write_byte(0x5F);

А потом время от времени запрашивается функция Temperature(). Но она возвращает одни единицы. Очевидно, что-то не так. Но что? Может кто поможет? На руках ослика нет, мог только с мультиметром покопаться. Он пишет 1,96В (питание 3,3V) на шине 1-Wire. Т.е. как будто-бы что-то там происходит. Но что? :dont_know:
Изображение
И ты врёшь!!! © Vladisman
Изображение
АСУ
Друг Кота
Сообщения: 3342
Зарегистрирован: Ср янв 02, 2013 08:37:35

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение АСУ »

Мне сложно разбираться в языке Си, ещё и при отсутствии комментариев…
DS1 – это, бит регистра DDR, или Port, или Pin?
Если я правильно понимаю, процедура «send_presence» это сброс шины (подтяжка шины к земле на 480 мкс.)
Если так то, после функции сброса шины производится ли проверка отклика датчика и восстановления на шине лог 1?
После выполнения «send_presence», для чего пауза 600 мкс?
Далее, после команды конвертировать температуру (44h), почему пауза 400 мкс? При получении датчиком команды конвертировать температуру (44h), датчик на время выполнении конвертирования прижимает шину к земле. Окончание конвертирования датчиком можно определить по состоянию шины, если на шине появилась лог 1 значит можно отправлять датчику запрос на чтение памяти SRAM. Есть и другой метод определения окончания конвертирования – это пауза более 750 мс. Так как это максимальное время конвертирования температуры датчиком при 12 бит.

Так же не понятно и про паузу 400 мкс после команды чтения памяти (ВЕh), зачем она там вообще?
Аватара пользователя
ma747
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вс авг 16, 2015 10:55:51

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ma747 »

Привет, хочу такой программатор http://9zip.ru/home/universalnyj_programmator_avr_pic.htm , может кто делал. Вопрос: ключ S1.2 что делает? Тоже ПИК/АВР переключатель?
Изображение
И ещё я посмотрел в интернете - на ICSP разъёмах для и AVR и для PIC как-то больше выводов используется (видимо дополнительные выводы для других моделей), подскажите чего куда подключать для канонических разъёмов ICSP ?
http://sun-store.ru/data/big/extra-pic_icsp[1].jpg
Изображение
Это всё гнёзда я так понял на этом рисунке.
У ПИКа Vcc это куда подавать? На Vdd? У АВРа CSK это что SCK?
upd: вот другой программатор, тут для АВРки подаются "земля" и +5в ещё:
Изображение
Видимо тоже нужны, а где Vcc на разъёме для АВРки?
upd2: похоже да, у ПИКа Vcc на Vdd, у АВРа Vcc на VTG... Выходит у ПИКа неиспользованный только Auxiliary/NC(6)
Аватара пользователя
bav123
Говорящий с текстолитом
Сообщения: 1692
Зарегистрирован: Ср окт 12, 2011 20:37:13

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение bav123 »

ma747
когда осаваивал мк собрал такой программатор, но потом упростил его только для Пиков, а Для Атмелов сделал другой.
Аватара пользователя
Slabovik
Друг Кота
Сообщения: 17234
Зарегистрирован: Чт апр 04, 2013 12:46:59
Откуда: Тюмень
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Slabovik »

Можно поинтересоваться, почему? Причины технические?
Аватара пользователя
bav123
Говорящий с текстолитом
Сообщения: 1692
Зарегистрирован: Ср окт 12, 2011 20:37:13

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение bav123 »

Какой то проект не прошивался, уже не помню что, я и собрал STK200/300
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение uldemir »

просто КОТ писал(а):Джентльмены! имею вопрос, и не имею понятия как быть.
Вопросы. Почему когда пишете управляете уровнем, а когда читаете управляете открытым стоком? 1-вире должна управляться только открытым стоком за исключением ситуации "strong pullup".
Для передачи лог.1 я бы слот не растягивал аж на 7 с лишним микросекунд. Хватает одной. И потом, чтобы проверить работу не нужно делать температурное преобразование. Для начала просто прочитайте сериальный номер - вот когда прочитаете, тогда будет уверенность, что фукции чтения-записи и сброса работают правильно. И потом, если у вас не паразитное питание, проще посылать слоты чтения для ожидания окончания конвертации, чем ждать 400 мс.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение просто КОТ »

В общем, мало того что я переписал в mbed чей-то левый исходник (вижу, в нём нашли не одну ошибку), я ещё и на плате не к тому выводу ткнулся. То что я считал выводом 15, порта H оказалось выводом 1 порта I. Стоило мне исправить эту ошибку и подключить человеческую библиотеку, всё запустилось. Всем спасибки. :beer:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
ma747
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вс авг 16, 2015 10:55:51

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ma747 »

bav123
Я не врубаюсь что этот второй ключ делает? 6-я нога это и-не 4-й и 5-й ног, когда ключ размыкает контакт на MOSI с 6-й ноги сигнал идёт, когда контакт замкнут то это вроде на выходы для пика должно влиять? В общем хочу понять этот ключ тоже переключатель для ПИК/АВР или для чего-то ещё.
Аватара пользователя
korob
Друг Кота
Сообщения: 6643
Зарегистрирован: Чт авг 09, 2012 01:09:39
Откуда: Ливны

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение korob »

ma747 писал(а):Я не врубаюсь что этот второй ключ делает?
Отключает/подключает диод VD2 к выходу "6" IC2 превращая его в подобие выхода с открытым коллектором, который в свою очередь совместно со входами "1" и "2" необходим для реализации двунаправленной шины Data для PIC МК.
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. :(
Всегда с уважением, Александр.
Аватара пользователя
ma747
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вс авг 16, 2015 10:55:51

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ma747 »

В общем я понял можно использовать ключ который будет один два направления коммутировать (если найду).
Chettuser

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Chettuser »

Застрял с настройкой HSE+PLL в STM32F030.
Где чего не так я делаю?
Спойлер

Код: Выделить всё

    RCC->CR |= RCC_CR_HSEON;                    // Включить HSE
    while((RCC->CR & RCC_CR_HSERDY) == 0) {}    // Ждём включения HSE

    RCC->CFGR2 |= RCC_CFGR2_PREDIV1_DIV1;       // Предделитель PLL отключён
    RCC->CFGR |= RCC_CFGR_PLLSRC_HSE_PREDIV;    // Используем HSE для PLL

    RCC->CFGR |= RCC_CFGR_HPRE_DIV1;        // SYSCLK без деления
    RCC->CFGR |= RCC_CFGR_PPRE_DIV1;        // HCLK без деления

//    RCC->CFGR |= (uint32_t) (RCC_CFGR_SW_HSE);
//    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSE) {}

    RCC->CR &= (uint32_t)(~RCC_CR_PLLON);                       // Отключаем PLL
    while((RCC->CR & RCC_CR_PLLRDY) != 0) {}                    // Ждём пока PLL отключится
    RCC->CFGR = RCC->CFGR & (~RCC_CFGR_PLLMUL) | (RCC_CFGR_PLLMUL6);    // Устанавливаем множитель
    RCC->CR |= (uint32_t) (RCC_CR_PLLON);                       // Включаем PLL
    while((RCC->CR & RCC_CR_PLLRDY) == 0) {}                    // Ждём установления PLL
    RCC->CFGR |= (uint32_t) (RCC_CFGR_SW_PLL);                  // Выбираем PLL как источник
    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) {}   // Ждём пока PLL включится

    RCC->CR |= RCC_CFGR_MCO_SYSCLK;     // Включаем на PA8 выход системной частоты
Ответить

Вернуться в «Разные вопросы по МК»