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

 
 
> Краткое резюме по поводу обвязки МК при 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
Ответов (30 - 44)
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 - 16:04
Рейтинг@Mail.ru


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