Автор Тема: Электрофокусёр  (Прочитано 157282 раз)

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #225 : Марта 03, 2014, 12:19:36 »
Вот и не могу понять, что там происходит. Одиночные команды, как правило пролазят. Но иногда программа компа принимает обрезанный кусок строки (пропускает несколько первых символов), а при "обратной связи" или близком совпадении по времени (типа - пришел ответ на запрос присутствия и примерно в это время отправляется команда на кристалл)  она не походит, пропускается, т. к. комп читает буфер. Во такое у меня создалось впечатление.
Кстати о птичках..., буфер реально может вызывать проблемы.
Точно знаю, что у AVR буфер на прием и на передачу один и тотже. Т.е. вы начали передавать и тут прием пошел, то принимаемые данные пропадут.
На правах рекламы Вот у СТМ, например, это разные буферы. Т.е. по UART можно принимать и передавать данные в полнодуплекном режиме, без опасения что что-то потеряется.
Это точно, все проверено.

Про винду сказать ничего не могу... но чето мне не верится что у виртуального СОМ-порта один буфер на прием и передачу...
Хотя все может быть  :D
SW SKP1501, МТ-3S

Оффлайн passer_by

  • Global Moderator
  • Академик
  • *****
  • Сообщений: 1534
    • Астро-бродяга
Re: Электрофокусёр
« Ответ #226 : Марта 03, 2014, 12:22:25 »
Дык, что там с креплением шаговика?
Тал 200К, Тал 75R, ED 80, EQ6 Pro, Lamegon 8/100B, QHY8, QHY6.

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #227 : Марта 03, 2014, 12:49:55 »
Дык, что там с креплением шаговика?
У него крепежные отверстия имеются с двух сторон (спереди - где вал и сзади)?
Это я про FL39.
SW SKP1501, МТ-3S

Оффлайн passer_by

  • Global Moderator
  • Академик
  • *****
  • Сообщений: 1534
    • Астро-бродяга
Re: Электрофокусёр
« Ответ #228 : Марта 03, 2014, 13:07:09 »
Вот точно не помню. У "старших" шаговиков просто передний флянец под 4 винта. А у этих вроде бы стяжные винты углублены в корпус и остается резьбовое отверстие спереди и сзади по 4 мм. Дома гляну, отпишусь.....
Тал 200К, Тал 75R, ED 80, EQ6 Pro, Lamegon 8/100B, QHY8, QHY6.

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #229 : Марта 03, 2014, 14:28:07 »
Вот точно не помню. У "старших" шаговиков просто передний флянец под 4 винта. А у этих вроде бы стяжные винты углублены в корпус и остается резьбовое отверстие спереди и сзади по 4 мм. Дома гляну, отпишусь.....
Отлично)
А для FL42 не знаете?
А то заканчиваю корпус проектировать, так вот не знаю точно как его крепить можно.
SW SKP1501, МТ-3S

Оффлайн passer_by

  • Global Moderator
  • Академик
  • *****
  • Сообщений: 1534
    • Астро-бродяга
Re: Электрофокусёр
« Ответ #230 : Марта 03, 2014, 19:05:13 »
Посмотрел. Да, у них у всех на переднем (со стороны вала) фланца четыре отверстия под резьбу М3.
Тал 200К, Тал 75R, ED 80, EQ6 Pro, Lamegon 8/100B, QHY8, QHY6.

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #231 : Марта 04, 2014, 09:26:05 »
Посмотрел. Да, у них у всех на переднем (со стороны вала) фланца четыре отверстия под резьбу М3.
Это-то я понимаю, тоже в чертеже посмотрел.
Меня интересую отверстия под крепление с обратной стороны.
Не удобно движок с одной стороны крепить - будет наклоняться вперед  :)
SW SKP1501, МТ-3S

Оффлайн passer_by

  • Global Moderator
  • Академик
  • *****
  • Сообщений: 1534
    • Астро-бродяга
Re: Электрофокусёр
« Ответ #232 : Марта 04, 2014, 09:41:32 »
С обратной стороны нет крепления, там головки стягивающих винтов. Ну не знаю, чем не устраивает крепление за передний фланец. Ни какого перекоса не будет. Даже у тяжелых движков крепление только с одной стороны. Я обычно при креплении протачиваю посадочное отверстие (которое на чертеже 22мм) и движек практически на нем и весит ;)
Тал 200К, Тал 75R, ED 80, EQ6 Pro, Lamegon 8/100B, QHY8, QHY6.

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #233 : Марта 04, 2014, 10:55:41 »
С обратной стороны нет крепления, там головки стягивающих винтов.
Понятно, спасибо за информацию  :)
Все пытаешься сделать дубовым (как у того Собакевича), а на деле и нафиг так не надо. Достаточно простого одностороннего крепления.
Бум меняться  ;)
SW SKP1501, МТ-3S

Оффлайн passer_by

  • Global Moderator
  • Академик
  • *****
  • Сообщений: 1534
    • Астро-бродяга
Re: Электрофокусёр
« Ответ #234 : Марта 06, 2014, 09:49:29 »
Алексей, у тебя есть какие ни будь примеры С_ишного кода для организации СОМ порта на микросхемах?
Тал 200К, Тал 75R, ED 80, EQ6 Pro, Lamegon 8/100B, QHY8, QHY6.

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #235 : Марта 06, 2014, 17:02:46 »
...для организации СОМ порта на микросхемах?
Простите, Евгений, не понял на каких микросхемах?
В смысле на FT232?

Так там же простой UART на 9600 bod...

Или я че-то не понимаю или одно из двух.
SW SKP1501, МТ-3S

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #236 : Марта 06, 2014, 17:09:46 »
Нашел кодину для ATmega64 (или 128 - они идентичны)
Прерывания:
ISR(USART1_RX_vect)     //По завершению приема
{
uart_rx1[uart1_state_rx]=UDR1;
if (uart_rx1[uart1_state_rx]==0x0e)
{
UDR1=uart1_rx_data[0];
uart1_state_tx=0;
}
uart1_state_rx++;
if (uart1_state_rx > 19) uart1_state_rx=0;
}

ISR(USART1_TX_vect) //Отправка завершена
{
uart1_state_tx++;
if (uart1_state_tx>1000) uart1_state_tx=0;
else UDR1=uart1_rx_data[uart1_state_tx-1];

}
Настройка USART1 в асинхронный режим:
//******** ПОРТЫ ********//
DDRD|=0b01011100;
DDRC=0x00;
DDRB=0b11110111;
PORTB|=0b00000001;
DDRE=0x03;
PORTD=0b01111100;
//******** UART 1 ********//
UCSR1A=0x00;
UCSR1B=0b11011000;
UCSR1C=0b00000110;
UBRR1H=0x00;
UBRR1L=103; //9600 BAUD at 16МГц fCLK
Пойдет?
Или я вас не так понял?
Программным UARTом не занимался, не приходилось...
« Последнее редактирование: Марта 06, 2014, 17:11:55 от Aleksey_M »
SW SKP1501, МТ-3S

Оффлайн passer_by

  • Global Moderator
  • Академик
  • *****
  • Сообщений: 1534
    • Астро-бродяга
Re: Электрофокусёр
« Ответ #237 : Марта 06, 2014, 17:47:03 »
Да, то. Но вот сейчас мучаюсь с отправкой строки с кристалла на ПК.
uart1_state_tx++;
if (uart1_state_tx>1000) uart1_state_tx=0;
else UDR1=uart1_rx_data[uart1_state_tx-1];
Здесь, я так понимаю, uart1_state_tx - длинна буфера, uart1_rx_data - сам буфер и он по полной отправляется по URAT? Вот примерно тут и застрял. Не получается  корректно отправит строку в буфер...
Тал 200К, Тал 75R, ED 80, EQ6 Pro, Lamegon 8/100B, QHY8, QHY6.

Оффлайн Aleksey_M

  • Профессор
  • *****
  • Сообщений: 655
  • Houston, we've got a problem!
Re: Электрофокусёр
« Ответ #238 : Марта 06, 2014, 18:23:18 »
Ога, щас попробую разъяснить...

Имеется посылка (ну или какой-то буфер)...
#define LENGHT 42
unsigned char UART1_buf[LENGHT];
... и указатель на него либо просто какая-нибудь переменная, ответственная за текущий отправляемый байт.
unsigned char * UART1_buf_pointer;             //указатель на массив
unsigned char UART1_buf_var=0;                  //просто переменная
Теперь, если пришло время отправить посылочку, то делаем:
//Я обычно в нулевой (первый по счету) элемент записываю количество отправляемых байт, чтоб лишних переменных не заводить.
//     либо, если вы используете какой-нибудь протокол типа ModBUS или чего другого то конец посылки можно отслеживать по байту окончания посылки, обычно 0x0D.
UART1_buf[1]=1;
UART1_buf[2]=1;
UART1_buf[3]=1;
UART1_buf[4]=1;
UART1_buf[5]=1;
UART1_buf[6]=1;
UART1_buf[7]=0x0D;
UART1_buf[0]=7;         //если ловим 0x0D - то можно 0-ой элемент опустить и начать заполнять данные с нуля.
//инициализируем необходимые переменные
UART1_buf_var=0;      //Ну или UART1_buf_pointer = UART1_buf;
//и отправляем первый байт
UDR1=UART1_buf[UART1_buf_var+1];  //Не забываем в нулевом у нас размер посылки или если мы ловим 0x0D - то можно 0-ой элемент опустить
//Всё, ждем прерывания... в смысле продолжаем программу далее
Теперь в прерывании:
if (UART1_buf_var<UART1_buf[0])
{
         UART1_buf_var++;
         UDR1=UART1_buf[UART1_buf_var+1];   //поскольку изначально UART1_buf_var=0
}
И все. Отправка остановится автоматически, когда UART1_buf_var станет равным UART1_buf[0], т.е. 7 в данном случае (будет отправлено 7 элементов - от 0 до 6).

Если мы работаем с указателями:
if (UART1_buf_pointer!=UART1_buf[UART1_buf[0]])  // проверяем не дошли ли мы до 7-го элемента?
{
         UART1_buf_pointer++;
         UDR1=*UART1_buf_pointer;        //Разыменовывание
}
Вопросы?
SW SKP1501, МТ-3S

Оффлайн passer_by

  • Global Moderator
  • Академик
  • *****
  • Сообщений: 1534
    • Астро-бродяга
Re: Электрофокусёр
« Ответ #239 : Марта 06, 2014, 18:42:53 »
Буду разбираться...
Тал 200К, Тал 75R, ED 80, EQ6 Pro, Lamegon 8/100B, QHY8, QHY6.