Мелкие вопросы по МК и ПЛИС.
Re: Мелкие вопросы по МК и ПЛИС.
Ничем там не надо щёлкать. Это лишнее.
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Дык не заводится стёклышко.
Отключил DMA и гнал вручную с CS из того же массива - всё работает. С включенным DMA идут те же пачки по 16 бит, но без CS естественно, стекло молчит.
Или трахаться и отправлять посылки по 16 байт склеенные из 9 битных?
Или трахаться и отправлять посылки по 16 байт склеенные из 9 битных?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Экран принимает 9 бит, а Вы ему шлёте 16. Где логика ?
И причём тут дёрганье CS"ом ? CS - это выбор кристалла, им дёргают только в начале и в конце передачи, выбирая конкретное устройство.
И причём тут дёрганье CS"ом ? CS - это выбор кристалла, им дёргают только в начале и в конце передачи, выбирая конкретное устройство.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Запросто - софтовый SPI.
Сначала разберитесь что, когда и зачем нужно "дёргать", а потом уже на железный переходите.
Сначала разберитесь что, когда и зачем нужно "дёргать", а потом уже на железный переходите.
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Я уже пояснил постом выше зачем нужно дёргать CS дисплея. Повторять не вижу смысла.
Спасибо. Разберусь сам.
Спасибо. Разберусь сам.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
А я (и не только) говорю ещё раз - во время передачи, CS-ом щёлкать не нужно. Это выбор чипа (Сhip Select), он устанавливается в самом начале всей передачи и сбрасывается в самом конце.
Если на линии SPI всего 1 устройство, его CS вообще можно намертво вешать на одну из линий питания (зависит от активного уровня).
Если на линии SPI всего 1 устройство, его CS вообще можно намертво вешать на одну из линий питания (зависит от активного уровня).
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Не поленился и погуглил (кстати, а Вы это делали ? ). Оказывается далеко ходить не нужно, всё рядом лежит - http://radiokot.ru/articles/53/
Почитайте. Хотя бы дойдите до таблицы с назначением выводов.
Вот ещё ссылка по теме - http://master-electrix.at.ua/lcd_contro ... -6101-.pdf Курите.
Почитайте. Хотя бы дойдите до таблицы с назначением выводов.
Вот ещё ссылка по теме - http://master-electrix.at.ua/lcd_contro ... -6101-.pdf Курите.
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Джентльмены! имею вопрос, и не имею понятия как быть. Решил попробовать писать код в открытом онлайновом компиляторе mBed. Вещь набирает популярность, полна своих библиотек, примеров и всего прочего. Многое заработало, над многим ещё тружусь... Но никак не могу победить реализацию 1-Wire через ногодрыг. Пока накидал такое (простите, но язык у них "свой")
DS1 -- имя пина PH_15, к которому физически подключён вывод от DS18B20. К плюсу это дело притянуто через 4,7кОм.
В main() написано такое дело:
А потом время от времени запрашивается функция Temperature(). Но она возвращает одни единицы. Очевидно, что-то не так. Но что? Может кто поможет? На руках ослика нет, мог только с мультиметром покопаться. Он пишет 1,96В (питание 3,3V) на шине 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. Т.е. как будто-бы что-то там происходит. Но что?

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

И ещё я посмотрел в интернете - на 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)
Re: Мелкие вопросы по МК и ПЛИС.
ma747
когда осаваивал мк собрал такой программатор, но потом упростил его только для Пиков, а Для Атмелов сделал другой.
когда осаваивал мк собрал такой программатор, но потом упростил его только для Пиков, а Для Атмелов сделал другой.
- Slabovik
- Друг Кота
- Сообщения: 17234
- Зарегистрирован: Чт апр 04, 2013 12:46:59
- Откуда: Тюмень
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Можно поинтересоваться, почему? Причины технические?
Re: Мелкие вопросы по МК и ПЛИС.
Какой то проект не прошивался, уже не помню что, я и собрал STK200/300
Re: Мелкие вопросы по МК и ПЛИС.
Вопросы. Почему когда пишете управляете уровнем, а когда читаете управляете открытым стоком? 1-вире должна управляться только открытым стоком за исключением ситуации "strong pullup".просто КОТ писал(а):Джентльмены! имею вопрос, и не имею понятия как быть.
Для передачи лог.1 я бы слот не растягивал аж на 7 с лишним микросекунд. Хватает одной. И потом, чтобы проверить работу не нужно делать температурное преобразование. Для начала просто прочитайте сериальный номер - вот когда прочитаете, тогда будет уверенность, что фукции чтения-записи и сброса работают правильно. И потом, если у вас не паразитное питание, проще посылать слоты чтения для ожидания окончания конвертации, чем ждать 400 мс.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
В общем, мало того что я переписал в mbed чей-то левый исходник (вижу, в нём нашли не одну ошибку), я ещё и на плате не к тому выводу ткнулся. То что я считал выводом 15, порта H оказалось выводом 1 порта I. Стоило мне исправить эту ошибку и подключить человеческую библиотеку, всё запустилось. Всем спасибки. 

Re: Мелкие вопросы по МК и ПЛИС.
bav123
Я не врубаюсь что этот второй ключ делает? 6-я нога это и-не 4-й и 5-й ног, когда ключ размыкает контакт на MOSI с 6-й ноги сигнал идёт, когда контакт замкнут то это вроде на выходы для пика должно влиять? В общем хочу понять этот ключ тоже переключатель для ПИК/АВР или для чего-то ещё.
Я не врубаюсь что этот второй ключ делает? 6-я нога это и-не 4-й и 5-й ног, когда ключ размыкает контакт на MOSI с 6-й ноги сигнал идёт, когда контакт замкнут то это вроде на выходы для пика должно влиять? В общем хочу понять этот ключ тоже переключатель для ПИК/АВР или для чего-то ещё.
Re: Мелкие вопросы по МК и ПЛИС.
Отключает/подключает диод VD2 к выходу "6" IC2 превращая его в подобие выхода с открытым коллектором, который в свою очередь совместно со входами "1" и "2" необходим для реализации двунаправленной шины Data для PIC МК.ma747 писал(а):Я не врубаюсь что этот второй ключ делает?
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. 
Всегда с уважением, Александр.
Всегда с уважением, Александр.
Re: Мелкие вопросы по МК и ПЛИС.
В общем я понял можно использовать ключ который будет один два направления коммутировать (если найду).
-
Chettuser
Re: Мелкие вопросы по МК и ПЛИС.
Застрял с настройкой 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 выход системной частоты
