Страница 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
фак, шо за народ пошел? все ставят себя выше других и пытаются всех опустить!

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

Я этих контроллеров уже штук 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 должна работать сразу. Далее можно ввести анти дребезг.
А вот один из моих вариантов: