Страница 39 из 628

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

Добавлено: Пт дек 05, 2008 15:37:03
Digital
ARV писал(а):вопрос лишь в том, поможет ли использование готового кода вам чему-то научиться, или нет...
Спасибо, я рад любому совету, в любом случае я к ним отношусь как к учебному материалу и иду так сказать "от обратного", пытаюсь разобраться в логике работы, сравнить со своими вариантами, которые не работали так, как надо.

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

Добавлено: Пт дек 05, 2008 16:00:03
Digital
ARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди
а можно поподробнее. не понял, где массив обнуляется, в этой строке data[j]=data[j]<<1;?

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

Добавлено: Пт дек 05, 2008 16:01:13
ARV
Digital писал(а):
ARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди
а можно поподробнее. не понял, где массив обнуляется, в этой строке data[j]=data[j]<<1;?
да

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

Добавлено: Пт дек 05, 2008 16:04:04
Digital
а при таком коде, после обнуления, массив каждый раз переинициализировать надо будет, т.е. дважды прописывать его в программе получится?

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

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

Добавлено: Пт дек 05, 2008 16:23:28
Digital
:) ну на будущее положу в "копилку" оба варианта

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

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

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

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

Добавлено: Сб дек 06, 2008 17:45:37
Aheir
Если уже CVAVR стоит, так им и прошивайте. В окне программатора выбираете File -> Load Flash (или Load EEPROM) - и вперед.

Добавлено: Сб дек 06, 2008 22:18:22
tembl4
BerZerK-ku писал(а):
Aheir писал(а):Насколько я вижу, теоретически это возможно, поскольку светодиодами, как я понимаю, по сути управляют сигналы LPT-порта (кроме того, что на питании). Видимо, паразитного питания от логической "1" порта хватает для зажигания светодиодов. Ну а монтаж проверьте, конечно, повнимательнее.
Получается, что для работы с данной микросхемой вообще питания не надо?! Раз светодиоды горят, то глядишь и TTL уровни прокатят. Надо проверить :)
Скорее всего проблема действительно в неправильном монтаже.
питание мне действительно не понадобились)и так прошивает)
выкладываю сей ужас! тока не ржыте :))) в начале моя "отладочная плата" :))) ну просто заказал не в дип корпусе по ошибке...

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

Добавлено: Пн дек 08, 2008 07:38:54
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;
} 
                          

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

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

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

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

Добавлено: Пн дек 08, 2008 18:58:52
smac
Kenny писал(а):Контроллер Attiny2313, чето напортачил с фюзами в описании управляющего бат файла и теперь 2 трупика(( Как их оживить? Программатор byteblaster. Не посылайте , плиз , в тему про фузы, ато 18 страниц читать неохота
Прикольно, ну конечно, зачем же читать документацию. Я вам советую начать даже не с темы про фьюзы, а с даташита. А вообще ситуация напоминает цитату на баше, приведу на память "Последовательность: Экспиримент>Пипец>Чтение документации, даже из толковых админов тяжело выбить" (c) баш.
П. С. Да простят меня модераторы за голимый флуд.

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

Добавлено: Пн дек 08, 2008 22:40:44
smac
Kenny писал(а):фак, шо за народ пошел? все ставят себя выше других и пытаются всех опустить! :evil: Я этих контроллеров уже штук 30 прошил,и с пол года вообще ниче не собирал! Уже не помню шо ему нада, а если тяжело написать содержательный ответ - то просьба вообще ничего не писать! П.С. раньше тут атмосфера была лучше
Меньше эмоций. Во первых, чтобы знать как вам помочь необходимы симптомы. Во-вторых количество прошитых контроллеров ни о чем не говорит, есть люди, которые их тысячами прошивают и не разбираются в них ни капли. По делу попробуйте клок подать внешний (герц так на 600), , при этом прошивать (ну в смысле попробовать фьюзы сменить) тоже нужно на очень (герц 150) низкой частоте.

Добавлено: Вт дек 09, 2008 08:49:12
sheva_s
sheva_s писал(а):Возник вопрос как правильно и экономно для программы организовать опрос и обработку 3 кнопок, кнопки подключены к 1 порту, опрос происходит в прерывании таймера с частатой 400 гц. пишу в кодвижен.
Пробывал считать состояние порта и присвоить его переменной потом эту переменную в основной программе прогнать через оператор switch-case и путем сравнения узнать какая кнопка была нажата невыходит.
Подскажите как правильно сделать.
НЕУЖЕЛИ НИКТО НЕЗНАЕТ проект стоит немогу сам приодолеть это.
ды простит модератор за цитирование своих постов. :)

Добавлено: Вт дек 09, 2008 10:34:46
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.

Добавлено: Вт дек 09, 2008 10:38:26
BerZerK-ku
sheva_s писал(а):НЕУЖЕЛИ НИКТО НЕЗНАЕТ проект стоит немогу сам приодолеть это.
А в чем проблемы то? Простейшая операция - присваивание значения переменной + проверка в switch должна работать сразу. Далее можно ввести анти дребезг.
А вот один из моих вариантов: