Не могу запустить...
Ассемблер (ASM) для AVR в вопросах и ответах
Может кто мучал такие дисплеи по SPI? http://www.buydisplay.com/default/i2c-2 ... w-on-black
Не могу запустить...
Не могу запустить...
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
- Реклама
так это не SPI. это i2c.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Ну вообще-то там в перечне протоколов и 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
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 Гц) - допустима ли такая потеря точности в задаче я не знаю.
13 тинька вполне подойдет для таких целей. Когда то я на 13 тиньке собирал генератор с изменяемой частотой для металлоискателя, вообще там всем запрявляла мега32, по i2c "говорила" 13 тиньке какую частоту выдавать, затем м32 спрашивала время затухания сигнала у тини85, работающюю на 20 мГц для более точных показаний. Ну так вот. 13 тинька отлично справлялась с этим!
В приложении исходный код на эту самую тьньку. Просить переписать не надо. Не буду. Так же во вложении есть лист ворда, в котором прописана формула расчета частоты на выходе мк. Вводиш частоту тактирования МК и 2 управляющих регистра и получаешь результат - частоту на выходе МК. Писался этот лист на 2007 ворде. Сейчас у меня стоит 2003 и в нем не работает. Думаю что в 2007 работать будет.
В приложении исходный код на эту самую тьньку. Просить переписать не надо. Не буду. Так же во вложении есть лист ворда, в котором прописана формула расчета частоты на выходе мк. Вводиш частоту тактирования МК и 2 управляющих регистра и получаешь результат - частоту на выходе МК. Писался этот лист на 2007 ворде. Сейчас у меня стоит 2003 и в нем не работает. Думаю что в 2007 работать будет.
- Вложения
-
- Лист Microsoft Office Excel.rar
- (7.92 КБ) 156 скачиваний
-
- generator.asm
- (1.96 КБ) 339 скачиваний
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Реклама
Применить принцип прямого цифрового синтеза - Подаешь число на накапливающий сумматор и выполняешь операцию суммирования с частотой 1-5кГц, частота переполнения такого сумматора будет прямо пропорциональна поданному на вход сумматора числу.
Если сумматор взять 8-битный Тогда подавая код 255 на вход сумматора он будет переполняться каждый такт, на выходе частота будет в 2 раза меньше частоты суммирования. т.е. если суммировать входное число каждую 1мс то на выходе на код 255 будет 500Гц, на код 1 будет 2 Гц. Если взять 16 бит, нижний предел частоты будет около 0.01Гц
Скважность реализовать программно. Счет настроить на 10кГц и после подсчитывать количество переполнений - после 6 переполнений устанавливаем "0" на выходе, потом после 4 переполнений устанавливаем "1". Или наоборот, по желанию.
Если сумматор взять 8-битный Тогда подавая код 255 на вход сумматора он будет переполняться каждый такт, на выходе частота будет в 2 раза меньше частоты суммирования. т.е. если суммировать входное число каждую 1мс то на выходе на код 255 будет 500Гц, на код 1 будет 2 Гц. Если взять 16 бит, нижний предел частоты будет около 0.01Гц
Скважность реализовать программно. Счет настроить на 10кГц и после подсчитывать количество переполнений - после 6 переполнений устанавливаем "0" на выходе, потом после 4 переполнений устанавливаем "1". Или наоборот, по желанию.
Вопрос по внешним прерываниям АВР.
В даташите есть примерно такая фраза: "Внешнее прерывание сработает по спадающему фронту на входе"
Что считать этим самым спадающим фронтом? Например, будет ли им являться спад с 5 до 4.9В?
В даташите есть примерно такая фраза: "Внешнее прерывание сработает по спадающему фронту на входе"
Что считать этим самым спадающим фронтом? Например, будет ли им являться спад с 5 до 4.9В?
Нет. Только если фронт опустится ниже логического уровня, который ПРИМЕРНО равен половине напряжения питания (с поправкой на то, что там триггрер Шмидта на входе, и уровни "вверх" и "вниз" будут чуть разные), а вообще есть, в даташите, графики зависимости логических уровней от напряжения питания.
Мне как то раз нечем было заняться и я на практике испытал когда МК видит лог 0 а когда лог 1. При изначальном уровне в лог 1 (5 в) начал сбавлять напряжение примерно при напряжении 1.4 В МК "понял" что у него уже лог 0. Наоборот при повышении напряжения с 0 В, МК "понял" что у него лог 1 Где то на напряжении 2.6 В.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Сообщения: 53
- Зарегистрирован: Пн ноя 09, 2009 20:14:52
вопрос немного не в тему - как лучше считать длительность импульсов?
1й вариант по первому импульсу запускаем счётчик по 2му вырубаем - результат сравниваем с константой (константами)
2й вариант считать количество импульсов за интервал времени, делить - результат сравниваем с константой (константами)
неправильно выразился - надо определять момент появления импульсов определённой длины (датчик холла и магнит на валу двигателя для определения оборотов, есть 80 фиксированных скоростей) сейчас реализовано 1м способом но хочу упростить алгоритм.
1й вариант по первому импульсу запускаем счётчик по 2му вырубаем - результат сравниваем с константой (константами)
2й вариант считать количество импульсов за интервал времени, делить - результат сравниваем с константой (константами)
неправильно выразился - надо определять момент появления импульсов определённой длины (датчик холла и магнит на валу двигателя для определения оборотов, есть 80 фиксированных скоростей) сейчас реализовано 1м способом но хочу упростить алгоритм.
самое простое и малоемкое это считать импульсы за определенное время. можно еще просто пустить таймер. И каждый раз по импульсу из текущего значения таймера вычитать предыдущее. Получаешь время (счет таймера) между импульсами. Вернись страницы на 3 назад. я там почти с такой же проблемой сталкнулся.
в первом случае (в моем посте) в константах хранится "количество импульсов на заданное время (время измерения)"
во втором случае (в моем посте) в константах хранится "длинна импульса"
в первом случае (в моем посте) в константах хранится "количество импульсов на заданное время (время измерения)"
во втором случае (в моем посте) в константах хранится "длинна импульса"
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Сообщения: 53
- Зарегистрирован: Пн ноя 09, 2009 20:14:52
xkp прочёл) кстати про 24х битный счётчик, ты не думал о том, что бы аппаратно тактировать один счётчик от другого?
8+16 бит = 24 
Я думал о другом и там где то писал, не только я. Счетчик 16 бит. по переполнению он прыгает на tim_1_ovf, там в свою очередь еще один счетчик (8 битный) и того получаем 24 бита. Плюс этой идеи в том что при желании за место 8 битного счетчика можно написать счетчик на 16, 24, 32 бита, да на сколько угодно и тогда разрядность всего счетчика составит X+16 бит, где X - разрядность программного счетчика.
К сожалению я пока только думал об этом. Что то обленилась моя шерсть в последнее время. недельки через 2 планирую продолжить свой проект.
и... да... как аппаратно тактировать счетчик??? ну можно конечно запретить счет счетчика допустим на таймер_0 а в прерывании таймера 1 по переполнению инкрементировать счетчик таймера 0. думаю это сложнее... Да и таймеры будут перебивать друг друга. И просто так занимать таймер тоже не надо.
К сожалению я пока только думал об этом. Что то обленилась моя шерсть в последнее время. недельки через 2 планирую продолжить свой проект.
и... да... как аппаратно тактировать счетчик??? ну можно конечно запретить счет счетчика допустим на таймер_0 а в прерывании таймера 1 по переполнению инкрементировать счетчик таймера 0. думаю это сложнее... Да и таймеры будут перебивать друг друга. И просто так занимать таймер тоже не надо.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
если исходить из описания - то ты измеряешь не длительность импульсов а период их повторения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
xkp, ещё проще,один из счётчиков тактировать шимом другого по External clock source on T0 pin. Clock on falling edge\External clock source on T0 pin. Clock on rising edge. то есть ноги просто замкнуть, если в мк 2 счётчика - проблем возникнуть не должно. Состояние так же можно считывать у обоих (и у шиманутого) останавливать чуть дольше только, но если 1м останавливать "шимующий" всё будет норм 
GP1, неее это электрический двигатель, просто там меняется нагрузка и обычный ПИДом там не обойтись, надо компенсировать как то, потому прилеплен маленький магнитик на вал (на торец), а измерять время между импульсами, да, частоту, запутался, не длительность ни в коем случае
можно правда и длительность, наверное , не знаю как сильно размазывается сигнал датчика от скорости, но это имхо извращение
GP1, неее это электрический двигатель, просто там меняется нагрузка и обычный ПИДом там не обойтись, надо компенсировать как то, потому прилеплен маленький магнитик на вал (на торец), а измерять время между импульсами, да, частоту, запутался, не длительность ни в коем случае
можно правда и длительность, наверное , не знаю как сильно размазывается сигнал датчика от скорости, но это имхо извращение
Последний раз редактировалось SatinS Вт дек 02, 2014 20:54:27, всего редактировалось 3 раза.
GP1, извиняюсь. не заметил как то... особой разницы нет мерить длительность или период. Я мерил длительность тупо запуская таймер и останавливая его, даже не на прерываниях, тупо в самой программе.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
разница есть
смотря что ты пытаешься поймать
- определенную длительность
- определенную частоту
смотря что ты пытаешься поймать
- определенную длительность
- определенную частоту
Главная разница это структура измерения, а поймать разницы нет, сравниваешь значения таймера с константой и коректируешь дальнейшие действия в ту или иную сторону до достижения равенства.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- Сообщения: 53
- Зарегистрирован: Пн ноя 09, 2009 20:14:52
он имеет в виду, что можно измерять длительность самого импульса- то есть от начала фронта до конца фронта импульса, а не по появлению или пропаданию
SatinS
открой секрет - что мострячишь?
тахометр с "лампочками"?
открой секрет - что мострячишь?
тахометр с "лампочками"?



