кхе кхе.. может кто поделится кодом работы с LPT ( линухоподобный ) ? ... ругается на outb.
На мой взгляд, вопрос откровенно не для темы С/С++. Это где-то в "интриги с ПК" надо тему "Линукс и LPT" создавать.
Конкретно по вопросу
outb и компания прописаны в <sys/io.h> (это не то же самое, что просто <io.h> ! )
Через /dev/io не работал. Не уверен, что в нынешних линуксах такое "устройство" вообще живёт.
Для прямой работы с портами получаю права не через открытие /dev/io, а запросом ioperm().
Именно с LPT можно работать честнее и без рутовых привилегий через /dev/parport, но это немного медленнее.
Если интересно продолжение разговора, то, может, пойдём таки в "Интеграция с ПК"? Или прямо у меня на сайте в комментариях к avreal and LPT in Linux спрашивайте, поделюсь кусками кода
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Пытаюсь разобраться с прерыванями в контроллере pic16f631. Прерывание работает, но после него не происходит возврата в основную программу((. Если убрать прерывания, main работает.
В main светодиод на любой ножке порта С мигает медленно, при вызове прерывания по 7-ой ножка порта B несколько раз должен мигнуть быстро.
7-ая ножка порта B подтянута к +5 резистором 27к, при замыкании кнопки через резистор 1к подключается к земле.
Пробовал присваивать INTCON-у разные значения, безрезультатно(
skader, главная ошибка в неверной проверке нажатия кнопки if (portb == 0){} возможно, это условие никогда не наступает, а значит, тело if'a не выполняется, следовательно, флаг прерывания не сбрасывается, и после выхода из прерывания контроллер влетает в него снова. Надо вынести сброс флага из if'a. Что на входах RB4:RB6? Они ведь тоже могут инициировать прерывание RBIF... Сделайте так:
Подскажите, может кто-то в курсе: Делаю для тренировки простой вольтметр на меге8 и 16*2 ЖКИ. И возник большой вопрос с выводом переведенных данных АЦП (от 0 до 1024). Формула элементарная. Получается дробное число (2.78324923049203....). Если поставить ему тип "Float" на дисплее начинается полная ахинея. Начинают прыгать совершенно несвязанные числа как положительные так и отрицательные. Пытался что-то найти про это. Пишут, что при обработке таких громоздких чисел, как Float стек начинает накладываться на память МК и выходит глюк. Если ставить тип "INT" все выводится хорошо, но с точностью до 1 вольта Напрашивается 2 варианта: 1) Разделить на целую и дробную часть. и выводить отдельно 3 части одного числа. Например так: 3 , 2768 2) Ограничить дробную часть после деления, например до 3х знаков.
Может кто знает как можно сделать эти пункты? А то совсем уже голову сломал
да чего там ломать-то? в вашу элементарную формулу добавьте умножение на 1000 и вычисляйте все в целых числах. а при выводе сначала запишите результат в строку, а потом вставьте десятичную точку в нужное место. вот вам и будет и вычисления в целых и ограничение до 3-го знака одновременно
правда ахинея у вас на дисплее наверняка не из-за float, а из-за какой-то иной ошибки в программе... ибо с float AVR хоть и медленно, но работает вполне нормально.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
O-LED, у вас в коде тавтология: if(a & (1<< b) == (1 << b)) содержит явно избыточную операцию проверки на равенство. достаточно написать if(a & (1 << b)) - результат будет тот же самый
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
пусть значение i появляется "вдруг" например приходит с usart ( вообще не важно ). у нас приходит FF, мы преобразуем его в символьный вид, и выбрасываем на семисегментный индикатор условно бесконечной разрядности ( т.е. только Великий КОТ может нам сказать сколько разрядо в нем. может три, а может и 10..) . Диапазон выбрасываемых символов:
Цитата:
0 1 2 3 4 5 6 7 8 9 A b c C d E F o P r L n _ -
т.е. eсли их загонять в индикатор через switch-case ( такой-то символ - такая-то комбинация на порте ), то с 22 символами еще можно играться.. но если их станет больше ? гораздо больше !?
вот тут я немножко не догоняю.. как справляются в этом случае на дисплеях 16х2 или на ЖК ?
_________________ RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код @hobbyelectronics
стоит ли на время обработки прерывания отключать обработку прерываний (IOCB = 0), чтоб не было прерывания из прерывания?
В PIC16 вектор прерывания всего один, а приоритеты прерываний не существуют как класс, поэтому "прерывание из прерывания" возникнуть не может никак. В вашей задаче ничего запрещать не надо.
Проще преобразовывать приходящий байт в выводимому символу таблицей констант. const char D[] = { коды соответствия символам 0..9 A b c C d E F o P r L n _ - }; switch-case станет не нужен. Для более 8-и бит соответственно const int D[]... Вывод sprintf (D[i], "%.d", i);
На символьных ЖК дисплеях 16х2, если они не поддерживают кодировку компилятора, так же через таблицы преобразовывают. К примеру, IAR для Win имеет кодировку CP1251. Если взять индикатор поддерживающий точно такую, то и таблицы не надо. Что послал, то и увидел )
skader Установите лучше MPLAB, там в комплекте идет hi-tech PICC с мануалом и примерами. PRO версия включается бесплатно на месяц пробы, потом если понравится, можно и лекарство найти.
Проще преобразовывать приходящий байт в выводимому символу таблицей констант. const char D[] = { коды соответствия символам 0..9 A b c C d E F o P r L n _ - }; switch-case станет не нужен. Для более 8-и бит соответственно const int D[]... Вывод sprintf (D[i], "%.d", i);
На символьных ЖК дисплеях 16х2, если они не поддерживают кодировку компилятора, так же через таблицы преобразовывают. К примеру, IAR для Win имеет кодировку CP1251. Если взять индикатор поддерживающий точно такую, то и таблицы не надо. Что послал, то и увидел )
код в студию
_________________ RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код @hobbyelectronics
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения