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

 
 
> Краткое резюме по поводу обвязки МК при SPI-прог-ии?, на примере ATmega16
MakFatum
сообщение Feb 15 2006, 10:37
Сообщение #1


Участник
*

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



Всем Доброго Времени!...
я в курсе что это уже спрашивали, но это все разбросано кусками по всему форуму...
читал-читал и в голове одна каша...

можно ли подвести краткое резюме всему написанному ранее?...

Собрал простой SPI программатор по схеме :

Отдельно от него отладочная плата с панелькой.
Вопрос первый: какой длины я могу использовать провод между LPT (саму схему я поместил в разъеме LPT) и отладочной платой? Читал что 20-30 см?(придется сидеть тогда с платой и программатором глубоко под столом biggrin.gif ). Можно ли использовать удлинитель в виде шнура от матричного принтера???? (было бы для меня удобно, но не будут ли помехи наводиться???(хотя шнур от матричного принтера экранированный ведь?))
Вопрос второй, по отладочной плате. Ниже приведена обвязка, насобирал сведения отовсюду....Вопрос -такая схема с этими номиналамии будет работать?

Я помню обсуждалось, что AREF можно оставлять пустым?
В какой-то pdf-ке прочитал "Connect ICP to Vcc if not used" (20 вывод PD6)....Зачем??
и еще интересует RESET. Правильно ли будет ТАК, как на схеме?....

Заранее благодарен...
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 44)
ivan2006
сообщение Feb 15 2006, 10:55
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 45
Регистрация: 8-01-06
Из: Петербург
Пользователь №: 12 944



Цитата(MakFatum @ Feb 15 2006, 13:37) *
Вопрос первый: какой длины я могу использовать провод между LPT (саму схему я поместил в разъеме LPT) и отладочной платой? Читал что 20-30 см?(придется сидеть тогда с платой и программатором глубоко под столом :biggrin: ). Можно ли использовать удлинитель в виде шнура от матричного принтера???? (было бы для меня удобно, но не будут ли помехи наводиться???(хотя шнур от матричного принтера экранированный ведь?))

Вопрос второй, по отладочной плате. Ниже приведена обвязка, насобирал сведения отовсюду....Вопрос -такая схема с этими номиналамии будет работать?
Я помню обсуждалось, что AREF можно оставлять пустым?
В какой-то pdf-ке прочитал "Connect ICP to Vcc if not used" (20 вывод PD6)....Зачем??
и еще интересует RESET. Правильно ли будет ТАК, как на схеме?....

1. Удлиннитель для принтера в большинстве случаев использовать можно!
2. Если в Atmel AVR встроенный тактовый генератор то работать будет.
Распиновка ЛПТ зависит от используемого софта.
Подумайте, есть ли смысл запараллеливать В1, В2, В3?
3. Ресет на программаторах делают часто с пом. транзистора с откр. коллектором, но так тоже будет работать. Главное поставить конденсатор reset-gnd >=10nF
ICP - на ваше усмотрение.
Go to the top of the page
 
+Quote Post
$ilent
сообщение Feb 15 2006, 11:13
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296



зачем всё так усложнять? тык
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 15 2006, 11:27
Сообщение #4


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата($ilent @ Feb 15 2006, 14:13) *
зачем всё так усложнять? тык

А если необходимо внутрисхемное программирование (корпус контроллера не в DIP)? В этом случае одним PonyProg не обойдешся...
Для нормальной работы все же надо иметь несколько устройств поддержки программирования и отладки (последовательный/внутрисхемный программатор, параллельный программатор и отладчик JTAG).


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Георгий
сообщение Feb 15 2006, 11:34
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



...или тык
Причем прошиваю внутрисхемно.

Сообщение отредактировал Георгий - Feb 15 2006, 11:36


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
$ilent
сообщение Feb 15 2006, 11:35
Сообщение #6


Частый гость
**

Группа: Новичок
Сообщений: 116
Регистрация: 14-02-06
Из: Москва. Перово
Пользователь №: 14 296



Цитата(BVU @ Feb 15 2006, 14:27) *
А если необходимо внутрисхемное программирование (корпус контроллера не в DIP)? В этом случае одним PonyProg не обойдешся...

В каком смысле? ковырять уже собранное устройство? ни каких проблем, просто позуеш только основной модуль пони, разъём только перепаять по своему усмотрению... А вот на счёт параллельного, это действительно нужная весч...
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Feb 15 2006, 11:38
Сообщение #7


