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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

ploop писал(а):Ноги надо раздвигать, а соединять - выводы. :)
Выводы надо формулировать, а соединять — пины :))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж

Сообщение pirotehnick »

Есть вопрос по контроллеру LPC1768.
Хочу уточнить назначение регистра FIOPIN. Правильно ли я понял из даташита, что при записи в этот регистр измениться состояние ног порта в соответствии с заданным значением. Дело в том, что для задания уровня сигнала на выводах порта используются регистры FIOSET и FIOCLR. Т.е., если порт настроен на выход, использование регистра FIOPIN для управления уровнями сигналов на выводах порта будет эквивалентно использованию регистров FIOSET и FIOCLR?
Из даташита так же узнал, что при чтении регистра FIOPIN, получаем значение реального состояния выводов порта. Довольно интересно получается.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Gudd-Head писал(а):Выводы надо формулировать, а соединять — пины :))
ПИНы надо в телефон вводить и в паспорте узнавать, а соединять надо контакты МК. :)))
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

ПИНы надо в телефон вводить и в паспорте узнавать, а соединять надо контакты МК.
Контакты есть у реле, тумблеров, и прочих кнопок. У МК - нет.
Пины - не по-русски, выводы не формулируются (по пятницам), ноги тоже плохо двигаются, короче так: "лепесток для монтажа методом пайки"! и я спать пошел.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 11
Зарегистрирован: Вс ноя 14, 2010 16:23:22

Сообщение FFAMax »

Берем BGA и фиг Вам, а не лепестки и тычинки :-)
Коль тут такие абстрактные темы поднимаются, тоже задам дурацкий вопрос.
По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
Ведь были же какие-то на это причины?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

FFAMax писал(а):По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
Предположу что у Меги больше ядро, и оно больше жрёт на высоких частотах: Тини13 на 8 МГц 5 мА, Мега128 на 8 МГц около 17 мА, около 3 мА на 1 МГц (при 5 В).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

Все идут на (около) 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
Откуда: Минск

Сообщение Лютик »

скажите, что неправильно делаю?
контроллер 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 скачивание
Друг Кота
Аватара пользователя
Сообщения: 25446
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

MCLR нужно подключить к питанию через 10 кОм (или около того).
Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.
:)
Открыл глаза
Сообщения: 58
Зарегистрирован: Пн май 30, 2011 14:14:44
Откуда: малоярославец

Сообщение pavlo! »

добрый день. подскажите, если в этой схеме (http://cxem.net/mc/mc33.php) использовать индикаторы с ОК (сдесь есть прошивка для ОК http://eldigi.ru/site/term/13.php) подлючение индикатора к мк меняется? или все так же?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

pavlo! писал(а):подлючение индикатора к мк меняется?
По идее, не должно. Ё-моё, нафига там 20 МГц??? :shock:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

И почему нет токоограничительных резисторов?
Открыл глаза
Сообщения: 58
Зарегистрирован: Пн май 30, 2011 14:14:44
Откуда: малоярославец

Сообщение pavlo! »

ploop писал(а):И почему нет токоограничительных резисторов?
это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успевают
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

pavlo! писал(а):это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успевают
Угу. Вот зависнет МК, и тогда сгорят. Хотя, конечно, может сработать защита выходного буфера порта — я не знаю какой у ПИКов максимальный входной/выходной ток.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Открыл глаза
Сообщения: 58
Зарегистрирован: Пн май 30, 2011 14:14:44
Откуда: малоярославец

Сообщение pavlo! »

Gudd-Head писал(а):
pavlo! писал(а):это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успевают
Угу. Вот зависнет МК, и тогда сгорят. Хотя, конечно, может сработать защита выходного буфера порта — я не знаю какой у ПИКов максимальный входной/выходной ток.
где то читал что у 628ой около 100ма
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 161
Зарегистрирован: Вт мар 25, 2008 22:10:23
Откуда: Минск

Сообщение Лютик »

КРАМ писал(а):MCLR нужно подключить к питанию через 10 кОм (или около того).
Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.
:)
я же говорю, что код до вочдога работал стабильно,а после включения нет.
ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
код на 1819 слов выкладывать не буду, так как там все верно, да и в моих дебрях вам сложно будет разобраться.
вочдог поставил на ~1 секунду, а обнуляю с частотой ~500Гц(в цикле обработки отображения на семиссегментный индикатор)

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

OPTION = 0b00001110;    // TMR0 on, 1:1 prescale, WDT 1:64 (1.152 sec)
все, вроде разобрался, ошиька была в том., что в прерывании поставил запись в ипром, что противоречиво
Друг Кота
Аватара пользователя
Сообщения: 25446
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Лютик писал(а): .......ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
........
все, вроде разобрался, ошиька была в том., что в прерывании поставил запись в ипром, что противоречиво
Так все таки код... :)))
Нога сброса может быть только ВХОДОМ. Поэтому приводить аббревиатуру in/out неправильно. Впрочем использована она у Вас правильно - как вход. И подтяжка какая то должна быть у этого пина (либо к питанию, либо к земле). Иначе кнопка работать не будет.
Нашел транзистор. Понюхал.
Сообщения: 161
Зарегистрирован: Вт мар 25, 2008 22:10:23
Откуда: Минск

Сообщение Лютик »

КРАМ писал(а):
Лютик писал(а): .......ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
........
все, вроде разобрался, ошиька была в том., что в прерывании поставил запись в ипром, что противоречиво
Так все таки код... :)))
Нога сброса может быть только ВХОДОМ. Поэтому приводить аббревиатуру in/out неправильно. Впрочем использована она у Вас правильно - как вход. И подтяжка какая то должна быть у этого пина (либо к питанию, либо к земле). Иначе кнопка работать не будет.
подтяжка через резистор стоит(так как внутренняя только на порт Б стоит). я читал даташит и в курсе, что это только вход(на это обратил внимании при синтезе схемы), просто сейчас я на это не обращаю внимание, так как забыл что за нога, вот и пишу что вход/выход.
а проблема действительно с кодом, удивительно что еще перепроверил

еще бы хотелось поинтересоваться как работать с PWRTE и BOREN, а именно BOREN, но в даташите написано, что обязательно в таком случае надо включать PWRTE.
Включил PWRTE и BOREN - мк в постоянном ресете ли тип того. надо чтото еще в коде делать или этого остаточно, тогда непонятно почему ресетит мк..
Родился
Сообщения: 11
Зарегистрирован: Вс ноя 14, 2010 16:23:22

Сообщение FFAMax »

Господа, касательно вопроса 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 не воспроизведет эту проблему, она исключительно хардварная?
Мучитель микросхем
Аватара пользователя
Сообщения: 474
Зарегистрирован: Вт июн 01, 2010 22:12:07
Откуда: Тольятти

Сообщение DimanVIP »

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

Для управления отдельными битами (пинами порта) использую такие конструкции:

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

#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]
Контактная информация:
Ответить

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