Страница 2 из 2
Re: Управление LED индикатором.
Добавлено: Чт окт 10, 2013 18:55:10
Renych
Пробовал эмулировать SPI программно - тот же эффект. Светодиоды "молчат", невзирая на все мои эксперименты.
Складывается ощущение, что драйвер мёртвый. Пришёл к выводу, что без осциллографа "ловить нечего",
получается работа вслепую. Заказал Hantek DSO-5202P, на сл. неделе должен приехать :)
А пока вот какой вопрос возник - во время экспериментов был момент, когда я недоглядел, и на микросхему-драйвер
не поступало питание (либо vcc, либо gnd висели в воздухе), а остальные ноги были подключены и принимали сигналы. Могло ли это вывести микросхему из строя?
Re: Управление LED индикатором.
Добавлено: Чт окт 10, 2013 19:30:16
Alexeyslav
Ты так и не сказал как именно ты подключил светодиоды. Может, не правильно? Выходы микросхемы - источник тока, входящего. Светодиод цеплять надо между выводом и плюсом питания. Никаких SPI чтобы проверить не надо - достаточно оставить выводы в воздухе - они хорошо действуют на наводки, да и при включении часто фиксируется "случайное" содержимое, т.е. они даже без контроллера будут загораться.
Re: Управление LED индикатором.
Добавлено: Чт окт 10, 2013 21:12:29
Renych
Ты так и не сказал как именно ты подключил светодиоды.
Светодиоды подключил в соответствии со схемой из даташита на драйвер (я её уже приводил выше):

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

У меня есть ещё одна микросхема драйвера. Попробовать распаять её?
Re: Управление LED индикатором.
Добавлено: Чт окт 10, 2013 21:49:49
Martin76
Остальные входы куда подключены?
Re: Управление LED индикатором.
Добавлено: Чт окт 10, 2013 22:03:27
Аlex
Пробовал на LE (4) подавать 1 во время записи и 0 после - без результата.
На LE нужно подавать строб после записи всех 16-ти бит. Это вывод из сдвиговых регистров на выходные защёлки.
МС Вы вряд-ли запалили, скорее всего что-то делаете не так. Что говорит ДШ на счёт сопротивления
R-EXT ? Может номинал не подобран ?
Я работал с такими (подобными Вашим) регистрами (5 штук в послед стояли), зажигал матрицу, проблем никаких не возникало.
ЗЫ: У Вас МК вообще запускается ли ? Подёргайте одновременно со своей программой ещё какой-нибудь ногой. Всякое бывает...
Re: Управление LED индикатором.
Добавлено: Чт окт 10, 2013 22:12:52
Аlex
Аlex писал(а):Что говорит ДШ на счёт сопротивления R-EXT ? Может номинал не подобран ?
Ага, вопрос отпадает, я сам посмотрел

- 20 Ma. Не многовато, кстати, для светиков ?

Живы ли они ещё

Re: Управление LED индикатором.
Добавлено: Чт окт 10, 2013 23:01:18
Alexeyslav
перво наперво, проверить наличие питания на самой микросхеме. Макетки эти хитрые заразы... если там где-то нет контакта - ты и не увидишь. Проверить номинал Rext, может ты случайно порядком ошибся. Проверить правильной ли стороной м/с запаял(ну бывает...). Сделать из светодиода логический пробник, и проверить сигналы на входе. Подать некоторую частоту на тактовый вход и перепробовать различные комбинации остальных входов. Ну и в конце-концов, замкнуть выход м/с резистором в 1кОм на общий, дабы проверить светодиоды - правильно ли ты их впаял.
И проверить платку. Когда я собирал такое устройство, долго не мог понять почему данные не передаются во второй каскад, оказалось при травлении между дорожкой выхода с микросхемы остался слой меди меньше микрона и замыкал его на общий. Замыкание это можно было увидеть только микроскопом.
Так что проверяй контакты, как на замыкание так и отсутствие контакта.
Re: Управление LED индикатором.
Добавлено: Вс окт 20, 2013 17:12:32
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`ами (что как мне кажется не совсем правильно),
то как попасть им на нарастающий фронт?
Re: Управление LED индикатором.
Добавлено: Вс окт 20, 2013 17:25:03
Аlex
LE нужно поднять и опустить (сформировать строб) после записи всех бит, т.е. , в Вашем случае, после отправки байта модулем SPI.
И необязательно попадать им в какие-то там фронты. Спокойно отправили байт и выдали строб, даже с задержкой.
а у меня он вот такой:
Ну вот, такой он и должен быть, всё верно. 8 тактовых импульсов и потом строб LE.
ЗЫ: Только в регистры нужно 16 бит посылать, а не 8

Re: Управление LED индикатором.
Добавлено: Вс окт 20, 2013 22:13:32
Renych
И необязательно попадать им в какие-то там фронты.
А я думал надо как в мануале. Ок, буду пробовать, спс )
Только в регистры нужно 16 бит посылать, а не 8
Это я знаю )
Re: Управление LED индикатором.
Добавлено: Ср окт 23, 2013 16:23:11
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 ; что сюда попадает управление
в итоге светодиод не загорается.
понимаю, что скорее всего неправильно инициализировал таймер.
подскажите.
Re: Управление LED индикатором.
Добавлено: Чт окт 24, 2013 12:40:25
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 мГц.
Если предположить, что мой кварц нерабочий (я его за неимением выпаял из старой платы),
могут от этого не срабатывать прерывания от таймера? Не знаю, что ещё предположить.
Re: Управление LED индикатором.
Добавлено: Чт окт 24, 2013 20:54:40
Renych
Победил! )
нужно было выключить JTAG... кто бы мог подумать?
Re: Управление LED индикатором.
Добавлено: Чт окт 24, 2013 21:11:14
Аlex
Мои поздравления
