Перейти к содержанию

iliassin

Members
  • Постов

    8
  • Зарегистрирован

  • Посещение

Электроника

  • Стаж в электронике
    1-2 года

Достижения iliassin

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Всем большое спасибо за помощь, проблема решена) Теперь все работает как положено) Оказывается дело было в настройках SPI, а именно: у меня были такие настройки: SPCR=(0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); SPSR=(1<<SPI2X) В другом подобном проекте (управление ws2812b по SPI) увидел такую конфигурацию SPI SPCR=(0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (1<<CPHA) | (0<<SPR1) | (0<<SPR0); SPSR=(1<<SPI2X) Поставил бит CPHA в 1 и все заработало. Сейчас все переписал на кварц под 16 МГц. Проблема в том что до конца так и не понял, что изменилось с установкой бита CPHA в 1, но это надо просто изучить)
  2. На ардуине не хочется)) Знаю что есть библиотека, хочется не программно а по spi сделать)
  3. Спасибо за помощь. Попробовал подключать Mosi к последнему светодиоду на ленте, не выпаивая его, но он не реагирует, если подключать к предпоследнему, то предпоследний светодиод не реагирует, а последний светит бледно розовым а потом ярко белым. А вот можно ли выход последнего светодиода DOUT соединить с Miso и посмотреть какие данные проходят через светодиоды?
  4. Спасибо за ссылки) Много полезной информации. Почитал, пока все равно не понимаю в чем ошибка(
  5. Я читал. Пока свою ошибку не понял. Может еще дело в том что я кварц не припаивал а так воткнул да еще и на длинных ножках. МК работает только тогда когда кварц вешаю на сами ножки МК если отставить чуть дальше то программатор не видит МК. Вот в этой статье подробно изложен принцип работы ws2812 http://www.getchip.net/posts/119-umnye-svetodiody-ws2812b-neopixels/
  6. В Китае приобрел ленту на светодиодах ws2812b. Подключил ее через SPI к Atmega8. К Atmege8 также подключил кварц на 10 Мгц (фьюзы выставил), чтобы выставить частоту работы SPI - 2,5 Мгц. На такой частоте один бит передается за 0,4 us (микросекунды). Все интервалы для ws2812b получаются верными. Что имеем: - В ленте 36 светодиодов. - Питание ленты и МК от компьютерного БП 5V 20А - Собрано все на макетной плате. В основном цикле написал простую программу while (1) { for(i=1; i<=108; i++) //передаем по SPI один байт для каждого светодиода 3(RGB) x 36(LED) = 108 { SPDR=0b10010010; // 100 три этих бита передают лог. 0 на ws2812b while(!(SPSR & (1<<SPIF))); SPDR=0b01001001; while(!(SPSR & (1<<SPIF))); SPDR=0b00100100; while(!(SPSR & (1<<SPIF))); } delay_ms (300); // завершаем передачу паузой >50us, и все светодиоды должны потухнуть for(i=1; i<=99; i++) // снова начинаем передавать данные { SPDR=0b11011011; // последовательность 110 = лог. 1 для ws2812b while(!(SPSR & (1<<SPIF))); SPDR=0b01101101; while(!(SPSR & (1<<SPIF))); SPDR=0b10110110; while(!(SPSR & (1<<SPIF))); } delay_ms (300); // завершаем передачу паузой >50us, и все светодиоды должны гореть белым } } В итоге все работает не так(( Светодиоды светятся бледным розоватым цветом 300 миллисекунд, а потом вспыхивают ярким белым на 300 миллисекунд. Первый светодиод (не важно к какому именно подключать MOSI) не реагирует вообще (либо просто горит либо просто не горит) В чем может быть проблема. Прикладываю фото, видео, даташит и файл с прошивкой (все по ссылке на Яндекс диске). Очень рассчитываю на вашу помощь) https://yadi.sk/d/q4UJD3P3wXyYv
  7. Вопрос по сдвиговому регистру TLC5940. Подключение по SPI к atmega8 Правильно ли я понял его принцип работы? 1. Настраиваем параметры TLC5940 для работы с ШИМом -VPRG=0; // (задает режим работы 0 - ШИМ, 1- режим коррекции тока) -BLANK =1; //(обнуляет счетчик ШИМ и отключает каналы OUT0-OUT15) -XLAT=0; //(защелкивание данных из сдвиговых регистров) -GSCLK=0; //(сюда будем подавать тактовый сигнал ШИМ) 2. Передаем по SPI на SIN данные 192 бита. Я так понимаю, что тут первые 12 бит отправляются в 15 ШИМ канал TLC5940 (OUT15), потом в 14 ШИМ канал (OUT14).... и последние 12 бит в 0 ШИМ канал (OUT0). В каждых 12 битах кодируется нужное значение ШИМ на выходах OUT0-OUT15 TLC5940 в процентах. 3. После передачи данных. Устанавливаем BLANK=0 и подаем на ножку GSCLK ШИМ сигнал - 4096 импульсов. Как только подадим нужное число импульсов - защелкиваем данные импульсом на XLAT и устанавливаем BLANK=1 Как я понимаю то после этого на выходах OUT0 - OUT15 появится нужные ШИМ сигналы. Я всё так понял? По материалам http://cxem.net/mc/mc387.php TLC5940.pdf
×
×
  • Создать...