Спасибо, я рад любому совету, в любом случае я к ним отношусь как к учебному материалу и иду так сказать "от обратного", пытаюсь разобраться в логике работы, сравнить со своими вариантами, которые не работали так, как надо.ARV писал(а):вопрос лишь в том, поможет ли использование готового кода вам чему-то научиться, или нет...
Мелкие вопросы по МК и ПЛИС.
- Реклама
а можно поподробнее. не понял, где массив обнуляется, в этой строке data[j]=data[j]<<1;?ARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди
Последний раз редактировалось Digital Пт дек 05, 2008 16:48:04, всего редактировалось 2 раза.
даDigital писал(а):а можно поподробнее. не понял, где массив обнуляется, в этой строке data[j]=data[j]<<1;?ARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
а при таком коде, после обнуления, массив каждый раз переинициализировать надо будет, т.е. дважды прописывать его в программе получится?
при каком - таком?Digital писал(а):а при таком коде, после обнуления, массив каждый раз переинициализировать надо будет ?
при моем - не надо, при том, что был ранее - сами прикиньте... может, вам и надо после первого вывода нули там иметь
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Приветствую специалистов. У меня такой вопрос. Только начал занимать микроконтроллерами. Спаял небольшую схемку. Сделал подключение к LPT (5 проводков для прошивки) и к COM (через MAX232 TXD,RXD). Написал небольшую прогу в CVAVR, зашил в микроконтроллер (ATMEGA8), всё работает. Но теперь мне по учёбе надо написать программу на ассемблере. Решил в AVR STUDIO, но там прошивка только через COM и USB. Вопрос: в какой проге можно писать на ассемблере и зашить эту прогу в микроконтроллер через LPT. Заранее спасибо.
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
На ассембелере можно продолжать писать в студии, после компиляции она генерирует hex файл для прошивки флеша контроллера и eep файл для прошивки еепрома контроллера. Прошить эти файлы можно любым программатором, в том числе и 5 проводков. Консольный программатрор AvReal (сам не пробовал, но хвалят), понипрогом наверное можно, может быть и CVAVR может прошить хекс и ееп если ему явно указать на них.Chasm писал(а):Приветствую специалистов. У меня такой вопрос. Только начал занимать микроконтроллерами. Спаял небольшую схемку. Сделал подключение к LPT (5 проводков для прошивки) и к COM (через MAX232 TXD,RXD). Написал небольшую прогу в CVAVR, зашил в микроконтроллер (ATMEGA8), всё работает. Но теперь мне по учёбе надо написать программу на ассемблере. Решил в AVR STUDIO, но там прошивка только через COM и USB. Вопрос: в какой проге можно писать на ассемблере и зашить эту прогу в микроконтроллер через LPT. Заранее спасибо.
Если уже CVAVR стоит, так им и прошивайте. В окне программатора выбираете File -> Load Flash (или Load EEPROM) - и вперед.
Оптимизм х (Опыт + Знания) = const
питание мне действительно не понадобились)и так прошивает)BerZerK-ku писал(а):Получается, что для работы с данной микросхемой вообще питания не надо?! Раз светодиоды горят, то глядишь и TTL уровни прокатят. Надо проверитьAheir писал(а):Насколько я вижу, теоретически это возможно, поскольку светодиодами, как я понимаю, по сути управляют сигналы LPT-порта (кроме того, что на питании). Видимо, паразитного питания от логической "1" порта хватает для зажигания светодиодов. Ну а монтаж проверьте, конечно, повнимательнее.![]()
Скорее всего проблема действительно в неправильном монтаже.
выкладываю сей ужас! тока не ржыте
- Вложения
-
- IMAGE_037еее.JPG
- прог
- (198.56 КБ) 357 скачиваний
-
- IMAGE_040гггг.JPG
- прог2
- (198.7 КБ) 459 скачиваний
-
- IMAGE_050ггге6.JPG
- прог3
- (179.77 КБ) 347 скачиваний
-
- IMAGE_04еее1.JPG
- Отладочная плата)))
- (159.53 КБ) 455 скачиваний
-
- IMAGE8_044.JPG
- Отладочная плата)))
- (184.38 КБ) 422 скачивания
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Действительно, будьте осторожныARV писал(а):P.S. в приведенном ранее примере функции send_data имеется одна неприятная особенность - после того, как эта функция отработает, ваш массив окажется обнуленным. так что будьте осторожнее, следуя советам, которые вам дают добрые люди
Код: Выделить всё
for(; ch>0; ch<<=1) {
if (data[j] & ch) PORTD.0=1;
else PORTD.0=0;
}
в качестве примечания: я не пользуюсь CVAVR и говоря о массиве исходил из принципа Си - все переменные в ОЗУ. А если этот массив во флэш - тогда обнулить не выйдет, это точноBerZerK-ku писал(а):Действительно, будьте осторожныВаш массив используя выше приведенные примеры не обнулить.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Возник вопрос как правильно и экономно для программы организовать опрос и обработку 3 кнопок, кнопки подключены к 1 порту, опрос происходит в прерывании таймера с частатой 400 гц. пишу в кодвижен.
Пробывал считать состояние порта и присвоить его переменной потом эту переменную в основной программе прогнать через оператор switch-case и путем сравнения узнать какая кнопка была нажата невыходит.
Подскажите как правильно сделать.
Пробывал считать состояние порта и присвоить его переменной потом эту переменную в основной программе прогнать через оператор switch-case и путем сравнения узнать какая кнопка была нажата невыходит.
Подскажите как правильно сделать.
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Прикольно, ну конечно, зачем же читать документацию. Я вам советую начать даже не с темы про фьюзы, а с даташита. А вообще ситуация напоминает цитату на баше, приведу на память "Последовательность: Экспиримент>Пипец>Чтение документации, даже из толковых админов тяжело выбить" (c) баш.Kenny писал(а):Контроллер Attiny2313, чето напортачил с фюзами в описании управляющего бат файла и теперь 2 трупика(( Как их оживить? Программатор byteblaster. Не посылайте , плиз , в тему про фузы, ато 18 страниц читать неохота
П. С. Да простят меня модераторы за голимый флуд.
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Меньше эмоций. Во первых, чтобы знать как вам помочь необходимы симптомы. Во-вторых количество прошитых контроллеров ни о чем не говорит, есть люди, которые их тысячами прошивают и не разбираются в них ни капли. По делу попробуйте клок подать внешний (герц так на 600), , при этом прошивать (ну в смысле попробовать фьюзы сменить) тоже нужно на очень (герц 150) низкой частоте.Kenny писал(а):фак, шо за народ пошел? все ставят себя выше других и пытаются всех опустить!Я этих контроллеров уже штук 30 прошил,и с пол года вообще ниче не собирал! Уже не помню шо ему нада, а если тяжело написать содержательный ответ - то просьба вообще ничего не писать! П.С. раньше тут атмосфера была лучше
НЕУЖЕЛИ НИКТО НЕЗНАЕТ проект стоит немогу сам приодолеть это.sheva_s писал(а):Возник вопрос как правильно и экономно для программы организовать опрос и обработку 3 кнопок, кнопки подключены к 1 порту, опрос происходит в прерывании таймера с частатой 400 гц. пишу в кодвижен.
Пробывал считать состояние порта и присвоить его переменной потом эту переменную в основной программе прогнать через оператор switch-case и путем сравнения узнать какая кнопка была нажата невыходит.
Подскажите как правильно сделать.
ды простит модератор за цитирование своих постов.
попробуйте так:
в основном цикле время от времени проверяйте значение KEY и, если оно не равно нулю, обрабатывайте ее значение, как код нажатых кнопок (каждая кнопка - бит)
P.S. Писал сгоряча, возможно, где-то напортачил. тем более что писать в форуме код очень неудобно. главная идея: в прерывании смотрим на пины кнопок. если обнаруживаем, что есть нажатие, то, смотрим в переменную oldkey, которая хранит ПРЕДЫДУЩЕЕ нажатое состояние. если текущее состояние совпадает с предыдущим, значит как минимум 1/400 секунды кнопка нажата - можно вернуть этот код (так давим дребезг). если текущее не равно предыдущему - запоминаем текущее, как предыдущее, но при этом значение KEY не меняем, считая, что еще не ясно - вдруг дребезг? если ничего не нажато - обнуляем KEY.
Код: Выделить всё
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;
}
}
P.S. Писал сгоряча, возможно, где-то напортачил. тем более что писать в форуме код очень неудобно. главная идея: в прерывании смотрим на пины кнопок. если обнаруживаем, что есть нажатие, то, смотрим в переменную oldkey, которая хранит ПРЕДЫДУЩЕЕ нажатое состояние. если текущее состояние совпадает с предыдущим, значит как минимум 1/400 секунды кнопка нажата - можно вернуть этот код (так давим дребезг). если текущее не равно предыдущему - запоминаем текущее, как предыдущее, но при этом значение KEY не меняем, считая, что еще не ясно - вдруг дребезг? если ничего не нажато - обнуляем KEY.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
А в чем проблемы то? Простейшая операция - присваивание значения переменной + проверка в switch должна работать сразу. Далее можно ввести анти дребезг.sheva_s писал(а):НЕУЖЕЛИ НИКТО НЕЗНАЕТ проект стоит немогу сам приодолеть это.
А вот один из моих вариантов:
- Вложения
-
- Keyboard.rar
- (855 байт) 319 скачиваний


