Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Digital
Открыл глаза
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga
Контактная информация:

Re: Различные мелкие вопросы

Сообщение Digital »

ARV писал(а):вопрос лишь в том, поможет ли использование готового кода вам чему-то научиться, или нет...

Спасибо, я рад любому совету, в любом случае я к ним отношусь как к учебному материалу и иду так сказать "от обратного", пытаюсь разобраться в логике работы, сравнить со своими вариантами, которые не работали так, как надо.
Аватара пользователя
Digital
Открыл глаза
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga
Контактная информация:

Re: Различные мелкие вопросы

Сообщение Digital »

ARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди


а можно поподробнее. не понял, где массив обнуляется, в этой строке data[j]=data[j]<<1;?
Последний раз редактировалось Digital Пт дек 05, 2008 16:48:04, всего редактировалось 2 раза.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Различные мелкие вопросы

Сообщение ARV »

Digital писал(а):
ARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди


а можно поподробнее. не понял, где массив обнуляется, в этой строке data[j]=data[j]<<1;?
да
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Digital
Открыл глаза
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga
Контактная информация:

Различные мелкие вопросы

Сообщение Digital »

а при таком коде, после обнуления, массив каждый раз переинициализировать надо будет, т.е. дважды прописывать его в программе получится?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Различные мелкие вопросы

Сообщение ARV »

Digital писал(а):а при таком коде, после обнуления, массив каждый раз переинициализировать надо будет ?
при каком - таком?
при моем - не надо, при том, что был ранее - сами прикиньте... может, вам и надо после первого вывода нули там иметь :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Digital
Открыл глаза
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga
Контактная информация:

Сообщение Digital »

:) ну на будущее положу в "копилку" оба варианта
Chasm
Родился
Сообщения: 4
Зарегистрирован: Вс ноя 09, 2008 09:48:31
Откуда: Братск, Иркутская обл.
Контактная информация:

Различные мелкие вопросы

Сообщение Chasm »

Приветствую специалистов. У меня такой вопрос. Только начал занимать микроконтроллерами. Спаял небольшую схемку. Сделал подключение к LPT (5 проводков для прошивки) и к COM (через MAX232 TXD,RXD). Написал небольшую прогу в CVAVR, зашил в микроконтроллер (ATMEGA8), всё работает. Но теперь мне по учёбе надо написать программу на ассемблере. Решил в AVR STUDIO, но там прошивка только через COM и USB. Вопрос: в какой проге можно писать на ассемблере и зашить эту прогу в микроконтроллер через LPT. Заранее спасибо.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Re: Различные мелкие вопросы

Сообщение smac »

Chasm писал(а):Приветствую специалистов. У меня такой вопрос. Только начал занимать микроконтроллерами. Спаял небольшую схемку. Сделал подключение к LPT (5 проводков для прошивки) и к COM (через MAX232 TXD,RXD). Написал небольшую прогу в CVAVR, зашил в микроконтроллер (ATMEGA8), всё работает. Но теперь мне по учёбе надо написать программу на ассемблере. Решил в AVR STUDIO, но там прошивка только через COM и USB. Вопрос: в какой проге можно писать на ассемблере и зашить эту прогу в микроконтроллер через LPT. Заранее спасибо.

На ассембелере можно продолжать писать в студии, после компиляции она генерирует hex файл для прошивки флеша контроллера и eep файл для прошивки еепрома контроллера. Прошить эти файлы можно любым программатором, в том числе и 5 проводков. Консольный программатрор AvReal (сам не пробовал, но хвалят), понипрогом наверное можно, может быть и CVAVR может прошить хекс и ееп если ему явно указать на них.
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Если уже CVAVR стоит, так им и прошивайте. В окне программатора выбираете File -> Load Flash (или Load EEPROM) - и вперед.
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
tembl4
Открыл глаза
Сообщения: 53
Зарегистрирован: Вт янв 15, 2008 21:18:36
Откуда: МО г.Фрязино-Щёлково
Контактная информация:

Сообщение tembl4 »

BerZerK-ku писал(а):
Aheir писал(а):Насколько я вижу, теоретически это возможно, поскольку светодиодами, как я понимаю, по сути управляют сигналы LPT-порта (кроме того, что на питании). Видимо, паразитного питания от логической "1" порта хватает для зажигания светодиодов. Ну а монтаж проверьте, конечно, повнимательнее.

Получается, что для работы с данной микросхемой вообще питания не надо?! Раз светодиоды горят, то глядишь и TTL уровни прокатят. Надо проверить :)
Скорее всего проблема действительно в неправильном монтаже.

питание мне действительно не понадобились)и так прошивает)
выкладываю сей ужас! тока не ржыте :))) в начале моя "отладочная плата" :))) ну просто заказал не в дип корпусе по ошибке...
Вложения
IMAGE_037еее.JPG
прог
(198.56 КБ) 354 скачивания
IMAGE_040гггг.JPG
прог2
(198.7 КБ) 456 скачиваний
IMAGE_050ггге6.JPG
прог3
(179.77 КБ) 344 скачивания
IMAGE_04еее1.JPG
Отладочная плата)))
(159.53 КБ) 454 скачивания
IMAGE8_044.JPG
Отладочная плата)))
(184.38 КБ) 419 скачиваний
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: Различные мелкие вопросы

Сообщение BerZerK-ku »

ARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди


Действительно, будьте осторожны :) Ваш массив используя выше приведенные примеры не обнулить. Использовать функцию mr.Kirill вообще не получится, не пропустит компилятор. Все дело в том, что ваш массив лежит во flash. Пример ARV рабочий, хотя можно использовать на 1 переменную меньше в той же конструкции:

Код: Выделить всё

for(; ch>0; ch<<=1) {     
  if (data[j] & ch) PORTD.0=1;                         
  else PORTD.0=0;
}
                         
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Различные мелкие вопросы

Сообщение ARV »

BerZerK-ku писал(а):Действительно, будьте осторожны :) Ваш массив используя выше приведенные примеры не обнулить.
в качестве примечания: я не пользуюсь CVAVR и говоря о массиве исходил из принципа Си - все переменные в ОЗУ. А если этот массив во флэш - тогда обнулить не выйдет, это точно :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

Возник вопрос как правильно и экономно для программы организовать опрос и обработку 3 кнопок, кнопки подключены к 1 порту, опрос происходит в прерывании таймера с частатой 400 гц. пишу в кодвижен.
Пробывал считать состояние порта и присвоить его переменной потом эту переменную в основной программе прогнать через оператор switch-case и путем сравнения узнать какая кнопка была нажата невыходит.
Подскажите как правильно сделать.
Аватара пользователя
Kenny
Мучитель микросхем
Сообщения: 422
Зарегистрирован: Вт дек 20, 2005 19:20:59
Откуда: Киев

Сообщение Kenny »

Контроллер Attiny2313, чето напортачил с фюзами в описании управляющего бат файла и теперь 2 трупика(( Как их оживить? Программатор byteblaster. Не посылайте , плиз , в тему про фузы, ато 18 страниц читать неохота
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Kenny писал(а):Контроллер Attiny2313, чето напортачил с фюзами в описании управляющего бат файла и теперь 2 трупика(( Как их оживить? Программатор byteblaster. Не посылайте , плиз , в тему про фузы, ато 18 страниц читать неохота

Прикольно, ну конечно, зачем же читать документацию. Я вам советую начать даже не с темы про фьюзы, а с даташита. А вообще ситуация напоминает цитату на баше, приведу на память "Последовательность: Экспиримент>Пипец>Чтение документации, даже из толковых админов тяжело выбить" (c) баш.
П. С. Да простят меня модераторы за голимый флуд.
Аватара пользователя
Kenny
Мучитель микросхем
Сообщения: 422
Зарегистрирован: Вт дек 20, 2005 19:20:59
Откуда: Киев

Сообщение Kenny »

фак, шо за народ пошел? все ставят себя выше других и пытаются всех опустить! :evil: Я этих контроллеров уже штук 30 прошил,и с пол года вообще ниче не собирал! Уже не помню шо ему нада, а если тяжело написать содержательный ответ - то просьба вообще ничего не писать! П.С. раньше тут атмосфера была лучше
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Kenny писал(а):фак, шо за народ пошел? все ставят себя выше других и пытаются всех опустить! :evil: Я этих контроллеров уже штук 30 прошил,и с пол года вообще ниче не собирал! Уже не помню шо ему нада, а если тяжело написать содержательный ответ - то просьба вообще ничего не писать! П.С. раньше тут атмосфера была лучше

Меньше эмоций. Во первых, чтобы знать как вам помочь необходимы симптомы. Во-вторых количество прошитых контроллеров ни о чем не говорит, есть люди, которые их тысячами прошивают и не разбираются в них ни капли. По делу попробуйте клок подать внешний (герц так на 600), , при этом прошивать (ну в смысле попробовать фьюзы сменить) тоже нужно на очень (герц 150) низкой частоте.
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

sheva_s писал(а):Возник вопрос как правильно и экономно для программы организовать опрос и обработку 3 кнопок, кнопки подключены к 1 порту, опрос происходит в прерывании таймера с частатой 400 гц. пишу в кодвижен.
Пробывал считать состояние порта и присвоить его переменной потом эту переменную в основной программе прогнать через оператор switch-case и путем сравнения узнать какая кнопка была нажата невыходит.
Подскажите как правильно сделать.

НЕУЖЕЛИ НИКТО НЕЗНАЕТ проект стоит немогу сам приодолеть это.
ды простит модератор за цитирование своих постов. :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

попробуйте так:

Код: Выделить всё

volatile unsigned char KEY = 0; // глобальная переменная, содержащая код нажатой кнопки

void interrupt... {// дальше как там ваше прерывание зовется
   static unsigned char oldkey = 0;
   unsigned char tmp;

   tmp = PIND; // здесь идет опрос порта
   // лишние биты надо маскировать и инвертировать (для удобства)
   tmp = ~(tmp & 0x07); // допустим, кнопки подключены к трем младшим разрядам
   if(tmp){
      // только если код нажатой кнопки не ноль (т.е. хоть что-то нажато
      if(oldkey){
        // если предыдущий код не ноль
        if(oldkey == tmp){
            // если предыдущее значение равно текущему - установим код кнопки
            KEY = oldkey;
        }
        oldkey = key; // иначе запомним текущее значение
   } else {
      oldkey = 0;
      KEY = 0;
   }
}
в основном цикле время от времени проверяйте значение KEY и, если оно не равно нулю, обрабатывайте ее значение, как код нажатых кнопок (каждая кнопка - бит)

P.S. Писал сгоряча, возможно, где-то напортачил. тем более что писать в форуме код очень неудобно. главная идея: в прерывании смотрим на пины кнопок. если обнаруживаем, что есть нажатие, то, смотрим в переменную oldkey, которая хранит ПРЕДЫДУЩЕЕ нажатое состояние. если текущее состояние совпадает с предыдущим, значит как минимум 1/400 секунды кнопка нажата - можно вернуть этот код (так давим дребезг). если текущее не равно предыдущему - запоминаем текущее, как предыдущее, но при этом значение KEY не меняем, считая, что еще не ясно - вдруг дребезг? если ничего не нажато - обнуляем KEY.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

sheva_s писал(а):НЕУЖЕЛИ НИКТО НЕЗНАЕТ проект стоит немогу сам приодолеть это.


А в чем проблемы то? Простейшая операция - присваивание значения переменной + проверка в switch должна работать сразу. Далее можно ввести анти дребезг.
А вот один из моих вариантов:
Вложения
Keyboard.rar
(855 байт) 316 скачиваний
Ответить

Вернуться в «Разные вопросы по МК»