Как получить инверсный сигнал?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс мар 02, 2008 21:00:28

Сообщение В_и_к_т_о_р »

Здравствуйте всем! Помогите пожалуйста с кодом (ATmega8)

F1:
rcall Delay1

ldi Temp1,$00 ; Заносим значение в регистр OCR1A
out OCR1AH,Temp1
ldi Temp1,$64 ;
out OCR1AL,Temp1

ldi Temp1,$40 ; инициализация таймер/счетчика Т1
out TCCR1A,Temp1 ;Режим СТС "совпадение", Вывод ОС1 подключен
ldi Temp1,$09
out TCCR1B,Temp1


in Temp,PinD ; если нажата кнопка 1 то возврат на F1
sbrs Temp,0 ;
rjmp F1 ;
ldi Temp, 0b00000001 ;выход ОС1 отключен
out TCCR1A, Temp

rcall Delay1
ret

при нажатии на кнопку на выходе ОС1 появляется сигнал. Как получить на другом выходе такой же только инверсный?
Спасибо!
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

а ДШ почитать?
проблемы с аглицким? тогда Евстифеев вам в помощь :)))
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс мар 02, 2008 21:00:28

Сообщение В_и_к_т_о_р »

Снова всем ЗДРАСТЕ! Я только начинаю изучать контроллеры и никак не могу найти в книжках и на форумах как сделать чтобы на выходе OC1B был сигнал строго инвертированный по отношению к OC1A. При обычной установке регистров в режим СТС при включении питания эти сигналы получаются то инвертированные, то нет, когда как включится. Помогите кто нибудь чайнику...ПОЖАЛУЙСТА... очень надо...
Спасибо.
IT KT
Аватара пользователя
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33

Сообщение demson »

если переменная типа байт
инверсное = 255 - текущее
в спорах рождается ИСТИНА [AND] flud.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс мар 02, 2008 21:00:28

Сообщение В_и_к_т_о_р »

Ничего не понял... ну чайник я еще...конечно я свою задачу могу решить самым простым способом - поставить обычный инвертор на логике и все, но имея столько свободных ног на контроллере, не хочется этого делать. Я получил на выходе ОС1 - меандр, а как сделать, чтобы на любом другом выходе был точно такой же но инвертированный???
Реклама
IT KT
Аватара пользователя
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33

Сообщение demson »

ну это и есть логика :))
например вывод 1 бит
если на выводе 1 на другой надо поставить 0 то есть (максимальное значение ) - (текущее значение) 1-1 =0

если 8 бит то 2 ^8

255 - 255=0 инвертируем 255
255 - 0 = 255 инвертируем 0
в спорах рождается ИСТИНА [AND] flud.
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс мар 02, 2008 21:00:28

Сообщение В_и_к_т_о_р »

А как это можно реализовать в моем коде? Пока не "въезжаю".
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Сообщение lix »

может быть проще установить соответствующим образом биты COM1A1,СOM1A0,COM1B1 и COM1B0?
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Сообщение lix »

В_и_к_т_о_р, попробуй такой код

Код: Выделить всё

ldi Temp1, 1<<WGM12
out TCCR1B, Temp1 ;установить WGM12 для CTC

ldi Temp1, 1<<COM1A1 | 1<<COM1B1 | 1<<COM1B0 | 1<<FOC1A | 1<<FOC1B;
out TCCR1A, Temp1 ;принудительно сбросили OC1A и установили OC1B

ldi Temp1, 1<<COM1A0 | 1<<COM1B0
out TCCR1A, Temp1 ;менять значение на противоположное при совпадении
его нужно поместить до метки F1. если не заработает попробовать:

Код: Выделить всё

ldi Temp1, 1<<WGM12
out TCCR1B, Temp1 

ldi Temp1, 1<<COM1A1 | 1<<COM1B1 | 1<<COM1B0 
out TCCR1A, Temp1

ldi Temp1, 1<<FOC1A | 1<<FOC1B;
out TCCR1A, Temp1

ldi Temp1, 1<<COM1A0 | 1<<COM1B0
out TCCR1A, Temp1
сам не пробовал и не уверен что правильно :( поэтому 2 варианта.

PS совсем забыл. в ОСR1A и OCR1B надо записывать одинаковые значения.
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс мар 02, 2008 21:00:28

Сообщение В_и_к_т_о_р »

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

Кстати еще есть один вопросик... Есть ли какая нибудь формула для расчета задержек, а то с калькулятором долго получается...
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Сообщение lix »

В_и_к_т_о_р, покажи код
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс мар 02, 2008 21:00:28

Сообщение В_и_к_т_о_р »

Код простейший...

так есть формула расчета задержек или нет?
Вложения
4.ZIP
(25.71 КБ) 146 скачиваний
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»