Перейти к содержанию
    

Изменение текста программы при смене компилятора и чипа

А это что :rolleyes: ? Подробней для новичка.

1UL - это явное указание типа единицы - unsigned long

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

Но Палыч правильно говорит - "операции поразрядного ИЛИ" (|), там не надо

нужно применить операцию "логического И" - &&

 

Да и очередность операций это хорошо, но я стараюсь всегда явно указывать очередность скобками - на душе спокойнее, что не ошибусь и чего-то не упущу

while ( (!(PIND & (1UL << Button_R))) && (StatusPovorot != Rstop) )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли вот этот код...заменить на ...

и будет ли перед записью происходить проверка на совпадение данных если вот это...заменить на...

Функции eeprom_update_xxx отличаются от функций eeprom_write_xxx тем, что перед записью проверяют содержимое.

Поэтому, ответ на оба вопроса - да.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Остался один насущьный вопрос))) Почему в реальном железе счёт импульсов скачет через позицию или более?(т.е. в два-три раза быстрее, при этом сигнал с энкодера нормальный) Где ещё поставить задержки из учёта скорости поворота 1об/мин? Вот проект в студии povorot_valcoder_setup.rar и схема post-60401-1322903636_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В датчике ЛА7 на ТЛ2 (4093, 40106) в смысле с триггером Шмитта на входе заменить не хотите? Еще напрашивается добавить конденсатор 1нф параллельно R21 в датчике. Фильтр на дата выводе лучше переделать, поставив на выходе микросхемы просто резистор 1к наверху линии и такой же внизу. После него, параллельно входу контроллера конденсатор на - питания и диоды-стекляшки (кд521, 1N4148) на +/- питания. Внизу линию можно притянуть к - питания резистором 10к. Где-то так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то стремно передавать ИМПУЛЬСЫ, тем более счетные, по длинной линии... имхо

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Говорят, что когда передавали первую фотографию обратной стороны Луны, то время передачи одного пикселя было 2 часа, а тут всего каких-то 50м расстояние. Все зависит от соотношения сигнал/шум и скорости передачи, как ширины полосы этого сигнала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В датчике ЛА7 на ТЛ2 (4093, 40106) в смысле с триггером Шмитта на входе заменить не хотите? Еще напрашивается добавить конденсатор 1нф параллельно R21 в датчике. Фильтр на дата выводе лучше переделать, поставив на выходе микросхемы просто резистор 1к наверху линии и такой же внизу. После него, параллельно входу контроллера конденсатор на - питания и диоды-стекляшки (кд521, 1N4148) на +/- питания. Внизу линию можно притянуть к - питания резистором 10к. Где-то так.

Не, лезть по такой погоде к датчику чтот не климатит))) Внизу фильтр с применением дросселя и кондёров нужен для отсечки ВЧ токов которые при работе на передачу наводятся на проводе, а вот притянуть к - 10к сопротивлением я пробовал - результат тот же. Диоды я не понял для чего ставить. Да, как бы не пришлось возвращаться к токовому интерфейсу и измерению времени заряда конденсатора(((Вот только соединять оси переменника и редуктора очень уж проблемная вещь. Но с другой стороны sigmaN прав, такой интерфейс удобнее и можно данные в EEPROM не заносить поскольку всегда понятна позиция датчика.post-60401-1322914649_thumb.png

Вот ещё код povorot_valcoder_setup.rar может кто глянет, что я не так в USE_UART_DEBUG с UART делаю? :smile3046:

Изменено пользователем RW6MKA

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

просто lc-фильтр может звенеть на фронтах импульса, поэтому лучше применить rc-цепочку или добавить демпферный резистор последовательно с индуктивностью. Да и ЛА7 с такой нагрузкой на выходе может подвозбуждаться. А диоды нужны для защиты входа котроллера от импульсных напряжений (типа разряды всякие), просто сливают лишнюю энергию в питание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может кто глянет, что я не так в 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 задефайнен быть не может. Ну и дальше подумайте там что куда можно перегруппировать чтобы было и понятнее и проще...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну я не компилил(не на чем щас), но а что не так то?

Всё, разобрался. По запарке забыл нужные инклуды и тупо пытался скомпилить ну а компилятор понятно безбожно ругался)))

 

просто lc-фильтр может звенеть на фронтах импульса, поэтому лучше применить rc-цепочку или добавить демпферный резистор последовательно с индуктивностью. Да и ЛА7 с такой нагрузкой на выходе может подвозбуждаться. А диоды нужны для защиты входа котроллера от импульсных напряжений (типа разряды всякие), просто сливают лишнюю энергию в питание.

Вообщем примерно так должно получиться?post-60401-1322976662_thumb.png

Ну в принципе эффекта никакого. Индикация скачет попрежнему. Сейчас подключу USART и гляну на мониторе что там с прерываниями и счётом импульсов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот результаты мониторинга(((1.txt (это в сокращенном виде конечно) Не пойму почему прерывание считает по два ну и соответственно количество импульсов идёт через один. А не может такого быть, что пока идёт обработка прерывания "в очередь" устанавливается ещё одно? Прерывание наступило, флаг сбрасывается, но он случайно не устанавливается сразу на место(до начала обработки прерывания)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внимательно проработайте подключение сигнала DATA. Если "горячий" проводник по вашей схеме до процессора просматривается более или менее нормально.То связь корпуса 561ЛА7 с корпусом процессора как то виртуальна или отсутствует. Оптрон здесь просится. так как земли развязаны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Тогда откуда счёт через одну позицию я вообще не пойму. Скорость вращения достаточно мала. Задержки в обработчике я ставил от 100мс до 900мс и разницы как бы не заметил. Что делать? :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-моему если проц уже заскочил в обработчик, то пока он оттуда не вылезет - все другие прерывания(с таким-же номером) будут просто тихонько проигнорированы.
Не-а... Одно, всё-таки проскочит...

По условию прерывания будет взведён флаг прерывания, и, после выхода из процедуры обработки этого прерывания, будет сгенерировано ещё одно... Поэтому, перед выходом из процедуры обработки прерывания, наверное, нужно сбросить флаг прерывания (сбрасывается записью во флаг единицы ! ).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...