Четверг, 21.09.2017, 22:32
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | система дистанционного управления на ATtiny 2313 "c нуля" - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 371233637»
Модератор форума: ВитГо 
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
система дистанционного управления на ATtiny 2313 "c нуля"
uwrteyДата: Среда, 03.10.2012, 22:07 | Сообщение # 1
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
начало тут http://radiokot.ru/forum/viewtopic.php?f=20&t=76888

проект прикрепил, а для тех кто не хочет ни чего качать код спрятан под спойлером


теперь при нажатии одной из кнопок, появляются импульсы длительностью примерно 13 мили секунд и паузы длительностью 5 мили секунд shock
все исправления отмечены знаками вопроса

Quote
так, не хватает принудительной установки состояния вывода OC1A
вот так устанавливается в "1"
этот код нужно будет выполнять перед прерыванием (перед передачей первого импульса)
ldi R16 , (1<<COM1A1)|(1<<COM1A0) ; установка вывода OC1A=1
out TCCR1A , R16
ldi R16 , (1<<COM1A1)|(1<<COM1A0)|(1<<FOC1A)
out TCCR1A , R16

ldi R16 , (0<<COM1A1)|(1<<COM1A0) ; режим top=OCR1A, OC1A toggle
out TCCR1A , R16


...............ни чего не понял

1) ни как не могу понять зачем это нужно ??? (главный вопрос)

1.1) для чего это ?
ldi R16 , (1<<COM1A1)|(1<<COM1A0) ; установка вывода OC1A=1
out TCCR1A , R16

1.2) для чего это ?
ldi R16 , (1<<COM1A1)|(1<<COM1A0)|(1<<FOC1A)
out TCCR1A , R16
Прикрепления: transmit1.5.rar(21Kb)


что то я не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Среда, 03.10.2012, 22:28
 
ВитГоДата: Среда, 03.10.2012, 22:20 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
дело в том, что режим toggle OC1A не имеет начального состояния вывода, а просто меняет его состояние на противоположное...

то есть мы не можем заранее сказать перешли мы с лог."0" на лог."1" или наоборот..

для этого мы и установим сначала OC1A=1 (кодом который я дал выше) и потом сделаем запуск нашего прерывания
это у нас все в блоке начинающемся с метки inform:

Code
;***********************************************************************************************
; вывод информации о состоянии клавиатуры в порт "Б"  
;***********************************************************************************************

inform:     ; здесь мы включаем таймер

; начало добавленного блока
               ldi R16 , (1<<COM1A1)|(1<<COM1A0) ; установка вывода OC1A=1
               out TCCR1A , R16
               ldi R16 , (1<<COM1A1)|(1<<COM1A0)|(1<<FOC1A)
               out TCCR1A , R16
; конец добавленного блока    

  ldi Temp,(1<<COM1A0)  ; переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
  out TCCR1A,Temp   ; *1



после этого мы должны с каждым нажатием на кнопки получать импульсы одинаковой длинны (до этого они по длительности могли меняться с паузами)

попробуй!


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 03.10.2012, 22:26 | Сообщение # 3
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
еще,

в коде по метке transmit_complete не нужно сохранять SREG !! (это я что ли написал ?!! гм.. глючил наверное... на метку transmit_complete мы попадаем из процедуры старта прерывания и там мы уже SREG сохранили

Code
transmitt_complete:   ; КОД ДЛЯ ОТКЛЮЧЕНИЯ ПРЕРЫВАНИЙ   

; ниже код не нужен !!!
;    in temp,SREG   ; сохраняем "SREG" ???????????????????????????????????????????????????????????
;    push temp
; вот до сюда не нужен !


если указанный выше код оставить то нормального возврата из прерываний нам не увидеть как своих ушей !

ТАК! это сохранение SREG точно не я делал !!! зачем ты его везде добавил ?!! мы сохранили его при входе в прерывание !!! больше нигде сохранять не нужно !!! иначе ты не выйдешь из прерывания в то место откуда ушел !!!


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 03.10.2012, 22:32 | Сообщение # 4
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
вывод OC1A установить в "0" лучше таким кодом (это 104 страница даташита на 2313

Code
ldi R16 , (1<<COM1A1)|(0<<COM1A0) ; установка вывода OC1A=0
out TCCR1A , R16

ldi R16 , (1<<COM1A1)|(0<<COM1A0)|(1<<FOC1A)
out TCCR1A , R16


и вставить это нужно в блок после метки transmit_complete вместо кода
Code

  ldi Temp,0b00000000  ; выводим на передатчик лог_0 ????????????????????????????????????????????????
   out portB,Temp   


то есть мы в "0" устанавливаем не вывод параллельного порта B, а вывод таймера OC1A


Виталий (аka ВитГо)
 
uwrteyДата: Среда, 03.10.2012, 23:48 | Сообщение # 5
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
Quote
это я что ли написал ?!! гм.. глючил наверное... на метку transmit_complete мы попадаем из процедуры старта прерывания и там мы уже SREG сохранили

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

Quote
то есть мы в "0" устанавливаем не вывод параллельного порта B, а вывод таймера OC1A

теперь ясно!

и еще

;*******************************; установка вывода OC1A=0

ldi R16,(1<<COM1A1)|(0<<COM1A0) ; Очистить OC1A/OC1B по совпадению (указан выход на низком уровне).
out TCCR1A,R16

ldi R16,(1<<COM1A1)|(0<<COM1A0)|(1<<FOC1A) ; этот участок кода за что отвечает ????
out TCCR1A,R16
;*********************************************

и ни чего, что (1<<FOC1A) находится в регистре TCCR1C ??????? стр 108 датащита http://www.promelec.ru/pdf/ATTINY2313.pdf
(что то тут я запутался....)
Прикрепления: transmitt1.6.asm(11Kb)


что то я не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Среда, 03.10.2012, 23:51
 
ВитГоДата: Четверг, 04.10.2012, 05:29 | Сообщение # 6
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
Quote (uwrtey)
и ни чего, что (1<<FOC1A) находится в регистре TCCR1C ???????


опс! конечно "чего"!!!!
значит вторая запись в TCCR1C ! (в 32ой меге этот бит в TCCR1A :-( - хорошо что ты за мной проверяешь ! biggrin

по коду

Code
; этот код определяет состояние в которое нужно установить O1A
ldi R16,(1<<COM1A1)|(0<<COM1A0) ; Очистить OC1A/OC1B по совпадению (указан выход на низком уровне).
out TCCR1A,R16
; а этот код устанавливает
ldi R16,(1<<FOC1A) ; этот участок кода за что отвечает ????
out TCCR1С,R16


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 04.10.2012, 11:45 | Сообщение # 7
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
Quote
; а этот код служит для принудительного изменения состояния выходов OC1A и OC1B.
ldi R16,(1<<FOC1A)
out TCCR1С,R16


ну тогда совсем не понятно..............

( смотрим страницу 108 датащита)
вот гугл перевод
Quote

FOC1A/FOC1B биты активны только при WGM13: 0 бит определяет не-PWM
режиме. Тем не менее, для обеспечения совместимости с будущими устройствами, эти биты должны быть установлены в
нуль, когда TCCR1A написана при работе в режиме ШИМ. При написании логических
один FOC1A/FOC1B немного, немедленно матч сравнения вынужден на осциллограмме
Поколение устройства.Выход OC1A/OC1B изменяется в соответствии с ее COM1x1: 0 биты
установки. Обратите внимание, что FOC1A/FOC1B бит реализованы в виде вспышек. Поэтому
Значение присутствует в COM1x1: 0 биты, которые определяют влияние вынуждены сравнивать.
стробоскоп FOC1A/FOC1B не будет генерировать любое прерывание не будет очищено, таймер в Чистом
Таймера по совпадению (CTC) режиме с использованием OCR1A как TOP.
FOC1A/FOC1B биты всегда читаются как ноль.


интересует эта строка FOC1A/FOC1B биты активны только при WGM13

теперь идем смотреть таблицу на страннице 106 из датащита
в нашем режиме CTC (4 строка) WGM13 очищен в нуль
но есть еще один режим CTC (12 строка) но у него в TOP ICR1, а не OCR1A


что то я не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Четверг, 04.10.2012, 12:50
 
uwrteyДата: Четверг, 04.10.2012, 14:06 | Сообщение # 8
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
решил попробовать...
Code
    ;+++++++++++++++++++++++++++++++++++ установка вывода OC1A=0   

   ldi R16,(1<<COM1A1)|(0<<COM1A0)    ; (то есть мы в "0" устанавливаем не вывод параллельного порта B, а вывод таймера OC1A)
   out TCCR1A,R16

   ldi R16,(1<<FOC1A)  ; принудительно изменить состояние выходов OC1A и OC1B!!!
   out TCCR1C,R16   
   ;+++++++++++++++++++++++++++++++++++

при нажатии одной из кнопок генерятся импульсы длиной около 3,5 мили секунд, и паузы длиной около 13 мили секунд.
surprised

а должно быть

.EQU ImpLen=0xCE4 ; длина импульса (165 мкс)
.EQU OneLen=0xCE4 ; длина паузы для единицы (165 мкс)
.EQU NulLen=0x19C8 ; длина паузы для нуля (330 мкс)
Прикрепления: 1-6_.zip(23Kb)


что то я не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Четверг, 04.10.2012, 14:28
 
ВитГоДата: Четверг, 04.10.2012, 14:08 | Сообщение # 9
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
смысл такой:
в TCCR1A мы задаем нужное нам состояние выхода, потом в TCCR1C говорим установить вывод в нужное состояние, и потом уже работаем с таймером..
и WGM13 у тебя и будет равен нулю (для CTC top=OCR1A)

сделай новый маленький проект с изменением состояния выхода OC1A и проверь! (я часто проверяю даташит на простых примерах, где только инициализация и потом rjmp указывающий сам на себя) - запускаю и проверяю состояние выводов..


Виталий (аka ВитГо)
 
ВитГоДата: Четверг, 04.10.2012, 14:11 | Сообщение # 10
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
Quote (uwrtey)
при нажатии одной из кнопок генерятся импульсы длиной около 3,5 мили секунд, и паузы длиной около 13 мили секунд.
surprised


вот для того чтобы понять что происходит я и задумал себе сделать цифровой запоминающий осциллограф :-)

сейчас гляну :-)


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 04.10.2012, 21:04 | Сообщение # 11
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
очень жду......

Добавлено (04.10.2012, 21:04)
---------------------------------------------
может я сам попробую сигнал записать с помощью осциллографа из звуковой карты ? там предел 22 килогерца, а у нас максимум 3 кГц....


что то я не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Четверг, 04.10.2012, 20:58
 
ВитГоДата: Четверг, 04.10.2012, 21:30 | Сообщение # 12
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
попробуй!

Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 04.10.2012, 23:12 | Сообщение # 13
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
попробовал программой для записи звука Sony Sound Forge Audio Studio 10.0, но ни фига не ясно ( та же картинка что и на простом осциллографе)
ЗЫ вход у звуковухи закрытый..


что то я не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Четверг, 04.10.2012, 23:14
 
ВитГоДата: Пятница, 05.10.2012, 05:53 | Сообщение # 14
Полковник
Группа: Администраторы
Сообщений: 2428
Репутация: 19
Статус: Offline
кинь мне эту картинку.!

Виталий (аka ВитГо)
 
uwrteyДата: Пятница, 05.10.2012, 22:10 | Сообщение # 15
Полковник
Группа: Администраторы
Сообщений: 2416
Репутация: 9
Статус: Offline
завтра сделаю
уточни только тебя интересует принскрин или звуковой файл ?


что то я не успеваю за своими мыслями......
 
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
Страница 1 из 371233637»
Поиск:


Copyright MyCorp © 2017
Сделать бесплатный сайт с uCoz