Выводы надо формулировать, а соединять — пиныploop писал(а):Ноги надо раздвигать, а соединять - выводы.
Мелкие вопросы по МК и ПЛИС.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
-
pirotehnick
- Потрогал лапой паяльник
- Сообщения: 327
- Зарегистрирован: Пт фев 08, 2008 13:46:03
- Откуда: Воронеж
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Есть вопрос по контроллеру LPC1768.
Хочу уточнить назначение регистра FIOPIN. Правильно ли я понял из даташита, что при записи в этот регистр измениться состояние ног порта в соответствии с заданным значением. Дело в том, что для задания уровня сигнала на выводах порта используются регистры FIOSET и FIOCLR. Т.е., если порт настроен на выход, использование регистра FIOPIN для управления уровнями сигналов на выводах порта будет эквивалентно использованию регистров FIOSET и FIOCLR?
Из даташита так же узнал, что при чтении регистра FIOPIN, получаем значение реального состояния выводов порта. Довольно интересно получается.
Хочу уточнить назначение регистра FIOPIN. Правильно ли я понял из даташита, что при записи в этот регистр измениться состояние ног порта в соответствии с заданным значением. Дело в том, что для задания уровня сигнала на выводах порта используются регистры FIOSET и FIOCLR. Т.е., если порт настроен на выход, использование регистра FIOPIN для управления уровнями сигналов на выводах порта будет эквивалентно использованию регистров FIOSET и FIOCLR?
Из даташита так же узнал, что при чтении регистра FIOPIN, получаем значение реального состояния выводов порта. Довольно интересно получается.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
ПИНы надо в телефон вводить и в паспорте узнавать, а соединять надо контакты МК.Gudd-Head писал(а):Выводы надо формулировать, а соединять — пины
I am DX168B and this is my favourite forum on internet!
Re: Мелкие вопросы по МК и ПЛИС.
Контакты есть у реле, тумблеров, и прочих кнопок. У МК - нет.ПИНы надо в телефон вводить и в паспорте узнавать, а соединять надо контакты МК.
Пины - не по-русски, выводы не формулируются (по пятницам), ноги тоже плохо двигаются, короче так: "лепесток для монтажа методом пайки"! и я спать пошел.
Re: Мелкие вопросы по МК и ПЛИС.
Берем BGA и фиг Вам, а не лепестки и тычинки 
Коль тут такие абстрактные темы поднимаются, тоже задам дурацкий вопрос.
По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
Ведь были же какие-то на это причины?
Коль тут такие абстрактные темы поднимаются, тоже задам дурацкий вопрос.
По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
Ведь были же какие-то на это причины?
- Реклама
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Предположу что у Меги больше ядро, и оно больше жрёт на высоких частотах: Тини13 на 8 МГц 5 мА, Мега128 на 8 МГц около 17 мА, около 3 мА на 1 МГц (при 5 В).FFAMax писал(а):По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Все идут на (около) 1 MHz.
Только у mega128 четыре четыре комбинации CKSEL для внутреннего RC и с завода 1 MHz
А у tiny13 две комбинации, с завода генератор на 9.6 и CKDIV8=0, результат 1.2 MHz.
У mega168 одна частота внутреннего калиброванного RC -- 8MHz и CKDIV8=0, результат 1 MHz.
Только у mega128 четыре четыре комбинации CKSEL для внутреннего RC и с завода 1 MHz
А у tiny13 две комбинации, с завода генератор на 9.6 и CKDIV8=0, результат 1.2 MHz.
У mega168 одна частота внутреннего калиброванного RC -- 8MHz и CKDIV8=0, результат 1 MHz.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
-
Лютик
- Нашел транзистор. Понюхал.
- Сообщения: 161
- Зарегистрирован: Вт мар 25, 2008 22:10:23
- Откуда: Минск
Re: Мелкие вопросы по МК и ПЛИС.
скажите, что неправильно делаю?
контроллер pic16f628a, написал прошивку, все работает, решил запустить watchdog, настроил предделитель на ~1 секунду, поставил предделитель перед WDT, поставил галку в конфигурации(см. аттач), ну и обнуление таймера в коде тоже не забыл, однако контроллер ведет себя не правильно, отображает чепуху на дисплей(семисегментный), в чем дело?
есть подозрения, что для сброса от watchdog'а ногу mclr также необходимо кидать через резистор на +Е
[img]http://radiokot.ru/forum/download/file.php?
mode=view&id=75476&sid=93d35edf347e33ac623a7f1162ed05a4[/img]
контроллер pic16f628a, написал прошивку, все работает, решил запустить watchdog, настроил предделитель на ~1 секунду, поставил предделитель перед WDT, поставил галку в конфигурации(см. аттач), ну и обнуление таймера в коде тоже не забыл, однако контроллер ведет себя не правильно, отображает чепуху на дисплей(семисегментный), в чем дело?
есть подозрения, что для сброса от watchdog'а ногу mclr также необходимо кидать через резистор на +Е
[img]http://radiokot.ru/forum/download/file.php?
mode=view&id=75476&sid=93d35edf347e33ac623a7f1162ed05a4[/img]
- Вложения
-
- pic16.JPG
- (110.94 КБ) 271 скачивание
- КРАМ
- Друг Кота
- Сообщения: 25299
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
MCLR нужно подключить к питанию через 10 кОм (или около того).
Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.

Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.
-
pavlo!
- Открыл глаза
- Сообщения: 58
- Зарегистрирован: Пн май 30, 2011 14:14:44
- Откуда: малоярославец
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
добрый день. подскажите, если в этой схеме (http://cxem.net/mc/mc33.php) использовать индикаторы с ОК (сдесь есть прошивка для ОК http://eldigi.ru/site/term/13.php) подлючение индикатора к мк меняется? или все так же?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
По идее, не должно. Ё-моё, нафига там 20 МГц???pavlo! писал(а):подлючение индикатора к мк меняется?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Мелкие вопросы по МК и ПЛИС.
И почему нет токоограничительных резисторов?
-
pavlo!
- Открыл глаза
- Сообщения: 58
- Зарегистрирован: Пн май 30, 2011 14:14:44
- Откуда: малоярославец
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успеваютploop писал(а):И почему нет токоограничительных резисторов?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Мелкие вопросы по МК и ПЛИС.
Угу. Вот зависнет МК, и тогда сгорят. Хотя, конечно, может сработать защита выходного буфера порта — я не знаю какой у ПИКов максимальный входной/выходной ток.pavlo! писал(а):это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успевают
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
pavlo!
- Открыл глаза
- Сообщения: 58
- Зарегистрирован: Пн май 30, 2011 14:14:44
- Откуда: малоярославец
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
где то читал что у 628ой около 100маGudd-Head писал(а):Угу. Вот зависнет МК, и тогда сгорят. Хотя, конечно, может сработать защита выходного буфера порта — я не знаю какой у ПИКов максимальный входной/выходной ток.pavlo! писал(а):это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успевают
-
Лютик
- Нашел транзистор. Понюхал.
- Сообщения: 161
- Зарегистрирован: Вт мар 25, 2008 22:10:23
- Откуда: Минск
Re: Мелкие вопросы по МК и ПЛИС.
я же говорю, что код до вочдога работал стабильно,а после включения нет.КРАМ писал(а):MCLR нужно подключить к питанию через 10 кОм (или около того).
Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.
ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
код на 1819 слов выкладывать не буду, так как там все верно, да и в моих дебрях вам сложно будет разобраться.
вочдог поставил на ~1 секунду, а обнуляю с частотой ~500Гц(в цикле обработки отображения на семиссегментный индикатор)
Код: Выделить всё
OPTION = 0b00001110; // TMR0 on, 1:1 prescale, WDT 1:64 (1.152 sec)
- КРАМ
- Друг Кота
- Сообщения: 25299
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Мелкие вопросы по МК и ПЛИС.
Так все таки код...Лютик писал(а): .......ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
........
все, вроде разобрался, ошиька была в том., что в прерывании поставил запись в ипром, что противоречиво
Нога сброса может быть только ВХОДОМ. Поэтому приводить аббревиатуру in/out неправильно. Впрочем использована она у Вас правильно - как вход. И подтяжка какая то должна быть у этого пина (либо к питанию, либо к земле). Иначе кнопка работать не будет.
-
Лютик
- Нашел транзистор. Понюхал.
- Сообщения: 161
- Зарегистрирован: Вт мар 25, 2008 22:10:23
- Откуда: Минск
Re: Мелкие вопросы по МК и ПЛИС.
подтяжка через резистор стоит(так как внутренняя только на порт Б стоит). я читал даташит и в курсе, что это только вход(на это обратил внимании при синтезе схемы), просто сейчас я на это не обращаю внимание, так как забыл что за нога, вот и пишу что вход/выход.КРАМ писал(а):Так все таки код...Лютик писал(а): .......ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
........
все, вроде разобрался, ошиька была в том., что в прерывании поставил запись в ипром, что противоречиво![]()
Нога сброса может быть только ВХОДОМ. Поэтому приводить аббревиатуру in/out неправильно. Впрочем использована она у Вас правильно - как вход. И подтяжка какая то должна быть у этого пина (либо к питанию, либо к земле). Иначе кнопка работать не будет.
а проблема действительно с кодом, удивительно что еще перепроверил
еще бы хотелось поинтересоваться как работать с PWRTE и BOREN, а именно BOREN, но в даташите написано, что обязательно в таком случае надо включать PWRTE.
Включил PWRTE и BOREN - мк в постоянном ресете ли тип того. надо чтото еще в коде делать или этого остаточно, тогда непонятно почему ресетит мк..
Re: Мелкие вопросы по МК и ПЛИС.
Господа, касательно вопроса TWI (I2C), который был у меня выше.
Перечитывая всевозможные примеры, в частности на http://telestyle.ru/index.php?productID=2888, обратил внимание на повторную установку
TWCR = (1<<TWEN)|(1<<TWINT)
после передачи адреса с флагом чтения.
Получается такая суть должна быть:
TWDR = address|(1<<0)
TWCR = (1<<TWEN)|(1<<TWINT)
и еще раз после получения ACK
TWCR = (1<<TWEN)|(1<<TWINT)
для продолжения тактирования SCL, данные от EEPROM и потекут.
Конечно, опыт "копания" несомненно был полезен, там же еще узнал про нюансы со скоростями, про то, что на низких не все девайсы могут линию зажимать.
Ах да, поздравьте с приобретением АЙП usb3000, будем теперь 3Мгц дебажить
Повествование на этом закончилось... начались вопросы.. куда уж без них...
Это все к той же теме про ASM vs C..
значитс есть конструкция PORTA.0 = 1
а можно PORTA |= 1
а для сброса я использовал
PORTA &= ~(1<<0);
наравне с
PORTA.0 = 0;
я как-то попытался аналогичную конструкцию на PORTD (на ногах SCL SDA) использовать, одну ногу дергаю, а он другую тоже дергает, брр... подумал я.. благо usb3000 не позволил мне терять на этом много времени, сразу предупредив о неверном логе на второй ноге. Полез в ASMокод, сгенерированный CodeVisionAVR (можно обливать грязью и предлагать альтернативы, я на нем начинал, так и продолжаю), там CBI SBI используются в конечном счете.
А далее в даташите меги нашел строки, в которых про эти команды сказано, что установа бит с помощью этих команд может привести к изменению значение других бит, что и произошло с портом D и не происходило с портом A.
Таки возвращаясь к вопросу, понятно, что ввиду хардварных особенностей такое может быть, но я не нашел какие конкретно пины можно безопасно так дергать, а какие нет, может кто знает?
Ибо в свете всплывшего глюка (мегу 128 мучал, кстати), вижу один вариант - это присваивать значение порта переменной, ее изменять, а только потом всему порту присваивать значение переменной. Это какой-то не true-way, но должен спасти от подобных накладок. Кто что думает на этот счет? Кто как битами правит?
Правда ведь, что никакой proteus не воспроизведет эту проблему, она исключительно хардварная?
Перечитывая всевозможные примеры, в частности на http://telestyle.ru/index.php?productID=2888, обратил внимание на повторную установку
TWCR = (1<<TWEN)|(1<<TWINT)
после передачи адреса с флагом чтения.
Получается такая суть должна быть:
TWDR = address|(1<<0)
TWCR = (1<<TWEN)|(1<<TWINT)
и еще раз после получения ACK
TWCR = (1<<TWEN)|(1<<TWINT)
для продолжения тактирования SCL, данные от EEPROM и потекут.
Конечно, опыт "копания" несомненно был полезен, там же еще узнал про нюансы со скоростями, про то, что на низких не все девайсы могут линию зажимать.
Ах да, поздравьте с приобретением АЙП usb3000, будем теперь 3Мгц дебажить
Повествование на этом закончилось... начались вопросы.. куда уж без них...
Это все к той же теме про ASM vs C..
значитс есть конструкция PORTA.0 = 1
а можно PORTA |= 1
а для сброса я использовал
PORTA &= ~(1<<0);
наравне с
PORTA.0 = 0;
я как-то попытался аналогичную конструкцию на PORTD (на ногах SCL SDA) использовать, одну ногу дергаю, а он другую тоже дергает, брр... подумал я.. благо usb3000 не позволил мне терять на этом много времени, сразу предупредив о неверном логе на второй ноге. Полез в ASMокод, сгенерированный CodeVisionAVR (можно обливать грязью и предлагать альтернативы, я на нем начинал, так и продолжаю), там CBI SBI используются в конечном счете.
А далее в даташите меги нашел строки, в которых про эти команды сказано, что установа бит с помощью этих команд может привести к изменению значение других бит, что и произошло с портом D и не происходило с портом A.
Таки возвращаясь к вопросу, понятно, что ввиду хардварных особенностей такое может быть, но я не нашел какие конкретно пины можно безопасно так дергать, а какие нет, может кто знает?
Ибо в свете всплывшего глюка (мегу 128 мучал, кстати), вижу один вариант - это присваивать значение порта переменной, ее изменять, а только потом всему порту присваивать значение переменной. Это какой-то не true-way, но должен спасти от подобных накладок. Кто что думает на этот счет? Кто как битами правит?
Правда ведь, что никакой proteus не воспроизведет эту проблему, она исключительно хардварная?
- DimanVIP
- Мучитель микросхем
- Сообщения: 474
- Зарегистрирован: Вт июн 01, 2010 22:12:07
- Откуда: Тольятти
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Особо ничего не понял, но похоже что проблема не хардварная и симулится везде.
Для управления отдельными битами (пинами порта) использую такие конструкции:
Для управления отдельными битами (пинами порта) использую такие конструкции:
Код: Выделить всё
#define Bit(bit) (1<<(bit))
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
//пример: ClearBit(PORTB, 1); //сбросить 1-й бит PORTB
#define SetBit(reg, bit) reg |= (1<<(bit))
//пример: SetBit(PORTB, 3); //установить 3-й бит PORTB
#define SetBitVal(reg, bit, val) do{if ((val&1)==0) reg &= (~(1<<(bit)));\
else reg |= (1<<(bit));}while(0)
//пример: SetBitVal(PORTB, 3, 1); //установить 3-й бит PORTB
// SetBitVal(PORTB, 2, 0); //сбросить 2-й бит PORTB
#define BitIsClear(reg, bit) ((reg & (1<<(bit))) == 0)
//пример: if (BitIsClear(PORTB,1)) {...} //если бит очищен
#define BitIsSet(reg, bit) ((reg & (1<<(bit))) != 0)
//пример: if(BitIsSet(PORTB,2)) {...} //если бит установлен
#define InvBit(reg, bit) reg ^= (1<<(bit))
//пример: InvBit(PORTB, 1); //инвертировать 1-й бит PORTB[img]http://nekuru.com/images/DimanVIP/t2.png[/img]


