|
|
  |
Изменение текста программы при смене компилятора и чипа |
|
|
|
Dec 3 2011, 07:42
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(RW6MKA @ Dec 3 2011, 10:06)  А это что  ? Подробней для новичка. 1UL - это явное указание типа единицы - unsigned long хотя... это зависит от используемого Вами процессора. Если он 32-разрядный, то в подобных случаях явное приведение единицы к 32-разрядному типу есть гуд, потому как можно глюков нахватать, сам сталкивался Но Палыч правильно говорит - "операции поразрядного ИЛИ" (|), там не надо нужно применить операцию "логического И" - && Да и очередность операций это хорошо, но я стараюсь всегда явно указывать очередность скобками - на душе спокойнее, что не ошибусь и чего-то не упущу Код while ( (!(PIND & (1UL << Button_R))) && (StatusPovorot != Rstop) )
|
|
|
|
|
Dec 3 2011, 09:15
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Остался один насущьный вопрос))) Почему в реальном железе счёт импульсов скачет через позицию или более?(т.е. в два-три раза быстрее, при этом сигнал с энкодера нормальный) Где ещё поставить задержки из учёта скорости поворота 1об/мин? Вот проект в студии
povorot_valcoder_setup.rar ( 23.88 килобайт )
Кол-во скачиваний: 49 и схема
|
|
|
|
|
Dec 3 2011, 12:19
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Цитата(314 @ Dec 3 2011, 14:27)  В датчике ЛА7 на ТЛ2 (4093, 40106) в смысле с триггером Шмитта на входе заменить не хотите? Еще напрашивается добавить конденсатор 1нф параллельно R21 в датчике. Фильтр на дата выводе лучше переделать, поставив на выходе микросхемы просто резистор 1к наверху линии и такой же внизу. После него, параллельно входу контроллера конденсатор на - питания и диоды-стекляшки (кд521, 1N4148) на +/- питания. Внизу линию можно притянуть к - питания резистором 10к. Где-то так. Не, лезть по такой погоде к датчику чтот не климатит))) Внизу фильтр с применением дросселя и кондёров нужен для отсечки ВЧ токов которые при работе на передачу наводятся на проводе, а вот притянуть к - 10к сопротивлением я пробовал - результат тот же. Диоды я не понял для чего ставить. Да, как бы не пришлось возвращаться к токовому интерфейсу и измерению времени заряда конденсатора(((Вот только соединять оси переменника и редуктора очень уж проблемная вещь. Но с другой стороны sigmaN прав, такой интерфейс удобнее и можно данные в EEPROM не заносить поскольку всегда понятна позиция датчика.
Вот ещё код
povorot_valcoder_setup.rar ( 32.7 килобайт )
Кол-во скачиваний: 47 может кто глянет, что я не так в USE_UART_DEBUG с UART делаю?
Сообщение отредактировал RW6MKA - Dec 3 2011, 15:45
|
|
|
|
|
Dec 3 2011, 23:45
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата может кто глянет, что я не так в USE_UART_DEBUG с UART делаю? Ну я не компилил(не на чем щас), но а что не так то? Вы про вот это нагромождение? Код #ifdef USE_UART_DEBUG #ifdef UART_DEBUG_IMPULS { char digits[10]; itoa(Impuls, &digits[0], 10); uart_puts_P("Impuls: "); uart_puts(&digits[0]); #ifdef UART_DEBUG_PRERYV uart_puts_P(" | "); #else uart_puts_P("\r\n"); #endif #ifdef UART_DEBUG_PRERYV itoa(Preryv, &digits[0], 10); uart_puts_P("Preryv: "); uart_puts(&digits[0]); uart_puts_P("shtuk\r\n"); #endif } #endif #endif Вы поясните что вы хотите получить и что получаете в итоге? А то так не очень понятно что именно у вас не получается. Оно мне тоже не очень нравится ) начать можно с того, что можно убрать проверку ifdef USE_UART_DEBUG и сразу написать ifdef UART_DEBUG_IMPULS, потому что ранее дефайны стоят так, что UART_DEBUG_IMPULS без USE_UART_DEBUG задефайнен быть не может. Ну и дальше подумайте там что куда можно перегруппировать чтобы было и понятнее и проще...
--------------------
The truth is out there...
|
|
|
|
|
Dec 4 2011, 05:36
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Цитата(sigmaN @ Dec 4 2011, 03:45)  Ну я не компилил(не на чем щас), но а что не так то? Всё, разобрался. По запарке забыл нужные инклуды и тупо пытался скомпилить ну а компилятор понятно безбожно ругался))) Цитата(314 @ Dec 3 2011, 22:12) просто lc-фильтр может звенеть на фронтах импульса, поэтому лучше применить rc-цепочку или добавить демпферный резистор последовательно с индуктивностью. Да и ЛА7 с такой нагрузкой на выходе может подвозбуждаться. А диоды нужны для защиты входа котроллера от импульсных напряжений (типа разряды всякие), просто сливают лишнюю энергию в питание. Вообщем примерно так должно получиться?
Ну в принципе эффекта никакого. Индикация скачет попрежнему. Сейчас подключу USART и гляну на мониторе что там с прерываниями и счётом импульсов.
|
|
|
|
|
Dec 5 2011, 07:11
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Вот результаты мониторинга(((
1.txt ( 1.32 килобайт )
Кол-во скачиваний: 117 (это в сокращенном виде конечно) Не пойму почему прерывание считает по два ну и соответственно количество импульсов идёт через один. А не может такого быть, что пока идёт обработка прерывания "в очередь" устанавливается ещё одно? Прерывание наступило, флаг сбрасывается, но он случайно не устанавливается сразу на место(до начала обработки прерывания)?
|
|
|
|
|
Dec 5 2011, 09:38
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Цитата(sigmaN @ Dec 5 2011, 12:47)  По-моему если проц уже заскочил в обработчик, то пока он оттуда не вылезет - все другие прерывания(с таким-же номером) будут просто тихонько проигнорированы. Как-бы именно поэтому обработчик прерывания всегда стараются сделать как можно быстрее. Тогда откуда счёт через одну позицию я вообще не пойму. Скорость вращения достаточно мала. Задержки в обработчике я ставил от 100мс до 900мс и разницы как бы не заметил. Что делать?
|
|
|
|
|
Dec 5 2011, 12:29
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(sigmaN @ Dec 5 2011, 12:47)  По-моему если проц уже заскочил в обработчик, то пока он оттуда не вылезет - все другие прерывания(с таким-же номером) будут просто тихонько проигнорированы. Не-а... Одно, всё-таки проскочит... По условию прерывания будет взведён флаг прерывания, и, после выхода из процедуры обработки этого прерывания, будет сгенерировано ещё одно... Поэтому, перед выходом из процедуры обработки прерывания, наверное, нужно сбросить флаг прерывания (сбрасывается записью во флаг единицы ! ).
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|