Управление LED индикатором.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Renych
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс окт 03, 2010 16:11:36
Откуда: Москва
Контактная информация:

Re: Управление LED индикатором.

Сообщение Renych »

Пробовал эмулировать SPI программно - тот же эффект. Светодиоды "молчат", невзирая на все мои эксперименты.
Складывается ощущение, что драйвер мёртвый. Пришёл к выводу, что без осциллографа "ловить нечего",
получается работа вслепую. Заказал Hantek DSO-5202P, на сл. неделе должен приехать :)
А пока вот какой вопрос возник - во время экспериментов был момент, когда я недоглядел, и на микросхему-драйвер
не поступало питание (либо vcc, либо gnd висели в воздухе), а остальные ноги были подключены и принимали сигналы. Могло ли это вывести микросхему из строя?
Атеист, научи меня верить...
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Управление LED индикатором.

Сообщение Alexeyslav »

Ты так и не сказал как именно ты подключил светодиоды. Может, не правильно? Выходы микросхемы - источник тока, входящего. Светодиод цеплять надо между выводом и плюсом питания. Никаких SPI чтобы проверить не надо - достаточно оставить выводы в воздухе - они хорошо действуют на наводки, да и при включении часто фиксируется "случайное" содержимое, т.е. они даже без контроллера будут загораться.
Аватара пользователя
Renych
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс окт 03, 2010 16:11:36
Откуда: Москва
Контактная информация:

Re: Управление LED индикатором.

Сообщение Renych »

Ты так и не сказал как именно ты подключил светодиоды.


Светодиоды подключил в соответствии со схемой из даташита на драйвер (я её уже приводил выше):

Изображение

всего 8 штук к портам OUT0-OUT7
за всё время ни один их них не мигнул.

Светодиод цеплять надо между выводом и плюсом питания.

Я конечно новичок, но анод от катода отличаю :)

Имею два соображения на этот счёт:
1. погорел драйвер, когда был включен в схему без питания (может такое быть?)
2. я его испортил, когда распаивал SOIC на плату. Хотя паять вроде как умею.

вот как это выглядит:

Изображение

У меня есть ещё одна микросхема драйвера. Попробовать распаять её?
Атеист, научи меня верить...
Аватара пользователя
Martin76
Друг Кота
Сообщения: 20167
Зарегистрирован: Пт фев 04, 2011 17:57:51
Откуда: Рыбинск

Re: Управление LED индикатором.

Сообщение Martin76 »

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

Re: Управление LED индикатором.

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

Пробовал на LE (4) подавать 1 во время записи и 0 после - без результата.
На LE нужно подавать строб после записи всех 16-ти бит. Это вывод из сдвиговых регистров на выходные защёлки.
МС Вы вряд-ли запалили, скорее всего что-то делаете не так. Что говорит ДШ на счёт сопротивления R-EXT ? Может номинал не подобран ?
Я работал с такими (подобными Вашим) регистрами (5 штук в послед стояли), зажигал матрицу, проблем никаких не возникало.

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

Re: Управление LED индикатором.

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

Аlex писал(а):Что говорит ДШ на счёт сопротивления R-EXT ? Может номинал не подобран ?
Ага, вопрос отпадает, я сам посмотрел :) - 20 Ma. Не многовато, кстати, для светиков ? :roll: Живы ли они ещё :?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Управление LED индикатором.

Сообщение Alexeyslav »

перво наперво, проверить наличие питания на самой микросхеме. Макетки эти хитрые заразы... если там где-то нет контакта - ты и не увидишь. Проверить номинал Rext, может ты случайно порядком ошибся. Проверить правильной ли стороной м/с запаял(ну бывает...). Сделать из светодиода логический пробник, и проверить сигналы на входе. Подать некоторую частоту на тактовый вход и перепробовать различные комбинации остальных входов. Ну и в конце-концов, замкнуть выход м/с резистором в 1кОм на общий, дабы проверить светодиоды - правильно ли ты их впаял.

И проверить платку. Когда я собирал такое устройство, долго не мог понять почему данные не передаются во второй каскад, оказалось при травлении между дорожкой выхода с микросхемы остался слой меди меньше микрона и замыкал его на общий. Замыкание это можно было увидеть только микроскопом.
Так что проверяй контакты, как на замыкание так и отсутствие контакта.
Аватара пользователя
Renych
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс окт 03, 2010 16:11:36
Откуда: Москва
Контактная информация:

Re: Управление LED индикатором.

Сообщение Renych »

Появился осциллограф и я немного продвинулся.
Проблема была в неправильной конфигурации SPI МК.
Как обычно помогло вдумчивое чтение даташита:
If SS is configured as an input, it must be held high to ensure Master SPI operation.

после чего я сделал

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

ldi      TEMP,   ( 1 << MOSI ) | ( 1 << SCK ) | ( 1 << CS )
out      DDRB,   TEMP

и увидел на экране свой байт

Изображение
(синий - импульсы синхронизации, жёлтый - данные)

теперь вот вопрос - как сформировать LE импульс синхронизированный с тактовыми?

микросхема драйвера хочет LE вот так (третья строка сверху):

Изображение

а у меня он вот такой:

Изображение

Сейчас делаю так:

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

cbi      PORTC,   LE               ; устанавливаю LE в 0

ldi      SPI_DATA_OUT,   0b01100100   ; передаваемый байт

call      SPI_HW_Write               ; пишу байт в SPI

sbi      PORTC,   LE               ; устанавливаю LE в 1   


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

Re: Управление LED индикатором.

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

LE нужно поднять и опустить (сформировать строб) после записи всех бит, т.е. , в Вашем случае, после отправки байта модулем SPI.
И необязательно попадать им в какие-то там фронты. Спокойно отправили байт и выдали строб, даже с задержкой.

а у меня он вот такой:
Ну вот, такой он и должен быть, всё верно. 8 тактовых импульсов и потом строб LE.

ЗЫ: Только в регистры нужно 16 бит посылать, а не 8 :)
Аватара пользователя
Renych
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс окт 03, 2010 16:11:36
Откуда: Москва
Контактная информация:

Re: Управление LED индикатором.

Сообщение Renych »

И необязательно попадать им в какие-то там фронты.

А я думал надо как в мануале. Ок, буду пробовать, спс )
Только в регистры нужно 16 бит посылать, а не 8

Это я знаю )
Атеист, научи меня верить...
Аватара пользователя
Renych
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс окт 03, 2010 16:11:36
Откуда: Москва
Контактная информация:

Re: Управление LED индикатором.

Сообщение Renych »

Ура, получилось! )

Теперь застрял с таймером. Пытаюсь инициализировать таймер 1 и обрабатывать его прерывания.
Куски кода:

Векторы прерываний

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

.cseg         ; сегмент кода
.org 0      ; начальный адрес 0

; инициализирую векторы прерываний
Start:     
         rjmp    Init;
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti      ; хочу поймать любое прерывание от таймера 1
         rjmp      TimerInterrupt ; Timer/Counter1 Compare Match A
         rjmp      TimerInterrupt ; Timer/Counter1 Compare Match B
         rjmp      TimerInterrupt ; Timer/Counter1 Compare Match C
         rjmp      TimerInterrupt ; Timer/Counter1 Overflow
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti
         reti

Прерывания моего МК:

Изображение

инициализация таймера

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

         ; инициализация таймера
         ldi      TEMP,   0x0D         ; 00001101 указываю предделитель 1024
         sts      TCCR1B,   TEMP         ; и режим CTC – (Clear Timer on Compare)
         
         ldi      TEMP,   high( TIMER_RATIO )   ; загружаю коэффициент таймера (780)
         sts      OCR1AH,   TEMP
         ldi      TEMP,   low( TIMER_RATIO )  ; загружаю коэффициент таймера (780)
         sts      OCR1AL,   TEMP


кусок даташита:
Изображение

разрешаю 4 прерывания от таймера

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

         ; маска прерываний
         ldi      TEMP,   0b00001111 ; тут я включаю все 4, для теста
         sts      TIMSK1,   TEMP


кусок даташита:
Изображение

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

         ; инициализация компаратора
         ldi      TEMP,   0x80         ;(0b10000000) выключим компаратор
         out      ACSR,   TEMP         ; зачем - не знаю, но так в книжке Белова


кусок даташита:
Изображение

Ну и сам обработчик прерываний:

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

TimerInterrupt:
         sbi      PORTE,   PE6      ; зажигаю светодиод, чтоб убедиться,
         reti                   ; что сюда попадает управление


в итоге светодиод не загорается.
понимаю, что скорее всего неправильно инициализировал таймер.
подскажите.
Атеист, научи меня верить...
Аватара пользователя
Renych
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс окт 03, 2010 16:11:36
Откуда: Москва
Контактная информация:

Re: Управление LED индикатором.

Сообщение Renych »

Может я неправильно подключил кварц?
В даташите вычитал:
The device is shipped with Low Power Crystal Oscillator (8.0MHz-16MHz) enabled and with the
fuse CKDIV8 programmed, resulting in 1.0MHz system clock with an 8 MHz crystal.
The default setting of CKSEL3..0 results in Low Power Crystal Oscillator for ATmega16U4 and
ATmega32U4,

Если я правильно понимаю - МК по дефолту настроен на работу с Low Power Crystal Oscillator, который требует кварц 8-16 мГц.
Если предположить, что мой кварц нерабочий (я его за неимением выпаял из старой платы),
могут от этого не срабатывать прерывания от таймера? Не знаю, что ещё предположить.
Атеист, научи меня верить...
Аватара пользователя
Renych
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вс окт 03, 2010 16:11:36
Откуда: Москва
Контактная информация:

Re: Управление LED индикатором.

Сообщение Renych »

Победил! )
нужно было выключить JTAG... кто бы мог подумать?

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

ldi TEMP, ( 1 << JTD )
out MCUCR, TEMP
Атеист, научи меня верить...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Управление LED индикатором.

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

Мои поздравления :beer:
Ответить

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