Участник
*

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



"Подумайте, есть ли смысл запараллеливать В1, В2, В3?"
дык нету смысла запараллеливать, я это понял, когда, развел, вытравил, спаял, и засунул в LPT..
ну думую, не сильно страшно....можно бы, конечно, было светодиоды туды засунуть...., но обойдусь без них уж...
"ICP - на ваше усмотрение."
ну что ж, хорошо, на мое усмотрение, чем меньше, тем лучше...

"Для нормальной работы все же надо иметь несколько устройств поддержки программирования и отладки (последовательный/внутрисхемный программатор, параллельный программатор и отладчик JTAG)."
Вот где бы про это еще почитать (JTAG, параллельное программирование, последовательное), чтобы доступно, понятно, с расшифровкой аббревиатур.......
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 15 2006, 11:51
Сообщение #8


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(MakFatum @ Feb 15 2006, 14:38) *
Вот где бы про это еще почитать (JTAG, параллельное программирование, последовательное), чтобы доступно, понятно, с расшифровкой аббревиатур.......

На форуме лежит очень много тем которые обсуждались по данным вопросам, что Вас интересуют. Сделайте поиск. А принципы программирования - последовательные/параллельные можно узнать из фирменных описаний на атмеловский AVR контроллер. Про JTAG отладку - множество информации в инете... вот хотябы: "JTAG. Это стандартный тестовый интерфейс, применяемый для тестирования электронных компонентов и устройств. Устанавливаеться методом навески без применения пайки.
В 1985 сформировалась специальная группа ведущих производителей электроники - JTAG (Joint Test Action Group). Для решения проблем тестирования JTAG выдвинула как промышленный стандарт спецификацию IEEE Std 1149.1-1990 (IEEE Standard Test Access Port and Boundary-Scan Architecture). "


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Feb 15 2006, 17:08
Сообщение #9


Участник
*

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



ну вот, пришел я к окончательному варианту...
всем спасибо!...
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 15 2006, 21:20
Сообщение #10


кекс
******

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



Цитата(MakFatum @ Feb 15 2006, 19:08) *
ну вот, пришел я к окончательному варианту...


1. Схему сброса можно сделать на одном конденсаторе 1uf между пином Reset и Gnd (без причуд с диодом).
2. Дроссель - либо выбросить, либо применить по назначению в цепи AVCC.
3. Кварц бы желательно добавить между XTAL1 XTAL2 (отладочная плата все же, не сидеть же все время на внутреннем RC генераторе).
4. Резисторы 470ом (MISO, MOSI, SCK) не нужны.
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Feb 16 2006, 02:29
Сообщение #11


Участник
*

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



дело в том, что эти данные насобирал из разных источников, как то: AVR beginner, AVR hardware design consideration....
Есть ли какой-нибудь документ, где есть кумулятивный апдейт знаний и сведений про эти все подсоединения и нюансы (например дроссель и назначение в цепи AVCC)...
я так понял он стоит как фильтр по питанию...
кварц я воткну, мне пока бы просто с RC запустить...
а почему резисторы не нужны?.объясните, пожалуйста?...
1 uf - это 1 мкФ?....просто я в схемах видел, что между пинами Reset и GND 0,1 мкФ включают, или это не принципиально?

Сообщение отредактировал MakFatum - Feb 16 2006, 02:31
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 16 2006, 10:07
Сообщение #12


кекс
******

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



Цитата(MakFatum @ Feb 16 2006, 04:29) *
Есть ли какой-нибудь документ, где есть кумулятивный апдейт знаний и сведений про эти все подсоединения и нюансы (например дроссель и назначение в цепи AVCC)...

да - dataheet на ваш МК. (насчет дросселя - стр. 211)

Цитата
а почему резисторы не нужны?.объясните, пожалуйста?...

А какое их назначение? При программировании все равно вначале формируется сигнал сброс, а потом подключаются соответствующие выводы (на вашем программаторе), если их где и требуется размещать, так лучше в программаторе, хотя и там не обязательно.

Цитата
1 uf - это 1 мкФ?....просто я в схемах видел, что между пинами Reset и GND 0,1 мкФ включают, или это не принципиально?

