Tiny13: не работает подтяжка.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Вымогатель припоя
Аватара пользователя
Сообщения: 581
Зарегистрирован: Чт янв 15, 2009 18:57:12

Сообщение tom1101 »

Пишу в AlgorithmBuilder, никак не могу запустить подтяжку. Проект прилагаю. Как я понял, для подтяжки надо установить глобальный бит запрещения подтяжки в 0(походу стоит, т.к. я его не трогал), в ddrb записать 0 для выходов, а в portb для этих же пинов загнать 1. Вроде все так, но встроенный симулятор в буилдере пишет в порт единицы, пишет в ддр нули, но подтяжку не врубает. Proteus тоже показывает отсутствие подтяжки. Слышал, что еще надо провести какую-то инициализацию портов что-ли, но точно не знаю что это такое(походу это и есть запись в ддрб и портб).

Проверьте мой проект и поправьте меня(напишите где ошибка), т.к. я сам ее не нашел в 3 строчках. Чисто посмотрите начало программы, ведь там должна включаться подтяжка.

Вообще эта программа - попытка управления биполярным шаговым двигателем с реакцией на 4 внешних датчика(поэтому читает время от времени порты). Управление выходами(обмотками) по таблице(в процедуре shag), правда почему-то только одна обмотка срабатывает, а вторая не реагирует, но это наверное из-за алгоритма, по крайней мере такая ситуация в протеусе и в реальном "железе", хотя симуляция самого буилдера проходит нормально. Есть ли алгоритм эффективнее? Может как-то от ШИМ? Хотя ШИМ по мойму шаговиками не управляет.

Еще бы мне пригодилась процедура управляемой паузой, если есть у кого, т.к. пока я паузу подбираю опытным путем. И сколько можно использовать вложенных вызовов процедур, типа как в основном цикле вызываю dvig, из него shag, из него pause..?
Вложения
mk1.rar
Проект
(4.93 КБ) 234 скачивания
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

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

#b101000->DDRB
#b10111  ->PORTB
Это не очень понятно.
Мне кажется правильно так (для PB0..PB2):

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

#b00000111->DDRB
#b00000111  ->PORTB
В этом случае B0..PB2 настроены на выход и подтяжка подключена.
бит запрещения подтяжки
Это по-моему чтото из области фантастики.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 581
Зарегистрирован: Чт янв 15, 2009 18:57:12

Сообщение tom1101 »

А ты ничего не путаешь? Подтяжка вроде только на входе работает(когда в ddr нули). Еще раз перечитал руководство, там пишут, что если в ddr единица, то этот пин становится выходом.
И если в portb на выход посылать единицы, то они на ножках появляются, но если на входы посылать единицы, то входы включают подтяжку. Т.е. алгоритм у меня верный, т.к. из
#b101000 -> ddrb
#b010111 -> portb
получается, что я 4 ножки делаю входами(бит = 0) и включаю подтяжку(в ихний порт засылаю единицы), но ничего не работает ни в симуляторах, ни в железе.
Значит где-то у меня ошибка полюбому, иначе у всех проблемы с подтяжкой были бы.

Насчет фантастики
Подтяжку на всех портах одновременно можно отключить! Для этого нужно установить бит PUD в регистре SFIOR
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Я и не говорил, что DDR ОБЯЗАТЕЛЬНО должен быть установлен.
Мой вариант, если говорить об асме, 100% рабочий. Если работать не будет, то копайтесь с АВ.

...если разряд PUD сброшен, то состояние подтягивающих резисторов будет определяться состоянием разрядов PORT для каждого входа порта...

Просто
глобальный бит запрещения подтяжки
очень сильно звучит :)
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 581
Зарегистрирован: Чт янв 15, 2009 18:57:12

Сообщение tom1101 »

Ура, подтяжка в протеусе заработала, когда pud сбросил...
Но появились проблемы со сторожевым таймером. Я его настроил так, что через 8 сек происходит переполнение, и в программе понаставил wdr, которые должны по идее сбрасывать таймер, если программа работает. При зависании должно произойти переполнение таймера и сброс кристалла. Но протеус показал, что ресет происходит раз в 0,004сек! Значит wdr сбрасывают кристалл, а не таймер? Как тогда правильно настроить сторожевой таймер? И как сбрасывать таймер, чтоб он не сработал?
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 581
Зарегистрирован: Чт янв 15, 2009 18:57:12

Сообщение tom1101 »

У меня в программе сигналы управления шли на 1 и 2 ножки(5 и 3 бит соответственно), и 1 ножка никак не хотела менять свое состояние. Попробовал заменить ее на 3 ножку(4 бит) и все заработало как надо, но мне нужен был сигнал с кнопки и я кнопку повесил на 1 ножку(5 бит) надеясь, что хоть на вход она будет работать, но при замыкании кнопки на 0, контроллер отрубался. Я так понял, что это был сигнал reset, т.к. ножка по совместительству reset и pb5. Как мне ее настроить на вход/выход, а не на ресет? Ресет у меня от сторожевого таймера должен идти, который у меня тоже криво работает(делает ресет при каждом вызове wdr, хотя по идее должен делать ресет при переполнении таймера(8 секунд), а wdr должна была не дать ему переполнится, насколько я понял).

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

Я где-то на просторах нета видел русский даташит на tiny13, может даже и скачал его, но найти пока его проблематично, т.к. я за неделю до покупки своего первого контроллера с нета около сотни мегабайт всяких данных по контроллерам, программаторам и ассемблеру скачал, и щас все это лежит россыпью сотен мелких файлов на диске.
Сам я активно продолжаю его поиск и думаю что когда-нибудь найду.
Вот русскоязычная инфа по контроллерам, жаль там даташит только на мегу http://www.gaw.ru/html.cgi/txt/doc/micros/avr/index.htm
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 581
Зарегистрирован: Чт янв 15, 2009 18:57:12

Сообщение tom1101 »

Да, нашел как ресет вырубить, но после этого его можно будет прошить только сложным программатором... Вот засада, а мне по схеме все 6 ножек нужны были. Видать полюбому придется брать attiny261.
А даташит русский уже не нужен, оказывается даташиты меги 128 и тини очень похожи, поэтому я как перевод использую русский даташит от меги 128 для тини13-26, пока без проблем.
И нашел скоростной алгоритм управления шаговиком на том же сайте, где русский даташит.
Короче все вопросы отпали...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»