Не е лесно...

35 отговора 763 прегледа
#1

Не е лесно...

След неуспешните ми опити да си намеря кварцов генератор, реших да си направя таймер на базата на МК AVR. Целта е да имам стабилен таймер с честота 100 КХц.
Сложих един външен кварц с честота 6 МХц, настроих боряча на таймера на микроконтролера да се инкрементира направо с честотата на процесора. На всяко прекъсване на препълване на таймера го установявам на 225, т.е. прекъсването се изпълнява с честота 6000000 / (255-225) = 200000 пъти в сек. Всеки път инвертирам изходния пин, така, че се получава правоъгълен сигнал със запълване 50% и честота 100 КХц, т.е. това, което ми трябва.
Изходният пин на въпросното устройство е директно свързано към пина за външно прекъсване на друг МК. В обработката на прекъсването има брояч, т.е. на всяко цъкване на таймера се увеличава. Целия проблем е в това, че за секунда брояча не достига стойност 100000, ами само ~67000, т.е. 2/3 от това, което е нужно и което е логично да бъде...
Сега седя и си чеша кухата тиква се чудя кво ли може да е.



Отговор
в отговор на Pekoнcтpykтop #2

Re: Не е лесно...

Времето за влизане в прекъсване на генериращият микроконтролер колко е? Преди да установиш брояча на таймера.

Отговор
в отговор на Poruchik_Rzevski #3

Re: Не е лесно...

В смисъл? Предполагам ще да е наносекунди някви.



Отговор
в отговор на Pekoнcтpykтop #4

Re: Не е лесно...

Pekoнcтpykтop, тази мярка наносекунди е 0.000000001s.
Колко време е "машинния цикъл"? и за колко цикъла се изпълняват различните команди в процесора който ползваш?

Отговор
в отговор на RC #5

Re: Не е лесно...

Имаш предвид да не би случайно да се застъпват прекъсванията? Едва ли - прекъсването се изпълнява на всеки 30 цикъла, като повечето инструкции се изпълняват за 1 цикъл (RISC е все пак). По принцип обработката е писана на C, ама едва ли е повече от 30 инструкции. Но за всеки случай ще проверя.
Интересно, дали инкрементирането на таймера яде процесорно време? Ама едва ли, би било крайно глупаво.



Отговор
в отговор на Pekoнcтpykтop #6

Re: Не е лесно...

Не се работи така с таймер. От момента на заявката за прекъсване до момента в който пишеш таймера минава време (в общия случай не съвсем определено) и това време ти не го отчиташ никъде - затова периодът ти е по-дълъг. Прави се така - четеш текущата стойност на таймера, намаляваш я с 30-N, записваш обратно в таймера. N ти е времето на инструкциите от четенето до записа. Ако таймерът губи цикли при запис (не познавам AVR, провери), отчиташ ги и тях.
Абе нарисувай го на хартия и ще ти стане ясно за какво говоря.

Отговор
в отговор на вeтepинapят #7

Re: Не е лесно...

Абсолютно те разбрах. Ама съм доста тъп, че не се сетих сам. Като се прибера, веднага ще го пробвам.



Отговор
в отговор на Pekoнcтpykтop #8

Re: Не е лесно...

Ne e li po lesno da si slojish edin kvarc 1MHz i da go delnesh na 10 s edna typa integrala desetichen broiach i shte si reshish mnoooogo lesno problemite :))))

Отговор
в отговор на Pekoнcтpykтop #9

Re: Не е лесно...

Баси, нещо много гнило има. Максималната честота, която успях да постигна (с презастъпване на прекъсванията), е точно 115200
Явно трябва да си намеря от някъде осцилоскоп. Без този ценен дивайс не може да се работи.



Отговор
в отговор на Pekoнcтpykтop #10

Re: Не е лесно...

Човека по горе е абсолютно прав - защо да е просто,като може да е сложно...!

Отговор
в отговор на 666666 #11

Re: Не е лесно...

Щом е писанона С напълно възможно е да минават тея 30 цикъла, изобщо е възможно е самата обработка на прекъсването да е по дълга. Примерно компилатора който ползвам прави доста код за обработка на прекъсването, докато свапне всичките си истории .... напиши си го на asm, така поне ще си сигурен къде колко инструкции отиват, за това просто нещо не си струва да ползваш С.

Отговор
в отговор на ToHu #12

Re: Не е лесно...

А, дали трябва да се ползва процесор за делене на честота?

ТЕОРЕМА: Неизползването на С е универсално алгоритмично средство за оптимизиране.

:)

Отговор
в отговор на Pekoнcтpykтop #13

по-добро решение

гледай как се прави ресуректоре, и се учи:
1. вземаш си пц с най-новия пентиум гъгрилион, дето изпълнява безкраен цикъл за една минута.
2. пишеш програма с изкуствен интелект - ако не знаеш как не се притеснявай, това все пак е пентиум гъгрилион, и както казах изпълнява безкраен цикъл за една минута, така че никакъв проблем няма да имаш с алгоритъм за пълно изброяване да получиш код за изкуствен интекект.
3. когато на екрана получиш надпис "господарю, програмата с изкуствен интелект чака вашите заповеди", и обясняваш с прости думи, така както го направи тука, а може би направо и даваш линка към темата, за да разбере какъв ти е проблема. посочваш и желания от теб изход за честотата, да речем лптто.
4. програмата изписва "as you wish my lord" и на изхода на лптто ти се появява честота един мегахерц, с най-високата възможна за измерване точност, ограничена директно и единственно от принципа за неопределеност на хайзенберг.

приятни занимания

Отговор
в отговор на Pekoнcтpykтop #14

Re: Не е лесно...

Нямам време да чета всички мнения, но ако искаш кварц 100 кхц, имам.

Отговор
в отговор на Pekoнcтpykтop #15

да утрепеш...

Да утрепеш с топ врабче... е това сякаш се опитваш да направиш- едно че прицелването е малко трудно и друго нанесените щети са много по-големи от това което би ти изкълвало врабчето. Е какъв ти е проблема да вземеш да почетеш малко как се прави поне аз ти пуснах схема в един от предните постове още някой също ти беше пуснал а после ако не си намерил кварц какъвто ти трябва да "нацепиш" честотата?
Е това което си се хванал си има и добрите страни поне ще се поблъскаш със AVR и да се адяваме че ще им хванеш чалъмите. Не е срамно да прочетеш нещо дори понякога е полезно. А колкото до PIC-a защо не го програмираш като делител на честота а да подаваш сигнал от външен кварцов генератор?? по този начин може и индикация да му направиш и т.н.

Отговор
в отговор на Pekoнcтpykтop #16

Re: Не е лесно...

Епопеята продължава. Успях да си купя генератор, продават ей тук. 32 и 50 МХц. Взех 32 МХц-овата версия. Понеже честотата е твърде висока, сложих един 74hc393. Обаче тоя чип прави каквото си иска! Ту има нещо на Q-пиновете, ту няма. Такова чувство имам, че тъпия генератор работи с TTL нива. А нямам осцилоскоп да го видя. Мисля си дали да не пробвам с TTL версията на тая логика (74LS93), обаче тогава не знам кво ше каже по въпроса микроконтролера, в даташита не пише дали таймера бачка с TTL или само CMOS. Или поне не знам къде да гледам.
Мога да пробвам да мина от TTL към CMOS с два полеви високочестотни транзистора (NPN и PNP), ама кой знае ква боза ше се получи. Пък и не знам дали изобщо е това проблема (макар и много да ми прилича на това). Помагайте със съвети, пичове.



Отговор
в отговор на Machine Head #17

Re: Не е лесно...

Така ли изглежда:



(като металния корпус)



Отговор
в отговор на Pekoнcтpykтop #18

Re: Не е лесно...

ama to naistina голяма епопея стана ;-)
ако беше прочел малко за генератори, да си готов досега ;-)
и не каза колко броя ще правиш. като гледам, май само 1.

но пък дерзай, така се учи..
разгледай [линк], има много хубави неща

а като нямаш осцилоскоп, направи си един логически пробник,
направи си един делител на 10,100,1000, 10000, 100000, 1000000, с по един светодиод на всеки брояч и ще имаш приблизителна представа колко ти е честотата и как се държат делителите , генераторите и т.н.

Отговор
в отговор на Milenn #19

Re: Не е лесно...

Ами мен честотата в случая не ме интересува, интересува ме дали генератора бачка с TTL нива или е CMOS. Даташит за тва чудо посмъртно не може да се намери, така че само осцилоскоп му е майката.

И да - само 1 брой е, разбира се. Вие да не ме помислихте за някъв откачен индустриалец? Уви - не съм, за сега съм само откачен любител (начинаещ).



Отговор
в отговор на Pekoнcтpykтop #20

Re: Не е лесно...

Генераторите са с ТТЛ нива,
HC и подобните серии си бачкат перфектно с ТТЛ нива. изобщо да не те притеснява това. разликата е в товароносимостта и честотата основно, но тебе това не те засяга.
та все пак, като сега ще почваш да учиш, ако нямаш осцилоскоп и честотомер, поне логически пробник можеш да си спретнеш за няколко минути ... ок, добре де, за тебе малко повечко, ама е полезно...


а както беше написал в един от първите ти постинги:
"В каталога на Пулсатор фигурира един 6 МХц артикул, който ме устройва идеално. Дано само да го имат като бройки, не като в Комет. "
се подразбираше , че търсиш "бройки" т.е. много ;-) затова ти и предложих от тука, за над 100 ти излизат ефтини, хехех

а една бройка се търси из стара техника, из компютрите е пълно с такива, особено в периферията, казах ти каде има ...

Редактирано от Milenn на

Отговор