www.cncmasterkit.ru • Просмотр темы - Вопросы новичков по Си

www.cncmasterkit.ru

ЧПУ своими руками

     · ПРАВИЛА ·

Текущее время: 22 ноя 2017, 16:06
Сообщения без ответов | Активные темы

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему  [ Сообщений: 91 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
Сообщение #61  Добавлено: 26 ноя 2010, 12:37 
Не в сети
Смотрящий
Аватара пользователя

Зарегистрирован: 30 авг 2009, 00:00
Сообщения: 1504
Откуда: Омск
Цитата:
delay_us(13);

Если в этот момент больше ничего делать не нужно(МК только генерит прямоугольник и больше ничем не занимается), то похоже на правду.
И ещё...
Почему TCNT0+=0x06; а не TCNT0=0x06;?
Ведь нужно загрузить в таймер новое значение, а не увеличивать имеющееся на 6.
P.S. Для флага не обязательно занимать 16 бит.
Сделайте его хотя бы Unsigned Char, если с битовым массивом возиться не хотите.:)

_________________
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #62  Добавлено: 26 ноя 2010, 12:52 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
koolhatcker, я думал TCNT0 неприрвыно инкрементируется, даже во время обработки прерывания %)
А если я присвою 6, то выходит сбросится все что он
насчитал к моменту присвоения?

О, а как работать с битовым массивом? Мне для флага одного бита хватит :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #63  Добавлено: 26 ноя 2010, 13:00 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 19 апр 2010, 00:00
Сообщения: 128
Откуда: Харьков
xumuk писал(а):
Код:
int light = 0;

interrupt [TIM0_OVF] void timer0_ovf_isr(void){

    if(light==1){
        PORTB.3=1;
        delay_us(13);
        PORTB.3=0;
    }
    TCNT0+=0x06;
}


Похоже на правду?
(light это флаг, установкой которого я включаю или выключаю генерацию импульсов. Хотел сделать его булевым, но компилятор ругется :(, пришлось инт делать)


Полностью согласен с koolhatcker.
1 Надо присвоить TCNT0 новое значение, а не прибавлять к нему 6.
2 Крайне нежелательно использовать в прерываниях какие-либо временные задержки, если МК еще чем-либо в это время должен заниматься. Я так понимаю, 13 мкс - это длительность импульса при частоте 38 кГц и скважности 2? В этом случае лучше увеличить частоту таймера в два раза. И при каждом входе в прерывание менять состояние выхода на противоположное. А если генерация последовательности не нужна, просто запрещать прерывание по таймеру или обнулять его предделитель.

xumuk писал(а):
я думал TCNT0 неприрвыно инкрементируется, даже во время обработки прерывания %)
А если я присвою 6, то выходит сбросится все что он
насчитал к моменту присвоения?


Все верно, непрерывно инкрементируется. Поэтому нужно менять его содержимое сразу при входе в прерывание и, еще раз, не использовать в прерывании никаких временных задержек. Но, даже в этом случае, порядка четырех тактов при входе в прерывание будут потеряны и частота не будет точно соответствовать установленной. Если точность частоты генерации важна, можно воспользоваться 16-тиразрядным таймером и увеличить значение предделителя.

Удачи :).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #64  Добавлено: 26 ноя 2010, 14:49 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
Понял, спасибо, переделаю :)

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

Почему частота не будет соответствовать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #65  Добавлено: 26 ноя 2010, 14:55 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 22 сен 2010, 00:00
Сообщения: 123
Откуда: Москва
Цитата:
как работать с битовым массивом?

С битами работают с помощью логических операций
AND - для сброса бита
OR - для установки
XOR - для переключения
в unsigned char соответственно можно хранить 8 флагов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #66  Добавлено: 26 ноя 2010, 14:58 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 22 сен 2010, 00:00
Сообщения: 123
Откуда: Москва
Цитата:
Почему частота не будет соответствовать?

