DimonRX

Как подружить две ATMega8?

60 сообщений в этой теме

DimonRX    0

Всем доброго времени суток!

В AVR-ках я новичёк и очень нуждаюсь в вашей помощи.

Задача у меня следующая. Есть драйвер управления серводвигателем на ATmega88. Помимо основной задачи ATmega88 через 74HC164D выводит на сдвоенный 7-ми сегментный индикатор направление вращения мотора в виде анимации (вращает сегмент по или против часовой стрелки). Рядом есть некая поделка на ATmega8, одной из задач которой является определение направления вращения мотора и, в зависимости от направления, выполнение различных действий. Как мне это сделать? Как подружить две меги? Всем заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
motoandrey14    638

А что не так? Немного не понятно мне, что ты хочешь подружить? Из условия я понял, что есть два устройства, сигнал направления вращения приходит на обе меги, одна выводит анимацию, вторая выполняет какие-то различные действия. Что не так?

Какие такие задачи у второй меги по определению вращения могут быть немного не понятно... Должен быть сигнал направления вращения, который приходит на вторую мегу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artos5    290

Автор , проще всего на первой атмеге выделить два пина и дергать их в зависимости от направления .

Второй атмегой считывать сигналы и таким образом определять направление.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DmitryS    28

Наверное и одного пина будет достаточно 0 - вправо , 1 - в лево , или на оборот 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artos5    290

А если есть третье состояние? И не влево и не вправо? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DmitryS    28

Вполне возможно ,  но скорее всего это состояние будет когда устройство обесточено .  А так , даже если шим = 0 , то направление вращения уже определено в программе или в схеме . Конечно если будет нужно определить вращается ли мотор и куда вращается  , то безусловно 2 пина нужно . 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artos5    290

Я думаю что в большинстве случаев как раз три состояния . Я поэтому и написал сразу за две ножки :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0

Приношу извинения за некорректно сформулированную задачу.

Уточню. У меня нет доступа к программе меги, которая установлена в драйвере серводвигателя. Нет и схемы драйвера. Этот драйвер-законченное заводское изделие.

Моя задача, имея вторую мегу, где работает написанная мною программа, каким-то образом подключить свою мегу  к меге драйвера (или к 74HC164D или к индикатору) и определить направление вращения двигателя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artos5    290
12 минуты назад, DimonRX сказал:

Моя задача, имея вторую мегу, где работает написанная мною программа,

Ну так возьми анализатор , запиши байты которые поступают при вращении влево и потом при вращении вправо . Создай буфер spi и в буфер записывай данные и анализируй . Исходя из результата - принимай решение о направлении вращения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    556
16 минут назад, DimonRX сказал:

У меня нет доступа к программе меги, которая установлена в драйвере серводвигателя. Нет и схемы драйвера. Этот драйвер-законченное заводское изделие.

Как Вы без схемы и без понятия о работоспособности устройства хотите к нему подключиться ?

PS: Анализировать что-то по индикации - та ещё головная боль...

  • Не одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0
2 минуты назад, artos5 сказал:

Ну так возьми анализатор

 

15 часов назад, DimonRX сказал:

В AVR-ках я новичёк

А можно подробнее?

3 минуты назад, Alex сказал:

Как Вы без схемы и без понятия о работоспособности устройства хотите к нему подключиться ?

Ну, кое-какие понятия о работе есть.

Была у меня мысль подключить все сегменты индикатора к моей меге и смотреть их состояние. При анимации в каждый момент времени может быть включен только один сегмент. И отсюда определять направление вращения мотора. Но такое решение мне не понравилось, не красиво как-то. Хотел как-то данные до сдвигового регистра анализировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    776
15 часов назад, DimonRX сказал:

драйвер управления серводвигателем на ATmega88.

Ну так к выходу на двигатели и подключиться. В чем проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artos5    290

Тоже вариант нормальный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0
13 минуты назад, BARS_ сказал:

Ну так к выходу на двигатели и подключиться. В чем проблема?

Задача подключиться к линии индикации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artos5    290
1 час назад, DimonRX сказал:

А можно подробнее?

Купи анализатор у китайцев за 10$ или сколько там он стоит .

8 канальный он. И проанализируй данные. За пару вечеров задачу можно решить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    556
1 час назад, DimonRX сказал:

Хотел как-то данные до сдвигового регистра анализировать.

Индикация может быть статической, а может динамической.
Схема нужна, в любом случае.

  • Не одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    776
37 минут назад, DimonRX сказал:

подключиться к линии индикации

Смысл? Да и как подключиться к индикации вам уже сказали. Считывайте пакеты, отсылаемые на драйвер индикатора и анализируйте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0
1 час назад, artos5 сказал:

Купи анализатор у китайцев за 10$ или сколько там он стоит .

А можно ссылку? Или хотя бы название, как он у китайцев называется. Поймите правильно, для меня это все новое, я AVR-ками меньше месяца занимаюсь. Для меня это темный лес. Пытаюсь разобраться по мере сил и возможностей.

1 час назад, Alex сказал:

Индикация может быть статической, а может динамической.

Индикация динамическая.

1 час назад, BARS_ сказал:

Смысл?

Смысл подключения к индикации в том, что когда мотор остановлен, на индикации показано направление, в какую сторону он будет вращаться при включении. А когда мотор вращается, на индикацию выводятся обороты. Моя же задача узнать, в какую сторону он будет вращаться.

3 часа назад, artos5 сказал:

Создай буфер spi и в буфер записывай данные и анализируй .

А как это сделать? Может пример есть какой. Моих знаний для этого не достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    776
6 минут назад, DimonRX сказал:

название, как он у китайцев называется.

Saleae logic

 

7 минут назад, DimonRX сказал:

Индикация динамическая.

И сколько знакомест?

9 минут назад, DimonRX сказал:

А как это сделать?

Научиться работать с МК, а потом уже куда-либо лезть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0
14 минуты назад, BARS_ сказал:

Научиться работать с МК, а потом уже куда-либо лезть.

Вот ради этого ответа я и задал вопрос. А Вы уже родились с абсолютными знаниями о МК? И пока не достигли просветления не задавали вопросов вообще? Тогда зачем нужен форум? Для общения гуру между собой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    776
Только что, DimonRX сказал:

А Вы уже родились с абсолютными знаниями о МК? И пока не достигли просветления не задавали вопросов вообще?

Нет. Но вот вопросов я не задавал. Мне с головой хватило примеров в сети и даташитов. Вместо того, чтобы сидеть на форумах я разбирал примеры.

 

2 минуты назад, DimonRX сказал:

Тогда зачем нужен форум?

Форум? А смысл что-то советовать, если такое слово, как "буфер" уже вводит в ступор? Чтобы что-то посоветовать необходимо чтобы у вас были хотя бы начальные знания программирования. Выше ужа дали совет, слить данные, которые идут в индикатор за пару кадров анимации вращения на индикаторе (учитывая динамическую индикацию - это не такая уж и простая задача). Найти закономерость, т.е. выделить байты, которые отвечают именно за анимацию и по порядку байт в двух кадрах определять направление. Например, картинка крутится вправо, подается 0x01 (один кадр анимации), а в другом пакете 0х02 (второй кадр анимации). При анимации влево подается тоже самое, но в обратном порядке, сначала 0х02, потом 0х01. Проблема будет лишь в том, что из-за динамики десяток раз придет пакет с 0х01, и десяток с 0х02. Т.к. заранее известно, сколько байт занимает одна прорисовка, то и записывать буфер в МК будет легко.

  • Одобряю 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0

BARS_,  вот за совет по делу спасибо!

Снял видео, как работает индикация. Скорее всего буду брать 6 разрядов с индикатора и по ним определять направление вращения. Жалко, конечно, 6 ног под это тратить, но на большее я пока не способен. Сделаю так, а в дальнейшем, если поумнею, то переделаю.

 

IMG_2581.TRIM.MOV

Изменено пользователем DimonRX

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0

Снова попробую обратиться за помощью.

Читать данные с индикатора не получилось. Хочу попробовать читать данные со входа сдвигового регистра. Запись туда происходит по следующему алгоритму:

1. выдаём первый старший бит из пачки на линию DATA

2. опускаем в лог. 0 линию CLC

3. поднимаем в лог.1 линию CLC

4. повторяем все пункты с 1, пока не выдадим все биты.

Мысли такие. Повесить линию CLC на прерывание, например на INT1 со срабатыванием по спаду уровня. При срабатывании прерывания считывать бит данных. И так, пока не прочитаю байт. Вроде логично (на мой дилетантский взгляд), но есть проблема. Как мне синхронизироваться с передачей? Я же могу начать читать не обязательно сначала, а с любого места? И тогда будет считана неверная информация. Как мне узнать, что в данный момент начата передача нового байта?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    776
1 минуту назад, DimonRX сказал:

