Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 43 64

Left Radio: и не думаешь как оно там это сделает, как будет регистры использовать и тд...
Да я к тому и говорю, что прерывания - это аппаратная часть МК, и к языку С отношения не имеет...
Только даташит на конкретный МК...

 

Имеет ли это смысл? Диаграмма к ранее сказанному. Увеличение "величины" при нажатии кнопки "+".

 

По поводу графа, да на мой взгляд имеет смысл, чуть позже попробую на программить.
Счетчик релакса выполняет функцию дискретного прибавления, но мне кажется для приращения скорости надо вместе с опусканием флага релакса толи взводить флаг убыстрения либо делать "величина" + 10, вроде так.
Хотя нет, так будет изменение величины каждую 1сек, просто уже на 10. Значит надо считать сколько раз счетчик релакса сбрасывал свое значение и если => 5, то установить предел его счета например 10 а не 100.

 

Это всё у меня условно, на счет >=100. Завтра придумаю дальше, с убыстрением счета.
Как часто номинально опрашиваются кнопки? Это вопрос знатокам.

 

Vladikas: Как часто номинально опрашиваются кнопки? Это вопрос знатокам.
Обычно стараюсь делать, чтоб контроллер распознавал нажатие не позднее чем через 0.1 сек. Это незаметно человеку, позволяет устранить практически любой дребезг, позволяет делать комбинации (типа двойного клика). Соответственно счетчик (как правило однобайтный) инкрементирую или декрементирую с частотой порядка 5кГц. При достижении счетчиком максимума считается что кнопка перешла в состояние "нажато", при достижении нуля - кнопка перешла в состояние отпущено.

 

Доброго всем времени суток. Попались мне тут в руки контроллеры PIC32. Никто случайно не подскажет можно ли исполнять код из внешней памяти?
Т.е. стоит Flash память по SPI.
И еще аналогичный вопрос о подключении внешнией SRAM - возможно ли?

 

Хочу малость не в тему вопрос задать. Праздный, так сказать, вопрос.
А зачем вообще писать код на Си для ПИКов? Почему не для АВР?

Я конечно абсолютно не спец, но какое-то мнение и у меня сложилось.
Начинал с ПИКов и ассемблера. Почему? Да потому что система команд и архитектура (всякие регистровые заморочки) этих процессоров (типа 16F628 и подобных) очень простые. Легко запомнить весь набор ассемблерных команд. Да и с регистрами все просто - все одинаковые и все доступны для работы через аккумулятор. Такое ощущение, что процики разрабатывались специально под программирование на асме.
Время шло, ну и... Дай думаю АВРки на зуб попробую. Начал изучать и понял, что хрен наскоком возьмешь их ассемблер. Команд чертова уйма, и архитектура специфическая по сравнению с родными ПИКами. Есть рабочие регистры, есть ОЗУ, есть стек, есть двухбайтовые образования, и ко всем подход разный. Да и вообще по всем показателям, по работе с периферией, по возможностям, АВРки покруче будут, чем ПИКи. И тут я понял, почему АВРщики так любят Си - лень с таким навороченным ассемблером валандаться. Решил тоже поднапрячься в изучении основ Си. Пока в начальной стадии мигаю светодиодами и управляю кнопками.
Так вот и думаю, какой смысл писать на Си для ПИКов? Ведь для АВР код будет практически тот же самый, но сами-то контроллеры АВР помощнее будут. Учитывая неоптимальность самого кода (для новичка), плюс издержки компиляции получится примерно "баш на баш". Что на ПИКах на асме, что на АВР на Си. А на Си конечно все гораздо проще.

 

rfc: Vladikas: Как часто номинально опрашиваются кнопки? Это вопрос знатокам.
Обычно стараюсь делать, чтоб контроллер распознавал нажатие не позднее чем через 0.1 сек.

Вопрос в том именно как часто будет по таймеру опрашиваться клавиатура?
------------------
Или это в корне неверно, опрашивать кнопки по таймеру, а правильно считывать состояние по прерыванию RB0?

 

Vladikas: Вопрос в том именно как часто будет по таймеру опрашиваться клавиатура?

rfc: Соответственно счетчик (как правило однобайтный) инкрементирую или декрементирую с частотой порядка 5кГц.
Это не ответ?

256 - максимально значение счетчика. От нажатия до отпускания счетчик "пробегает" туда и обратно. Итого - 512 тактов надо "пробежать" за 0.1 сек. 512/0.1 = 5120 тактов в секунду ~5кГц

 

Zandy: А зачем вообще писать код на Си для ПИКов? Почему не для АВР?
...почему АВРщики так любят Си - лень с таким навороченным ассемблером валандаться.
Так вот и думаю, какой смысл писать на Си для ПИКов?

Да, несомненно аврки помощнее пиков будут по всем параметрам, но представление, что ассемблер пиков проще ассемблера аврок, вследствие меньшего числа команд, является общепринятым. заблуждением. Чтобы далеко не ходить, сравните команды MOVF, MOVWF, MOVLW, MOVLB, MOVFF для пика и команды LD/ST/MOV/IN/OUT для аврки. Использование последних на мой взгляд проще и нагляднее. Я уж не говорю о том, что применение команд с почти одинаковым написанием (разница в одну букву в середине слова) сильно напрягает. А то, что в авр якобы 133 инструкции, вместо 37 - не более, чем пиаровский ход менеджеров атмела, не самый удачный к тому же.

Опять же глубоко распространённое мнение, что программы на си переносимы с одного МК на другой. Полнейшая чушь! Программы для МК существенно привязаны к периферии МК, отсюда си программа обязана следовать причудам архитектуры конкретного МК. Что-то я не видел ни одного более-менее приличного проекта, перенесённого целиком с аврки на пик или обратно без каких-либо переделок.

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