Управление LED индикатором.
- Renych
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс окт 03, 2010 16:11:36
- Откуда: Москва
- Контактная информация:
Re: Управление LED индикатором.
Пробовал эмулировать SPI программно - тот же эффект. Светодиоды "молчат", невзирая на все мои эксперименты.
Складывается ощущение, что драйвер мёртвый. Пришёл к выводу, что без осциллографа "ловить нечего",
получается работа вслепую. Заказал Hantek DSO-5202P, на сл. неделе должен приехать :)
А пока вот какой вопрос возник - во время экспериментов был момент, когда я недоглядел, и на микросхему-драйвер
не поступало питание (либо vcc, либо gnd висели в воздухе), а остальные ноги были подключены и принимали сигналы. Могло ли это вывести микросхему из строя?
Складывается ощущение, что драйвер мёртвый. Пришёл к выводу, что без осциллографа "ловить нечего",
получается работа вслепую. Заказал Hantek DSO-5202P, на сл. неделе должен приехать :)
А пока вот какой вопрос возник - во время экспериментов был момент, когда я недоглядел, и на микросхему-драйвер
не поступало питание (либо vcc, либо gnd висели в воздухе), а остальные ноги были подключены и принимали сигналы. Могло ли это вывести микросхему из строя?
Атеист, научи меня верить...
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Управление LED индикатором.
Ты так и не сказал как именно ты подключил светодиоды. Может, не правильно? Выходы микросхемы - источник тока, входящего. Светодиод цеплять надо между выводом и плюсом питания. Никаких SPI чтобы проверить не надо - достаточно оставить выводы в воздухе - они хорошо действуют на наводки, да и при включении часто фиксируется "случайное" содержимое, т.е. они даже без контроллера будут загораться.
- Renych
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс окт 03, 2010 16:11:36
- Откуда: Москва
- Контактная информация:
Re: Управление LED индикатором.
Ты так и не сказал как именно ты подключил светодиоды.
Светодиоды подключил в соответствии со схемой из даташита на драйвер (я её уже приводил выше):
всего 8 штук к портам OUT0-OUT7
за всё время ни один их них не мигнул.
Светодиод цеплять надо между выводом и плюсом питания.
Я конечно новичок, но анод от катода отличаю :)
Имею два соображения на этот счёт:
1. погорел драйвер, когда был включен в схему без питания (может такое быть?)
2. я его испортил, когда распаивал SOIC на плату. Хотя паять вроде как умею.
вот как это выглядит:
У меня есть ещё одна микросхема драйвера. Попробовать распаять её?
Атеист, научи меня верить...
Re: Управление LED индикатором.
Остальные входы куда подключены?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Управление LED индикатором.
На LE нужно подавать строб после записи всех 16-ти бит. Это вывод из сдвиговых регистров на выходные защёлки.Пробовал на LE (4) подавать 1 во время записи и 0 после - без результата.
МС Вы вряд-ли запалили, скорее всего что-то делаете не так. Что говорит ДШ на счёт сопротивления R-EXT ? Может номинал не подобран ?
Я работал с такими (подобными Вашим) регистрами (5 штук в послед стояли), зажигал матрицу, проблем никаких не возникало.
ЗЫ: У Вас МК вообще запускается ли ? Подёргайте одновременно со своей программой ещё какой-нибудь ногой. Всякое бывает...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Управление LED индикатором.
Ага, вопрос отпадает, я сам посмотрелАlex писал(а):Что говорит ДШ на счёт сопротивления R-EXT ? Может номинал не подобран ?
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Управление LED индикатором.
перво наперво, проверить наличие питания на самой микросхеме. Макетки эти хитрые заразы... если там где-то нет контакта - ты и не увидишь. Проверить номинал Rext, может ты случайно порядком ошибся. Проверить правильной ли стороной м/с запаял(ну бывает...). Сделать из светодиода логический пробник, и проверить сигналы на входе. Подать некоторую частоту на тактовый вход и перепробовать различные комбинации остальных входов. Ну и в конце-концов, замкнуть выход м/с резистором в 1кОм на общий, дабы проверить светодиоды - правильно ли ты их впаял.
И проверить платку. Когда я собирал такое устройство, долго не мог понять почему данные не передаются во второй каскад, оказалось при травлении между дорожкой выхода с микросхемы остался слой меди меньше микрона и замыкал его на общий. Замыкание это можно было увидеть только микроскопом.
Так что проверяй контакты, как на замыкание так и отсутствие контакта.
И проверить платку. Когда я собирал такое устройство, долго не мог понять почему данные не передаются во второй каскад, оказалось при травлении между дорожкой выхода с микросхемы остался слой меди меньше микрона и замыкал его на общий. Замыкание это можно было увидеть только микроскопом.
Так что проверяй контакты, как на замыкание так и отсутствие контакта.
- Renych
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс окт 03, 2010 16:11:36
- Откуда: Москва
- Контактная информация:
Re: Управление LED индикатором.
Появился осциллограф и я немного продвинулся.
Проблема была в неправильной конфигурации SPI МК.
Как обычно помогло вдумчивое чтение даташита:
после чего я сделал
и увидел на экране свой байт

(синий - импульсы синхронизации, жёлтый - данные)
теперь вот вопрос - как сформировать LE импульс синхронизированный с тактовыми?
микросхема драйвера хочет LE вот так (третья строка сверху):

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

Сейчас делаю так:
если сделать его более продолжительным я допустим смогу NOP`ами (что как мне кажется не совсем правильно),
то как попасть им на нарастающий фронт?
Проблема была в неправильной конфигурации 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 индикатором.
LE нужно поднять и опустить (сформировать строб) после записи всех бит, т.е. , в Вашем случае, после отправки байта модулем SPI.
И необязательно попадать им в какие-то там фронты. Спокойно отправили байт и выдали строб, даже с задержкой.
ЗЫ: Только в регистры нужно 16 бит посылать, а не 8
И необязательно попадать им в какие-то там фронты. Спокойно отправили байт и выдали строб, даже с задержкой.
Ну вот, такой он и должен быть, всё верно. 8 тактовых импульсов и потом строб LE.а у меня он вот такой:
ЗЫ: Только в регистры нужно 16 бит посылать, а не 8
- Renych
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс окт 03, 2010 16:11:36
- Откуда: Москва
- Контактная информация:
Re: Управление LED индикатором.
И необязательно попадать им в какие-то там фронты.
А я думал надо как в мануале. Ок, буду пробовать, спс )
Только в регистры нужно 16 бит посылать, а не 8
Это я знаю )
Атеист, научи меня верить...
- Renych
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс окт 03, 2010 16:11:36
- Откуда: Москва
- Контактная информация:
Re: Управление LED индикатором.
Ура, получилось! )
Теперь застрял с таймером. Пытаюсь инициализировать таймер 1 и обрабатывать его прерывания.
Куски кода:
Векторы прерываний
Прерывания моего МК:

инициализация таймера
кусок даташита:

разрешаю 4 прерывания от таймера
кусок даташита:

кусок даташита:

Ну и сам обработчик прерываний:
в итоге светодиод не загорается.
понимаю, что скорее всего неправильно инициализировал таймер.
подскажите.
Теперь застрял с таймером. Пытаюсь инициализировать таймер 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 индикатором.
Может я неправильно подключил кварц?
В даташите вычитал:
Если я правильно понимаю - МК по дефолту настроен на работу с Low Power Crystal Oscillator, который требует кварц 8-16 мГц.
Если предположить, что мой кварц нерабочий (я его за неимением выпаял из старой платы),
могут от этого не срабатывать прерывания от таймера? Не знаю, что ещё предположить.
В даташите вычитал:
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 индикатором.
Победил! )
нужно было выключить JTAG... кто бы мог подумать?
нужно было выключить JTAG... кто бы мог подумать?
Код: Выделить всё
ldi TEMP, ( 1 << JTD )
out MCUCR, TEMPАтеист, научи меня верить...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Управление LED индикатором.
Мои поздравления 
