реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Краткое резюме по поводу обвязки МК при SPI-прог-ии?, на примере ATmega16
defunct
сообщение Feb 19 2006, 18:03
Сообщение #16


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(MakFatum @ Feb 19 2006, 19:20) *
Вот глупый сейчас вопрос задам..
Программу заливать в EEPROM же надо?


EEPROMу - епромово, флешу - флешево..
программа должна загружаться во флеш, данные .eseg (если использовался eseg) - в EEPROM..

Цитата
а если нажимаю "Programm All", он что-то начинает программировать, доходит до 3% и виснет, ...приходится всключать и выключать питание...а потом стирать...

что-то не так.. понижайте скорость или попробуйте другую программу-программатор.
Go to the top of the page
 
+Quote Post
ALexx
сообщение Feb 19 2006, 21:28
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(MakFatum @ Feb 19 2006, 20:20) *
Нажимаю я пипку Run Chip Programmer,
.....



Program-> Erase chip

После стирания можно заливать программу, но не в ЕЕПРОМ!, а во ФЛЕШ:

Program-> FLASH


А теперь насчет зависания. Такое наблюдалось, если, к примеру, в процессоре фузами выставлена частота внутреннего генератора 2 МГц, а в окне программирования (под типом проца) указана частота отличная от первой.
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Feb 20 2006, 16:11
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



Моргать-то заморгало...
Ну вот никак не могу понять почему по нижеприведенной программе
он 5 секунд ГОРИТ и 1 сек НЕ горит???
Везде пишут, что PORTA.0=0 - это установка лог.0 и наоборот, а моргает все иначе...
это вопрос №1

DDRA=0xff;

while (1)
{
PORTA.0=0;
delay_ms(5000);
PORTA.0=1;
delay_ms(1000);

};
}

Вопрос №2 может иметь место на СИ такая конструкция(?):
if (PINB.5=1) { сделать что-то };
else goto mesto;

(Меня интересует, можно ли опрашивать PINB.5=1 или PINB.5=0? И можно ли перескакивать, если выражение ложь??? )
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 20 2006, 17:03
Сообщение #19


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(MakFatum @ Feb 20 2006, 18:11) *
Моргать-то заморгало...
Ну вот никак не могу понять почему по нижеприведенной программе
он 5 секунд ГОРИТ и 1 сек НЕ горит???
Везде пишут, что PORTA.0=0 - это установка лог.0 и наоборот, а моргает все иначе...
..


попробую домыслить.. вы, вероятно, светодиод запаяли между PA0 и Vcc.
Хотите чтобы было без инверсии - запаивайте между PA0 и Gnd..

Цитата
if (PINB.5=1) { сделать что-то };
else goto mesto;


а такая конструкция чем плоха?

Код
if (PINB.5)
  { сделать то-то;}
else
  {сделать сё-то;}


goto mesto можно заменить вызовом функции..
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Feb 20 2006, 17:16
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



Спасибо Большое! Действительно к Vcc припаял....
У меня домыслить не получается в результате чего инверсия.....?

Я вот немножко не понимаю

if (PINB.5)
{ сделать то-то;}

если PINB.5 ЧТО, чтобы сделать что-то? (Просто если PINB.5 и всё?)
То есть мне нужно проверить наличие gnd на PINB.5 (То бишь PINB.5=0 )
а иначе (если этого GND нет) перескочить на другое if, где тоже что-то будет проверяться...
поэтому и спросил еще про goto mesto:

в си, да и не только в си у меня только первые шаги....как Вы догадались

Сообщение отредактировал MakFatum - Feb 20 2006, 17:17
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 20 2006, 17:55
Сообщение #21


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(MakFatum @ Feb 20 2006, 19:16) *
в результате чего инверсия.....?

все очень просто.
когда вы на PA0 выставляете логическую еденицу на выходе порта формируется уровень 5V = Vcc.
а теперь зададим себе вопрос будет ли течь ток в цепи где U = Vcc - Vcc ;>

Цитата
если PINB.5 ЧТО, чтобы сделать что-то? (Просто если PINB.5 и всё?)

в C логическая проверка идет на "не 0" (ИСТИНА) и "0" (ЛОЖЬ), поэтому дополнительно сравнивать булеву переменную с ненулевым значением не обязательно...

Цитата
То есть мне нужно проверить наличие gnd на PINB.5 (То бишь PINB.5=0 )
а иначе (если этого GND нет) перескочить на другое if, где тоже что-то будет проверяться...
поэтому и спросил еще про goto mesto:

программа будет смотреться аккуратнее если не делать безусловных прыжков.
Код
if (PINB.5) // если не 0
  { что то сделать }
else // иначе если PINB.5 = 0
if (проверить что-то еще)
  { сделать что-то еще }


есть еще оператор switch - case может быть он вам нужен.
я в одной из веток приводил ссылку на описание ansi-c на русском.. почитайте на досуге
http://www.opennet.ru/docs/RUS/ansi-c/


PS: "=" - это присвоение, проверка на равенство "=="

Сообщение отредактировал defunct - Feb 20 2006, 18:14
Go to the top of the page
 
+Quote Post
гигипотамм
сообщение Feb 25 2006, 16:58
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 25-02-06
Из: Украина, Киев
Пользователь №: 14 664



Ответ №1:
А светодиод к порту чем подключен?
А к плюсу питания?
А в каком из вариантов через него ток пойдет: когда порт в нуле, или когда порт в еденице?

Ответ №2:
Символ "=" в С - оператор присваивания.
Надо "==" - это оператор проверки условия.
Тут Вы лучше так:
//
if (PINB.5==1) { сделать что-то }
else goto mesto;
//
И кстати - точку с запятой после {сделать то-то} не нуна...
А спрашивать в условии можно как про "0" так и про "1".
Go to the top of the page
 
+Quote Post
Old1
сообщение Feb 25 2006, 19:33
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(MakFatum @ Feb 20 2006, 20:11) *
Вопрос №2 может иметь место на СИ такая конструкция(?):
if (PINB.5=1) { сделать что-то };
else goto mesto;

В принципе может. Только
Код
{ сделать что-то }

будет выполняться в любом случае, потому что в выражении в скобках использован оператор присваивания = (а не оператор сравнения двух операндов на равенство ==) и PINB.5 всегда будет равен единице и условие всегда будет выполняться.
Кстати использование оператора goto на С не рекомендуется.
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Mar 17 2006, 12:11
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



Нужна помощь, не могу разобраться с алгоритмом и просто путем дальнейших действий!...
Вообщем была схемка генератора АМ на двух дубнинских микросхемах несерийного пр-ва...Они стоят очень дорого (для тех функций, которые выполняют), поэтому появилась необходимость перехода на МК..
Ниже приведена часть схемы этого у-ва на МК ATmega8 и диаграммы выходных сигналов


Осциллограммы на выходах портов PC3, PC4, PC5


В кратце, что генератор должен делать: При наличии минуса на одном из выводов PD1, PD2,PD3,PD0,PD6 (перемычки 12-23,12-21,12-22,...13,11) выдавать на PC5 соответствующие частоты...420...500Гц... и т.д (все в пределах 1000 Гц)..это всё несущие.
При наличии минуса на одном из выводов PB5, PB4 выдавать на PC3 частоты 8 или 12 Гц - это будет модулирующая.
Ну и потом внутри это умножается (я не ошибся, именно умножается?) и на PC4 (третья осциллограмма) как видно из схемы...
Все частоты - меандры!...что, наверное, облегчает жизнь...

Так вот...
Как это рациональней всего реализовать?..
на СИ или не на СИ?
Подпрограммы задержки отпадают! Остается таймерами? Куча констант и по переполнению уходить в прерывание?так?...
8 разрядного должно хватить на 1024*2^8/10^6=0,262 c (при 1МГц такт, и 1024 Коэф.)
При том что самый длинный импульс при 8 Гц - 1/2*8=0,0625 c. - Значит 8 разрядный...

Настраиваем порты, таймеры
Опрашиваем порты, при наличии минуса на одном из них заносим константу соответствующую частоте в таймер, он считает, переполняется, далее прерывание, подпрограмма положительного импульса,...циклим, опять считает , переполняется, далее прерывание, подпрограмма отрицательного импульса,..
В целом так, или не так?...
..еще один вопрос: Вот таймер там работает, подпрограмма прерывания тоже, а если я возьму и минус подам на другой вывод, соответствующий другой частоте? программа-то не среагирует!...значит надо организовать периодический опрос портов в программе?
а как же это сделать?
еще вопрос: таймеры друг другу не будут мешаться своими прерываниями? Ведь всё делается параллельно: выдается несущая, выдается манипулирующее, умножается где-то и итоговое на выход?...Рабочая точка-то ведь у программы одна...?

не знаю с чего начать...
Думаю сначала просто поразбираться с несущей, научиться опрашивать и в соответстви с опросом выдавать на выход, а там дальше все по аналогии...

Понравился протеус, подойдет для отладки без паяния? (паять-то буду, но не сразу...)

А что насчет ШИМА?...в Атмеге их целых 3, ими можно ведь аппартно реализовать меандры?...

Заранее благодарен всем откликнувшимся на мои вопросы...
Очень нужно и очень хочу....
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 17 2006, 13:08
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



ШИМ не поможет - это ШИРОТНО-ИМПУЛЬСНАЯ МОДУЛЯЦИЯ, т.е. изменение скважности.
Делать по идее надо таймерами, желательно в режиме самоперезагрузки.
И вот тут встает главный вопрос? Какой нужен шаг по частоте и могут ли существующие таймеры его обеспечить.
Остальное не проблема, и думаю в деталях народ поможет.

Если же не получаеться - есть микросхемы низкочастотных ГУН с аналоговым входом. Генерить на них, управлять Мегой.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
AVR
сообщение Mar 17 2006, 13:40
Сообщение #26


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Извините за глупый вопрос:
http://avr.nikolaew.org/progr.htm
Чем этот программатор плох, какие у него недостатки и ограничения по сравнению с программаторами для которых требуется изготавливать схему?


--------------------
Go to the top of the page
 
+Quote Post
alekseykoj
сообщение Mar 17 2006, 14:13
Сообщение #27


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 8-11-05
Пользователь №: 10 602



Нельзя Reset вешать вместе с питанием. Посмотри User Manual по режиму программирования AVR
А вообще есть программатор PonyProg бесплатный и схемы на него есть и описание....
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Mar 17 2006, 17:43
Сообщение #28


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



bb-offtopic.gif ну причем же тут программатор?...
Хочется именно на МК...
про ШИМ отпало.

Что за режим самоперезагрузки?....не слышал что-то...
Шаг по частоте имеется виду что?...
Да думаю могут они его обеспечить...иначе никак...
никаких других микросхем не приемлю, хочу на МК...

..жду еще советов...

Сообщение отредактировал MakFatum - Mar 17 2006, 17:46
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 17 2006, 20:42
Сообщение #29


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(MakFatum @ Mar 17 2006, 19:43) *
Что за режим самоперезагрузки?....не слышал что-то...
Шаг по частоте имеется виду что?...

Полагаю beer_warrior имел в виду режим таймера Output Compare со сбросом таймера.
Пример генерации заданной частоты через пин PBX
(сразу оговорка в примере просто приводится алгоритм, а не рабочий код на C!)

Fosc = 4000000; гц.
Ftarget = 520; гц

TimerOCValue = (Fosc / Ftarget) / 2; // делить на 2 нужно т.к. фактически задается длительность полупериодов.


OCR1A = TimerOCValue;
TCCR1B = (1 << CTC1) | ( 1 ); Запустить таймер в режиме сброса счета по достижению OCR1A
TIMSK = (1 << OCIE1A); // Разрешить прерывание OCR1A таймера
SEI; // разрешить прерывания

ну а в обработчике прерывания OC1A:
PBX = not PBX;
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 18 2006, 00:22
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
выдавать на PC5 соответствующие частоты...420...500Гц... и т.д (все в пределах 1000 Гц)..это всё несущие.
При наличии минуса на одном из выводов PB5, PB4 выдавать на PC3 частоты 8 или 12 Гц - это будет модулирующая.


Собственно и имееться в виду, что перечисленные частоты должны иметь наименьшее общее кратное в виде тактовой частоты.
При этом желательно, чтобы таймеры имели потребный коэффициент деления.
С каким шагом должна изменяться несущая в диапазоне 420-500 ?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016