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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

кот байкера писал(а):Здорово я прокошачился! До сегодняшнего дня думал что генератор и резонатор это одно и тоже. Значит вывод #5 генератора на XTAL2 (а XTAL1-в воздухе?), и никаких дополнительных конденсаторов. А фьюзы как обычно - тактирование от внешнего кварца, и вот оно счастье?.

Фьюзы на тактирование от внешнего генератора, от кварца надо ставить тогда когда честный кварец, а тут же генератор готовый. Присоединять выход генератора (согласно даташиту) к XTAL1, фьюзы CKSEL2..0 запрограммировать все в 0, только предварительно лучше убедиться на 100 %, что генератор работает, а то поставите внешнее тактирование и потом мучаться будете, чтобы обратно вернуть.
Аватара пользователя
Белк
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Сб ноя 22, 2008 15:31:52

Сообщение Белк »

pirotehnick писал(а):Вот это не совсем понял, ОДНОВРЕМЕННО - в каком смысле?
Как я понимаю, когда мы общаемся с внешним устройством, например с этой картой, мы отсылаем данные и ждём окончания их передачи, а затем ждём ответа.


В случае с MMC картой в неё после отправки команды нужно послать 0xFF во время которого и придёт ответ, кстати в зависимости от команды этих 0xFF бывает нужно послать несколько штук прежде чем карта чтото ответит.
Аватара пользователя
Тихан
Потрогал лапой паяльник
Сообщения: 346
Зарегистрирован: Пн апр 14, 2008 19:57:20
Контактная информация:

Сообщение Тихан »

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

Сообщение ARV »

Тихан писал(а):Привет! Сделал секундомер и на плату второпях не постаил резисторы.Дак у меня индикаторы чуть заметно мерцают.Резы это устранят?
вряд ли
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
SarCity
Прорезались зубы
Сообщения: 215
Зарегистрирован: Вт июн 10, 2008 09:17:06
Откуда: г. Саратов
Контактная информация:

Сообщение SarCity »

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

Сообщение ARV »

SarCity писал(а):Здрасть котам! У мя при покупке ATMega8 возникли вопросы о взаимозаменяемости ATMega8-16PC, ATMega8-16PI, ATMega8-16PU. Кто поможет разобраться? Чем они отличаются?
для "домашнего" применения - ничем, кроме цены. берите самый дешевый из них.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
GRafGRay
Прорезались зубы
Сообщения: 223
Зарегистрирован: Вт окт 02, 2007 14:43:23
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение GRafGRay »

Кто знает как "запороть" контроллер, чтоб он оставался рабочим (выполнял зашитую программу), но программировать его или хотябы прочитать ни одним программатором было невозможно? Если нет программного способа мож механический какой присутствует, например ногу ему удалить :)?
При наличии отсутствия пропитанных шпал - это будет не трамвай а одно горе!
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Сообщение Igor_67 »

GRafGRay писал(а):Кто знает как "запороть" контроллер, чтоб он оставался рабочим (выполнял зашитую программу), но программировать его или хотябы прочитать ни одним программатором было невозможно? Если нет программного способа мож механический какой присутствует, например ногу ему удалить :)?


Во всех контроллерах существуют, т.н. "lock bits", т.е. лок-биты. Они то и отвечают за возможность программирования и чтения МК. В каких то контроллерах их два, в каких то - три. Все они описаны в даташите на МК. Курите ДШ и будет вам счастье! :)))
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Сообщение Секретный кот »

Если это контроллер Tiny13, то реально запороть его можно просто нечаянно выставив «опасную комбинацию» совсем других битов (см. раздел даташита errata :))) ). Обещают, что при этом он превращается в OTP вариант.
Аватара пользователя
Digital
Открыл глаза
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga
Контактная информация:

Сообщение Digital »

Каким образом, подскажите, можно сделать так, чтобы индицировать светодиодом, подключенным к выводу порта МК, нажатие кнопки, которая висит на том же выводе порта? Я понимаю, что после нажатия надо переводить вывод порта в состояние выхода и записывать туда 0 (если светодиод подключен к + пит. через резистор). Для одной кнопки еще могу что-то придумать, но если кнопок 2 или более как быть, чтобы состояние нажатой ранее восстанавливалось? Кто-нибудь делал подобную индикацию, поделитесь алгоритмом пожалуйста? Вот такая конструкция может быть доработана?

Код: Выделить всё

void main(void)
{
oldkey=PINB&0x03;

while(1)
{
newkey=PINB&0x03;
if(newkey!=oldkey)
{
oldkey=newkey;
if((newkey&0x01)==0) {действие1;}
else
if((newkey&0x02)==0) {действие2;}
}
}
}

П.С. МК - мега16
Последний раз редактировалось Digital Пн дек 22, 2008 20:06:37, всего редактировалось 1 раз.
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

Подскажите пожалуста настроен таймер №1 в мега8 на прерывание по совпадению с регистром А должен срабатывать с частатой в 2 гц , в прерывании инкреминируеться одна переменная которая отвечает за подсчет секунд для часов немогу добиться точности часов.


Вот настройка таймеров:

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
TCCR0=0x04;
TCNT0=0xB2;
TCCR1A=0x00;
TCCR1B=0x00; //stop
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0xF4;
OCR1AL=0x24;
OCR1BH=0x00;
OCR1BL=0x00;
TCCR1B=0x03; //start
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x11;

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

После того как добавил в прерывание это таймера вот эти строчки

TCCR1B=0x00; //stop Т№1
TCNT1H=0x00; // записать начало отсчета таймера Т№1
TCNT1L=0x00; //
TCCR1B=0x03; //start Т№1

сразу наладилась точность часов но возникет вопрос мне на форуме говорили что этот таймер Т-1


sheva_s - если Вы будете использовать таймер №1 так, как я описал ранее (с использованием регистра OCR1A), то все у Вас будет в порядке!
Само время, которое будет отсчитывать Таймер №1, будет абсолютно точно (насколько это вообще возможно), без всяких задрежек и погрешностей, т. к. он работает НЕЗАВИСИМО ни от чего, в том числе независимо от обработки прерываний, которые он сам генерирует. Этот таймер всегда будет считать одни и те-же интервалы времени.


а так когда я его буду обнулять принудительно в прерывании то время у меня будет плавать так как таймер №0 у меня настроен для динамической индикации и при совпадении прерываний 0 и 1 таймера сначала обработаеться прерывание таймера №0, а только потом прерывание таймера №1 что в свою очередь повлечёт сбой точности хода часов .
Что посоветуете как быть ?
если что непонятно пишите может что не так описал.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

sheva_s писал(а):Подскажите пожалуста настроен таймер №1 в мега8 на прерывание по совпадению с регистром А ....
если что непонятно пишите может что не так описал.

Я так понимаю в этом случае идет речь о настройке таймера в режим CTC (clear timer on compare) - очищать таймер при совпадении, подробнее об этом режиме можно почитать в даташите, могу сказать точно что у вас таймер настроен не так как надо.
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

Спасибо за то что подсказали где искать дествительно небыл включен режим СТС нужно было писать так :
TCCR1B=0x0B;
:))
буду дальше продолжать мучать МК.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

sheva_s писал(а):...нужно было писать так :
TCCR1B=0x0B;
:))
буду дальше продолжать мучать МК.


Лучше так:

Код: Выделить всё

TCCR1B=(1<<WGM12)|(1<<CS11)|(1<<CS10)
или так:

Код: Выделить всё

TCCR1B=(1<<WGM12)|(0b11<<CS10)
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

А чем лучше можете обьяснить, а то я только изучаю Си и для меня малопонятен текст который вы написали.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

sheva_s писал(а):А чем лучше можете обьяснить, а то я только изучаю Си и для меня малопонятен текст который вы написали.

Могу.
0. Оператор вида: N << b, означает сдвиг числа N представленного в двоичной системе счисления на b разрядов (бит) влево, при этом в младшие разряды вдвигается 0. Например:
0b11<<3 даст нам число 0b11000.
1. Теперь почему данная запись лучше. На самом деле TCCR1B=0x0B и TCCR1B=(1<<WGM12)|(1<<CS11)|(1<<CS10), в обоих случаях при компиляции для одного и того же контроллера приведет к записи в регистр числа 0x0B, причем это число вычислится и в том и в другом случае на этапе компиляции и в контроллере будет выглядет именно как 0x0B.
Однако суть данной записи в том, что в моем случае по коду сразу видно, какие биты я хочу установить, а по символьным именам бит видно что они значат, например WGM12 - Wave form Generator Mode таймера 1, бит 2; или CS10- Clock Select таймера 1, бит 0 (т.е. бит определяющий выбор источника тактирования таймера 1). Т. е. получается, что вид записи который я привел более информативный. Это помогает когда вы задаете вопрос. Человеку, который хочет вам помочь, не обязательно переводить 0x0B в двоичную форму и лезть в даташит, чтобы узнать какие биты вы хотели установить, зачастую это можно понять по записи.
З. Ы. Относится также и к ассемблеру.
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

Большое спасибо за ответ буду перенимать опыт.
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Сообщение sheva_s »

Как на Си написать :
1, если ( А==0 и В==0) то делаем ...........
2, если ( А==1 или В==1) то делаем ...........

а то застрял :)))
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

sheva_s писал(а):Как на Си написать :
1, если ( А==0 и В==0) то делаем ...........
2, если ( А==1 или В==1) то делаем ...........

а то застрял :)))

Если вы серьезно, то RTFM,
Для начала Керниган и Ритчи "Язык программирования С" (желательно второе или третье издание) например http://masterpc.alfaspace.net/books/CCScience/book_C_programming/#content, правда сайт часто бывает недоступен, приаттачить html версию не могу, т. к. архив больше 300 кБ
Затем доки к вашему компилятору.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

smac писал(а):
sheva_s писал(а):А чем лучше можете обьяснить, а то я только изучаю Си и для меня малопонятен текст который вы написали.

Могу.
в WinAVR даже имеется специальный макрос, делающий битовые установки еще более наглядными:

Код: Выделить всё

#define _BV(x) (1<<x)

BV - от Bit Value

теперь пишется еще красивше:

Код: Выделить всё

TCCR1B=_BV(WGM12)|_BV(CS11)|_BV(CS10)


sheva_s писал(а):Как на Си написать :
1, если ( А==0 и В==0) то делаем ...........
2, если ( А==1 или В==1) то делаем ...........

да практически ТАК и писать, как вопрос задан:

Код: Выделить всё

if((A==0) && (B==0)) { делаем что-то}
if((A==1) || (B==1)) {делаем еще что-то}

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

Мой уютный бложик... заходите!
Ответить

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