реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Таймер, Непонятно, как можно так писать?
T&D
сообщение Jan 31 2007, 14:27
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Вот фрагмент кода

TimeLoop:
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp
cp temp, 80 ; Сравниваем это содержимое с 80
brne TimeLoop ; Если не равно, то возвращаемся к началу цикла


Вот мне непонятна одна вещь:
каждая команда выполняется за один такт (какие-то команды могут выполняться за 2 такта).
Один такт и в регистре таймера счетчика оказывается 1 (предполагается, что делитель частоты не используется).
Следоваетльно в цикле описанном выше можно проскочить момент, когда в регистре таймера счетчика будет 80. Может, я что-то неправильно здесь понимаю?
Конечно, по мне гораздо удобнее воспользоваться прерываниями.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Jan 31 2007, 14:39
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
Непонятно, как можно так писать?
smile.gif smile.gif smile.gif smile.gif
А кто ЭТО так пишет?
Цитата
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp

это smile.gif загружает temp в TCNT0
если нужен такой цикл то пишут через флаг например так:
Код
WAIT_T:    
    WDR
    IN         TMP1,TIFR    ;
    SBRS     TMP1,OCF1A    ;ОЖИДАТЬ ПОЯВЛЕНИЯ ФЛАГА СОВПАДЕНИЯ ТАЙМЕРА(1)(1)
    RJMP     WAIT_T


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 31 2007, 14:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(T&D @ Jan 31 2007, 18:27) *
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp
Судя по комментарию, должно выглядеть наоборот:

Код
in temp, TCNT0; !!!


А в Вашем коде Вы наоборот загоняете в TCNT0 то, что находится в temp...


--------------------
Go to the top of the page
 
+Quote Post
T&D
сообщение Jan 31 2007, 14:52
Сообщение #4





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Цитата(prottoss @ Jan 31 2007, 14:40) *
Цитата(T&D @ Jan 31 2007, 18:27) *
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp
Судя по комментарию, должно выглядеть наоборот:

Код
in temp, TCNT0; !!!


А в Вашем коде Вы наоборот загоняете в TCNT0 то, что находится в temp...



Скорее всего и наоборот, но вопрос немного в другом был:
Есть вероятность, что мы при таком написании пропустим момент, когда в регистре таймера счетчика окажется 80? И следовательно не выйдем из цикла, хотя должны были выйти?
Например, когда будет выполняться команда сравнения в регистре таймера будет 80, а в переменную temp сохранилось 79. 79 не равно 80, опять попадаем в цикл. Сохраняем в переменную temp значение таймера счетчика, а в нем уже 81 или 82, таким образом мы проскакиваем значение 80.
Или я что-то в этом недопонимаю?
Go to the top of the page
 
+Quote Post
Wild007
сообщение Jan 31 2007, 15:06
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
Есть вероятность, что мы при таком написании пропустим момент, когда в регистре таймера счетчика окажется 80? И следовательно не выйдем из цикла, хотя должны были выйти?
Например, когда будет выполняться команда сравнения в регистре таймера будет 80, а в переменную temp сохранилось 79. 79 не равно 80, опять попадаем в цикл. Сохраняем в переменную temp значение таймера счетчика, а в нем уже 81 или 82, таким образом мы проскакиваем значение 80.
Или я что-то в этом недопонимаю?

Да, и это можно проверить в AVR_Studio, запустив отладчик и посмотреть как будет меняться переменная temp в этом цикле.


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
add
сообщение Jan 31 2007, 15:10
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Да...уф.. Задача собственно несовсем понятна, даже совсем непонятна!? Чем Вам не нравятся прерывания? зачем программно следить за переполнением?
Ну абстрагируясь :-), в вашем случае должно быть так:
TimeLoop:
in temp,TCNT0;Сохраняем содержимое регистра таймера счетчика в temp
cpi temp, 80 ; Сравниваем это содержимое с 80 (именно cpi!!!)
brlo TimeLoop ; Если меньше, то возвращаемся к началу цикла

Зы: Я заранее извиняюсь, может это и не так, но тема и вопрос очень тянут наизвечную проблему новичков "хочу в свои" и "как мне набрать постов.." Надеюсь что это не так.:-)


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
T&D
сообщение Jan 31 2007, 15:23
Сообщение #7





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Цитата(add @ Jan 31 2007, 15:10) *
Да...уф.. Задача собственно несовсем понятна, даже совсем непонятна!? Чем Вам не нравятся прерывания? зачем программно следить за переполнением?
Ну абстрагируясь :-), в вашем случае должно быть так:
TimeLoop:
in temp,TCNT0;Сохраняем содержимое регистра таймера счетчика в temp
cpi temp, 80 ; Сравниваем это содержимое с 80 (именно cpi!!!)
brlo TimeLoop ; Если меньше, то возвращаемся к началу цикла

Зы: Я заранее извиняюсь, может это и не так, но тема и вопрос очень тянут наизвечную проблему новичков "хочу в свои" и "как мне набрать постов.." Надеюсь что это не так.:-)

Этот пример не мной придуман, он взят из книги Мортона "Микроконтроллеры AVR. Вводный курс".
Мне лично прерывания нравятся, и я бы их использовал. Но этот автор привел такой пример и утверждает, что он работает, хотя по мне, так мы можем очень долго не выйти из этого цикла, если идет проверка именно на равенство какому-либо числу.
Go to the top of the page
 
+Quote Post
add
сообщение Jan 31 2007, 15:27
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Этот пример не мной придуман, он взят из книги Мортона "Микроконтроллеры AVR. Вводный курс".

:-) найду, посмеятся на досуге...:-) тот код, который Вы привели, наполовину корректен с точки зрения компилятора..(1я 4я строка норм. 3 и 4-я явные ошибки )


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Jan 31 2007, 15:36
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Может автор
Цитата
Мортона "Микроконтроллеры AVR. Вводный курс".

и написл так, чтобы Вы шевелили серым веществом, а не переписывали бездумно приведенные примеры. smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
T&D
сообщение Jan 31 2007, 15:36
Сообщение #10





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Цитата(add @ Jan 31 2007, 15:27) *
Цитата
Этот пример не мной придуман, он взят из книги Мортона "Микроконтроллеры AVR. Вводный курс".

:-) найду, посмеятся на досуге...:-) тот код, который Вы привели, наполовину корректен с точки зрения компилятора..(1я 4я строка норм. 3 и 4-я явные ошибки )

В строчке я сам немного напортачил
cp temp, 80 (здесь, конечно, нужно было написать cpi temp, 80)
в оригинале у автора написано:
cp temp, Mark80 , где Mark80 - регистр общего назначения (автор дал ему такое имя)

Все остальные строчки полностью переписаны из книги.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jan 31 2007, 15:41
Сообщение #11


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Ржал. Опуфуительная книжка должно быть. Навроде какой-нибудь "С за 21 час". Интересно откуда такие аффтары берутся и как они собственно в печать пролезают.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
add
сообщение Jan 31 2007, 15:49
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Все остальные строчки полностью переписаны из книги.

Да, есть такое :-) (стр.63). Дорогой друг! Такое(опечатки, неточности, грубые ошибки) в технической литературе встречаеться оч. часто :-) как это неприскорбно... Сам натыкался не раз...К примеру в серии про Мегу, классик, и т.д. Тут можно согласится с Wild007 про серые клеточки..:-)


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 31 2007, 15:55
Сообщение #13


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SpiritDance @ Jan 31 2007, 14:41) *
Интересно откуда такие аффтары берутся и как они собственно в печать пролезают.

Из banned курса вестимо..
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jan 31 2007, 16:45
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(add @ Jan 31 2007, 14:49) *
Цитата
Все остальные строчки полностью переписаны из книги.

Да, есть такое :-) (стр.63). Дорогой друг! Такое(опечатки, неточности, грубые ошибки) в технической литературе встречаеться оч. часто :-) как это неприскорбно... Сам натыкался не раз...К примеру в серии про Мегу, классик, и т.д. Тут можно согласится с Wild007 про серые клеточки..:-)

Есть ещё одно прискорбное наблюдение - чем ниже интеллект или преподавательские способности аффтара, тем больше его тянет писАть подобные "курсы". См. об одном из таких здесь.

PS остерегайтесь вводных курсов, читайте серьёзные книги сразу.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Jan 31 2007, 16:57
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
PS остерегайтесь вводных курсов, читайте серьёзные книги сразу.

К сожалению, новичёк всегда начинает с "вводных курсов", потом приходит на такой форум как наш где и понимает, что прочитанное ранее надо забыть и читать только "серьёзные книги" . smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 31 2007, 18:59
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Wild007 @ Jan 31 2007, 15:57) *
потом приходит на такой форум как наш где и понимает, что прочитанное ранее надо забыть и читать только "серьёзные книги" . smile.gif

Или не понимает sad.gif он уже сделал "кучу проектов" с мигающими лампадами, нажимающимися кнопками и даже играющей музыкой. Они работают что еще надо?
В одном старинном класическом труде было написано:
Цитата
Я мог написать непобедимую программу игры
в крестики-нолики в трехмерном пространстве на пяти различных
языках программирования, а также написать программу, состоящую
из 1000 строк, которая бы работала. Затем я попал в реальный
мир. Моей первой задачей было прочитать и понять программу емкостью 200000 строк, а затем увеличить скорость ее работы в 2 раза.

Иногда попадание в "реальный мир" помогает smile.gif, но и заповедных мест (где еще достаточно программ в сотни строк с единственным критерием "работает") в ембеддерстве еще хватает.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 31 2007, 21:03
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Все философское хорошо, но выучить ассеблер нужно. Только прога нужна работающая раньше чем ассеблер выучен будет. Вот кто сможет предложить ассемблерную вставку, обеспечивающую на ноге 4000 Гц при тактовой 128000 Гц и длительностью 0,25 с ????


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jan 31 2007, 23:49
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(smk @ Jan 31 2007, 21:03) *
Все философское хорошо, но выучить ассеблер нужно. Только прога нужна работающая раньше чем ассеблер выучен будет. Вот кто сможет предложить ассемблерную вставку, обеспечивающую на ноге 4000 Гц при тактовой 128000 Гц и длительностью 0,25 с ????


Код
        ldi  R21,$32
LABEL1: ldi  R20,$06
        nop
LABEL2: sbi  portB,1
        subi R20,$01
        brne LABEL2
        ldi  R20,$05
        nop
        nop
LABEL3: cbi  portB,1
        subi R20,$01
        brne LABEL3
        nop
        nop
        nop
        subi R21,$01
        brne LABEL1


Дергаем на ноге portB.1

С Вас пиво.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 1 2007, 00:08
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(T&D @ Jan 31 2007, 15:27) *
Вот фрагмент кода

TimeLoop:
out TCNT0, temp ;Сохраняем содержимое регистра таймера счетчика в temp
cp temp, 80 ; Сравниваем это содержимое с 80
brne TimeLoop ; Если не равно, то возвращаемся к началу цикла


Вот мне непонятна одна вещь:
каждая команда выполняется за один такт (какие-то команды могут выполняться за 2 такта).
Один такт и в регистре таймера счетчика оказывается 1 (предполагается, что делитель частоты не используется).
Следоваетльно в цикле описанном выше можно проскочить момент, когда в регистре таймера счетчика будет 80. Может, я что-то неправильно здесь понимаю?
Конечно, по мне гораздо удобнее воспользоваться прерываниями.


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

clr temp
out TCNT0, temp

TimeLoop:
in temp,TCNT0 ;Сохраняем содержимое регистра таймера счетчика в temp
cpi temp, 80 ; Сравниваем это содержимое с 80
brle TimeLoop ; Если меньше или равно, то возвращаемся к началу цикла
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 1 2007, 00:41
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить. smile.gif
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 1 2007, 01:39
Сообщение #21


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(smk @ Jan 31 2007, 21:03) *
Все философское хорошо, но выучить ассеблер нужно. Только прога нужна работающая раньше чем ассеблер выучен будет. Вот кто сможет предложить ассемблерную вставку, обеспечивающую на ноге 4000 Гц при тактовой 128000 Гц и длительностью 0,25 с ????

а PWM на таймере запустить не пробовали ?
да и ножки (пины) можно включать/отключать одной командой
Go to the top of the page
 
+Quote Post
add
сообщение Feb 1 2007, 09:51
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
то можно переписать след. образом

Уважаемый SasaVitebsk, читайте вчерашний пост №6 :-)
Да еще...:
Цитата
brle TimeLoop ; Если меньше или равно, то возвращаемся к началу цикла

Ну нету такой команды в авр-е, нету...:-)
Цитата
bodja74:Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить.

При сравнении по равно есть вероятность "проскачить" значение, а это ни есть гут! Лучше делать однозначно: либо больше/равно, либо меньше.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
T&D
сообщение Feb 1 2007, 12:53
Сообщение #23





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Спасибо за ответы. Можно ещё один вопрос задать? Вопрос про радиоуправление. Вот есть два микроконтроллера. На одном кнопки, а на другом светодиоды. Нажимаем кнопку или кнопки - формируется посылка по UART, все эти данные каким-то образом должны преобразоваться в электромагнитное колебание, передаваться на принимающее устройство и преобразовываться обратно, поступая на UART другого контроллера, на нем должны зажечься соответствующие светодиоды.
Предположим, что имеются две рации или два модуля (передающий и принимающий), так что с этим проблем нет.
Но я до конца не понимаю следующую вещь.
Вот от первого контроллера по UART пошли данные (низкая частота), потом происходит модуляция низкой частоты высокой, потом идет передача, прием, происходит обратный процесс - демодуляция, и низкая частота поступает на UART второго контроллера. Я правильно понимаю этот процесс или не совсем?
Ведь здесь аналоговый сигнал и боюсь, что на UART второго контроллера его не подашь, его надо на АЦП направлять... Вот этот вопрос мне не ясен.
Вопрос про таймер был связан с тем, что нужно будет в этой задаче через определенные промежутки времени (чтобы не было дребезга контактов) определять состояние кнопок (нажата или нет).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 1 2007, 13:06
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(T&D @ Feb 1 2007, 11:53) *
Я правильно понимаю этот процесс или не совсем?

Ведь здесь аналоговый сигнал и боюсь, что на UART второго контроллера его не подашь

Вот тут правильно. UART может "зацепиться" за шум в качестве стартового бита и пропустить настоящий стартовый бит.
Цитата(T&D @ Feb 1 2007, 11:53) *
, его надо на АЦП направлять...
А это не обязательно - зависит от того, насколько зашумлен канал, какая достоверность передачи вам нужна, от протокола (есть ли повторы), от количества вычислительных ресурсов, которые вы способны отдать на декодирование. Тут решений море разных. Можно использовать эфирный протокол типа манчестера и декодировать компаратором и таймером, как было сделано при чтении данных с ленты в "Радио86-РК" или "синклере".
ну и
Цитата(T&D @ Feb 1 2007, 11:53) *
формируется посылка по UART
соответственно тоже отпадает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
T&D
сообщение Feb 1 2007, 13:32
Сообщение #25





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Цитата(Сергей Борщ @ Feb 1 2007, 13:06) *
А это не обязательно - зависит от того, насколько зашумлен канал, какая достоверность передачи вам нужна, от протокола (есть ли повторы), от количества вычислительных ресурсов, которые вы способны отдать на декодирование. Тут решений море разных. Можно использовать эфирный протокол типа манчестера и декодировать компаратором и таймером, как было сделано при чтении данных с ленты в "Радио86-РК" или "синклере".

Мигание светодиодов некритично, поэтому достоверность передачине слишком высокая нужна, но, конечно, хотелось бы, чтобы мигали правильно в большинстве случаев. Можно, конечно же делать и подтверждения насколько правильно был принят сигнал.
Предположим, что частота на которой происходит передача и прием сигнала не зашумлена и имеются две фирменные рации.
По Вашему мнению в этой ситуации можно обойтись одним только модулятором/демодулятором, то есть на одной стороне модулировать цифровой сигнал, а на другой стороне производить демодуляцию в надежде получить исходный цифровой сигнал? Или же так никто не делает и всегда производится предварительное декодирование такого сигнала?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 1 2007, 13:54
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(add @ Feb 1 2007, 10:51) *
Цитата
то можно переписать след. образом

Уважаемый SasaVitebsk, читайте вчерашний пост №6 :-)


Ну извиняйте. smile.gif

Цитата
Да еще...:
Цитата
brle TimeLoop ; Если меньше или равно, то возвращаемся к началу цикла

Ну нету такой команды в авр-е, нету...:-)
Цитата
bodja74:Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить.

При сравнении по равно есть вероятность "проскачить" значение, а это ни есть гут! Лучше делать однозначно: либо больше/равно, либо меньше.


Да лоханулся... sad.gif Ну тогда лучше так

clr temp
out TCNT0, temp

TimeLoop:
in temp,TCNT0 ;Сохраняем содержимое регистра таймера счетчика в temp
cpi temp, 81 ; Сравниваем это содержимое с 81
brlo TimeLoop ; Если меньше, то возвращаемся к началу цикла
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 1 2007, 15:50
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(add @ Feb 1 2007, 09:51) *
Цитата
bodja74:Если цикл сравнения проходит быстрее клока таймера то можно и равно поставить ,хотя идеальной точности при таком подходе все равно не получить.

При сравнении по равно есть вероятность "проскачить" значение, а это ни есть гут! Лучше делать однозначно: либо больше/равно, либо меньше.


Обьясняю популярно,
TCNT считает клоки таймера ,а клок таймера может быть и 64 и 1024 и т.д. тактов проца ,при том условии ,что я писал в предыдущем посте ,вероятность проскочить равна 0. smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 1 2007, 16:00
Сообщение #28


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(T&D @ Feb 1 2007, 12:32) *
Мигание светодиодов некритично, поэтому достоверность передачине слишком высокая нужна, но, конечно, хотелось бы, чтобы мигали правильно в большинстве случаев.
Хм. С таким критерием пока не сталкивался smile.gif
Цитата(T&D @ Feb 1 2007, 12:32) *
Можно, конечно же делать и подтверждения насколько правильно был принят сигнал.
Предположим, что частота на которой происходит передача и прием сигнала не зашумлена и имеются две фирменные рации.

1)В эфире всегда есть шумы.
2)Радиостанция не может всегда находиться на передаче. Будут паузы, в паузах будут шумы.
Цитата(T&D @ Feb 1 2007, 12:32) *
По Вашему мнению в этой ситуации можно обойтись одним только модулятором/демодулятором, то есть на одной стороне модулировать цифровой сигнал, а на другой стороне производить демодуляцию в надежде получить исходный цифровой сигнал? Или же так никто не делает и всегда производится предварительное декодирование такого сигнала?
Не совсем понял вопроса. Односторонняя передача используется довольно широко. Теоретически подавать в радиостанцию и снимать цифровой сигнал можно, но сигнал должен обладать определенными свойствами - например не должен содержать длительных периодов из одних нулей или единиц, позволять выделить начало каждого бита. В качестве занимательного чтива могу предложить Б. Скляр "Цифровая связь". И продолжить тему наверное лучше в другом форуме - она к AVR практически не имеет отношения.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
T&D
сообщение Feb 1 2007, 16:12
Сообщение #29





Группа: Новичок
Сообщений: 8
Регистрация: 31-01-07
Пользователь №: 24 905



Цитата(bodja74 @ Feb 1 2007, 15:50) *
Обьясняю популярно,
TCNT считает клоки таймера ,а клок таймера может быть и 64 и 1024 и т.д. тактов проца ,при том условии ,что я писал в предыдущем посте ,вероятность проскочить равна 0. smile.gif

А если делитель частоты не используется? То клок таймера=такту проца, следовательно здесь есть вероятность проскочить значение.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 1 2007, 16:39
Сообщение #30


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(bodja74 @ Feb 1 2007, 14:50) *
Обьясняю популярно,
TCNT считает клоки таймера ,а клок таймера может быть и 64 и 1024 и т.д. тактов проца ,при том условии ,что я писал в предыдущем посте ,вероятность проскочить равна 0. smile.gif

Кто-то говорил, что при исполнении этого цикла прерывания запрещены?
Если нет, то вероятность проскочить далеко не нулевая.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 1 2007, 17:17
Сообщение #31


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(T&D @ Feb 1 2007, 15:12) *
А если делитель частоты не используется? То клок таймера=такту проца, следовательно здесь есть вероятность проскочить значение.

Здесь нужно уже не вероятность "проскочить" считать, а вероятность срабатывания, которая будет значительно ниже 0.5.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 1 2007, 18:55
Сообщение #32


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(bodja74 @ Jan 31 2007, 20:49) *
Цитата(smk @ Jan 31 2007, 21:03) *

Все философское хорошо, но выучить ассемблер нужно. Только прога нужна, работающая раньше, чем ассеблер выучен будет. Вот кто сможет предложить ассемблерную вставку, обеспечивающую на ноге 4000 Гц при тактовой 128000 Гц и длительностью 0,25 с ????


Код
        ldi  R21,$32
LABEL1: ldi  R20,$06
        nop
LABEL2: sbi  portB,1
        subi R20,$01
        brne LABEL2
        ldi  R20,$05
        nop
        nop
LABEL3: cbi  portB,1
        subi R20,$01
        brne LABEL3
        nop
        nop
        nop
        subi R21,$01
        brne LABEL1


Дергаем на ноге portB.1

С Вас пиво.

