Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
akl
Друг Кота
Сообщения: 4470
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Похоже кварц не заводится. Если применен действительно 90S2313, попробуйте убрать кондесаторы рядом с кварцем, а корпус оного посадите на 10 лапу.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

Сообщение Jetetex »

Попробовал, не помогло. Другой кварц поставил, результат тот-же. И вот в чем парадокс-то - на макетке все работало.

Если это поможет - вот видео.
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Реклама
akl
Друг Кота
Сообщения: 4470
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Посмотрел видео. Проблема, по мне, в тактировании. Кварц к контроллеру поставить поближе. Хорошо вымыть в районе 4,5 лап.
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

Сообщение Jetetex »

Действительно, притчина в тактировании - отсутствовал контакт конденсаторов с минусом. Аж стыдно на такой мелочи завалится. :oops:

PS. Во время сборки схема чуток изменилась - аноды индикаторов (bsr10011) питаются через нпн транзисторы, и на 6-ю ногу подтяжка "-" через 10кОм, иначе минуты и часы переставяются по ветру :-)

PPS. Протупают сегменты из предидущего розряда. Как от этого избавится?
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Jetetex писал(а):PPS. Протупают сегменты из предидущего розряда. Как от этого избавится?
Выключить текущий разряд, включить сегменты следующего разряда, включить следующий разряд.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Напрямую к ШИМ этот вопрос не относится, поэтому задам его здесь.

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

ldi temp, 00					; Загрузка коэффициентов для каналов
		    sts Capture1, temp

		    ldi temp, 60
		    sts Capture2, temp

		    ldi temp, 130
		    sts Capture3, temp

		    ldi temp, 170
		    sts Capture4, temp

			ldi temp, 210
		    sts Capture5, temp

		    ldi temp, 225
		    sts Capture6, temp

		    ldi temp, 240
		    sts Capture7, temp
Вот это надо двигать в цикле по кругу... Т.е. значение Capture1 сдвинуть на место Capture2 и т.д., а последнее на место первого. Как? Понятно, что надо какой-то массив сделать, в него выгрузить, потом обратно загрузить в переменные из массива, сдвигая каждый раз адрес на один...
Не. не так. Блин, туплю. Надо кольцом зафигачить.
Станислав
Реклама
akl
Друг Кота
Сообщения: 4470
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Может двигать указатель?

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

	LDI	YH,HIGH(Capture0)
	LDI	Yl,low(Capture0)
GO:
	LD	R0,Y+
	OUT	PORTB,R0
	ANDI	YL,0b00000111	; для 8 точек
	RCALL	DELAY
	RJMP	GO
http://radiokot.ru/forum/viewtopic.php? ... 1#p2671311
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

:) Может, только я это уже видел в какой-то статье и не могу понять как оно работает... :facepalm:
Поэтому сделал по тупому, просто по очереди переменные друг другу присваиваются... Не красиво, длинно, быдлокод, но работает.
Спойлер

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

                lds temp1, Capture1
		lds temp2, Capture2
		sts Capture1, temp2

		lds temp2, Capture3
		sts Capture2, temp2

		lds temp2, Capture4
		sts Capture3, temp2

		lds temp2, Capture5
		sts Capture4, temp2

		lds temp2, Capture6
		sts Capture5, temp2

		lds temp2, Capture7
		sts Capture6, temp2

		sts Capture7, temp1
Однако, все равно быстро получается. Теперь надо срастить две вещи. ШИМ программный, он работает даже очень хорошо. Переменные я меняю в главном цикле, но не постоянно, а когда произойдет 255*255 прерываний для ШИМа.
Спойлер

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

Start:

	cpi NEXT, 255    ; Эта переменная в прерывании инкрементируется.
	brne Start
	inc NEXT2
	cpi NEXT2, 255
	brne Start
        rcall NEW2      ; А это вызов подпрограммы, которая по кольцу меняет переменные (см. выше)

rjmp Start	; Конец программы, переход на начало

Тоже быдлокодски, но работает, однако, стоит добавить еще хоть одну ступень, как все начинает жутко меделно пахать...

З.Ы. Ладно, с этим всем я разобрался.
Зато появился другой вопрос: с помощью команды rjmp могу я отправится прямо из главного цикла на метку RESET, с которой начинается инициализация МК ?

З.З.Ы. Все вопросы себя исчерпали. ))) Всем благодарю, со всем разобрался. :))) :)))
Станислав
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

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

Start:

   cpi NEXT, 255    ; Эта переменная в прерывании инкрементируется.
   brne Start
   inc NEXT2
   cpse NEXT2, NEXT
   brne Start
   rcall NEW2      ; А это вызов подпрограммы, которая по кольцу меняет переменные (см. выше)

rjmp Start   ; Конец программы, переход на начало
Встал на лапы
Сообщения: 82
Зарегистрирован: Вт дек 14, 2010 16:07:50

