1. каким образом у тебя выводится дв. счетную последовательность...
если изменяется temp (он же R16), а в порт выдается R17 (temp1), т.е. на выходе порта всегда будет 0х01.
2. нажатие кнопки сопровождается дребезгом, поэтому подключи кондер 0.1 мкф и подтяни вн.резистором на +5В, ну желательно программную обработку дребезга ввести.
если у тебя стоит 10к на +5в - то это и есть подтяжка.
а как подключить внутр.резисторы написано в ДШ, ну или у Евстифеева.
Попутал ты потому что в одном месте пишешь имя ристра, а вдругом имя заданное директивой .def, ту уж если задаешь имя так и используй его, и имена надо давать осмысленные.
И еще, если ты обзываешь п/п Delay так и делай в ней толькозадержку, иначе потом еще где-нибудь захочешь использовать и будешь сидеть гадать почему работает не так как надо.
На сайте у ARV есть асм-код оформленный очень красиво, к этому надо привыкать с молодых ногтей, ну на крайняк у меня в спидометре посмотри, там конечно не так красиво, но я старался
Так вот, как я это делаю.
Если МК изначально тактируется от внутреннего генератора на 1Мгц, то, высчитав период сигнала, получим, 1период тактового генератора равен 1/1000000с или равен 1нс.
Мне надо таких периодов 255, получается.
Поэтому ввел цикл задержки:
все разобрался, по своей глупости забыл про приставку милли
А так микро это 10 в -6.
А как мне тогда организовать задержку такую в 255нс?
Еще бы поделить на 1000.
Но в Аттини 2313 предделитель только на 256 (максимально) разделить может.
Последний раз редактировалось Arlleex Сб май 29, 2010 20:06:40, всего редактировалось 1 раз.
Не умеешь - не берись, но не взявшись не научишься...
чтобы получить задержку в 255нс тактовая должна быть кратна 3921568,62Гц при такой тактовой 1 такт мк как раз раз равен 255 нс.
к примеру 1такт для разных частот будет такой
1МГц - 1 мкс
2МГц - 0.5 мкс
4МГц - 0.25 мкс
8МГц - 0.125 мкс и т.д.
так. ВСе понял.
теперь. Подключаю HD44780 к Аттини2313.
тактовая - 1МГц.
Для того чтобы что то вывести в дисплей, надо соблюдать между вот этими операциями
1. Установить значение линии RS
2. Вывести данные на шину данных Db0...Db7
3. Установить линию Е в 1
4. Установить R/W в 0
5. Установить линии шины данных в состояние Hi-z
время, не меньшее 250нс.
Значит можно вообще выставить тактовую в 1мгц (по умолчанию) и вообще никаких задержек не вводить? (ведь 1мкс это больше чем 250нс?)
Не умеешь - не берись, но не взявшись не научишься...
если иппульс на выводе Е будет больше минимально допустимого, то да.
Смотри в ДШ на индикатор минимальную длительность стробирования, при тактовой 1 МГц вкл-выкл линии порта будет равен 1 мкс.
Точно спрашиваю элементарную вещь - но никак не могу найти ответ
на Си писал конфигурирование портов вот так:
PORTF=0x00;
DDRF=0x00;
PORTG=0x1F;
DDRG=0x00;
А в AVR Studio 4.17 на код
ldi r16, 0x00
out PORTF, r16
out DDRF, r16
ldi r16, 0x1f
out PORTG, r16
ldi r16, 0x00
out DDRG, r16
получаю ошибку что для команды out номер порта превышен...
Где то читал что так оно и есть и для этих портов используются другие команды ввода-вывода.. но вот чтото в 2:45 найти быстро не могу..
Подскажите как правильно ?
p.s. не пинайте сильно, учусь только...
p.p.s. а в куче примерах (которые есть во многих книжках) редко доходят до портов F и G обычно останавливаются на D... с ними и у меня проблем нет
Посмотри файл контроллера который добавляется в проект. Там есть имена присвоенные всем регистрам и портам ввода/вывода.
А что за зверь такой большой (PORTF, PORTG) ?
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Modest писал(а):Посмотри файл контроллера который добавляется в проект. Там есть имена присвоенные всем регистрам и портам ввода/вывода.
А что за зверь такой большой (PORTF, PORTG) ?
Имя регистров точно правильное.. Студия ведь определила их номера
А зверь мега64...
Народ, я тут Хартова читаю - я правильно понимаю что порты ввода вывода отражаются в первых адресах RAM ?
STS X, r16 - правильно будет ?
гм.. осталось узнать как загрузить нужное значение в Х
Служебные регистры с адресами >$31 (кажется ) адресуются через команды STS <имя регистра/значение>,<регистр> - запись LDS <имя регистра/значение>,<регистр> - чтение
до адресов $31 - OUT/IN
Надо считать за сколько тактов выполняется 1 проход, если надо точно - то придется подбирать значение счетчика с учетом загрузки начального значения и выхода из цикла, в принципе 3-5 прогонов в симуляторе обычно достаточно.
делаю типа секундомера кторый пока считает до 9, и столкнулся с такой проблемой задержка происходит не на 1 сек а на 10 из-за 3 строк кода, код ниже строки отмечены, если эти строки убрать всё в порядке задержка = 1 сек. в чём проблема?
Ну что ж, начнем критиковать код, или не надо?
Если интересно - читай дальше, если нет
1. для установки всех разрядов регистра в 1/0 существуют 2-е спец. команды SER/CLR выполняются за один такт, в отличии от LDI, в твоем примере это совершенно не критично, но настанет день...
2. пусть меня закидаю камнями - но считал и считаю что чем короче прерывание тем лучше, а по сему: в прерывании только увеличивай счетчик, а всю обработку в основном цикле.