Повесить линию CLC на прерывание, например на INT1 со срабатыванием по спаду уровня.

Нахрена, есть же SPI...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
DimonRX    0

По SPI у меня подключен цифровой потенциометр MCP41010. И SPI у меня инициализирован как master. Мысли были попробовать по SPI прочитать, но не могу врубиться, как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: CUBE
      Не могу запустить асинхронный режим. 
      Ниже будет представлен код которым пытаюсь отладить. Там в 1 коде идёт работа от внутреннего источника таков (стоит 1МГц).  После 5 миганий таймер должен перейти в асинхронный режим и мигать с частотой в 1 Гц. У меня происходит 5 миганий потом ничего. Фьюзы менять пробовал, ничего не дало, сейчас дефолт. Корпус кварца к земле тянуть пробовал - безрезультатно. 
      Возможно что-то в подключении накосячил, если не видно на фото ниже, спрашиваете, нужно будет - нарисую схему. 
      Компилятор Atmel Studio 7
      Шью через Sind Prog 2.1.1 + USBasp 2.0
      Вот код: 
      .macro outi 
       ldi r16, @1 
       out @0, r16 
      .endm 
      .org $000 
      rjmp reset 
      .org $001 
      reti 
      .org $002 
      reti 
      .org $003 
      reti 
      .org $004 
      rjmp timer2_ovf 
      .org $005 
      reti 
      .org $006 
      reti 
      .org $007 
      reti 
      .org $008 
      reti 
      .org $009 
      reti 
      .org $00A 
      reti 
      .org $00B 
      reti 
      .org $00C 
      reti 
      .org $00D 
      reti 
      .org $00E 
      reti 
      .org $00F 
      reti 
      .org $011 
      reti 
      .org $012 
      reti 
      .ORG INT_VECTORS_SIZE 
       
      reset: 
      .equ portout=portd 
      .equ ddrout=ddrd 
      .def led=r17 
      .def mask=r18 
      .def counter=r19 
       outi spl,low(ramend) 
       outi sph,high(ramend) 
       
       outi ddrout, 0xff 
       
       outi tccr2, 0b00000111 
       outi timsk, 1«toie2 
       
        
       
        
       ldi led,1«5 
       ldi mask,1«5 
       sei 
      cycle: 
      cpi counter, 10 
      breq offtim 
       rjmp cycle 
       
      timer2_ovf: 
      inc counter 
       out portout, led 
       eor led, mask 
      reti 
        
      offtim: 
      outi timsk, 0«toie2 
      rjmp asinxron 
       
      asinxron: 
       outi assr, 0b00001000 
      back: 
       in r16, assr 
       cpi r16, 0b00001000 
       brne back 
       
        outi tccr2, 0b00000101 
        outi tcnt2, 0 
        outi ocr2, 0 
        outi timsk, 1«toie2 
       
       
      m1: 
      rjmp m1


      Верх меги на фото слева. 
    • Автор: TheCoolKuid
      Здравствуйте.
      Часто прошивал МК, в один из моментов по программе должна была выставляться единица на 5Б пин. После этого убрал эту функцию, но теперь при включении к питанию МК на любой прошивки пин уходит в ноль и МК не отвечает ни на UART, ни на I2C. Пин не уходит в ноль только на чистом кристалле. Даже если в новой прошивке и слома нет про включение этого пина, он в единице. Может ли это означать, что программная память посыпалась?
      Спасибо.
    • Автор: Alex_Chpook
      Здравствуйте. Делаю бегущую строку на AVR и драйверах max7219 по этой статье. Исходный код есть в конце статьи. 
      Хотел бы доработать устройство чтобы можно было передавать сообщение через Bluetooth модуль HC-05 при помощи Bluetooth terminal. Сам знаю как это можно сделать, т.к. все примеры находил только под Arduino. 
      Прошу помочь кто знает как это  можно реализовать 
    • Автор: Alex_Chpook
      Всем привет. Хочу сделать светодиодную матрица с драйвером max7219 на Atmega324P. 
      При попытке смоделировать в Proteus вылазят ошибки:
      Собирал вроде всё правильно, текст в EEPROM загружен, но на матрицах выводится непонятно что и на всех одно и тоже. Может я что-то напутал, когда собирал((
      Подскажите пожалуйста кто знает))
      Проект со схемой Proteus и прошивку прикрепляю.
      И просто схема: 
       

      Строка c MAX7219.rar