Уроки на Си.

помощь начинающим осваивать программирование МК (PIC, AVR) на Си.

Модератор: koolhatcker

Аватара пользователя
vzgherea
Станкостроитель
Станкостроитель
Сообщения: 82
Зарегистрирован: 07 дек 2009, 01:00

Сообщение vzgherea »

Прочитал, всё очень доступно, спасибо. Я за 3 простые вместо 1 сложной строки кода:). Такой код понятнее и его легче отлаживать. Позже, конечно, можно будет и переписать по желанию.

Резисторы и конденсаторы, пока нету ШИМ-а, можно исключить, да?
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Да, конечно. Они ж на будующее:).
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
ShCoder
Станкостроитель
Станкостроитель
Сообщения: 37
Зарегистрирован: 11 янв 2010, 01:00

Сообщение ShCoder »

рассуждения по написанию "одной строки"

исходные данные - процедура обработки прерывания isr(void){}, которая по сигналу "Step"
должна проверить состояние линии "Dir" и при Dir=1 увеличить значение переменной
cur_step, а при Dir=0 - уменьшить(сигнал "Dir" - это (PORTB & 2) ).

итак при Dir=1 (...или (PORTB & 2)=2) cur_step=cur_step+1,
а при Dir=0 (...или (PORTB & 2)=0) cur_step=cur_step-1

заметим, что при (PORTB & 2)=2 нам нужна "+1", а при (PORTB & 2)=0 - "-1"
поэтому пишем (cur_step+(PORTB & 2)-1). Ну а теперь осталось ограничиться
размером таблицы, т.е. значением индекса от 0 до 3 (0,1,2,3) :

cur_step=(cur_step+(PORTB & 2)-1) & 3;
или так, что чуть лучше:
cur_step=(--cur_step+(PORTB & 2)) & 3;
все .... и вроде ничего непонятного тут нет :)

  Не в тему:   
Цель - заставить людей ДУМАТЬ и искать ОПТИМАЛЬНЫЕ решения (.. и не ждать ХАЛЯВЫ)
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

или так, что чуть лучше:
И получим выигрыш в объёме кода на 3 байта в ROM, но проигрыш на 2 байта в RAM по сравнению с текстом статьи. И всё это ради того, чтобы уместить всё в одну строку, но при этом сделать листинг абсолютно нечитаемым для новичка?
Цель - заставить людей ДУМАТЬ и искать ОПТИМАЛЬНЫЕ решения
Уместить всё в одну строчку - далеко не всегда оптимальное решение. Как по быстродействию, так и по читаемости. Ещё раз напоминаю: статья - для новичков. Поэтому прошу в дальнейшем смотреть на происходящее в этой теме именно с этой позиции и критерием лучше/хуже считать в первую очередь читаемость и понимание общего алгоритма.
  Не в тему:   
P.S. Сообщения с выяснением отношений удалил. Выясняйте в личке. А тут - только по существу. Кто не поймёт - не обижайтесь :).
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Аватара пользователя
vzgherea
Станкостроитель
Станкостроитель
Сообщения: 82
Зарегистрирован: 07 дек 2009, 01:00

Сообщение vzgherea »

koolhatcker, а продолжение к статье http://it-en.ru/cnc/doc/1.html будет? Интересна реализация ШИМ на мк.
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Ну если хотите именно ШИМ, то давайте внедрим ШИМ.:)
P.S. Это ШИМ? Или не совсем?:). Попытка симуляции работы ДШИ200-2, питание 24В. Синее - опорное, зелёное - затвор ключа, красное - напряжение на датчике тока.
Изображение
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

И опять все молчат...
Ждут 3-й части с полушагом и режимом удержания, т.е. исходников для готового драйвера под полушаг?:). Чую зря я тут распинаюсь...
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Artem
Станкостроитель
Станкостроитель
Сообщения: 280
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Россия , Питер
Контактная информация:

Сообщение Artem »

koolhatcker писал(а):Чую зря я тут распинаюсь...
:no: Нет, не зря!!! Вы же описываете алгоритм, а как и к чему его применить каждый решит сам для себя. :ok:
Лучше молчать и прослыть дураком, чем открыть рот и развеять все сомнения:)
Аватара пользователя
vzgherea
Станкостроитель
Станкостроитель
Сообщения: 82
Зарегистрирован: 07 дек 2009, 01:00

Сообщение vzgherea »

koolhatcker писал(а):Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html
Всё очень доступно изложенно :trumbsup: Спасибо! Думал всё намного сложнее :)

Есть пара вопросов:
1. Когда (периодически или после какого-либо события) приходят прерывания с компараторов?
2. Зачем использовать ножку МК для формирования опорного напряжения? Источник питания МК не годится?
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

1. Когда (периодически или после какого-либо события) приходят прерывания с компараторов?
Это подробно описано в документации на МК:).
При изменении уровня сигнала на выходе любого компаратора устанавливается флаг прерывания от компараторов CMIF. Далее в подпрограмме обработки прерываний пользователь может проверить флаги C1OUT и C2OUT и выяснить какой именно компаратор вызвал прерывание. В рассмотренном случае как только напряжение с датчика тока превысит опорное, то тут же (типовое время задержки 150nS) будет установлен флаг CMIF и возникнет прерывание.
Зачем использовать ножку МК для формирования опорного напряжения? Источник питания МК не годится?
Источник питания МК вполне годится. Обратите внимание на схему - эта ножка МК является выходом имеющего в PIC16F628 аппаратного модуля ШИМ. Поэтому если в дальнейшем в драйвер захочется ввести режим снижения тока двигателя при простое, то на эту ножку можно выдавать например не уровень лог.1, а ШИМ сигнал со скважностью 50%, что позволит снизить ток в режиме удержания:).
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

koolhatcker, если я в твоём первом описании таблицу шагов тупо заменяю на полушаг, и указываю что элементов таблицы стало 8, будет работать?
И там есть вот такое:
PORTB = 0x00; //Выводим в порт В нули
TRISB = 0x03; //Весь порт В кроме 2-х младших разрядов - на вывод
Строки не надо поменять местами? А то(на мой взгляд) сначала выводим данные в порт, а потом производим его настройку(ввод или вывод).
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Код: Выделить всё

указываю что элементов таблицы стало 8, будет работать? 
Нет. Нужно ещё там где указатель меняется при приходе импульса STEP поправить. Надеюсь не в реальном железе решил проверять? Сгорит скорее всего:).
Строки не надо поменять местами?
Надо. Сначала - направление, потом - значение.
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

Сгорит скорее всего
Да нивжизнь:). Униполяр, хоть все полевики сразу открой... По крайняку не вижу причины гореть:)
там где указатель меняется
Ага, прошляпил. И больше причин нет, так? И тогда вполне естественно добавить опрос ноги, типа "выбор режима - шаг/полушаг". Я так понимаю,это надо всунуть в программу в самом начале, после настроек портов?
Ага, так это надо и какие-то указатели на таблицы, и... Короче недорос:). Пока:).
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

По крайняку не вижу причины гореть
Ну попробуй:).
И больше причин нет, так?
На первый взгляд вроде как нет(при абсолютной идентичности обмоток). Пробовать нужно, чтобы точно сказать.
"выбор режима - шаг/полушаг"
Мужики, только честно, кто-нибудь полным шагом пользуется?:) Мало того что на нём из-за резонанса движок не разогнать, так ещё и звук не тот :).
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Dj_smart
Смотрящий
Сообщения: 7565
Зарегистрирован: 28 авг 2009, 00:00
Имя: Юрий
Откуда: Украина. Межевая.

Сообщение Dj_smart »

кто-нибудь полным шагом пользуется?
Ради прикола попробовал...Раньше не использовал, и впредь не собираюсь:). Во гремит-то! Тем более что по Х осталось монолитное соединение винта и движка. С муфтой вроде помягче, но даже не сравнитиь:(.
Глаза боятся, а руки делают!
Хостинг по CNC http://cncfiles.su/
Аватара пользователя
vzgherea
Станкостроитель
Станкостроитель
Сообщения: 82
Зарегистрирован: 07 дек 2009, 01:00

Сообщение vzgherea »

life писал(а):...Самое простое что приходит на ум, так это перезапускать степом таймер, при отсутствии степ таймер переполняется и по прерыванию уходим на удержание...
Через какой промежуток времени, при отсутствии STEP сигнала, ШД переводят в режим ожидания?
Какой % от номинального тока рекомендуется пропускать при удержании?

Или это всё индивидуально?
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Через какой промежуток времени, при отсутствии STEP сигнала, ШД переводят в режим ожидания?
Через промежуток времени превышающий минимальную частоту сигнала Step.
Какой % от номинального тока рекомендуется пропускать при удержании?
Ток удержания должен быть таким, чтобы вал двигателя надёжно фиксировался.
  Не в тему:   А вобще эти вопросы никакого отношения к программированию не имеют, поэтому завязываем с офтопиком. Подобные вопросы впредь прошу задавать в соответствующих темах форума.
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Аватара пользователя
Pyku_He_oTTyda
Станкостроитель
Станкостроитель
Сообщения: 13
Зарегистрирован: 07 сен 2009, 00:00

Сообщение Pyku_He_oTTyda »

Приветствую всех!
Вероятно, уже пролетала эта ссылка
www.chipenable.ru
если нет, то очень рекомендую! Более лучшего изложения я не встречал в сети.
ra59m
Станкостроитель
Станкостроитель
Сообщения: 289
Зарегистрирован: 05 янв 2010, 01:00
Откуда: Моск. обл. Ногинск

Сообщение ra59m »

Dj_smart писал(а):Вот тут Скачать файл "prog_avr_pic.rar"(9.1 мб)
А по диску... Смотри оглавление в книге, и что интересует выложу.
Классный учебник -спасибо !!!
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Сообщение koolhatcker »

Ну вот и свершилась проверка теории на практике.
Вроде даже работает.:)
http://it-en.ru/cnc/driver/Simple%20driver%20628.html
Для обсуждения вопросов работы данного устройства создал тему тут: http://www.cncmasterkit.ru/modules.php? ... 0053#10053
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
neyvert
Станкостроитель
Станкостроитель
Сообщения: 311
Зарегистрирован: 05 апр 2011, 00:00
Откуда: Междуреченск

Re: Уроки на Си.

Сообщение neyvert »

спасибо! изучил, все вроде понятно почему контроль степа делаем по спадающему фронту? а так же хотелось продолжения хотябы в виде теории по быстрому, медленному, смешанному спаду токов! когда и в какие моменты лучше ими пользоватся? до какого уровня можно поднять частоту ШИМ?
Если частота ШИМ 20кгц это получается 50мкс, если сигнал степ превышает это значение тогда будет пропуск шагов?
Спасибо за статью.
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

Re: Уроки на Си.

Сообщение koolhatcker »

neyvert писал(а):почему контроль степа делаем по спадающему фронту?
Потому, что вход Step подтянут к +5В и активный уровень для него - низкий.
neyvert писал(а):теории по быстрому, медленному, смешанному спаду токов!
К данному "железу" это неприменимо. Рекомендую ознакомиться с документацией на интегральные микрошаговые драйверы - там всё это расписано.
neyvert писал(а):до какого уровня можно поднять частоту ШИМ?
Насколько позволит МК при данной тактовой.
neyvert писал(а):если сигнал степ превышает это значение тогда будет пропуск шагов?
Нет, пропуска не будет. Время обработки изменения уровня на входе Step около 5uS. Частота ШИМ с частотой Step связана косвенно, а не непосредственно :).
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
neyvert
Станкостроитель
Станкостроитель
Сообщения: 311
Зарегистрирован: 05 апр 2011, 00:00
Откуда: Междуреченск

Re: Уроки на Си.

Сообщение neyvert »

ОК! Спасибо за разьяснения.
Baykonur
Станкостроитель
Станкостроитель
Сообщения: 18
Зарегистрирован: 10 дек 2015, 05:08
Имя: Александр
Откуда: Томск

Re:

Сообщение Baykonur »

koolhatcker писал(а):Выложил пока сюда: http://it-en.ru/cnc/doc/1.html
koolhatcker писал(а):Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html
Ссылки не рабочие. Материал, наверно давно пропал? Интересно было бы почитать !
alecsey
Станкостроитель
Станкостроитель
Сообщения: 442
Зарегистрирован: 26 май 2011, 00:00
Имя: Алексей
Откуда: Дальний восток Шимановск

Re: Уроки на Си.

Сообщение alecsey »

Baykonur писал(а):koolhatcker писал(а):
Выложил пока сюда: http://it-en.ru/cnc/doc/1.html
koolhatcker писал(а):
Ну раз все молчат, то вот вам пища для разговоров...
http://it-en.ru/cnc/doc/2.html
Можно как то попросить материал или перезалить куда нибудь? Хотел на зиму занятие себе организовать)))
  Не в тему:   в добавок к аэрографу :crazy:
BMB
Станкостроитель
Станкостроитель
Сообщения: 381
Зарегистрирован: 04 дек 2009, 01:00
Имя: Виктор
Откуда: Московская обл.

Re: Уроки на Си.

Сообщение BMB »

В 9-м радио драйвер ШД на меге48, есть исходники на асме с коментами, на зиму должно хватить)))
alecsey
Станкостроитель
Станкостроитель
Сообщения: 442
Зарегистрирован: 26 май 2011, 00:00
Имя: Алексей
Откуда: Дальний восток Шимановск

Re: Уроки на Си.

Сообщение alecsey »

:company: спасибо! :)
Baykonur
Станкостроитель
Станкостроитель
Сообщения: 18
Зарегистрирован: 10 дек 2015, 05:08
Имя: Александр
Откуда: Томск

Re: Уроки на Си.

Сообщение Baykonur »

BMB писал(а):В 9-м радио драйвер ШД на меге48, есть исходники на асме с коментами, на зиму должно хватить)))
Спасибо, конечно! Но тема всё таки "Уроки на Си" На Сях попроще маленько, тут проблемы возникают при настройке периферии, и хотелось бы видеть примеры программирования шагового со стабилизацией тока - в 1, 1/2, микрошаге. К асму всё равно потом подходить придётся, на нём всё чётче, конечно, но потом...
Пока нарыл книгу Программирование на языке C для AVRи PIC микроконтроллеров Ю.А.Шпак 2011-600M и полезный сайтик - easyelectronics.
Сам пока подсел на Атмегу.
Ответить