Выводы надо формулировать, а соединять — пиныploop писал(а):Ноги надо раздвигать, а соединять - выводы.
Мелкие вопросы по МК и ПЛИС.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
Есть вопрос по контроллеру LPC1768.
Хочу уточнить назначение регистра FIOPIN. Правильно ли я понял из даташита, что при записи в этот регистр измениться состояние ног порта в соответствии с заданным значением. Дело в том, что для задания уровня сигнала на выводах порта используются регистры FIOSET и FIOCLR. Т.е., если порт настроен на выход, использование регистра FIOPIN для управления уровнями сигналов на выводах порта будет эквивалентно использованию регистров FIOSET и FIOCLR?
Из даташита так же узнал, что при чтении регистра FIOPIN, получаем значение реального состояния выводов порта. Довольно интересно получается.
Хочу уточнить назначение регистра FIOPIN. Правильно ли я понял из даташита, что при записи в этот регистр измениться состояние ног порта в соответствии с заданным значением. Дело в том, что для задания уровня сигнала на выводах порта используются регистры FIOSET и FIOCLR. Т.е., если порт настроен на выход, использование регистра FIOPIN для управления уровнями сигналов на выводах порта будет эквивалентно использованию регистров FIOSET и FIOCLR?
Из даташита так же узнал, что при чтении регистра FIOPIN, получаем значение реального состояния выводов порта. Довольно интересно получается.
ПИНы надо в телефон вводить и в паспорте узнавать, а соединять надо контакты МК.Gudd-Head писал(а):Выводы надо формулировать, а соединять — пины
I am DX168B and this is my favourite forum on internet!
Контакты есть у реле, тумблеров, и прочих кнопок. У МК - нет.ПИНы надо в телефон вводить и в паспорте узнавать, а соединять надо контакты МК.
Пины - не по-русски, выводы не формулируются (по пятницам), ноги тоже плохо двигаются, короче так: "лепесток для монтажа методом пайки"! и я спать пошел.
- Сообщения: 11
- Зарегистрирован: Вс ноя 14, 2010 16:23:22
Берем BGA и фиг Вам, а не лепестки и тычинки 
Коль тут такие абстрактные темы поднимаются, тоже задам дурацкий вопрос.
По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
Ведь были же какие-то на это причины?
Коль тут такие абстрактные темы поднимаются, тоже задам дурацкий вопрос.
По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
Ведь были же какие-то на это причины?
- Реклама
Предположу что у Меги больше ядро, и оно больше жрёт на высоких частотах: Тини13 на 8 МГц 5 мА, Мега128 на 8 МГц около 17 мА, около 3 мА на 1 МГц (при 5 В).FFAMax писал(а):По каким соображения тиньки(13) с завода идут 8Мгц, а атмеги128 - 1 Мгц?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Все идут на (около) 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.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
скажите, что неправильно делаю?
контроллер 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 скачивание
MCLR нужно подключить к питанию через 10 кОм (или около того).
Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.

Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.
добрый день. подскажите, если в этой схеме (http://cxem.net/mc/mc33.php) использовать индикаторы с ОК (сдесь есть прошивка для ОК http://eldigi.ru/site/term/13.php) подлючение индикатора к мк меняется? или все так же?
По идее, не должно. Ё-моё, нафига там 20 МГц???pavlo! писал(а):подлючение индикатора к мк меняется?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успеваютploop писал(а):И почему нет токоограничительных резисторов?
Угу. Вот зависнет МК, и тогда сгорят. Хотя, конечно, может сработать защита выходного буфера порта — я не знаю какой у ПИКов максимальный входной/выходной ток.pavlo! писал(а):это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успевают
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
где то читал что у 628ой около 100маGudd-Head писал(а):Угу. Вот зависнет МК, и тогда сгорят. Хотя, конечно, может сработать защита выходного буфера порта — я не знаю какой у ПИКов максимальный входной/выходной ток.pavlo! писал(а):это сделано с целью экономии места. а так как индикация динамическая то сгореть индикаторы просто не успевают
я же говорю, что код до вочдога работал стабильно,а после включения нет.КРАМ писал(а):MCLR нужно подключить к питанию через 10 кОм (или около того).
Никакой связи между аппаратным сбросом и вачдогом нет.
Абракадабру Ваше устройство отображает по вполне осязаемым ошибкам в коде.
...
Нужен код.
ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
код на 1819 слов выкладывать не буду, так как там все верно, да и в моих дебрях вам сложно будет разобраться.
вочдог поставил на ~1 секунду, а обнуляю с частотой ~500Гц(в цикле обработки отображения на семиссегментный индикатор)
Код: Выделить всё
OPTION = 0b00001110; // TMR0 on, 1:1 prescale, WDT 1:64 (1.152 sec)
Так все таки код...Лютик писал(а): .......ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
........
все, вроде разобрался, ошиька была в том., что в прерывании поставил запись в ипром, что противоречиво
Нога сброса может быть только ВХОДОМ. Поэтому приводить аббревиатуру in/out неправильно. Впрочем использована она у Вас правильно - как вход. И подтяжка какая то должна быть у этого пина (либо к питанию, либо к земле). Иначе кнопка работать не будет.
подтяжка через резистор стоит(так как внутренняя только на порт Б стоит). я читал даташит и в курсе, что это только вход(на это обратил внимании при синтезе схемы), просто сейчас я на это не обращаю внимание, так как забыл что за нога, вот и пишу что вход/выход.КРАМ писал(а):Так все таки код...Лютик писал(а): .......ногу mclr использовал как i/o(стоит кнопка), так что никаких резисторов на + не вешал.
........
все, вроде разобрался, ошиька была в том., что в прерывании поставил запись в ипром, что противоречиво![]()
Нога сброса может быть только ВХОДОМ. Поэтому приводить аббревиатуру in/out неправильно. Впрочем использована она у Вас правильно - как вход. И подтяжка какая то должна быть у этого пина (либо к питанию, либо к земле). Иначе кнопка работать не будет.
а проблема действительно с кодом, удивительно что еще перепроверил
еще бы хотелось поинтересоваться как работать с PWRTE и BOREN, а именно BOREN, но в даташите написано, что обязательно в таком случае надо включать PWRTE.
Включил PWRTE и BOREN - мк в постоянном ресете ли тип того. надо чтото еще в коде делать или этого остаточно, тогда непонятно почему ресетит мк..
- Сообщения: 11
- Зарегистрирован: Вс ноя 14, 2010 16:23:22
Господа, касательно вопроса 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 не воспроизведет эту проблему, она исключительно хардварная?
Особо ничего не понял, но похоже что проблема не хардварная и симулится везде.
Для управления отдельными битами (пинами порта) использую такие конструкции:
Для управления отдельными битами (пинами порта) использую такие конструкции:
Код: Выделить всё
#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]


