Страница 11 из 103

Re: Програмирование pic на СИ.

Добавлено: Пн сен 12, 2011 21:23:43
misterkuk
Неужели люди которые знают програмирование не знают как зделать так чтоб работала моя арифметика?

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 09:35:34
Roman Venom
почему компилятор PICC18 ругается на
bit flag_1;

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 10:04:15
Аlex
Может потому, что Вы его пытаетесь объявить внутри ф-ии ?

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 11:20:46
Roman Venom
да нет, как глобальную переменную. Пишет синтакс эррор.

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 11:23:10
Аlex
Попробуйте объявить как static bit.

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 11:27:40
Roman Venom
static bit это вроде внутри ф-ции... но пробовал и так и сяк. Тоже самое:(

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 11:29:12
Аlex
Так у Вас компиль то какой ? Вы написали PICC18. Я так думаю что HI-TECH (?).

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 11:36:49
Roman Venom
Language tool versions: mpasmwin.exe v5.34, mplink.exe v4.34, mcc18.exe v3.34
PICC18, иначе как бы проект компилился с кодом и инками для 4550 :)))

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 11:54:57
Аlex
Language tool versions: mpasmwin.exe v5.34, mplink.exe v4.34, mcc18.exe v3.34
Не вижу ни в Ваших постах, ни в скрине подобной строки.
У меня объявление как bit прокатывает на ура. Не знаю почему у Вас не работает.
Может у Вас какой-нибудь там PRO :roll:

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 12:50:00
Roman Venom
Аlex
Не вижу ни в Ваших постах, ни в скрине подобной строки.
У меня объявление как bit прокатывает на ура. Не знаю почему у Вас не работает.
Та вроде обычный mcc_18. Только этот глюк... Кстати в хелпе отсутствует этот тип переменной.

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 14:56:11
urry
Вы снесли мозг как мне, так и Алексу.

значение переменной - бит в общем, идет как бонус для этих компиляторов - :)
и, скорее всего, потому что ими хайтек куплен, (в котором оно есть как бы изначально), для совместимости с ним делают примочки.
Попробуйте подключить в проект файл GenericTypeDefs.h

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 18:28:28
Chettuser
Так MCC18 или PICC18 ? Насколько я понимаю это несколько разные компиляторы... :roll:

Re: Програмирование pic на СИ.

Добавлено: Вт сен 13, 2011 18:31:48
Аlex
Конечно разные.
Roman Venom всем мозг запудрил. :))
В PICC есть такой тип данных, в MCC походу нет. Вот и весь ответ. :)

Re: Програмирование pic на СИ.

Добавлено: Ср сен 14, 2011 07:48:44
Roman Venom
urry
Вы снесли мозг как мне, так и Алексу.
За файлик спасибо, попробую на досуге.

Аlex
Roman Venom всем мозг запудрил.
:))) Ну прикол в том, что MBLAB подсвечивает... это вводит в заблуждение.
В PICC есть такой тип данных, в MCC походу нет. Вот и весь ответ.
Уже понял.

Re: Програмирование pic на СИ.

Добавлено: Пн сен 26, 2011 15:13:00
misterkuk
Ребят, ну обьясните как работать с этим флоат float. читал файл который дали выше. но там же не сказано как это всё оформить програмно.



volatile - ставьте если нужно предотвратить возможность повреждения содержимого переменной в прерывании, и не позволить компилятору попытаться выкинуть её при оптимизации кода. ------------ самое нормальное обьяснение.

Re: Програмирование pic на СИ.

Добавлено: Пн сен 26, 2011 18:46:19
FlySnake
misterkuk писал(а):Ребят, ну обьясните как работать с этим флоат float. читал файл который дали выше. но там же не сказано как это всё оформить програмно.



volatile - ставьте если нужно предотвратить возможность повреждения содержимого переменной в прерывании, и не позволить компилятору попытаться выкинуть её при оптимизации кода. ------------ самое нормальное обьяснение.
Давай заново подробно показывай что не получается, кто ж помнит всех подробностей
Попутно анализируя свои действия и возможные причины проблем. Более чем в половине таких случаев решение само приходит в голову до того как успеешь до конца набить сообщение на форуме, ибо повторно разбираешься с проблемой не с места возникновения, а самого начала и по порядку.

Re: Програмирование pic на СИ.