Сообщение Denkot »

напомните, пожалуйста, в двух словах
почему rjmp имеет ограниченный радиус действия, а rcall дотягивается с одного конца программы до другого...

обе команды же относительные?

но, когда я леплю rjmp - вылетает out of reach, а с rcall'ом этого не было... пока не было :)
akl
Друг Кота
Сообщения: 4470
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Значит подпрограммы по RCALL находятся внутри интервала -2K ≤ PC < 2K (K-килослово).
Последний раз редактировалось akl Вс мар 13, 2016 02:10:15, всего редактировалось 2 раза.
Встал на лапы
Сообщения: 82
Зарегистрирован: Вт дек 14, 2010 16:07:50

Сообщение Denkot »

akl писал(а):Значит подпрограммы по RCALL находятся внутри интервала -2K ≤ PC < 2K (K-килослово).
вся прога ~700 байт

то есть получается, что у rcall радиус действия -2K ≤ PC < 2K
а у rjmp - много меньше?
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Картинку смотрите... Они одинаковы, кроме стека (адреса возврата)... Это команды ветвления типа BRxx не могут улетать далеко, если память не изменяет, то -63....64 (строчек кода) диапазон.
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Ну только не строчек кода :)
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

:) Ну, я же говорю, что подзабыл, а лезть лениво. :oops: :beer:
Станислав
Друг Кота
Аватара пользователя
Сообщения: 15778
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Denkot писал(а): вся прога ~700 байт

то есть получается, что у rcall радиус действия -2K ≤ PC < 2K
а у rjmp - много меньше?
Следовательно где-то ошибка.
По диапазону доступности адресного пространства rjmp=rcall (+\-2килослов).
На большинстве малых МК с ПЗУ до 4 килслов(8килобайт) этого вполне достаточно.
Вопрос в заявленной области ПЗУ и настройках компилятора.
Возможнр неверно заявлен *def.inc файл, или погрешность в разделе:
Спойлер; ***** DATA MEMORY DECLARATIONS *****************************************
.equ FLASHEND = 0x01ff ; Note: Word address
.equ IOEND = 0x003f
.equ SRAM_START = 0x0060
.equ SRAM_SIZE = 64
.equ RAMEND = 0x009f
.equ XRAMEND = 0x0000
.equ E2END = 0x003f
.equ EEPROMEND = 0x003f
.equ EEADRBITS = 6
#pragma AVRPART MEMORY PROG_FLASH 1024
#pragma AVRPART MEMORY EEPROM 64
#pragma AVRPART MEMORY INT_SRAM SIZE 64
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60
(приведен из tn13def.inc)
Как вариант метки/точки входа/ у Ваших rcall в диапазоне заявленных адресов, а у rjmp за их пределами. Или метка назначения не выровнена по границам (указывает на нечетный адрес - ошибка при составлении таблиц).
8)
Встал на лапы
Сообщения: 82
Зарегистрирован: Вт дек 14, 2010 16:07:50

Сообщение Denkot »

СКАЗОЧНИК писал(а):Картинку смотрите... Они одинаковы, кроме стека (адреса возврата)... Это команды ветвления типа BRxx не могут улетать далеко, если память не изменяет, то -63....64 (строчек кода) диапазон.
Точно. Разобрался - так и было.
Причина была не в rcall и не в rjmp.
Где-то между ними затесалась breq, нашел ее и все понял.
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

Сообщение 12val12 »

Кто то сможет написать для at90s1200
по появлении перепада 0->1 на одном пине на другом пине

"0"->"1" - 50 мсек
"0"- 500мсек
"1" - 50 мсек
"0"- 500мсек
"1" - 50 мсек
"0"- 500мсек
"1" - 50 мсек
"0"- 500мсек
"1" - 50 мсек
"0"- 500мсек
"1" - 50 мсек
"0"- 500мсек

Пины произвольные но желательно чтобы не цепляли mosi miso sck
Хочу влепить в старый лсд телик что бы при включении переходил на vga вход
нужно именно для at90s1200
более новое для этой цели жалко
ух ты.... показывает
akl
Друг Кота
Сообщения: 4470
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Вот в первом приближении. Вход PD2/INT0, выход PB0. Частота кварца 4608кГц. Замечу, команда на PD2/INT0 должна приходить 0. Контроллер выходит из режима POWER-DOWN, отрабатывает временную диаграмму и опять засыпает в режиме минимального потребления.
TEST_1200.zip
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

Сообщение 12val12 »

akl -Спасибо
немного не так работает
срабатывает по спаду "1"-->"0" а мне бы по фронту "0"-->"1"
и в конце бы на выходе чтобы был "0"
и еще на всяк Случай чтобы PORTB.1~=PORTB.0
Вложения
at90s1200.PNG
(61.39 КБ) 447 скачиваний
ух ты.... показывает
Ответить

Вернуться в «AVR»