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

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 4966
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Сообщение Seriyvolk »

Может кто мучал такие дисплеи по SPI? http://www.buydisplay.com/default/i2c-2 ... w-on-black
Не могу запустить...
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Реклама
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

так это не SPI. это i2c.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Ну вообще-то там в перечне протоколов и SPI есть: 6800 4-bit Parallel , 8080 4-bit Parallel , 6800 8-bit Parallel , 8080 8-bit Parallel , I2C, 3-Wire Serial SPI, 4-Wire Serial SPI
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Вт июл 16, 2013 11:18:59

Сообщение imerlin »

Seriyvolk писал(а):Да, забыл упомянуть... Хотелось бы обойтись 13-й тинькой. Но намёк я понял, спасибо!

Ну я бы попробовал бы сделать так:
при частоте 1 Гц скважность 0.4 это 0.4/0.6 сек.
при частоте 500 Гц это 0.0008/0.0012 сек

Если настроить удобным образом коэффициенты деления частот, можно будет:

инициировать таймер значением, до которого он досчитает через 0.4 сек, включить выход

прерывание таймера:
инвертировать выход
загрузить таймер следующим значением, (для первого прохода это 0.6 сек, для второго чуть менее 0.4 и так далее)

прикидочная растактовка такая:
частота 13 тиньки 9,6 Мгц

если поделить CLKPR на 4 и таймер настроить TCCR0B на деление на 64,
то 0.0008 сек уложится 9600000/4/64*0.0008 30 тактов счетчика
0.00012 - 45
0.4 - 15000
0.6 - 22500

так как счетчик 8-битный придется в прерывании таймера вручную обрабатывать старший байт счетчика (сам счетчик грузить нулем до исчерпания старшего байта наверное)

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

Вот примерно такие прикидки, вроде тинька 13 вполне должна потянуть, еще и на что нибудь полезное время останется.

PS: можно, конечно еще понизить частоту счетчика раз так в 10, но тогда в заданные интервалы времени не будет укладываться целое число тактов на высоких частотах (500 Гц) - допустима ли такая потеря точности в задаче я не знаю.
Реклама
Эиком - электронные компоненты и радиодетали
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

13 тинька вполне подойдет для таких целей. Когда то я на 13 тиньке собирал генератор с изменяемой частотой для металлоискателя, вообще там всем запрявляла мега32, по i2c "говорила" 13 тиньке какую частоту выдавать, затем м32 спрашивала время затухания сигнала у тини85, работающюю на 20 мГц для более точных показаний. Ну так вот. 13 тинька отлично справлялась с этим!
В приложении исходный код на эту самую тьньку. Просить переписать не надо. Не буду. Так же во вложении есть лист ворда, в котором прописана формула расчета частоты на выходе мк. Вводиш частоту тактирования МК и 2 управляющих регистра и получаешь результат - частоту на выходе МК. Писался этот лист на 2007 ворде. Сейчас у меня стоит 2003 и в нем не работает. Думаю что в 2007 работать будет.
Вложения
Лист Microsoft Office Excel.rar
(7.92 КБ) 157 скачиваний
generator.asm
(1.96 КБ) 340 скачиваний
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Применить принцип прямого цифрового синтеза - Подаешь число на накапливающий сумматор и выполняешь операцию суммирования с частотой 1-5кГц, частота переполнения такого сумматора будет прямо пропорциональна поданному на вход сумматора числу.

Если сумматор взять 8-битный Тогда подавая код 255 на вход сумматора он будет переполняться каждый такт, на выходе частота будет в 2 раза меньше частоты суммирования. т.е. если суммировать входное число каждую 1мс то на выходе на код 255 будет 500Гц, на код 1 будет 2 Гц. Если взять 16 бит, нижний предел частоты будет около 0.01Гц

Скважность реализовать программно. Счет настроить на 10кГц и после подсчитывать количество переполнений - после 6 переполнений устанавливаем "0" на выходе, потом после 4 переполнений устанавливаем "1". Или наоборот, по желанию.
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

Сообщение gauss »

Вопрос по внешним прерываниям АВР.

В даташите есть примерно такая фраза: "Внешнее прерывание сработает по спадающему фронту на входе"
Что считать этим самым спадающим фронтом? Например, будет ли им являться спад с 5 до 4.9В?
:idea:
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Сообщение SmarTrunk »

Нет. Только если фронт опустится ниже логического уровня, который ПРИМЕРНО равен половине напряжения питания (с поправкой на то, что там триггрер Шмидта на входе, и уровни "вверх" и "вниз" будут чуть разные), а вообще есть, в даташите, графики зависимости логических уровней от напряжения питания.
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

Мне как то раз нечем было заняться и я на практике испытал когда МК видит лог 0 а когда лог 1. При изначальном уровне в лог 1 (5 в) начал сбавлять напряжение примерно при напряжении 1.4 В МК "понял" что у него уже лог 0. Наоборот при повышении напряжения с 0 В, МК "понял" что у него лог 1 Где то на напряжении 2.6 В.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Сообщение SatinS »

вопрос немного не в тему - как лучше считать длительность импульсов?
1й вариант по первому импульсу запускаем счётчик по 2му вырубаем - результат сравниваем с константой (константами)
2й вариант считать количество импульсов за интервал времени, делить - результат сравниваем с константой (константами)
неправильно выразился - надо определять момент появления импульсов определённой длины (датчик холла и магнит на валу двигателя для определения оборотов, есть 80 фиксированных скоростей) сейчас реализовано 1м способом но хочу упростить алгоритм.
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

самое простое и малоемкое это считать импульсы за определенное время. можно еще просто пустить таймер. И каждый раз по импульсу из текущего значения таймера вычитать предыдущее. Получаешь время (счет таймера) между импульсами. Вернись страницы на 3 назад. я там почти с такой же проблемой сталкнулся.
в первом случае (в моем посте) в константах хранится "количество импульсов на заданное время (время измерения)"
во втором случае (в моем посте) в константах хранится "длинна импульса"
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Сообщение SatinS »

xkp прочёл) кстати про 24х битный счётчик, ты не думал о том, что бы аппаратно тактировать один счётчик от другого? :) 8+16 бит = 24 :)))
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

Я думал о другом и там где то писал, не только я. Счетчик 16 бит. по переполнению он прыгает на tim_1_ovf, там в свою очередь еще один счетчик (8 битный) и того получаем 24 бита. Плюс этой идеи в том что при желании за место 8 битного счетчика можно написать счетчик на 16, 24, 32 бита, да на сколько угодно и тогда разрядность всего счетчика составит X+16 бит, где X - разрядность программного счетчика.
К сожалению я пока только думал об этом. Что то обленилась моя шерсть в последнее время. недельки через 2 планирую продолжить свой проект.


и... да... как аппаратно тактировать счетчик??? ну можно конечно запретить счет счетчика допустим на таймер_0 а в прерывании таймера 1 по переполнению инкрементировать счетчик таймера 0. думаю это сложнее... Да и таймеры будут перебивать друг друга. И просто так занимать таймер тоже не надо.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

SatinS писал(а):вопрос немного не в тему - как лучше считать длительность импульсов?
1й вариант по первому импульсу запускаем счётчик по 2му вырубаем - результат сравниваем с константой (константами)
2й вариант считать количество импульсов за интервал времени, делить - результат сравниваем с константой (константами)
если исходить из описания - то ты измеряешь не длительность импульсов а период их повторения
неправильно выразился - надо определять момент появления импульсов определённой длины (датчик холла и магнит на валу двигателя для определения оборотов, есть 80 фиксированных скоростей) сейчас реализовано 1м способом но хочу упростить алгоритм.
или все-таки определенной частоты следования импульсов?
1. чтобы упростить алгоритм прежде всего нужно определиться что и с какой точностью надо измерять
2. если это 4х тактный 4х цилиндровый двигун (не от суперкара) то диапазон частоты искрообразования это где-то от 15-20 Гц до 260-270 Гц, и возникает вопрос для чего датчик Холла и магнит на коленвалу? (только дисбаланс коленвала)
Последний раз редактировалось GP1 Вт дек 02, 2014 20:45:13, всего редактировалось 1 раз.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Сообщение SatinS »

xkp, ещё проще,один из счётчиков тактировать шимом другого по External clock source on T0 pin. Clock on falling edge\External clock source on T0 pin. Clock on rising edge. то есть ноги просто замкнуть, если в мк 2 счётчика - проблем возникнуть не должно. Состояние так же можно считывать у обоих (и у шиманутого) останавливать чуть дольше только, но если 1м останавливать "шимующий" всё будет норм :)
GP1, неее это электрический двигатель, просто там меняется нагрузка и обычный ПИДом там не обойтись, надо компенсировать как то, потому прилеплен маленький магнитик на вал (на торец), а измерять время между импульсами, да, частоту, запутался, не длительность ни в коем случае :))
можно правда и длительность, наверное , не знаю как сильно размазывается сигнал датчика от скорости, но это имхо извращение
Последний раз редактировалось SatinS Вт дек 02, 2014 20:54:27, всего редактировалось 3 раза.
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

GP1, извиняюсь. не заметил как то... особой разницы нет мерить длительность или период. Я мерил длительность тупо запуская таймер и останавливая его, даже не на прерываниях, тупо в самой программе.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

разница есть
смотря что ты пытаешься поймать
- определенную длительность
- определенную частоту
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
xkp
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров

Сообщение xkp »

Главная разница это структура измерения, а поймать разницы нет, сравниваешь значения таймера с константой и коректируешь дальнейшие действия в ту или иную сторону до достижения равенства.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Контактная информация:
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Сообщение SatinS »

он имеет в виду, что можно измерять длительность самого импульса- то есть от начала фронта до конца фронта импульса, а не по появлению или пропаданию
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

SatinS
открой секрет - что мострячишь?
тахометр с "лампочками"?
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Ответить

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