да.. (u - мк)
На Reset - не принципиально. у вас в схеме и стоит 1uf, только еще куча лишнего - резистор и диод, которые можно не ставить.
Go to the top of the page
 
+Quote Post
era
сообщение Feb 16 2006, 21:22
Сообщение #13





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



1. В части резистора и диода на Reset
Этот вход не имеет встроенного защитного диода, таким образом, после снятии питания со схемы некоторое время на нем будет присутствовать напряжение с заряженного конденсатора, что не есть хорошо. Так, что жадничать, наверное, не стоит.
2. При наличии конденсатора на входе Reset при подаче питания на схему на нем некоторое время (зависит от номинала R или встроенного R) будет удерживаться состояние лог"0". При отсутствии подтяжки к питанию на входе SCK, можно поймать неприятные глюки типа порчи flash-а. Короче, полезно подтянуть, т.к. до старта программы вход "висит в воздухе".
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 17 2006, 08:07
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(era @ Feb 16 2006, 23:22) *
1. В части резистора и диода на Reset
Этот вход не имеет встроенного защитного диода, таким образом, после снятии питания со схемы некоторое время на нем будет присутствовать напряжение с заряженного конденсатора, что не есть хорошо. Так, что жадничать, наверное, не стоит.
2. При наличии конденсатора на входе Reset при подаче питания на схему на нем некоторое время (зависит от номинала R или встроенного R) будет удерживаться состояние лог"0". При отсутствии подтяжки к питанию на входе SCK, можно поймать неприятные глюки типа порчи flash-а. Короче, полезно подтянуть, т.к. до старта программы вход "висит в воздухе".

Обо всём этом говорилось в апнотах и даташитах от Atmel, так что пренебрегать этим не стОит, тем более, что это и не так накладно.
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Feb 19 2006, 17:20
Сообщение #15


Участник
*

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



Ну вот ниже окончательная схема, со второго разу заработало!...(С первого не считается, в программаторе к 20-й ноге микросхемы забыл "-" подключить)..
Кондер и дроссель последовательно который стояли убрал..


Еще вот один вопрос....

я понимаю, что сразу после него захочется меня отправить в школу, ....ну помогите только с этим, а потом уж и сам сяду за учебники....Хочу светодиодом помигать просто....
Но чего-то не получается...
С помощью CodeVision AVR и его Wizarda создал проект и программу мигания светодиодом, подключенного к порту А.
привожу ниже кусочек (а то wizard еще много чего там на генерил)
Цитата
#include <mega16.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0xff;

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

};
}


ну вообщем, я понимаю, что проще некуда...Ну не моргает!...
Вопрос по самому процессу программирования!

CVAVR МК видит, все считывает, все программирует, все стирает....

Вот глупый сейчас вопрос задам..
Программу заливать в EEPROM же надо?

Нажимаю я пипку Run Chip Programmer, далее выбираю "файл- Load-EEprom"...
Программирует, но ничего не работает...

а если нажимаю "Programm All", он что-то начинает программировать, доходит до 3% и виснет, ...приходится всключать и выключать питание...а потом стирать...
А еще после прогр-ия и после "read-EEprom", а потом" EDIT".....в табличке, правее 16-ричных чисел, какие-то кракозябры и русские буквы ...что это....?
.....
Go to the top of the page
 
+Quote Post
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
MakFatum
сообщение Mar 18 2006, 03:18
Сообщение #31


Участник
*

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



420, 480, 580, 720, 780 Гц
и модулируется 8 или 12 Герцами
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 18 2006, 09:22
Сообщение #32


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

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



Цитата
420, 480, 580, 720, 780 Гц
и модулируется 8 или 12 Герцами

Ну и вперед, открывай главу по таймерам и просчитывай, как делить тактовую для получения искомых частот.

Сообщение отредактировал beer_warrior - Mar 18 2006, 09:24


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


Участник
*

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



вот-вот, про это и хотел спросить...
а где про это хорошо так, понятненько написано, а?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 18 2006, 12:38
Сообщение #34


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

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



Цитата
вот-вот, про это и хотел спросить...
а где про это хорошо так, понятненько написано, а?

Описания таймеров - в даташите на камень.
Нахождение наименьшего общего кратного - учебник математики 5 класс.

Могу еще посоветовать аппликэйшн ноты, относящиеся к DTMF - там частоты такого же порядка и есть примеры.

Сообщение отредактировал beer_warrior - Mar 18 2006, 12:41


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


Участник
*

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



Хорошо, буду разбираться....

НОК вроде помню...

неотвеченные вопросы..:

3 осциллограмма = 1осциллограмма умножить на 2 осц., или + ???
......просто чтобы быть уверенным, мне кажется умножить...
в маткаде что ли попробовать....

Как лучше организовать опрос портов на наличие минуса...
Код
if(!PIND.2)     {/* Если на ножке PB2 низкий логический уровень -
                        то выполнить определенный код */
                            };
ELSE { выполнить другой код}


.....А если без ELSE, ведь это не обязательный параметр,..?

ТОгда программа если не истина просто пойдет дальше?а если истина сделает код в скобках и тоже потом побежит дальше? я правильно понял?

или лучше будет поступить так: (все совместить....)

Код
if(!PIND.2)     {  // если НЛУ то делать код пока не измениться состояние

while((PIND>>2)&0)
{/* код выполняется пока на PIND.2 - НЛУ  */
                                              }
};


...и вот еще один вопрос, не совсем понимаю...
когда на PIND.2 ничего не будет (он просто будет в воздухе), как воспримет его вышеуказанный цикл?...Ведь на нем 0, а низкий лог.уровень - больше 1 В...
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 18 2006, 13:40
Сообщение #36


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

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



Цитата
......просто чтобы быть уверенным, мне кажется умножить...

Логичски умножить т.е. логическое И
Цитата
ТОгда программа если не истина просто пойдет дальше?а если истина сделает код в скобках и тоже потом побежит дальше? я правильно понял?

Именно так.
Цитата
или лучше будет поступить так: (все совместить....)

Я бы опрашивал весь порт сразуи использовал бы оператор switch.
Цитата
когда на PIND.2 ничего не будет (он просто будет в воздухе), как воспримет его вышеуказанный цикл?...Ведь на нем 0, а низкий лог.уровень - больше 1 В...

Если нога просто в воздухе уровень будет зависеть от фазы Луны.
Надо либо включить внутренние пулл-ап резисторы или поставить внешние.
Кстати об этих входах там, как я понял висит ЭСЛ-ТТЛ преобразователи?


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


Участник
*

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



нет, это простые оптопары, по-моему 4N35
Uп=+-20В
Uп1=8,2В
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Mar 21 2006, 11:00
Сообщение #38


Участник
*

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



Вот у меня несколько вопросов:
привожу кусочек:

Код
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

}

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here

}

// Declare your global variables here

void main(void)
{

init_mk();

while (1)
      {

opros_D:
switch (PIND)
{
case 0xFD:       // IF PD1 "-", then 420
TCNT0=107;

break;
case 0xFB:       // IF PD2 "-", then 480
TCNT0=126;

break;
case 0xF7:       // IF PD3 "-", then 580
TCNT0=148;

break;           // IF PD0 "-", then 720
case 0xFE:
TCNT0=169;

break;
case 0xBF:       // IF PD6 "-", then 780
TCNT0=176;

break;
};


Вопрос 1. Хочу сначала попробовать выдавить несущие прерыванием по переполнению таймера (кстати почему-то на той схеме так и есть, хотя это, я так понял, не очень рационально..), а потом сбросом при совпадении Внес необходимые десятичные значения в регистр счета T0, соответствующие частотам. Дальше таймер начинает тикать,...переполняется, возникает прерывание - уходит в подпрограмму обработки...Поскольку подпрограмма начинает работу в момент, когда состояние счетчика сбрасывается с 255 в 0, ведь вновь нужно занести в регистр счетчика необходимое начальное значение (допустим соответсвующее 420 Гц)???
Как мне сделать в подпрограмме прерывания, чтобы выбиралась нужная константа из нескольких (в моем случае 5), и в зависимости от этой константы формировались импульсы нужной частоты? Ведь регистр TCNT0 уже обнулился и сравнивать не с чем чтобы выбрать??? Вообщем я не очень представляю струтуры подпрограммы для моего случая....
никак дойти до этого не могу, видимо чего-то не знаю...
Вопрос 2.Вот использую я оператор switch (PIND) - он опрашивает весь порт, а как этим же оператором опрашивать, допустим, только PINB.5, PINB.4 на наличие gnd???

Вопрос 3. Чем явл-ся "-5В" для МК? ведь 0,3Uп<лог.0<0,6 Uпит.???Мне же надо опрашивать на наличие "-5В"...
фундамент пока мисть у меня не прочный...много белых пятен..

P.s....и еще....прошу извинения у админа форума за то, что пихаю в этот топик все подряд....по пути....
не подумал сразу, далее постараюсь придерживаться общепринятых правил...
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 21 2006, 11:18
Сообщение #39


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

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



1. требует обдумывания
2.что- нибудь типа:
mode = (PINB & 0x30)>> 4; // даст числа от 0 до 4
swich (mode)
{
}
3.Что такое -Uп земля или -5?
Если -5 срочно перерабатывать схему, камень питаеться сейчас от 10В.


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


Участник
*

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



и Uп - Земля...
Вроде там все ок, при отсутствии -20 В на входе оптопар - на входе порта лог.1., иначе лог.0., т.е. опрашивать надо на лог.0...
НО...у меня ничего не работает в протеусе...
только WD исправно сброс генерирует и всё...
....видимо косяки....чувствую просто, что косяки....
???
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 21 2006, 20:47
Сообщение #41


кекс
******

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



Цитата(beer_warrior @ Mar 21 2006, 13:18) *
Если -5 срочно перерабатывать схему, камень питаеться сейчас от 10В.

Уже б давно сгорела..

Цитата
Чем явл-ся "-5В" для МК?

ничем - пустым звуком, который садится через защитные диоды на "Землю". Земля (GND) в схемах считается точкой опоры - условный 0 вольт.

Цитата
ведь 0,3Uп<лог.0<0,6 Uпит.???

Uп = 5V, а GND = 0V, так во всяком случае принято считать. (но естественно все относительно).
Конкретно в вашей схеме, и конкретно для MK Uп = +5V, а Земля = 0V.

Цитата
Мне же надо опрашивать на наличие "-5В"...

чтобы МК смог "увидеть" сигнал с уровнем напряжения ниже 0V относительно "Земли" МК, требуется этот сигнал подтянуть до уровня который бы лежал в пределах 0V +5V относительно "GND" MK, с помощью делителя напряжения на паре резисторов и напряжения смещения, которое подается третим резистором с Vcc к выходной точке делителя...
Go to the top of the page
 
+Quote Post
MakFatum
сообщение Mar 22 2006, 16:53
Сообщение #42


Участник
*

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



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

вот написал тут

Код
#include <mega8.h>

// Declare your global variables here

void main(void)
{

PORTB=0x00;
DDRB=0x08;
      
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
// Mode: CTC top=OCR2
// OC2 output: Clear on compare match
ASSR=0x00;
TCCR2=0b00011101;
TCNT2=0x00;
OCR2=0xff;

}


В протеусе работает, НО при значении ff в OCR2 показывает почему-то 15 Гц, может считаю не так?
формула: fOCn=fclk_/2*N(1+OCRn)
fclk=976,5625 при 1/1024
N соотв-но 1024
Может что-то неправильно в формулу подставляю?..
Go to the top of the page
 
+Quote Post
あっ!
сообщение May 27 2006, 15:29
Сообщение #43


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 20-05-06
Пользователь №: 17 297



Господа, а вот кто подскажет, что происходит с сигналами на неиспользующихся при SPI-программировании выводах? В схеме на SPI повешаны MMC и ещё там одна микросхема - надо обеспечить им во время программирования высокий уровень на CS.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 27 2006, 20:17
Сообщение #44


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата
Господа, а вот кто подскажет, что происходит с сигналами на неиспользующихся при SPI-программировании выводах?

На большинстве процессоров (и Меге8) выводы отключены (являются входами). А вообще, обычно для портовых регистров пишут их состояния после сбросе (при программировании они такие же). Большинство будут сконфигурированны как входы без подтяжки. Иногда с подтяжкой. Если у вас подключена ММС, то желательно её CS снаружи подтягивать к питанию резистором. И конечно пин CS не должен быть пином, участвующим в программировании.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
あっ!
сообщение May 27 2006, 21:43
Сообщение #45


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 20-05-06
Пользователь №: 17 297



GetSmart
Премного благодарен. Теперь нашёл. Действительно - высокоимпедансное состояние.
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 Текстовая версия Сейчас: 20th July 2025 - 20:50
Рейтинг@Mail.ru


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