Добавлено: Вт сен 27, 2011 11:41:30
misterkuk
Значит так. Хочу сделать тахометр. По сути своей это частотомер в котором результат умножается на 60. Тоесть оборотов в минуту. Планирую снимать сигнал с датчика коленвала. 1 оборот=1импульс. Я в своей програме меряю время между импульсами (между задними фронтами, мне кажется так удобней). При кварце в 20 мегагерц 1машинный цикл (Далее мц) выполняется за 200 наносекунд. Зная количество машинных циклов с момента падения сигнала до момента падения сигнала( так как прерывание по заднему фронту) и время 1 мц то можем расчитать частоту по формуле 1/Т ( где Т- периуд)( тоесть 200 умноженые на количество МЦ и переведённые в секунды). Далее унас выходит частота за секунду. Умножаем на 60 и получаем Количество оборотов за минуту.
В програме так. Таймер1 считает количество МЦ между импульсами. При каждом переполнении таймера1 (Если время между циклами больше чем 65536) инкрементируется переменная tmr1temp и выходит из ПОП. Когда происходит прерывание, тоесть когда сигнал падает в ноль. Программа уходит в ПОП. Здесь я хотел сделать её как можно короче, то мы опускаем алаг прерывания int , обьединяем число с 2 половинок TMR1 в одну переменную и количество переполнений таймера в другую переменную. обнуляем переменную хранящюю количество переполнений ( мы их сохранили уже) и таймер1 обнуляем ( тоже сохранили обьединив 2 половинки тайймера) и выходим из прерывания. В основной программе мы считаем количество МЦ которые мы сохраняли. Тоесть количество переполнений умножим на 65536 и прибавим то что оттавалось в таймере до до момента обьединения их в одно число( так как я понимаю таймер работает когда мы в прерывании находимся). получили количество МЦ за периуд. Умножим это всё на 200наносекунд. Просто на 200 тупо множим, получается огромное число с точкой. Потом переводим это в секунды деля на МИЛЛИАРД. Потом единицу делим на то сто получилось и получаем частоту. Умножив на 60 получим частоту в минуту.
Проблема в том что янезнаю как считать большие числа , умножать и делить их в програме и как например вывести число которое с точкой разбить на целые и вывисть на 7сег индикатор. как вывести я знаю а вот как разбить число с точкой нет. Тоесть как разбить число типа float. Там как я понял степени какието, множители , идентификаторы плюса или минуса. как такое число вывести на дисплей.

Re: Програмирование pic на СИ.

Добавлено: Вт сен 27, 2011 12:15:24
Аlex
Вам совсем не нужен тип float, можно обойтись числами без точки.
Тактовая частота известна (20'000'000 Гц), период тоже (T).
Теперь просто берём тактовую, умножаем её на 60 и делим на период.
об/мин = 1'200'000'000 / T
Проверяем.
К примеру у нас 3000 об/мин. Это 50Гц. За 1 период(20 мс.), таймер отсчитает 400'000 тактов. Делим 1'200'000'000 на 400'000, получаем 3000. Что и требовалось доказать :)
Всё до боли просто :P

Если, к примеру, нужно показывать по 10 об/мин, а не по 1 (что-бы в глазах не мельтишило), то тактовую надо умножить не на 60, а на 6. А конечный результат умножить на 10.

Математика 5 класс :))

Re: Програмирование pic на СИ.

Добавлено: Вт сен 27, 2011 14:36:59
misterkuk
Аlex писал(а):Вам совсем не нужен тип float, можно обойтись числами без точки.
Тактовая частота известна (20'000'000 Гц), период тоже (T).
Теперь просто берём тактовую, умножаем её на 60 и делим на период.
об/мин = 1'200'000'000 / T
Проверяем.
К примеру у нас 3000 об/мин. Это 50Гц. За 1 период(20 мс.), таймер отсчитает 400'000 тактов. Делим 1'200'000'000 на 400'000, получаем 3000. Что и требовалось доказать :)
Всё до боли просто :P

Если, к примеру, нужно показывать по 10 об/мин, а не по 1 (что-бы в глазах не мельтишило), то тактовую надо умножить не на 60, а на 6. А конечный результат умножить на 10.

Математика 5 класс :))
Класс. всё гениальное-просто. Это нужно сделать прерывание в 1сек и считать за секунду импульсы. Верно?

Re: Програмирование pic на СИ.

Добавлено: Вт сен 27, 2011 14:39:16
Аlex
считать за секунду импульсы. Верно?
:shock:
:тут смайл - кот повесился: