Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
KDAlex
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 14, 2008 12:00:32

Сообщение KDAlex »

правильно ли я понимаю, что можно забить на соблюдение стандартности BaudRate при обмене по UART между двумя МК (на обоих baudrate будет одинаков, только не будет совпадать со значением стандартного ряда)
Аватара пользователя
-= Александр =-
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Пн дек 10, 2007 12:19:18
Откуда: Санкт-Петербург
Контактная информация:

Сообщение -= Александр =- »

Можно, но как-то это не спортивно... Да и при отладке поглядеть что там происходит не получится. Тогда уж проще по SPI связать - и код проще и скорость в разы выше.
Аватара пользователя
oleg1
Встал на лапы
Сообщения: 110
Зарегистрирован: Вс окт 14, 2007 01:09:48

Сообщение oleg1 »

Здраствуйте! У меня такой вопрос: кто каким програматором пользуется? У кого есть рабочая разводка по плате(однослойной) выложите пожалуста...
pirotehnick
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж
Контактная информация:

Сообщение pirotehnick »

Вот мой программатор, он самый простой, даже без всякой защиты, хотя пока работает нормально. Только вот сама плата немного криво конвертировалась в pdf (в компасе ещё тогда чертил), небольшие зазоры между дорожками получились.
Вложения
stk200.rar
(143.05 КБ) 262 скачивания
Аватара пользователя
oleg1
Встал на лапы
Сообщения: 110
Зарегистрирован: Вс окт 14, 2007 01:09:48

Сообщение oleg1 »

а если не секрет чем это черевато? (без защиты) от чего и что она защищает?
и можно ли ещё принципиальную схемку этого прогроматора с подписью всех элементов схемы...
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

Пишу часы + датчики температуры.
Для подсчета времени используется прерывание таймера(увеличиваю счетчик секунд). Все остальное делается в основном бесконечном цикле. В том числе идет опрос датчиков температуры по 1wire. Во время опроса датчиков, необходимо запрещать прерывание. Насколько я понимаю, возможно получение пропуска/задержку прерывания подсчета секунд(т.е. могу получить ошибку подсчета времени если прерывание должно произойти в тот момент, когда они запрещены для опроса датчиков). Как в таких случаях принято поступать? как-то синхронизировать возникновение прерываний и опрос датчиков температуры и опрашивать датчики между прерываниями(например сразу после прерывания так чтобы успеть до следующего, подобрав "тики"/периоды прерывания так, чтобы гарантировано успеть между ними) или ест еще способы? Интересно как принято поступать в тех случаях, когда есть необходимость на относительно продолжитеное время запретить прерывания, но в тоже время не внести(или как-то скомпенсировать после) ошибку подсчета времени.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

во-первых, если прерывания запрещены менее, чем на интервал между двумя прерываниями таймера, то потери не произойдет, произойдет задержка счета, но сам счет не собъется.
во-вторых, кто вам сказал, что на время работы с 1-wire нужно запрещать прерывания?! нужно запрещать только на время приема-передачи одного бита, а это всего-навсего несколько микросекунд...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
pirotehnick
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж
Контактная информация:

Сообщение pirotehnick »

oleg1 писал(а):а если не секрет чем это черевато? (без защиты) от чего и что она защищает?
и можно ли ещё принципиальную схемку этого прогроматора с подписью всех элементов схемы...



имеется ввиду нет промежуточного буфера как в классическом программаторе STK200, т.е. выводы МК напрямую подключаются к линиям порта LPT, хотя я здесь поставил токоограничивающие резисторы по 150 Ом. Вообще конечно не следует напрямую подрубать контроллер к порту, т.к. LPT вообще достаточно чувствителен к нагрузкам и случайно можно его спалить, хотя это редкость. Я вот до сих пор шью этим программатором, и вроде бы всё в порядке.

А вообще лучше сделай нормальный STK200.

Всё хочу себе спаять нормальный параллельный программатор

http://radiokot.ru/forum/viewtopic.php?t=864

и тебе советую.

Что касается схемки, то у меня её просто нет, а чертить чего-то не охото.
При разработке платы я опирался на схему подключения, представленную сдесь:

http://myrobot.ru/stepbystep/mc_programmer.php

там где нарисовано какие ноги надо соединять.

у меня в схеме содержаться: стабилизатор питания (7805), кондюры для его подключения, батарейка (крона 9 В), светодиод, кварц (8 МГц)... ну и всё, я ещё сделал 2 панелькти на DIP28 и DIP40 что бы можно ещё было 16 и 32 мегу шить, вообщем просто посмотри куда чего идёт, там всё понятно.

Если нужно могу ещё файл компаса скинуть (сам чертёж).
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

ARV писал(а):во-первых, если прерывания запрещены менее, чем на интервал между двумя прерываниями таймера, то потери не произойдет, произойдет задержка счета, но сам счет не собъется.

потери прерывания не произойдет? правильно я понял? а произошедшая задержка внесет погрешность в подсчет?

ARV писал(а):во-вторых, кто вам сказал, что на время работы с 1-wire нужно запрещать прерывания?! нужно запрещать только на время приема-передачи одного бита, а это всего-навсего несколько микросекунд...

т.е. максимум что я могу получить, что возможную задержку прерывания на несколько микросекунд, что может дать погрешность?
Если я использую прерывание таймера по переполнению, то чтобы скомпенсировать эту задержку, могу ли я считать значение регистра счетчика(например TCNT2) во время прерывания и если оно не равно 255, то прибавить это значение к тому, которое я подставляю во время прерывания? т.е. сделать что-то типа:
было TCNT2=0x83; а изменить на TCNT2=TCNT2+0x83;
или мы не о том говорим?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

кто вам сказал про погрешность? по-моему, я ясно выразился: если запрет на короткое время - произойдет небольшая задержка подсчета, но сам счет не нарушится. нарисую образно:
без запрета:
0------1-------2-------3-------4-------5-------6----
с запретом (момент запрета обозначен плюсом):
------++----------++----------++----------
0---------1----2----------2----4----------5----6----
видно, что при запрете каждое второе прерывание запаздывает, но сам счет не искажается...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

я чутка запутался....
0-1-2-3 и т.д. это моменты прерываний или значения регистра в котором счетчик таймера?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

это значения вашего счетчика секунд
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

ARV писал(а):это значения вашего счетчика секунд


что-то я окончательно запутался. К примеру, я предделителями выставляю частоту таймера 125кГц,
далее создаю прерывание по переполнению:

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
TCNT2=0x83;
msec++;
}
т.е. увеличиваю msec раз в 1ms

насколько я понял, если при подходе TCNT2 к переполнению(т.е. 255) я запрещу прерывания, то при переполнении выставится флаг переполнения, но прерывание не произойдет, потом, после разрешения прерываний, возникнет прерывание но TCNT2 будет уже например =10... в прерывании я его устанавниваю в 0x83, т.е. 10 тиков из 125 я потерял и получил погрешность? или нет? или для часов нужно как-то по другому использовать прерывания?
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Telek писал(а):...или для часов нужно как-то по другому использовать прерывания?


Я думаю вам действительно лучше использовать прерывания по-другому. Например так:
1. Использовать вместо прерывания по переполнению таймера прерывания по совпадению регистра TCNT с регистром сравнения (OCR), в котором должна быть временнАя константа (в вашем случае наверное 0х83).
2. Настроить таймер так, чтобы при достижении сравнения происходил сброс таймера.
При таких действиях таймер после возникновения условия прерывания (при совпадении счетчика тиков с регистром сравнения) счетчик тиков обнулится и счет продолжится с 0. Причем для обнуления не обязателен вход в обработчик прерывания. Таким образом не будет погрешности подсчета, возможна только задержка подсчета милисекунд. И последнее, главное чтобы прерывания не были запрещены на длительное время - такое чтобы за это время не возникло двух прерываний от таймера.
Аватара пользователя
yaotzin
Опытный кот
Сообщения: 782
Зарегистрирован: Вс фев 04, 2007 16:32:06

Сообщение yaotzin »

Извините за тупой вопрос,

DDRD = 0x7F; //111 1111 все ножки порта D на выход
PORTD = 0x00;//111 1111 на все ножки порта D 0 вольт


в чем отличие если написать

PORTD = 0x00;//111 1111 на все ножки порта D -5 вольт


по сути там -5 вольт?

подключив к ножке порта D вольтметр и к +5 вольтам вольтметр покажет что на ножке порта D -5 вольт, так зачем писать что там 0 вольт?
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

yaotzin писал(а):Извините за тупой вопрос,

DDRD = 0x7F; //111 1111 все ножки порта D на выход
PORTD = 0x00;//111 1111 на все ножки порта D 0 вольт


в чем отличие если написать

PORTD = 0x00;//111 1111 на все ножки порта D -5 вольт


по сути там -5 вольт?

подключив к ножке порта D вольтметр и к +5 вольтам вольтметр покажет что на ножке порта D -5 вольт, так зачем писать что там 0 вольт?

Че-то сути вопроса не понял.
Отличие записи DDRD=..; PORTD=..; и просто PORTD=.. в том, что в первой записи указаны направления порта вход/выход, а во-второй, вроде, все порты будут по умолчанию настроены на вход.
-5В конечно же можно выставить на выходе, если измерять относительно напряжения питания. А вот по отношению к земле будет либо 0, либо +5В.
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

Подскажите, как подсчитать количество времени, требуемое процессору на выполнение операций прописанных в конкретном коде программы на СИ?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

KIP писал(а):Подскажите, как подсчитать количество времени, требуемое процессору на выполнение операций прописанных в конкретном коде программы на СИ?
наиболее простое решение - выполнить "замер" в отладчике, например, AVR Studio. другой способ - анализ листинга, но это очень трудоемкий и требующий высокой внимательности способ (если, конечно, не примитивные операторы надо замерить, а циклы или условия, например).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

yaotzin писал(а): зачем писать что там 0 вольт?

Затем чтоб не дописывать у каждого напряжения относительно чего оно измерялось ! - по умолчанию базовым напряжением является напряжение на GND. Смотрите стр.2 в моей домашней страничке - там это растолклвано.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

yaotzin писал(а):Извините за тупой вопрос,

DDRD = 0x7F; //111 1111 все ножки порта D на выход
PORTD = 0x00;//111 1111 на все ножки порта D 0 вольт

в чем отличие если написать
PORTD = 0x00;//111 1111 на все ножки порта D -5 вольт?


Просто запись в PORTD ничего не значит, надо выбирать каким образом +5 или 0 будут соединены с ножкой порта.
Выбирается это как раз записью 0 или 1 в регистр DDRD
Ответить

Вернуться в «Разные вопросы по МК»