www.cncmasterkit.ru
http://cncmasterkit.ru/

Уроки на Си.
http://cncmasterkit.ru/viewtopic.php?f=11&t=49
Страница 1 из 1

Автор:  Dj_smart [ 12 сен 2009, 23:03 ]
Заголовок сообщения:  Уроки на Си.

Всем привет. Бродя по просторам интернета надыбал, по моему мнению, полезную веСч :) . Это архив, причём здоровый, 12 метров. Но в нём всё то, что интересно именно станкостроителям. Это небольшой робот-тележка, и на основе этой игрушки даны примеры программирования меги-8, работы со всякими датчиками, и прочее. Причем начинается с установки VinAVR, AVR Studio, обьясняется как с ними работать. И очень неплохое, на мой взгляд, описание языка Си. Особенно понравилось создание и применение библиотек. Как в делфи, включай в программу и всё. И всё это счастье - по русски :) .
Скачать файл "microcamp.rar"(12.1 мб)

Автор:  koolhatcker [ 12 сен 2009, 23:12 ]
Заголовок сообщения: 

Тьху ты... :))

Автор:  lobzik [ 15 янв 2010, 10:23 ]
Заголовок сообщения: 

Че то не скачивается :no:

Автор:  ra59m [ 16 янв 2010, 15:54 ]
Заголовок сообщения: 

Посмотреть PIC на СИ примеры

http://www.pcports.ru/articles/pic3.php

Автор:  Dj_smart [ 16 янв 2010, 16:22 ]
Заголовок сообщения: 

Есть книга "Программирование на языке C для AVR и PIC микроконтроллеров", могу залить. И есть диск к ней, там в книге есть его оглавление.

Автор:  koolhatcker [ 16 янв 2010, 16:44 ]
Заголовок сообщения: 

Цитата:
Посмотреть PIC на СИ примеры

Гы. У меня практически слово в слово получилось:).

Автор:  ra59m [ 16 янв 2010, 18:14 ]
Заголовок сообщения: 

Dj_smart
Залей пожалуйста!!!
Программирование на языке C для AVR и PIC микроконтроллеров.
Интересно.

Автор:  Dj_smart [ 16 янв 2010, 18:35 ]
Заголовок сообщения: 

Вот тут Скачать файл "prog_avr_pic.rar"(9.1 мб)
А по диску... Смотри оглавление в книге, и что интересует выложу.

Автор:  koolhatcker [ 16 янв 2010, 22:31 ]
Заголовок сообщения: 

Выложил пока сюда: http://it-en.ru/cnc/doc/1.html
Стиль изложения конечно же оставляет желать лучшего, но сразу всё нормально написать - времени столько нет. Поэтому смотрите, если увидите ошибки или что-то будет непонятно, то говорите и задавайте вопросы, буду исправлять.

Автор:  Dj_smart [ 16 янв 2010, 23:41 ]
Заголовок сообщения: 

koolhatcker, а продолжение будет? Было бы здоровски:).

Автор:  koolhatcker [ 16 янв 2010, 23:58 ]
Заголовок сообщения: 

Время покажет:).
Пока что никакого интереса не вижу. На ошибки не указывают, вопросов не задают...
Зачем же вхолостую разоряться?:)

Автор:  Brazier [ 19 янв 2010, 21:58 ]
Заголовок сообщения: 

koolhatcker, как можно организовать на каком-нибудь выводе МК дискретный сигнал удержания?

Автор:  life [ 20 янв 2010, 08:01 ]
Заголовок сообщения: 

Дальше давай! А то назло на астме останусь! :ggg:

Автор:  koolhatcker [ 20 янв 2010, 11:13 ]
Заголовок сообщения: 

Цитата:
как можно организовать на каком-нибудь выводе МК дискретный сигнал удержания?

Не понял вопроса. Там все сигналы дискретные - или есть или нет.:). О сигнале удержания чего идёт речь?.

Автор:  BMB [ 20 янв 2010, 13:38 ]
Заголовок сообщения: 

Есть такая книга, можно скачать, можно купить. СД прилагается
[spoiler]Изображение[/spoiler]

Автор:  Brazier [ 20 янв 2010, 18:35 ]
Заголовок сообщения: 

koolhatcker писал(а):
О сигнале удержания чего идёт речь?.

Речь о снижении тока в обмотках ШД.

Автор:  ShCoder [ 20 янв 2010, 22:02 ]
Заголовок сообщения: 

koolhatcker писал: Выложил пока сюда: http://it-en.ru/cnc/doc/1.html