Влезу чуток. Кроме того, что у вас длительность единицы составляет 34 такта вместо 16, а длительность нуля - 27 вместо 16, там еще требуется обеспечить 1000 циклов, а не 50, так что это с вас поллитра пива, каждому, кто читал эту ветку(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 1 2007, 20:23
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(IgorKossak @ Feb 1 2007, 16:39) *
Кто-то говорил, что при исполнении этого цикла прерывания запрещены?
Если нет, то вероятность проскочить далеко не нулевая.

И про сторожевой таймер тоже никто не говорил.

2GM

Здесь 0 и 1 ровно 32 такта ,за остальное пардон,пока считать не научился ,вечно блох ловлю smile.gifsmile.gifsmile.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 1 2007, 20:52
Сообщение #34


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(bodja74 @ Feb 1 2007, 17:23) *
2GM

Здесь 0 и 1 ровно 32 такта ,за остальное пардон,пока считать не научился ,вечно блох ловлю smile.gifsmile.gifsmile.gif

Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1
Длительность цикла 3+4+4+4+4+3=30 плюс 4 команды
ldi R20,$05
nop
nop
LABEL3: cbi portB,1
Здесь начнётся нуль. Всего будет 34 такта. Также и с нулём можно посчитать.

На самом деле, надо 16 тактов для 1 и 16 тактов для 0, поскольку период клока равен 7,8125 мкс (128 кГц клок), а период у сигнала с частотой 4000 Гц равен 250 мкс. Т.е. 250/7,8125=32 такта на период, по 16 тактов на 1 и 0 соответственно.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 1 2007, 21:44
Сообщение #35


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(=GM= @ Feb 1 2007, 20:52) *
Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1
Длительность цикла 3+4+4+4+4+3=30 плюс 4 команды
ldi R20,$05
nop
nop
LABEL3: cbi portB,1
Здесь начнётся нуль. Всего будет 34 такта. Также и с нулём можно посчитать.

Ну что тут скажеш ,это конечно сильно smile.gif
особенно вот это.
Цитата
3+4+4+4+4+3=30

smile.gifsmile.gifsmile.gif

Делаем расклад

LABEL2: sbi portB,1 =2
subi R20,$01 =1
brne LABEL2 =2 (и =1 в конце) итого 5+5+5+5+5+4=29
ldi R20,$05 =1
nop =1
nop =1 итого 32
LABEL3: cbi portB,1

Далее немного сложнее ,так как нужно выполнить еще одно условие ,но в том же духе.


Цитата
На самом деле, надо 16 тактов для 1 и 16 тактов для 0, поскольку период клока равен 7,8125 мкс (128 кГц клок), а период у сигнала с частотой 4000 Гц равен 250 мкс. Т.е. 250/7,8125=32 такта на период, по 16 тактов на 1 и 0 соответственно.


Я уже это понял. sad.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 1 2007, 23:38
Сообщение #36


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(bodja74 @ Feb 1 2007, 18:44) *
Цитата(=GM= @ Feb 1 2007, 20:52) *

Как вы считаете такты? Надеюсь, вы согласны. что единица начнётся после строчки LABEL2: sbi portB,1
Длительность цикла 3+4+4+4+4+3=22 плюс 4 команды
ldi R20,$05
nop
nop
LABEL3: cbi portB,1
Здесь начнётся нуль. Всего будет 27 тактов. Также и с нулём можно посчитать.

Ну что тут скажешь, это конечно сильно smile.gif
особенно вот это.
Цитата
3+4+4+4+4+3=30

smile.gifsmile.gifsmile.gif

Делаем расклад

LABEL2: sbi portB,1 =2
subi R20,$01 =1
brne LABEL2 =2 (и =1 в конце) итого 5+5+5+5+5+4=29
ldi R20,$05 =1
nop =1
nop =1 итого 32
LABEL3: cbi portB,1

Далее немного сложнее ,так как нужно выполнить еще одно условие ,но в том же духе.

Черт, прошу пардону, у меня табличка старенькая по командам отпечатана, так там sbi и cbi по одному такту(:-(. Ну а тут, 3+4+4+4+4+3=30, оправдаться нечем, рука пронесла (:-)!


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
add
сообщение Feb 2 2007, 10:13
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Собственно фрагмент книги, из-за которого создана тема.(Мортон Д. - Микроконтроллеры AVR. Вводный курс) см. вложен:
Прикрепленные файлы
Прикрепленный файл  ________.____________________AVR._____________.pdf ( 121.83 килобайт ) Кол-во скачиваний: 101
 


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Feb 2 2007, 10:17
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(add @ Feb 2 2007, 09:13) *
Собственно фрагмент книги, из-за которого создана тема.(Мортон Д. - Микроконтроллеры AVR. Вводный курс) см. вложен:

Да забудте про эту "книгу", и сдайте ее на макулатуру!!! smile.gif smile.gif smile.gif
Чё не понятно, спрашивайте, поможем! cheers.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.0179 секунд с 7
ELECTRONIX ©2004-2016