|
Краткое резюме по поводу обвязки МК при SPI-прог-ии?, на примере ATmega16 |
|
|
|
Mar 18 2006, 03:18
|
Участник

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

|
420, 480, 580, 720, 780 Гц и модулируется 8 или 12 Герцами
|
|
|
|
|
Mar 18 2006, 09:22
|

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

|
Цитата 420, 480, 580, 720, 780 Гц и модулируется 8 или 12 Герцами Ну и вперед, открывай главу по таймерам и просчитывай, как делить тактовую для получения искомых частот.
Сообщение отредактировал beer_warrior - Mar 18 2006, 09:24
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Mar 18 2006, 12:12
|
Участник

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

|
вот-вот, про это и хотел спросить... а где про это хорошо так, понятненько написано, а?
|
|
|
|
|
Mar 18 2006, 12:38
|

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

|
Цитата вот-вот, про это и хотел спросить... а где про это хорошо так, понятненько написано, а? Описания таймеров - в даташите на камень. Нахождение наименьшего общего кратного - учебник математики 5 класс. Могу еще посоветовать аппликэйшн ноты, относящиеся к DTMF - там частоты такого же порядка и есть примеры.
Сообщение отредактировал beer_warrior - Mar 18 2006, 12:41
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Mar 18 2006, 13:31
|
Участник

Группа: Новичок
Сообщений: 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 В...
|
|
|
|
|
Mar 18 2006, 13:40
|

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

|
Цитата ......просто чтобы быть уверенным, мне кажется умножить... Логичски умножить т.е. логическое И Цитата ТОгда программа если не истина просто пойдет дальше?а если истина сделает код в скобках и тоже потом побежит дальше? я правильно понял? Именно так. Цитата или лучше будет поступить так: (все совместить....) Я бы опрашивал весь порт сразуи использовал бы оператор switch. Цитата когда на PIND.2 ничего не будет (он просто будет в воздухе), как воспримет его вышеуказанный цикл?...Ведь на нем 0, а низкий лог.уровень - больше 1 В... Если нога просто в воздухе уровень будет зависеть от фазы Луны. Надо либо включить внутренние пулл-ап резисторы или поставить внешние. Кстати об этих входах там, как я понял висит ЭСЛ-ТТЛ преобразователи?
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Mar 18 2006, 13:44
|
Участник

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

|
нет, это простые оптопары, по-моему 4N35 Uп=+-20В Uп1=8,2В
|
|
|
|
|
Mar 21 2006, 11:00
|
Участник

Группа: Новичок
Сообщений: 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....и еще....прошу извинения у админа форума за то, что пихаю в этот топик все подряд....по пути.... не подумал сразу, далее постараюсь придерживаться общепринятых правил...
|
|
|
|
|
Mar 21 2006, 16:13
|
Участник

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

|
и Uп - Земля... Вроде там все ок, при отсутствии -20 В на входе оптопар - на входе порта лог.1., иначе лог.0., т.е. опрашивать надо на лог.0... НО...у меня ничего не работает в протеусе... только WD исправно сброс генерирует и всё... ....видимо косяки....чувствую просто, что косяки.... ???
|
|
|
|
|
Mar 21 2006, 20:47
|

кекс
     
Группа: Свой
Сообщений: 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 к выходной точке делителя...
|
|
|
|
|
Mar 22 2006, 16:53
|
Участник

Группа: Новичок
Сообщений: 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 Может что-то неправильно в формулу подставляю?..
|
|
|
|
|
May 27 2006, 15:29
|
Участник

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

|
Господа, а вот кто подскажет, что происходит с сигналами на неиспользующихся при SPI-программировании выводах? В схеме на SPI повешаны MMC и ещё там одна микросхема - надо обеспечить им во время программирования высокий уровень на CS.
|
|
|
|
|
May 27 2006, 21:43
|
Участник

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

|
GetSmart Премного благодарен. Теперь нашёл. Действительно - высокоимпедансное состояние.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|