... бог с ним со стилем изложения, который в целом очень даже ничего :) , но вот приводить такой код в пример новичкам явно не стоит, а то еще возьмут это за основу ...
Не я писал - поэтому и править не мне, но хотя-бы isr(void){} переписать надо ....

Автор:  koolhatcker [ 21 янв 2010, 05:26 ]
Заголовок сообщения: 

Цитата:
Речь о снижении тока в обмотках ШД.

Прежде чем его снижать, было бы неплохо для начала его задать...:)

Автор:  koolhatcker [ 21 янв 2010, 05:42 ]
Заголовок сообщения: 

Цитата:
но вот приводить такой код в пример новичкам явно не стоит, а то еще возьмут это за основу ...

Имхо совсем новички вобще ничего не поймут. А у тех, кто понял, должны были бы возникнуть вопросы.:)
Именно этих вопросов я и жду. То есть при публикации всего этого дела я рассчитывал на диалог:). А просто выложить готовый код - неинтересно. Их и так на каждом углу есть...
Цитата:
isr(void){} переписать надо ....

А можно подробнее? Тут то что не понравилось? Как вызывается или то, что между фигурных скобок?:) Если первое, то непонятно. Если второе, то это всего лишь один из возможных вариантов реализации. Причём вроде как самый кривой. Кривее придумать не получилось :). Если делать правильно, то придётся объяснять устройство макроса, делающим возможным непосредственное обращение к биту в порту либо вставку на асме. И то и другое имхо выходит за рамки задуманного текста. Конечно есть и ещё один вариант, но он тоже за рамками:).
В общем наверное будет лучше не скакать туда-сюда, а начать с самого начала. Но тут опять же возникает вопрос - а нужно ли? Ведь документации, описывающей самые первые шаги - полно. Стоит ли повторяться? Помогите найти ту самую грань, до которой каждый может дойти самостоятельно, а после которой уже потребуются объяснения...:)

Автор:  Brazier [ 21 янв 2010, 06:31 ]
Заголовок сообщения: 

koolhatcker, не нужно задавать ток ШД, нужен сигнал что ШД временно остановился.

Автор:  life [ 21 янв 2010, 08:06 ]
Заголовок сообщения: 

Brazier писал(а):
koolhatcker, не нужно задавать ток ШД, нужен сигнал что ШД временно остановился.

Опять не понятно, сигнал от шд? Или слежение микроконтроллером? Если второе, то необходимо отслеживать степ, и при отсутствии оных более определенного времени выдавать сигнал на удержание. Как это организовать програмно? Самое простое что приходит на ум, так это перезапускать степом таймер, при отсутствии степ таймер переполняется и по прерыванию уходим на удержание. Как то так...

Автор:  koolhatcker [ 21 янв 2010, 11:23 ]
Заголовок сообщения: 

Цитата:
не нужно задавать ток ШД, нужен сигнал что ШД временно остановился.

Кому нужен и для чего?
Цитата:
перезапускать степом таймер

Вполне себе правильный вариант.

Автор:  Brazier [ 21 янв 2010, 18:32 ]
Заголовок сообщения: 

Цитата:
так это перезапускать степом таймер, при отсутствии степ таймер переполняется и по прерыванию уходим на удержание

С этого момента пожалуйста подробней %)

Автор:  koolhatcker [ 21 янв 2010, 20:25 ]
Заголовок сообщения: 

Подробнее уже некуда. Дальше начинается конкретный код под конкретный МК и компилятор. Начинайте уже думать самостоятельно:). Информации более чем достаточно:). Попробуйте сами сделать, а мы поправим если что не так.

Автор:  ShCoder [ 21 янв 2010, 21:20 ]
Заголовок сообщения: 

koolhatcker - не понравилось то, что между {} , а именно как написан обработчик прерывания .... если целью было напихать побольше ненужных инструкций, то задача с успехом выполнена :)
... ну а если серьезно, то вопрос могут не вызывать только первые 3..4 строчки кода, а все остальное - один большой вопрос.... ну очень много лишнего кода.....

Автор:  koolhatcker [ 21 янв 2010, 23:20 ]
Заголовок сообщения: 

Цитата:
если целью было напихать побольше ненужных инструкций

Нет:). Цель была указана в заголовке статьи.
Цитата:
ну очень много лишнего кода.....

С удовольствием посмотрю на ваш вариант.:)

Автор:  ShCoder [ 21 янв 2010, 23:38 ]
Заголовок сообщения: 

... ок

if(INTF){
INTF = 0; // оставим как есть

if (PORTB & 2){ cur_step++;} // Если нужно крутить по часовой - увеличиваем указатель на элемент таблицы(массива)
else { cur_step--; } // ... иначе уменьшаем ...
cur_step&=3; // ... в таблице не более 4 значений, т.е. индекс от 0 до 3

.... итого 3 строчки вместо ......
можно разместить и в 2-х

(PORTB & 2) ? cur_step++ : cur_step-- ;
cur_step&=3;

... а подумав еще - и в одной :)

ххххххх; - которая сделает то-же самое (и возможно быстрей)
.... хотелось бы увидеть напишет ли кто эту строчку, если нет - ну тогда-уж выложу свой вариант .....

Автор:  koolhatcker [ 21 янв 2010, 23:59 ]
Заголовок сообщения: 

Цитата:
.... итого 3 строчки вместо ......
можно разместить и в 2-х
(PORTB & 2) ? cur_step++ : cur_step-- ;

Ага, а потом объяснять что вся эта писанина означает?:) Цель была не в больше/меньше, а в том, чтобы читающий понял ВЕСЬ АЛГОРИТМ работы. Понимаете? В ваши 2 строчки новичок будет сутки пялиться и ничего не поймёт:).

Автор:  ShCoder [ 22 янв 2010, 00:16 ]
Заголовок сообщения: 

... ну не знаю - тут вроде все как "по книжке" :)

... ведь не даром Д. Кнут называет программирование Искусством - фантазию надо развивать сразу, потому что потом будет слишком поздно :ggg: :ggg: :ggg:

PS - теперь даже страшно приводить вариант из одной строки :)

Автор:  koolhatcker [ 22 янв 2010, 00:26 ]
Заголовок сообщения: 

Просто всему своё время:).

Автор:  vzgherea [ 22 янв 2010, 12:14 ]
Заголовок сообщения: 

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

Резисторы и конденсаторы, пока нету ШИМ-а, можно исключить, да?

Автор:  koolhatcker [ 22 янв 2010, 13:42 ]
Заголовок сообщения: 

Да, конечно. Они ж на будующее:).

Автор:  ShCoder [ 23 янв 2010, 18:29 ]
Заголовок сообщения: 

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

исходные данные - процедура обработки прерывания 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;
все .... и вроде ничего непонятного тут нет :)

[off]
Цель - заставить людей ДУМАТЬ и искать ОПТИМАЛЬНЫЕ решения (.. и не ждать ХАЛЯВЫ)[/off]

Автор:  koolhatcker [ 23 янв 2010, 20:42 ]
Заголовок сообщения: 

Цитата:
или так, что чуть лучше:

И получим выигрыш в объёме кода на 3 байта в ROM, но проигрыш на 2 байта в RAM по сравнению с текстом статьи. И всё это ради того, чтобы уместить всё в одну строку, но при этом сделать листинг абсолютно нечитаемым для новичка?
Цитата:
Цель - заставить людей ДУМАТЬ и искать ОПТИМАЛЬНЫЕ решения

Уместить всё в одну строчку - далеко не всегда оптимальное решение. Как по быстродействию, так и по читаемости. Ещё раз напоминаю: статья - для новичков. Поэтому прошу в дальнейшем смотреть на происходящее в этой теме именно с этой позиции и критерием лучше/хуже считать в первую очередь читаемость и понимание общего алгоритма.
[off]
P.S. Сообщения с выяснением отношений удалил. Выясняйте в личке. А тут - только по существу. Кто не поймёт - не обижайтесь :).[/off]

Автор:  vzgherea [ 27 янв 2010, 13:47 ]
Заголовок сообщения: 

koolhatcker, а продолжение к статье http://it-en.ru/cnc/doc/1.html будет? Интересна реализация ШИМ на мк.

Автор:  koolhatcker [ 27 янв 2010, 17:39 ]
Заголовок сообщения: 

Ну если хотите именно ШИМ, то давайте внедрим ШИМ.:)
P.S. Это ШИМ? Или не совсем?:). Попытка симуляции работы ДШИ200-2, питание 24В. Синее - опорное, зелёное - затвор ключа, красное - напряжение на датчике тока.
Изображение

Автор:  koolhatcker [ 29 янв 2010, 19:56 ]
Заголовок сообщения: 

Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html

Автор:  koolhatcker [ 30 янв 2010, 15:55 ]
Заголовок сообщения: 

И опять все молчат...
Ждут 3-й части с полушагом и режимом удержания, т.е. исходников для готового драйвера под полушаг?:). Чую зря я тут распинаюсь...

Автор:  Artem [ 30 янв 2010, 21:00 ]
Заголовок сообщения: 

koolhatcker писал(а):
Чую зря я тут распинаюсь...


:no: Нет, не зря!!! Вы же описываете алгоритм, а как и к чему его применить каждый решит сам для себя. :ok:

Автор:  vzgherea [ 30 янв 2010, 21:53 ]
Заголовок сообщения: 

koolhatcker писал(а):
Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html


Всё очень доступно изложенно :trumbsup: Спасибо! Думал всё намного сложнее :)

Есть пара вопросов:
1. Когда (периодически или после какого-либо события) приходят прерывания с компараторов?
2. Зачем использовать ножку МК для формирования опорного напряжения? Источник питания МК не годится?

Автор:  koolhatcker [ 30 янв 2010, 22:22 ]
Заголовок сообщения: 

Цитата:
1. Когда (периодически или после какого-либо события) приходят прерывания с компараторов?

Это подробно описано в документации на МК:).
При изменении уровня сигнала на выходе любого компаратора устанавливается флаг прерывания от компараторов CMIF. Далее в подпрограмме обработки прерываний пользователь может проверить флаги C1OUT и C2OUT и выяснить какой именно компаратор вызвал прерывание. В рассмотренном случае как только напряжение с датчика тока превысит опорное, то тут же (типовое время задержки 150nS) будет установлен флаг CMIF и возникнет прерывание.
Цитата:
Зачем использовать ножку МК для формирования опорного напряжения? Источник питания МК не годится?

Источник питания МК вполне годится. Обратите внимание на схему - эта ножка МК является выходом имеющего в PIC16F628 аппаратного модуля ШИМ. Поэтому если в дальнейшем в драйвер захочется ввести режим снижения тока двигателя при простое, то на эту ножку можно выдавать например не уровень лог.1, а ШИМ сигнал со скважностью 50%, что позволит снизить ток в режиме удержания:).

Автор:  Dj_smart [ 30 янв 2010, 22:50 ]
Заголовок сообщения: 

koolhatcker, если я в твоём первом описании таблицу шагов тупо заменяю на полушаг, и указываю что элементов таблицы стало 8, будет работать?
И там есть вот такое:
PORTB = 0x00; //Выводим в порт В нули
TRISB = 0x03; //Весь порт В кроме 2-х младших разрядов - на вывод
Строки не надо поменять местами? А то(на мой взгляд) сначала выводим данные в порт, а потом производим его настройку(ввод или вывод).

Автор:  koolhatcker [ 30 янв 2010, 23:19 ]
Заголовок сообщения: 

Код:
указываю что элементов таблицы стало 8, будет работать?

Нет. Нужно ещё там где указатель меняется при приходе импульса STEP поправить. Надеюсь не в реальном железе решил проверять? Сгорит скорее всего:).
Цитата:
Строки не надо поменять местами?

Надо. Сначала - направление, потом - значение.

Автор:  Dj_smart [ 30 янв 2010, 23:30 ]
Заголовок сообщения: 

Цитата:
Сгорит скорее всего

Да нивжизнь:). Униполяр, хоть все полевики сразу открой... По крайняку не вижу причины гореть:)
Цитата:
там где указатель меняется

Ага, прошляпил. И больше причин нет, так? И тогда вполне естественно добавить опрос ноги, типа "выбор режима - шаг/полушаг". Я так понимаю,это надо всунуть в программу в самом начале, после настроек портов?
Ага, так это надо и какие-то указатели на таблицы, и... Короче недорос:). Пока:).

Автор:  koolhatcker [ 30 янв 2010, 23:57 ]
Заголовок сообщения: 

Цитата:
По крайняку не вижу причины гореть

Ну попробуй:).
Цитата:
И больше причин нет, так?

На первый взгляд вроде как нет(при абсолютной идентичности обмоток). Пробовать нужно, чтобы точно сказать.
Цитата:
"выбор режима - шаг/полушаг"

Мужики, только честно, кто-нибудь полным шагом пользуется?:) Мало того что на нём из-за резонанса движок не разогнать, так ещё и звук не тот :).

Автор:  Dj_smart [ 31 янв 2010, 00:23 ]
Заголовок сообщения: 

Цитата:
кто-нибудь полным шагом пользуется?

Ради прикола попробовал...Раньше не использовал, и впредь не собираюсь:). Во гремит-то! Тем более что по Х осталось монолитное соединение винта и движка. С муфтой вроде помягче, но даже не сравнитиь:(.

Автор:  vzgherea [ 04 фев 2010, 14:30 ]
Заголовок сообщения: 

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

Через какой промежуток времени, при отсутствии STEP сигнала, ШД переводят в режим ожидания?
Какой % от номинального тока рекомендуется пропускать при удержании?

Или это всё индивидуально?

Автор:  koolhatcker [ 04 фев 2010, 15:17 ]
Заголовок сообщения: 

Цитата:
Через какой промежуток времени, при отсутствии STEP сигнала, ШД переводят в режим ожидания?

Через промежуток времени превышающий минимальную частоту сигнала Step.
Цитата:
Какой % от номинального тока рекомендуется пропускать при удержании?

Ток удержания должен быть таким, чтобы вал двигателя надёжно фиксировался.
[off]А вобще эти вопросы никакого отношения к программированию не имеют, поэтому завязываем с офтопиком. Подобные вопросы впредь прошу задавать в соответствующих темах форума.[/off]

Автор:  Pyku_He_oTTyda [ 08 фев 2010, 20:04 ]
Заголовок сообщения: 

Приветствую всех!
Вероятно, уже пролетала эта ссылка
www.chipenable.ru
если нет, то очень рекомендую! Более лучшего изложения я не встречал в сети.

Автор:  ra59m [ 27 мар 2010, 12:12 ]
Заголовок сообщения: 

Dj_smart писал(а):
Вот тут Скачать файл "prog_avr_pic.rar"(9.1 мб)
А по диску... Смотри оглавление в книге, и что интересует выложу.

Классный учебник -спасибо !!!

Автор:  koolhatcker [ 30 мар 2010, 20:19 ]
Заголовок сообщения: 

Ну вот и свершилась проверка теории на практике.
Вроде даже работает.:)
http://it-en.ru/cnc/driver/Simple%20driver%20628.html
Для обсуждения вопросов работы данного устройства создал тему тут: http://www.cncmasterkit.ru/modules.php? ... 0053#10053

Автор:  neyvert [ 28 окт 2012, 12:35 ]
Заголовок сообщения:  Re: Уроки на Си.

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

Автор:  koolhatcker [ 28 окт 2012, 13:52 ]
Заголовок сообщения:  Re: Уроки на Си.

neyvert писал(а):
почему контроль степа делаем по спадающему фронту?

Потому, что вход Step подтянут к +5В и активный уровень для него - низкий.
neyvert писал(а):
теории по быстрому, медленному, смешанному спаду токов!

К данному "железу" это неприменимо. Рекомендую ознакомиться с документацией на интегральные микрошаговые драйверы - там всё это расписано.
neyvert писал(а):
до какого уровня можно поднять частоту ШИМ?

Насколько позволит МК при данной тактовой.
neyvert писал(а):
если сигнал степ превышает это значение тогда будет пропуск шагов?

Нет, пропуска не будет. Время обработки изменения уровня на входе Step около 5uS. Частота ШИМ с частотой Step связана косвенно, а не непосредственно :).

Автор:  neyvert [ 28 окт 2012, 14:21 ]
Заголовок сообщения:  Re: Уроки на Си.

ОК! Спасибо за разьяснения.

Автор:  Baykonur [ 05 июл 2016, 16:05 ]
Заголовок сообщения:  Re:

koolhatcker писал(а):
Выложил пока сюда: http://it-en.ru/cnc/doc/1.html

koolhatcker писал(а):
Ну раз все молчат, то вот вам пища для разговоров...:)
http://it-en.ru/cnc/doc/2.html

Ссылки не рабочие. Материал, наверно давно пропал? Интересно было бы почитать !

Автор:  alecsey [ 26 сен 2016, 07:48 ]
Заголовок сообщения:  Re: Уроки на Си.

Baykonur писал(а):
koolhatcker писал(а):
Выложил пока сюда: http://it-en.ru/cnc/doc/1.html
koolhatcker писал(а):
Ну раз все молчат, то вот вам пища для разговоров...
http://it-en.ru/cnc/doc/2.html

Можно как то попросить материал или перезалить куда нибудь? Хотел на зиму занятие себе организовать)))
  Не в тему:
  в добавок к аэрографу :crazy:

Автор:  BMB [ 27 сен 2016, 20:42 ]
Заголовок сообщения:  Re: Уроки на Си.

В 9-м радио драйвер ШД на меге48, есть исходники на асме с коментами, на зиму должно хватить)))

Автор:  alecsey [ 28 сен 2016, 07:28 ]
Заголовок сообщения:  Re: Уроки на Си.

:company: спасибо! :)

Автор:  Baykonur [ 29 окт 2016, 12:43 ]
Заголовок сообщения:  Re: Уроки на Си.

BMB писал(а):
В 9-м радио драйвер ШД на меге48, есть исходники на асме с коментами, на зиму должно хватить)))

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/