Фьюзы на тактирование от внешнего генератора, от кварца надо ставить тогда когда честный кварец, а тут же генератор готовый. Присоединять выход генератора (согласно даташиту) к XTAL1, фьюзы CKSEL2..0 запрограммировать все в 0, только предварительно лучше убедиться на 100 %, что генератор работает, а то поставите внешнее тактирование и потом мучаться будете, чтобы обратно вернуть.кот байкера писал(а):Здорово я прокошачился! До сегодняшнего дня думал что генератор и резонатор это одно и тоже. Значит вывод #5 генератора на XTAL2 (а XTAL1-в воздухе?), и никаких дополнительных конденсаторов. А фьюзы как обычно - тактирование от внешнего кварца, и вот оно счастье?.
Мелкие вопросы по МК и ПЛИС.
- Реклама
В случае с MMC картой в неё после отправки команды нужно послать 0xFF во время которого и придёт ответ, кстати в зависимости от команды этих 0xFF бывает нужно послать несколько штук прежде чем карта чтото ответит.pirotehnick писал(а):Вот это не совсем понял, ОДНОВРЕМЕННО - в каком смысле?
Как я понимаю, когда мы общаемся с внешним устройством, например с этой картой, мы отсылаем данные и ждём окончания их передачи, а затем ждём ответа.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
вряд лиТихан писал(а):Привет! Сделал секундомер и на плату второпях не постаил резисторы.Дак у меня индикаторы чуть заметно мерцают.Резы это устранят?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
для "домашнего" применения - ничем, кроме цены. берите самый дешевый из них.SarCity писал(а):Здрасть котам! У мя при покупке ATMega8 возникли вопросы о взаимозаменяемости ATMega8-16PC, ATMega8-16PI, ATMega8-16PU. Кто поможет разобраться? Чем они отличаются?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- GRafGRay
- Прорезались зубы
- Сообщения: 223
- Зарегистрирован: Вт окт 02, 2007 14:43:23
- Откуда: Ростов-на-Дону
- Контактная информация:
Кто знает как "запороть" контроллер, чтоб он оставался рабочим (выполнял зашитую программу), но программировать его или хотябы прочитать ни одним программатором было невозможно? Если нет программного способа мож механический какой присутствует, например ногу ему удалить
?
При наличии отсутствия пропитанных шпал - это будет не трамвай а одно горе!
Во всех контроллерах существуют, т.н. "lock bits", т.е. лок-биты. Они то и отвечают за возможность программирования и чтения МК. В каких то контроллерах их два, в каких то - три. Все они описаны в даташите на МК. Курите ДШ и будет вам счастье!GRafGRay писал(а):Кто знает как "запороть" контроллер, чтоб он оставался рабочим (выполнял зашитую программу), но программировать его или хотябы прочитать ни одним программатором было невозможно? Если нет программного способа мож механический какой присутствует, например ногу ему удалить?
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Каким образом, подскажите, можно сделать так, чтобы индицировать светодиодом, подключенным к выводу порта МК, нажатие кнопки, которая висит на том же выводе порта? Я понимаю, что после нажатия надо переводить вывод порта в состояние выхода и записывать туда 0 (если светодиод подключен к + пит. через резистор). Для одной кнопки еще могу что-то придумать, но если кнопок 2 или более как быть, чтобы состояние нажатой ранее восстанавливалось? Кто-нибудь делал подобную индикацию, поделитесь алгоритмом пожалуйста? Вот такая конструкция может быть доработана?
П.С. МК - мега16
Код: Выделить всё
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;}
}
}
}
Последний раз редактировалось Digital Пн дек 22, 2008 20:06:37, всего редактировалось 1 раз.
- sheva_s
- Грызет канифоль
- Сообщения: 256
- Зарегистрирован: Пт апр 27, 2007 14:32:48
- Откуда: Украина Кривой Рог
- Контактная информация:
Подскажите пожалуста настроен таймер №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
Что посоветуете как быть ?
если что непонятно пишите может что не так описал.
Вот настройка таймеров:
// 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
а так когда я его буду обнулять принудительно в прерывании то время у меня будет плавать так как таймер №0 у меня настроен для динамической индикации и при совпадении прерываний 0 и 1 таймера сначала обработаеться прерывание таймера №0, а только потом прерывание таймера №1 что в свою очередь повлечёт сбой точности хода часов .sheva_s - если Вы будете использовать таймер №1 так, как я описал ранее (с использованием регистра OCR1A), то все у Вас будет в порядке!
Само время, которое будет отсчитывать Таймер №1, будет абсолютно точно (насколько это вообще возможно), без всяких задрежек и погрешностей, т. к. он работает НЕЗАВИСИМО ни от чего, в том числе независимо от обработки прерываний, которые он сам генерирует. Этот таймер всегда будет считать одни и те-же интервалы времени.
Что посоветуете как быть ?
если что непонятно пишите может что не так описал.
Я так понимаю в этом случае идет речь о настройке таймера в режим CTC (clear timer on compare) - очищать таймер при совпадении, подробнее об этом режиме можно почитать в даташите, могу сказать точно что у вас таймер настроен не так как надо.sheva_s писал(а):Подскажите пожалуста настроен таймер №1 в мега8 на прерывание по совпадению с регистром А ....
если что непонятно пишите может что не так описал.
Лучше так:sheva_s писал(а):...нужно было писать так :
TCCR1B=0x0B;
![]()
буду дальше продолжать мучать МК.
Код: Выделить всё
TCCR1B=(1<<WGM12)|(1<<CS11)|(1<<CS10)Код: Выделить всё
TCCR1B=(1<<WGM12)|(0b11<<CS10)Могу.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 в двоичную форму и лезть в даташит, чтобы узнать какие биты вы хотели установить, зачастую это можно понять по записи.
З. Ы. Относится также и к ассемблеру.
Если вы серьезно, то RTFM,sheva_s писал(а):Как на Си написать :
1, если ( А==0 и В==0) то делаем ...........
2, если ( А==1 или В==1) то делаем ...........
а то застрял
Для начала Керниган и Ритчи "Язык программирования С" (желательно второе или третье издание) например http://masterpc.alfaspace.net/books/CCS ... g/#content, правда сайт часто бывает недоступен, приаттачить html версию не могу, т. к. архив больше 300 кБ
Затем доки к вашему компилятору.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
в WinAVR даже имеется специальный макрос, делающий битовые установки еще более наглядными:smac писал(а):Могу.sheva_s писал(а):А чем лучше можете обьяснить, а то я только изучаю Си и для меня малопонятен текст который вы написали.
Код: Выделить всё
#define _BV(x) (1<<x)
теперь пишется еще красивше:
Код: Выделить всё
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)) {делаем еще что-то}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


