Програмирование pic на СИ.
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Неужели люди которые знают програмирование не знают как зделать так чтоб работала моя арифметика?
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Может потому, что Вы его пытаетесь объявить внутри ф-ии ?
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Програмирование pic на СИ.
да нет, как глобальную переменную. Пишет синтакс эррор.
- Вложения
-
- ругается на переменную бит.jpg
- (175.18 КБ) 619 скачиваний
Успех - императив!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Попробуйте объявить как static bit.
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Програмирование pic на СИ.
static bit это вроде внутри ф-ции... но пробовал и так и сяк. Тоже самое:(
Успех - императив!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Так у Вас компиль то какой ? Вы написали PICC18. Я так думаю что HI-TECH (?).
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Програмирование pic на СИ.
Language tool versions: mpasmwin.exe v5.34, mplink.exe v4.34, mcc18.exe v3.34
PICC18, иначе как бы проект компилился с кодом и инками для 4550
Успех - императив!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Не вижу ни в Ваших постах, ни в скрине подобной строки.Language tool versions: mpasmwin.exe v5.34, mplink.exe v4.34, mcc18.exe v3.34
У меня объявление как bit прокатывает на ура. Не знаю почему у Вас не работает.
Может у Вас какой-нибудь там PRO
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Програмирование pic на СИ.
Аlex
Та вроде обычный mcc_18. Только этот глюк... Кстати в хелпе отсутствует этот тип переменной.
Не вижу ни в Ваших постах, ни в скрине подобной строки.
У меня объявление как bit прокатывает на ура. Не знаю почему у Вас не работает.
Та вроде обычный mcc_18. Только этот глюк... Кстати в хелпе отсутствует этот тип переменной.
Успех - императив!
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Програмирование pic на СИ.
Вы снесли мозг как мне, так и Алексу.
значение переменной - бит в общем, идет как бонус для этих компиляторов -
и, скорее всего, потому что ими хайтек куплен, (в котором оно есть как бы изначально), для совместимости с ним делают примочки.
Попробуйте подключить в проект файл GenericTypeDefs.h
значение переменной - бит в общем, идет как бонус для этих компиляторов -
и, скорее всего, потому что ими хайтек куплен, (в котором оно есть как бы изначально), для совместимости с ним делают примочки.
Попробуйте подключить в проект файл GenericTypeDefs.h
- Вложения
-
- GenericTypeDefs.h
- (15.7 КБ) 512 скачиваний
-
Chettuser
Re: Програмирование pic на СИ.
Так MCC18 или PICC18 ? Насколько я понимаю это несколько разные компиляторы... 
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Конечно разные.
Roman Venom всем мозг запудрил.
В PICC есть такой тип данных, в MCC походу нет. Вот и весь ответ.
Roman Venom всем мозг запудрил.
В PICC есть такой тип данных, в MCC походу нет. Вот и весь ответ.
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Програмирование pic на СИ.
urry
За файлик спасибо, попробую на досуге.
Аlex
Ну прикол в том, что MBLAB подсвечивает... это вводит в заблуждение.
Уже понял.
Вы снесли мозг как мне, так и Алексу.
За файлик спасибо, попробую на досуге.
Аlex
Roman Venom всем мозг запудрил.
Код: Выделить всё
binВ PICC есть такой тип данных, в MCC походу нет. Вот и весь ответ.
Уже понял.
Успех - императив!
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Ребят, ну обьясните как работать с этим флоат float. читал файл который дали выше. но там же не сказано как это всё оформить програмно.
volatile - ставьте если нужно предотвратить возможность повреждения содержимого переменной в прерывании, и не позволить компилятору попытаться выкинуть её при оптимизации кода. ---------- самое нормальное обьяснение.
volatile - ставьте если нужно предотвратить возможность повреждения содержимого переменной в прерывании, и не позволить компилятору попытаться выкинуть её при оптимизации кода. ---------- самое нормальное обьяснение.
-
FlySnake
- Мучитель микросхем
- Сообщения: 429
- Зарегистрирован: Пт ноя 20, 2009 20:38:12
- Откуда: Калининград (Koenigsberg)
- Контактная информация:
Re: Програмирование pic на СИ.
misterkuk писал(а):Ребят, ну обьясните как работать с этим флоат float. читал файл который дали выше. но там же не сказано как это всё оформить програмно.
volatile - ставьте если нужно предотвратить возможность повреждения содержимого переменной в прерывании, и не позволить компилятору попытаться выкинуть её при оптимизации кода. ---------- самое нормальное обьяснение.
Давай заново подробно показывай что не получается, кто ж помнит всех подробностей
Попутно анализируя свои действия и возможные причины проблем. Более чем в половине таких случаев решение само приходит в голову до того как успеешь до конца набить сообщение на форуме, ибо повторно разбираешься с проблемой не с места возникновения, а самого начала и по порядку.
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
Значит так. Хочу сделать тахометр. По сути своей это частотомер в котором результат умножается на 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. Там как я понял степени какието, множители , идентификаторы плюса или минуса. как такое число вывести на дисплей.
В програме так. Таймер1 считает количество МЦ между импульсами. При каждом переполнении таймера1 (Если время между циклами больше чем 65536) инкрементируется переменная tmr1temp и выходит из ПОП. Когда происходит прерывание, тоесть когда сигнал падает в ноль. Программа уходит в ПОП. Здесь я хотел сделать её как можно короче, то мы опускаем алаг прерывания int , обьединяем число с 2 половинок TMR1 в одну переменную и количество переполнений таймера в другую переменную. обнуляем переменную хранящюю количество переполнений ( мы их сохранили уже) и таймер1 обнуляем ( тоже сохранили обьединив 2 половинки тайймера) и выходим из прерывания. В основной программе мы считаем количество МЦ которые мы сохраняли. Тоесть количество переполнений умножим на 65536 и прибавим то что оттавалось в таймере до до момента обьединения их в одно число( так как я понимаю таймер работает когда мы в прерывании находимся). получили количество МЦ за периуд. Умножим это всё на 200наносекунд. Просто на 200 тупо множим, получается огромное число с точкой. Потом переводим это в секунды деля на МИЛЛИАРД. Потом единицу делим на то сто получилось и получаем частоту. Умножив на 60 получим частоту в минуту.
Проблема в том что янезнаю как считать большие числа , умножать и делить их в програме и как например вывести число которое с точкой разбить на целые и вывисть на 7сег индикатор. как вывести я знаю а вот как разбить число с точкой нет. Тоесть как разбить число типа float. Там как я понял степени какието, множители , идентификаторы плюса или минуса. как такое число вывести на дисплей.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
Вам совсем не нужен тип float, можно обойтись числами без точки.
Тактовая частота известна (20'000'000 Гц), период тоже (T).
Теперь просто берём тактовую, умножаем её на 60 и делим на период.
об/мин = 1'200'000'000 / T
Проверяем.
К примеру у нас 3000 об/мин. Это 50Гц. За 1 период(20 мс.), таймер отсчитает 400'000 тактов. Делим 1'200'000'000 на 400'000, получаем 3000. Что и требовалось доказать
Всё до боли просто
Если, к примеру, нужно показывать по 10 об/мин, а не по 1 (что-бы в глазах не мельтишило), то тактовую надо умножить не на 60, а на 6. А конечный результат умножить на 10.
Математика 5 класс
Тактовая частота известна (20'000'000 Гц), период тоже (T).
Теперь просто берём тактовую, умножаем её на 60 и делим на период.
об/мин = 1'200'000'000 / T
Проверяем.
К примеру у нас 3000 об/мин. Это 50Гц. За 1 период(20 мс.), таймер отсчитает 400'000 тактов. Делим 1'200'000'000 на 400'000, получаем 3000. Что и требовалось доказать
Всё до боли просто
Если, к примеру, нужно показывать по 10 об/мин, а не по 1 (что-бы в глазах не мельтишило), то тактовую надо умножить не на 60, а на 6. А конечный результат умножить на 10.
Математика 5 класс
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: Програмирование pic на СИ.
А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. Что и требовалось доказать
Всё до боли просто
Если, к примеру, нужно показывать по 10 об/мин, а не по 1 (что-бы в глазах не мельтишило), то тактовую надо умножить не на 60, а на 6. А конечный результат умножить на 10.
Математика 5 класс
Класс. всё гениальное-просто. Это нужно сделать прерывание в 1сек и считать за секунду импульсы. Верно?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Програмирование pic на СИ.
считать за секунду импульсы. Верно?
:тут смайл - кот повесился: