Обсуждаем цифровые устройства...
Ответить

Вт фев 13, 2007 21:07:21

Лично я не очень понимаю мысль о просторе для программиста... По вашему мнению, в схемках без дисплея этого простора нет? В чем видится этот простор? Лично я вижу неплохие задачки для программиста даже в автомате световых эффектов - знаете, как в китайских гирляндах? Не смотря на кажущуюся элементарность, там есть над чем помозговать ;)

Вт фев 13, 2007 21:41:26

А ведь ARV прав. Планы Бонапартьи, но вы не Наполеон Бонапарт!
Ставьте реальные задачи. В том же мультиметре, например, обработка результатов измерений - дело десятое, прежде необходимо сами измерения произвести. А вот на светодиодных мигалках и надо начинать практиковаться, недаром все учебники по МК именно с них и начинают.

Ср фев 14, 2007 08:34:56

Если коллега Coder представляет из себя обычного прикладного программиста, то сразу что-то писать для МК будет трудно, так как МК это не совсем компьютер. Тут скорее пригодился бы опыт программиста-системщика, так как необходимо представлять как программа взаимодействует с железом.
самый простой пример соединяем две ножки МК. одну делаем выходом, другую входом. записываем в выходной порт единицу, и сразу читаем что у нас на входе другого порта, на который теоретически должна прийти наша единица и... обнаруживаем там большой квадратный нуль! единица там появится только спустя несколько тактов МК.

и таких примеров можно привести много. и многие из них находишь сам, бодаясь с железом. тут уж не до волка с яйцами становится ;-)

Ср фев 14, 2007 08:39:15

Кашпо писал(а):на который теоретически должна прийти наша единица


но даже теоретически единица должна появится не мгновенно а через некоторое время.

Ср фев 14, 2007 09:14:21

Abakt писал(а):
Кашпо писал(а):на который теоретически должна прийти наша единица
но даже теоретически единица должна появится не мгновенно а через некоторое время.
Я понимаю, что тут не в скорости света дело ;-).

Ну естественно не мгновенно. никто мгновенно её там и не требует.
Команда чтения выполняется не одновременно с записью в порт. А а позже (сколько это в тактах не скажу, так как пишу на СИ).
Я просто тоже довольно прикладной программист, немного занимавшийся раньше электроникой и решивший вспомнить молодость, помахать так сказать паяльником.
Реально на вышеприведённом эффекте я столкнулся когда делал опрос клавиатурной матрицы. Вроде бы с виду всё просто, ан нет.

Ср фев 14, 2007 10:07:16

Я системшик :)
Как-то, лет 7 назад, писал графический 3D движок на АСМе :)
Так что с АСМом и графикой дело имел, а с контроллером, я думаю разберуть! А если вопросы будут, так для того и форум! :)

Ср фев 14, 2007 13:13:38

Для работы с МК хорошо помогает логический склад ума и опыт работы с цифровой логикой. Мы с товарищем пищем на C (CodeVision), писали одну и ту же прогу, то что он обычно пишет так:
Код:
PORTB.0=1;
PORTB.2=1;
PORTB.5=1;
PORTB.7=1;
У меня выглядит так:
Код:
operand|=0b10100101;
PORTB=oprand;

Хотя не всегда это и нужно. Вообщем написание программы, это тоже искусство :wink:

Ср фев 14, 2007 22:28:53

А если написать
Код:
РORTB |= 0b10100101;
 

ваще красота... :)

Ср фев 14, 2007 22:43:14

Чевой-то я не понимаю красоты...

Код:
operand |= что-то-там
PortB = operand

этот код изменяет operand путем логического ИЛИ с константой, а затем это все выводит в порт.

"Приятель" изменял биты порта с размазыванием по времени, не задействуя промежуточную переменную.

А
Код:
ProtB |= что-то-там
- это сначала считывание PortB, потом логическое ИЛИ результата с константой, а потом вывод этого в порт обратно...

Три примера - ВСЕ ПРИНЦИПИАЛЬНО РАЗНЫЕ. Или никто на такие мелочи внимания не обращает? Или я чего-то не понимаю...

Чт фев 15, 2007 06:52:50

Согласен с ARV, это совершенно разные куски кода...
Так и получается, думали одинаково, получили разные результаты!

Чт фев 15, 2007 10:17:46

А на всех вас взгляд, какая задача стояла перед человеком, написавшим эти куски кода? И в каком случае он ее не достиг?

Пн фев 19, 2007 11:34:10

Продолжаем собирать "геймпад". Вопросик, как сделать клавиатуру?
16 клавиш, матрица 4х4. Если нажата одна клавиша, всё понятно. А как читать клавиатуру, чтоб опредилить все нажатые клавиши в данный момент?

Пн фев 19, 2007 11:51:31

ARV писал(а):
А
Код:
ProtB |= что-то-там
- это сначала считывание PortB, потом логическое ИЛИ результата с константой, а потом вывод этого в порт обратно...


что-то-там - это выражение, т.е. может быть и константой а может быть переменной или результат вычисления их комбинации.
Последний раз редактировалось Abakt Пн фев 19, 2007 11:54:42, всего редактировалось 1 раз.

Пн фев 19, 2007 11:52:26

coder писал(а):Продолжаем собирать "геймпад". Вопросик, как сделать клавиатуру?
16 клавиш, матрица 4х4. Если нажата одна клавиша, всё понятно. А как читать клавиатуру, чтоб опредилить все нажатые клавиши в данный момент?


для этого вам нужно независимое подключение всех клавишь к выводам МК.

Пн фев 19, 2007 12:10:48

Независимое подключение всех 16 кнопок?! слишком расточительно. Матрица, как и хочет автор, это верное решение. Надо только, наверное, "строки" от "столбцов" матрицы отделить диодами, что ли...

А метод опроса элементарен: подаем единицу на 1-ю строку - смотрим, на какие столбцы она пришла (придет на те, кнопки которых замкнуты), потом подаем на 2-ю строку - и снова смотрим столбцы и т.д. В итоге получаем состояние всех кнопок. В момент подачи сигнала на какую-то строку остальные строки должны быть в Z-состоянии.

Это так, идея на скорую руку, наверное, можно и проще и лучше...

Пн фев 19, 2007 12:26:57

а если 7 кнопок нажато ? а если 12 ?

вопрос был:

как читать клавиатуру, чтоб опредилить

ВСЕ нажатые клавиши в данный момент?


если клавиш 16 - то сколько может быть нажато в некий момент ?

Пн фев 19, 2007 12:48:31

Каждую кнопку на отдельную ногу, эт действительно расточительно!
ARV дело говорит, у меня примерно тоже решение вырисовывалось в голове! Только получается, надо каждую кнопку диодом снабдить.
Можно на какой-нить логике контроллер клавы собрать (16 входов, 2 выхода) последовательный! :idea:
Может ещё какие идеи?

Пн фев 19, 2007 13:14:40

coder писал(а):Каждую кнопку на отдельную ногу, эт действительно расточительно!
ARV дело говорит, у меня примерно тоже решение вырисовывалось в голове!

Только получается, надо каждую кнопку диодом снабдить.


и как вы определите что нажато 5 кнопок ? или 12 ?

Пн фев 19, 2007 13:26:26

16 клавиш, матрица 4х4. Если нажата одна клавиша, всё понятно. А как читать клавиатуру, чтоб опредилить все нажатые клавиши в данный момент?
У микрочипа есть апноут. На 1 ножке МК до 99 кажись кнопок. Смысл в том, что на каждую кнопку вешается резистор с возрастающим номиналом, к примеру 100 ом, 120 ом, 140 и т.д. Все эти хрени (кнопка и резюк) соединяются параллельно, точка соединения резисторов - на порт АЦП (c подтяжкой на землю) точка соединения кнопок - на VCC. И опрашиваем ацп, получившийся результат +-2 будет код нужной кнопки. можно нажимать вместе...

В момент подачи сигнала на какую-то строку остальные строки должны быть в Z-состоянии
Неа. В Z не советую - глюк будет. Только подтяжка к питанию. А активный уровень - "0". Уже дважды такие клавы делал.

не в тему: пишу сообщение, звонит курьер, типа халявные образцы принес, а домофон открыть не могу))))) - типа жильцы не пускают, думают разносчик листовок)))))) а я в офисе.... сказал хоть кому отдать)))))

Пн фев 19, 2007 13:39:24

ну и то хлеб.
Ответить