Телескопы покупают здесь


A A A A Автор Тема: Альтернативная прошивка для EQ3-2 пульта от синты  (Прочитано 12903 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Andr_B

  • *****
  • Сообщений: 606
  • Благодарностей: 25
  • Андрей Богданов
    • Сообщения от Andr_B
У GTA отлично расписаны комментарии в программе для AT89S51,52,53 процессоров. Скачайте даташиты на at89c2051-24pu и на AT89S51,52,53. Разрисуйте схему соединений в Вашем пульте. И соотнесите одно с другим. Когда будет нарисована схема и начнете перелопачивать программу, тогда, думаю можно будет попросить в теме консультацию форума. 
Более простой вариант - потратить 2100р на новый пульт от EQ3. Моторы вроде должны быть одинаковы в одно и двух моторных вариантах.
SW 150/750. EQ3-2. HEQ5Pro. QHY5. Canon 1000D.  Зенит-Е.

Оффлайн Арченков Алексей

  • Новичок
  • *
  • Сообщений: 17
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от Арченков Алексей
Здравствуйте астролюбители, есть EQ5 черная с одним мотором по RA и пультом на микроконтроллере at89c2051. Отличный походный вариант для меня. По неосторожности подключил 12V вместо 6V. Выскочил микроконтроллер. Прошивку из него не зачитать. Смоделировал схему пульта в Proteus, но немогу переделать альтернативную прошивку для МК8051 под свой микроконтроллер. Прошу помочь, кто понимает в программировании.

Оффлайн Дядя Вова

  • *****
  • Сообщений: 8 083
  • Благодарностей: 95
    • Сообщения от Дядя Вова
Здравствуйте астролюбители, есть EQ5 черная с одним мотором по RA и пультом на микроконтроллере at89c2051. Отличный походный вариант для меня. По неосторожности подключил 12V вместо 6V. Выскочил микроконтроллер. Прошивку из него не зачитать. Смоделировал схему пульта в Proteus, но немогу переделать альтернативную прошивку для МК8051 под свой микроконтроллер. Прошу помочь, кто понимает в программировании.
Алексей, а Вам не сюда разве?
(Vixen ED80+Canon300Da, 9x50+QHY5)+EQ6upg
Meade ETX-90PE

Оффлайн Арченков Алексей

  • Новичок
  • *
  • Сообщений: 17
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от Арченков Алексей
Алексей, а Вам не сюда разве?

Я так понял там речь идет о двухмоторном пульте на AT89S51 (52,53) (40 ног), а у меня одномоторный пульт на at89с2051 (20 ног).

Они разные.

Оффлайн Арченков Алексей

  • Новичок
  • *
  • Сообщений: 17
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от Арченков Алексей
Пытаюсь переделать прошивку для пульта на AT89S51,52,53 от GTA под свой. Сделал схему в Proteus, расставил порты, убрал все строки связанные со вторым мотором (DEC). В Proteus заработало. Мотор вращается, на кнопки реагирует, светодиоды мигают. Но есть вопросы по расчету счетчика.

Цитата
/*                                                                     
One full rotation = 130*120*48*2 = 1497600 halfsteps                                                                
Star Day = 86164.091s        ( 86164,090530833 ñ.)                     
F_halfsteps = 17.380790334 Hz
F_cpu = 3579545 Hz
Dividing Factor = (F_cpu/12)/F_halfsteps  = 17162.36

Total Counter For Timer = 17162 = 195*88+2 (or 220*78+2) =
   = (TIMER0_COUNT)*(TIME_PERIOD_1x) + TIMER0_COUNT_ADJ
Note that TIMER0_COUNT_ADJ can be negative but
make sure that (TIMER0_COUNT+TIMER0_COUNT_ADJ) is between 0 and 256
*/

расчет количества полушагов в полном обороте. Число 130 это кол-во зубов в монтировке. В EQ5 их 144. Что означают числа 120 и 48?

Цитата
Total Counter For Timer = 17162 = 195*88+2 (or 220*78+2)

откуда числа 195, 88 и 2?

Оффлайн GTAАвтор темы

  • *****
  • Сообщений: 1 620
  • Благодарностей: 38
  • ye be warned
    • Сообщения от GTA
расчет количества полушагов в полном обороте. Число 130 это кол-во зубов в монтировке. В EQ5 их 144. Что означают числа 120 и 48?
да, 130 - это число зубов (у EQ5 - 144). 120 - передаточное число редуктора, сидящего на моторе. 48 - число шагов на оборот у самого мотора. ну 2 - понятно, полушаг.
соответсвенно для EQ5 фактор делителя = 15493.799; округляем до 15494

откуда числа 195, 88 и 2?
фактор нужно разложить на 3 однобайтовых целых числа (K*M + N). при этом (K+N) должно быть меньше 255. В программе это костанты ((TIMER0_COUNT)*(TIME_PERIOD_1x) + (TIMER0_COUNT_ADJ))
ну к примеру (215*72+14) или (193*80+54)

PS схему забрал, может кода дойдут руки под нее прошивку написать для 2051. инверторы только эти там глаза мозолят
SkyWatcher reflector 150/750 EQ3-2 + SW refractor 80/400 EQ1tabletop

Оффлайн Арченков Алексей

  • Новичок
  • *
  • Сообщений: 17
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от Арченков Алексей
Цитата
инверторы только эти там глаза мозолят

то что нельзя допускать логических нулей на портах Р1.4, 1.7 и Р1.5, 1.6 одновременно? Иначе  :o

Цитата
PS схему забрал, может кода дойдут руки под нее прошивку написать для 2051.

выкладываю проект в Proteus, чтобы можно было сразу опробовать код.

Выложу еще файл в си, который я продолжаю перекраивать под 2051 из прошивки GTA.

Оффлайн GTAАвтор темы

  • *****
  • Сообщений: 1 620
  • Благодарностей: 38
  • ye be warned
    • Сообщения от GTA
то что нельзя допускать логических нулей на портах Р1.4, 1.7 и Р1.5, 1.6 одновременно? Иначе 

"фейерверку было я вам доложу" (с) х/ф Формула Любви. но это по сути валидно для любого "H"-моста если открыть оба ключа в одном плече.
но я в принципе в контексте того, как формировать выходные константы на порт (в коде это массив P1_OUT[])

Выложу еще файл в си, который я продолжаю перекраивать под 2051 из прошивки GTA.

на днях гляну внимательнее. пока пара предварительных замечаний:
а) если компилировать последним SDCC (3.4.0), то они поменяли часть деклараций с момента 1-й версси программы, сейчас надо ставить префикс "__" (типа ближе к ANSI стали):

  volatile __bit  btnPressed;
   __code unsigned char P1_OUT[]  = ...
  void timer0_isr() __interrupt TF0_VECTOR __using 1 {}

б) обработку регистров кнопок 2х и 8х нужно в один if склеивать
в) что-то припоминаю, что EQ3 и EQ5 моторы крепятся таким образом, что вращать надо в противоположные стороны. но это проще выяснять в самый последний момент - если при северной полусфере монтировка пошла в обратном направлении, а при южном - в правильном, то просто реверсировать if обрабатывающий полусферы.

остальное (светодиоды, компаратор на пониженное напряжение, полусферы и прочее еще не смотрел)
SkyWatcher reflector 150/750 EQ3-2 + SW refractor 80/400 EQ1tabletop

Оффлайн GTAАвтор темы

  • *****
  • Сообщений: 1 620
  • Благодарностей: 38
  • ye be warned
    • Сообщения от GTA
обработка кнопок должна быть в таком формате:

// check if any button is pressed
btnPressed = 0;
// RA buttons
if(registerR2x == PRESSED)
{ // [>>] 2x forward
  directionRA = directionMainRA;
  tmpPeriodRA = TIME_PERIOD_1x / 2;
  btnPressed = 1;
}
else if(registerL2x == PRESSED)
{ // [<<] 2x back
  directionRA = 0; // stop motor @ current position
  tmpPeriodRA = TIME_PERIOD_1x / 2; // doesn't matter
  btnPressed = 1;
}
else if(registerR8x == PRESSED)
{ // [>>] 8x forward
  directionRA = directionMainRA;
  tmpPeriodRA = TIME_PERIOD_1x / 8;
  btnPressed = 1;
}
else if(registerL8x == PRESSED)
{ // [<<] 8x back
  directionRA = -(directionMainRA); // move back
  tmpPeriodRA = TIME_PERIOD_1x / 8;
  btnPressed = 1;
}
else
{
  // No RA button is pressed -> plain tracking @ sideral speed
  directionRA = directionMainRA;
  tmpPeriodRA = TIME_PERIOD_1x;
}
timePeriodRA = tmpPeriodRA;

IF, который ниже, нужно вообще убрать из программы - вот этот:
// DEC buttons
if(registerR8x == PRESSED || registerL8x == PRESSED)
{
  if(registerR8x == PRESSED)
    directionRA = DIR_MAIN_RA; // [UP]
  else
    directionRA = -(DIR_MAIN_RA); // [DOWN]
  btnPressed = 1;
}
else
{
  // stop DEC drive
  directionRA = 0;
}

вобщем, дерзайте :) если что, я рядом. главное не уподобляйтесь некоторым и не ждите, что придет добрый дядя из англосаксонского мира и все наладит в полный шоколад :)
SkyWatcher reflector 150/750 EQ3-2 + SW refractor 80/400 EQ1tabletop

Оффлайн Арченков Алексей

  • Новичок
  • *
  • Сообщений: 17
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от Арченков Алексей
На неделе подправил прошивку. Исправил обработку кнопок и убрал ненужные if. При эмуляции в Proteus как-то работает. Шаговый двигатель вращается, на кнопки реагирует, светодиоды реагируют на нажатия кнопок. Сегодня прошил микроконтроллер на программаторе тем же *.hex файлом и облом. При включении горят 2 светодиода и молчит ШД. Завтра еще раз проверю плату тестером. Если ничего не найду буду трясти Keil. Может не так скомпелировал. О результатах отпишусь.

Оффлайн GTAАвтор темы

  • *****
  • Сообщений: 1 620
  • Благодарностей: 38
  • ye be warned
    • Сообщения от GTA
При включении горят 2 светодиода
рекомендую временно отключить обработку пониженного питания (там надо встроенный компаратор запускать), т.е. пока убрать в программе выделенное красным:
// leds
if(PowerLevel == POWER_LOW)
{
  // amber -> warn user about low voltage
  LEDRed   = LED_ON;
  LEDGreen = LED_ON;
}
else
{
  if(btnPressed)
  {
    // fast move
    LEDGreen = LED_OFF;
    LEDRed   = LED_ON;
  }
  else
  {
    // tracking @ sideral speed
    LEDRed   = LED_OFF;
    LEDGreen = LED_ON;
  }
}

и молчит ШД.

тут нужно внимательно проверить константы массива шагов ( P1_OUT[] )

Если ничего не найду буду трясти Keil.

думаю нет необходимости - SDCC  с версий 2.6-2.8 работает железобетонно для 8051

Сегодня прошил микроконтроллер на программаторе

кстати, неплохо бы убедиться, что микроконтроллер действительно прошился.

SkyWatcher reflector 150/750 EQ3-2 + SW refractor 80/400 EQ1tabletop

Оффлайн Арченков Алексей

  • Новичок
  • *
  • Сообщений: 17
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от Арченков Алексей
Цитата
рекомендую временно отключить обработку пониженного питания

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

И действительно при включении на пульте горят оба светодиода.
возможно выполняется:

LEDRed   = LED_ON;
LEDGreen = LED_ON;

Цитата
кстати, неплохо бы убедиться, что микроконтроллер действительно прошился.

Прошился 100%. Прошивал на программаторе ChipProg-2 в программе Python. Я даже зачитал прошивку в новый чистый буфер, чтобы визуально убедиться.

Программатор на бывшей работе, после выходных перепрошью.

Оффлайн Арченков Алексей

  • Новичок
  • *
  • Сообщений: 17
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от Арченков Алексей
Отключил обработку пониженного питания. Прошил. В результате, при включении пульта горит зелёный светодиод. При нажатии на кнопки загорается красным. ШД не вращается.

Возникло два вопроса.
1. Заметил, что при открытии прошивки (hex) в Python, код программы занимает память с адреса 0х800 до 0х914. Конечный адрес в МК 89с2051 0x7FF. В программе Python есть возможность редактирования. Я сдвинул код так, чтобы он начинался с адреса 0х400 и прошил. Возможно это я сделал неправильно.
В Keil при выставлении всех галок по ограничению памяти до соответствующего размера код СИ вообще не компилируется. Скрин прилагается.

2. В самой прошивке может быть еще есть ошибки. Вот эта часть под подозрением.


// output constants for ports
code unsigned char P1_OUT[]  = {0xD0, 0x70, 0xB0, 0xE0, 0xD0, 0x70, 0xB0, 0xE0}; // может убрать 4 последних? Повторяются.

Сами константы:
0xD0 = 11010000
0x70 = 01110000
0xB0 = 10110000
0xE0 = 11100000





