Свежие обсуждения
Микроконтроллеры

помогите разобраться с attiny25

1 2

Здравствуйте!
attiny25, внешний кварц 16МГц

Мне нужен генератор 100 кГц со скважностью 3.2 - 3.7
пытаюсь сделать так:

ldi r16, 0x3f
out DDRB, r16
LDI r16,(1COM0A1)|(1WGM00)|(1WGM01)
OUT TCCR0A,r16
LDI r16,(0WGM02)|(1CS00)
OUT TCCR0B,r16
LDI r16,0x33
OUT OCR0A,r16
LDI temp,0x70
OUT TCNT0,r16

фактически, я пытаюсь получить ШИМ на таймере
чего-то я не понимаю, или на tiny25 вообще так сделать низя?

И кто может подкинуть идею(это к таймеру не относится ), как получить на выходе скажем при частоте 500 Гц случайное ее изменение +-10Гц, ну может псевдо-случайное, но с возможно большим периодом повторения?
Да, используются 2ноги-питание, 2ноги-кварц, 3ноги-выход

 

по такой реализации что можно сказать(для 25)?

RAND:
mov Tmp2, RND ; x1
lsl Tmp2 ; x2
lsl Tmp2 ; x4
lsl Tmp2 ; x8
lsl Tmp2 ; x16
add Tmp2, RND ; x(16+1) = 0b00010001


subi Tmp2, -53 ; -(-53) = +53
mov RND,Tmp2 ; RND = (RNDi * 17 + 53) {MOD 256}

 

1. У вас какой результат - все время лог.1 или лог.0 вместо ШИМа?. Так оно и будет, потому что в вашем режиме OCR0A используется в качестве TOP. Задействуйте выход ШИМ на OCR0B.
2. Насчет генератора случайных чисел - все зависит от того, для чего вам это нужно. Работать ваш вариант, безусловно, будет, а вот насчет длины периода - не факт, что там что-то длинное получится. Если вам нужна качественная с точки зрения математики ПСП, ищите в инете "Кнут получисленные алгоритмы" Ссылок на него полно.

 

Чтобы получить 100 кГц шим, надо задействовать pll 64/32 МГц. Выход плл подключен только в таймеру1, а вы используете таймер0, исправьте.

По второму вопросу, при генерации шим случайным образом меняете заполнение (скважность) в заданных пределах. Ну и НЧ-фильтр, разумеется. Ещё можно оцифрять шум стабилитрона с помощью АЦП и выдавать в качестве коэффициента заполнения.

 

chav1961
Спасибо! по первому вопросу - получилось! я тормоз
только вопрос, таймер в таком режиме никак с остальной частью программы связан не будет? и как использование таймера влияет на потребление?

2. Ну вариант не мой
мне нужно случайное изменение частоты в небольших пределах в течении часа и принципиальней размер кода

Если не сложно - не подскажете, для тини25 при бат. питании внешний супервизор нужен или будет достаточно внутреннего Brown-Out Detector?

GM

Чтобы получить 100 кГц шим, надо задействовать pll 64/32 МГц ????

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

 

alvo: таймер в таком режиме никак с остальной частью программы связан не будет?
Честно говоря, не совсем понял вопрос Насчет потребления и супервизора питания, к сожалению, личного опыта не имею, а даташит у вас, думаю, и без меня есть

 

alvo: Увыжаемый, а Вы вообще читали, что я спросил? мне нужно менять частоту при заданной скважности, и ног свободных для стабилитрона нет если нечего сказать по делу, не лучше-ли просто промолчать?
А вы-то увыжаемый, вообще поняли, что я ответил? GM: Чтобы получить 100 кГц шим, надо задействовать pll 64/32 МГц

1) Ваши слова "со скважностью 3.2 - 3.7" я понимаю буквально, скважность должна меняться от 3.2 до 3.7. Ваше решение даёт всего 8 точек, это не шим, а профанация. Использование внутренней PLL 64 МГц даст более-менее приличный результат.

2) Использование стабилитрона было указано как вариант, не хотите, не используйте. Насчёт количества ног, в первом посте вы указали, что используете 7 ног, а в tiny25 их 8, вот и нога свободная появилась.

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

 

GB извиняйте, сразу не понял, туплю

1) Ваши слова "со скважностью 3.2 - 3.7" я понимаю буквально, скважность должна меняться от 3.2 до 3.7. Ваше решение даёт всего 8 точек, это не шим, а профанация. Использование внутренней PLL 64 МГц даст более-менее приличный результат.
на самом деле мне нужна фиксированная скважность, которая подберётся экспериментально, поэтому PLL использовать нет необходимости

2) Использование стабилитрона было указано как вариант, не хотите, не используйте. Насчёт количества ног, в первом посте вы указали, что используете 7 ног, а в tiny25 их 8, вот и нога свободная появилась.
а, да, 8-я нога - ресет, и она нужна....

3) Что касается нечего сказать по делу, позвольте мне самому определять, что говорить, кому и как. А вам, увыжаемый аникейщик с претензиями, я советов больше давать не буду и других призываю.
а с чего Вы решили, что я аникейщик? просто советы надо давать так, чтоб их понять можно было

chav1961

alvo: таймер в таком режиме никак с остальной частью программы связан не будет?
Честно говоря, не совсем понял вопрос

я токо начал разбираться с АВР, в даташите некоторые вопросы очень туманно освещены
смысл вопроса: влияет ли таймер в режиме Fast PVM на выполнение основной программы?

нужно на выходе МК получить 100кГц, промодулированных 500 (+-10)Гц,примерно как на рисунке
моё решение - 100кГц с таймера, 500 (+-10)Гц програмно и складывать внешней схемой
при необходимости возможно уменьшить потребление правильно-ли это решение?

215922.pdf

 

1.Таймер на выполнение программы может повлиять только в двух случаях - либо мы опрашиваем его регистры состояния и по результатам опроса выполняем те или иные действия, либо таймер в процессе работы генерирует прерывания, и эти прерывания разрешены. Все остальное время он сидит тихо как мыш и что-то там считает Обычные часы вас ведь по жизни тоже не беспокоят, пока не зазвенят
2. Небольшое уточнение по терминологии - внешней схемой нужно не складывать сигналы, а перемножать Сложение сигналов будет просто сдвигать 100кгц вверх и вниз, а не модулировать ее, как показано на рисунке.

Кстати, если второй таймер у Вас свободен, можете 500 Гц сделать на нем. Тогда программа вообще будет в основном "спать", да время от времени вносить ваши +/- 10Гц. Потребление будет минимально. Только поменяйте таймеры, как советовал GM. Хотя причин, почему скважность должна быть именно 3.2..3.7, я, честно говоря, пока не вижу.

 

почему скважность должна быть именно 3.2..3.7
из условий поставленой задачи....

если второй таймер у Вас свободен, можете 500 Гц сделать на нем
ну вобще-то там не совсем 500 будет, но в принципе изгалиться можно

Т.е. логика получается такая:
1. таймер тикнул, вызвал прерывание
2. проверили, нужно-ли изменять частоту
3. если нужно, сгенерили "случайное" число
4. внесли изменения в OCRA и OCRB
5. вернулись из прерывания

??????

вопрос что экономичней, таймер с прерываниями или непрерывный цикл в программе?
просто питание от батареек и хотелось чтобы их хватало на подольше