|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 5:29 pm
Нуждая се от помощ, за да науча PIC-овете!
| Автор |
Съобщение |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
end:
rjmp end
..... 
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
|
| Пон Авг 08, 2005 3:01 pm |
|
 |
|
Васил Сапунджиев
Ранг: Новодошъл
Регистриран на: Сря Юни 01, 2005 10:22 pm Мнения: 123
|
Проблемът възникна, когато поставих подпрограма след основната програма. Процесът зацикли в подпрограмата, защото последната инструкция от основната програма беше CALL. Тогава поставих RJMP и етикет в началото на програмата, но се получи безкраен цикъл. Не, че това нещо ми пречи! Въпрос на навик. Благодаря за съветите!
|
| Пон Авг 08, 2005 3:18 pm |
|
 |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
Значи .... след извикване на подпрограма ползваи ret в края ... за да се върнеш отново в главната програма .....
за да спреш изпълнението на главната програма .... ползваи безкраен зикъл както написах преди малко:
end:
rjmp end
И не забравяи .... когато симулираш програма в AVR Studio (а и в реалния код) ... и ползваш извиквания към други подпрограми ("rcall") ... задължително инициализираи SP в началото .. иначе постоянно ще се връщаш на адрес 0х00000 (reset vector) при всяко ret ...
Стек поинтера се инициализира по следния начин:
ldi r30,HIGH(RAMEND)
out SPH,r30
ldi r30,LOW(RAMEND)
out SPL,r30
можеш да ползваш и друг регистър (r16-r31) ....
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
|
| Пон Авг 08, 2005 3:29 pm |
|
 |
|
Васил Сапунджиев
Ранг: Новодошъл
Регистриран на: Сря Юни 01, 2005 10:22 pm Мнения: 123
|
Номерът със стека го усетих и го инициализирам по подобен начин. В края на подпрограмите пиша RET. При връщането от подпрограмата обаче, последната инструкция беше сall, след която следваше първата инструкция от подпрограмата. По този начин, по който предлагаш, стана номера. Все още не съм изяснил обаче каква е разликата между CALL и RCALL, както и между JMP и RJMP. Предполагам, че е разстоянието на разположение на етиката от текущия адрес.
Мисля, че с основното ядро се справих. Сега ще започна да се занимавам с интерфейса, но на можах да си намеря достатъчно примери. Ще разчитам пак на вашата подкрепа.
|
| Пон Авг 08, 2005 3:46 pm |
|
 |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
Правилно си се ориентирал за CALL и JMP ...  .... ползват се за етикети разположени над 2к от извикването ....
Относно периферията ... казваи само кво ти трябва и ще помагаме ... имам примери колкото искаш 
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
|
| Пон Авг 08, 2005 4:55 pm |
|
 |
|
Васил Сапунджиев
Ранг: Новодошъл
Регистриран на: Сря Юни 01, 2005 10:22 pm Мнения: 123
|
Написах си програма, която дискретизира синусоида на 12 подинтервала и изпраща състоянията на всеки от тях на PORTD. Ако там се постави ЦАП, ще се получи синусоидален сигнал, който моще да се чуе в говорител. Има ли контролер AVR с вграден ЦАП, и как би трябвало да се промени програмата, за да бъде използван? Самата програма я прикачам към постинга, но не зная дали ще стане. Правя го за пръв път!
|
| Сря Авг 10, 2005 9:25 am |
|
 |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
Със ЦАП'ове AVR няма ... но при ниякои от тях (АТ918415 и нагоре ..)
има ШИМ ... които може да използваш за синтезиране на аналогови сигнали (само трябва да се добави един RC филтър ... )
Горе споменатия сорс които си пуснал, има доста да се модефицира ако искаш да го ползваш за ШИМ'а ..
Ето ти няколко полезни линка за начало :
http://www.atmel.com/dyn/resources/prod_documents/doc2542.pdf --- Как да настроиш и ползваш ШИМ'а
http://www.atmel.com/dyn/resources/prod_documents/doc1456.pdf --- Как да си направиш диктофон с AVR
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
|
| Сря Авг 10, 2005 10:39 am |
|
 |
|
Васил Сапунджиев
Ранг: Новодошъл
Регистриран на: Сря Юни 01, 2005 10:22 pm Мнения: 123
|
Благодаря за линковете! Аз ШИМ мога да си направя с два регистъра. Това не ми е проблем. Не съм работил обаче с таймери, а съм дочул, че с тях се правело много лесно ШИМ. Някакво примерче за това или поне някои насоки можеш ли да предложиш? Благодаря!
|
| Сря Авг 10, 2005 2:55 pm |
|
 |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
Ето документация за това как да настроиш и позваш таимера:
http://www.atmel.com/dyn/resources/prod_documents/DOC2505.PDF
Ще се поразровя малко и за нещо от сорта на софтуерна имплиментация на ШИМ ....
Иначе самата ШИМ модулация е функция на таимера (достъпна при AVR чиповете с 16bit таимер) .....
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
|
| Сря Авг 10, 2005 8:52 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|