// Timer 0 overflow interrupt service routine:
void timer0_isr() interrupt TF0_VECTOR using 1
{
   TF0 = 0;
   TH0 = 256 - TIMER0_COUNT; // default reload value

   if(++timeCounterRA >= timePeriodRA)
   {   
      // Do RA Step
      phaseRA += directionRA;
      phaseRA &= 0x07; // это число я тоже не менял, фазаРА это, случайно не одна из констант массива шагов?
      P1 = (P1 & 0x0F) | P1_OUT[phaseRA];            // clear 1st and then set  // Здесь заполняются младшие регистры порта 1 логическими единицами? Может быть надо убрать это действие, т.к. на P1_0 и P1_1 идет проверка уровня питания. А P1_2 и 3 вообще в воздухе висят.
      TH0 = 256 - (TIMER0_COUNT + TIMER0_COUNT_ADJ); // apply adjustment for 1 timer period
      timeCounterRA = 0;
   }
}
« Последнее редактирование: 17 Фев 2015 [19:33:24] от Арченков Алексей »

Оффлайн GTAАвтор темы

  • *****
  • Сообщений: 1 620
  • Благодарностей: 38
  • ye be warned
    • Сообщения от GTA
Отключил обработку пониженного питания. Прошил. В результате, при включении пульта горит зелёный светодиод. При нажатии на кнопки загорается красным.
значит основной цикл работает, обработка кнопок (вход) и вывод на порты тоже работают

ШД не вращается.
надо проверять константы. при беглом взгляде чую, что они неправильные (для полушага нужно 4*2=8 и они должны быть все разые, т.к. соответсвуют 8-и разным положениям вала относительно обмоток). отсюда вопрос: кто и по какому приципу формировал константы в массив? откуда они взялись?

что касается обработчка прерывания (функция timer0_isr() ), там все в порядке, ничего трогать не надо.

PS с Keil не работал, ничего сказать не могу - тут вы в свободном полете.
все свои проекты под 8051 компилировал только SDCC. hex прошивки тоже никогда не трогал, полагался на компилятор и бутлоадер - заливал как есть

SkyWatcher reflector 150/750 EQ3-2 + SW refractor 80/400 EQ1tabletop

Оффлайн enero83

  • *****
  • Сообщений: 1 556
  • Благодарностей: 106
  • Дмитрий Юрьевич
    • Сообщения от enero83
    • Сообщество ЛА Урания
Коллеги, может кто подсказать...
Во всех этих решения стоят одни и те же моторы с редукторами...

Маркировка - 42PM48L.
Кто знает параметры этих моторов? Тип, шаг, сопротивление обмоток, ток и напряжение питания?
И кто знает коэффициент редукции на редукторе?
70-200L F/4, 400L F/5.6, Canon 5D3, CG-5GT, SCT 6", Ньютон 200 F/5, ASIAIR, окуляры Meade Plossl Series 5000, AM3, 61EDPH, ASI 1600MM, колесо.

sernik

  • Гость

Оффлайн enero83

  • *****
  • Сообщений: 1 556
  • Благодарностей: 106
  • Дмитрий Юрьевич
    • Сообщения от enero83
    • Сообщество ЛА Урания
Это не подойдёт? http://www.motionking.com/Products/PM_Stepper_Motors/42PM_Stepper_Motor.htm
Видел это.
Единственное что может более менее подходить - 42PM48L01.
Инфы по редуктору нет :(
70-200L F/4, 400L F/5.6, Canon 5D3, CG-5GT, SCT 6", Ньютон 200 F/5, ASIAIR, окуляры Meade Plossl Series 5000, AM3, 61EDPH, ASI 1600MM, колесо.

sernik

  • Гость
Движки эти все на 48 шагов, сопротивление легко измерить, ток вычислить по закону Ома. А редуктор к мотору не относится, передаточное уже считали тут https://astronomy.ru/forum/index.php/topic,88324.msg1672794.html#msg1672794 :)

Оффлайн enero83

  • *****
  • Сообщений: 1 556
  • Благодарностей: 106
  • Дмитрий Юрьевич
    • Сообщения от enero83
    • Сообщество ЛА Урания
ага.. 7.5 градусов на шаг.
редукция получается 1\144, правильно?

Сопротивление померю.. где-то было чем мереть. :)
70-200L F/4, 400L F/5.6, Canon 5D3, CG-5GT, SCT 6", Ньютон 200 F/5, ASIAIR, окуляры Meade Plossl Series 5000, AM3, 61EDPH, ASI 1600MM, колесо.

sernik

  • Гость
У меня 120 получилось...