вход в прерывание требует минимум 4 такта - почитай справочник. Лучшее из доступного ИМХО книжки по AVR Евстифеева.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #67  Добавлено: 26 ноя 2010, 15:06 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 19 апр 2010, 00:00
Сообщения: 128
Откуда: Харьков
xumuk писал(а):
Понял, спасибо, переделаю :)

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

Почему частота не будет соответствовать?


На вход в прерывание МК, в общем случае, тратит четыре такта. То есть, к моменту входа в прерывание твой таймер, работающий на частоте МК (без предделителя) насчитает уже четыре. Можно, в принципе вносить поправку, как ты это делал. А можно просто учитывать это дело и загружать в TCNT не 6, а 10. Но, имхо, не красиво :). И, все равно, не точно. А если в программе появятся еще прерывания, отнимающие процессорное время, погрешность установки частоты еще увеличится.

Удачи :).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #68  Добавлено: 26 ноя 2010, 15:10 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
С битовым массивом понятно, буду пользовать :trumbsup:
Цитата:
вход в прерывание требует минимум 4 такта

Да, но непонятно куда эти 4 такта прицепить и почему они влияют на чатсоту %)
TCNT0 ведь продолжает увеличиваться пока идет вход в прерывание ? Выходит когда вход будет выполнен в TCNT0 уже будет 0х04?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #69  Добавлено: 26 ноя 2010, 15:13 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 19 апр 2010, 00:00
Сообщения: 128
Откуда: Харьков
xumuk писал(а):
С битовым массивом понятно, буду пользовать :trumbsup:
Цитата:
вход в прерывание требует минимум 4 такта

Да, но непонятно куда эти 4 такта прицепить и почему они влияют на чатсоту %)
TCNT0 ведь продолжает увеличиваться пока идет вход в прерывание ? Выходит когда вход будет выполнен в TCNT0 уже будет 0х04?


Да, уже будет 4. А ты меняешь в обработчике значение TCNT0. В твоем случае, конечно же, можно просто прибавлять к TCNT0 6, но так можно сделать далеко не всегда и, обычно, так не делают.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #70  Добавлено: 28 ноя 2010, 01:28 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
Урра! Заработало :crazy:
Спасибо всем за помощь, особенно Germie, помогавшему мне исправлять ошибки вчера до часу ночи :company:
[spoiler]Вот такой ИК пульт получился для фотокамер Nikon.
Изображение[/spoiler]
Теперь берусь за тахометр :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #71  Добавлено: 28 ноя 2010, 17:26 
Не в сети
Смотрящий
Аватара пользователя

Зарегистрирован: 28 авг 2009, 00:00
Сообщения: 7557
Откуда: Украина. Межевая.
Имя: Юрий
[off]koolhatcker, глянь, это стоит внимания, или нет? http://www.freeduino.ru/arduino/lang.html [/off]

_________________
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #72  Добавлено: 28 ноя 2010, 17:31 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 19 апр 2010, 00:00
Сообщения: 128
Откуда: Харьков
Dj_smart писал(а):
[off]koolhatcker, глянь, это стоит внимания, или нет? http://www.freeduino.ru/arduino/lang.html [/off]


И я, и я... С вашего разрешения вклинюсь :).
Ардуино - ново- (почти ново-, точнее :) ) модное увлечение молодых западных эмбеддеров.
Особого внимания, в смысле надо ли платить за эту платформу денег, не стоит. А в качестве пособия для новичков использовать можно. В принципе, платформа не предлагает ничего принципиально нового, чего нельзя бы было сделать на любой грамотно спроектированной макетке под AVR.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #73  Добавлено: 28 ноя 2010, 17:58 
Не в сети
Смотрящий
Аватара пользователя

Зарегистрирован: 30 авг 2009, 00:00
Сообщения: 1504
Откуда: Омск
Dj_smart, я согласен с Germie, ничего там такого нет, обычная макетка. Из плюсов - язык больше похож на бейсик, чем на Си :) и готовых приложений под это железо тьма написана.

_________________
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #74  Добавлено: 28 ноя 2010, 18:02 
Не в сети
Смотрящий
Аватара пользователя

Зарегистрирован: 28 авг 2009, 00:00
Сообщения: 7557
Откуда: Украина. Межевая.
Имя: Юрий
Да макетка меня меньше всего... Понравилось это: Согласитесь, очень удобно начать работу с последовательным портом на
скорости 9600 бит в секунду, сделав вызов одной строчкой:

Serial.begin(9600);

Просто очень. А на бейсик действительно похоже.

_________________
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #75  Добавлено: 28 ноя 2010, 18:08 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 19 апр 2010, 00:00
Сообщения: 128
Откуда: Харьков
Dj_smart писал(а):
Да макетка меня меньше всего... Понравилось это: Согласитесь, очень удобно начать работу с последовательным портом на
скорости 9600 бит в секунду, сделав вызов одной строчкой:

Serial.begin(9600);

Просто очень. А на бейсик действительно похоже.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #76  Добавлено: 28 ноя 2010, 18:12 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 22 сен 2010, 00:00
Сообщения: 123
Откуда: Москва
Цитата:
Согласитесь, очень удобно начать работу с последовательным портом на
скорости 9600 бит в секунду, сделав вызов одной строчкой:

Dj_smart - "просто так" ничего не бывает :). За всю эту простоту идет оплата размером кода. В С и так полно библиотек, так что использовать ни чуть не сложнее.
Цитата:
в качестве пособия для новичков использовать можно

наверное это основное ....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #77  Добавлено: 03 янв 2011, 22:20 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
Не совсем в тему, но т.к. я новичок в этом деле, решил написать сюда.

Как зависит у AVR частота встроенного генератора и напряжение встроенного источника опорного напряжения (2,56 в) от напряжения питания?
Т.е. можно ли запитывать МК напрямую от Li-ion аккумулятора?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #78  Добавлено: 03 янв 2011, 23:48 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 19 апр 2010, 00:00
Сообщения: 128
Откуда: Харьков
Зависимость частоты внутреннего генератора от напряжения примерно такая

Изображение .

Однако, следует заметить, что у многих МК серии AVR имеется один или несколько регистров OSCCAL (регистр калибровки частоты внутренних генераторов), которые позволять подстроить частоту при отличном от 5 В напряжении питания.

Образцовое напряжение АЦП от напряжения питания практически не зависит (на то оно же и образцовое :) ).

Так что, никто не мешает питать МК от твоего аккума.

Удачи :).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #79  Добавлено: 04 янв 2011, 00:12 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
Понял, спасибо :)

Придется повесить кварц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #80  Добавлено: 09 янв 2011, 15:44 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
Подскажите пожалуйста как из char сделать и вывести на экран float в формате x.xx

Чар получаю с двух каналов АЦП. Опорное напряжение 2,56.

Пробовал так
Код:
sprintf(lcd_buffer,"%4u\n%4u", ((float)read_adc(0))/100, ((float)read_adc(1))/100);


На экран выводятся 4хзначные числа без точки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #81  Добавлено: 09 янв 2011, 15:58 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 26 фев 2010, 01:00
Сообщения: 658
Откуда: Украина Днепродзержинск
sprintf(lcd_buffer,"%1.2f %1.2f", ((float)read_adc(0))/100, ((float)read_adc(1))/100);

_________________
Я натура творческая. Хочу - творю, хочу - вытворяю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #82  Добавлено: 09 янв 2011, 17:06 
Не в сети
Станкостроитель
Станкостроитель

Зарегистрирован: 27 дек 2009, 01:00
Сообщения: 1140
Откуда: Украина. Харьков
okan_vitaliy, заработало! :goodtime: Спасибо :company:

Вот только пришлось помучаться с CVAVR, сначала выводило просто 2f 2f
Оказалось надо полезть в Project -> Configure -> C Compiler ->
и в выпадающем списке (s)printf Features выбрать "float, width, precision" (по умолчанию только "int, width").

У меня тут еще вопрос назрел - могу ли я использовать прерывания ацп (250 КГц) еще и как таймер? Хочу туда положить счетчик чтобы засекать время между появлением сигнала на первом и втором канале АЦП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #83  Добавлено: 09 янв 2011, 17:16 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 26 фев 2010, 01:00
Сообщения: 658
Откуда: Украина Днепродзержинск
Можно, только поделите частоту на 13(за 13 тактов происходит преобразование).

_________________
Я натура творческая. Хочу - творю, хочу - вытворяю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #84  Добавлено: 23 мар 2011, 14:37 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 07 дек 2009, 01:00
Сообщения: 81
В контроллерах, описанных на этом сайте, сигнал STEP подаётся на ножку МК которая поддерживает внешнее прерывание. Можно ли для STEP использовать другие ноги и ловить на них изменения уровня сигнала или всё-таки первый вариант предпочтительнее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #85  Добавлено: 23 мар 2011, 14:44 
Не в сети
Смотрящий
Аватара пользователя

Зарегистрирован: 30 авг 2009, 00:00
Сообщения: 1504
Откуда: Омск
Можно, но первый вариант предпочтительнее, т.к. если длительность импульса будет меньше частоты опроса входа, то импульс пройдёт незамеченным.

_________________
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #86  Добавлено: 23 мар 2011, 14:52 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 07 дек 2009, 01:00
Сообщения: 81
koolhatcker писал(а):
если длительность импульса будет меньше частоты опроса входа, то импульс пройдёт незамеченным

А разве при использовании других ног в качестве входа МК не вызывает обработчик прерывания как и в случае с ножкой INT?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #87  Добавлено: 23 мар 2011, 14:59 
Не в сети
Смотрящий
Аватара пользователя

Зарегистрирован: 30 авг 2009, 00:00
Сообщения: 1504
Откуда: Омск
Не все МК это могут делать и не со всеми ногами.

_________________
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #88  Добавлено: 24 мар 2011, 09:18 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 26 фев 2010, 01:00
Сообщения: 658
Откуда: Украина Днепродзержинск
vzgherea писал(а):
А разве при использовании других ног в качестве входа МК не вызывает обработчик прерывания как и в случае с ножкой INT?

Все современные Меги (AVR) поддерживают прерывание по перепаду сигнала почти на всех лапках. Тут главное что бы в прерываниях почти ничего не обрабатывалось, а обрабатывалось в маине. Тогда пропусков не будет.

_________________
Я натура творческая. Хочу - творю, хочу - вытворяю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #89  Добавлено: 24 мар 2011, 11:13 
Не в сети
Смотрящий
Аватара пользователя

Зарегистрирован: 30 авг 2009, 00:00
Сообщения: 1504
Откуда: Омск
Цитата:
Тут главное что бы в прерываниях почти ничего не обрабатывалось, а обрабатывалось в маине

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

_________________
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
Сообщение #90  Добавлено: 27 мар 2011, 08:44 
Не в сети
Станкостроитель
Станкостроитель
Аватара пользователя

Зарегистрирован: 26 фев 2010, 01:00
Сообщения: 658
Откуда: Украина Днепродзержинск
koolhatcker писал(а):
И чтобы время обработки в маине было меньше, чем частота входных импульсов :).

Это совсем не обязательно. В прерываниях задача не пропустить входные импульсы, а вот в майне Вы их обрабатывать можете как хотите. Тут все зависит от алгоритма. Причем не обязательно что бы майн выполнялся быстрее чем один импульс. Просто обработчик в майне должен быть готов к тому что в счетчике импульсов будет не один, а несколько импульсов и корректно эту ситуацию обработать. У меня в контроллере так и сделано. И помимо обработчика шагов в майне еще крутится дофига других обработчиков.

_________________
Я натура творческая. Хочу - творю, хочу - вытворяю.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 91 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Мобильная версия