Подскажите Пожалуйста как вывести из МК. звук(тон) на PORTD.7( динамик),так чтобы при нажатии на кнопку PINB.1 в динамике пикнуло(как бы подтверждения нажатия).
Только не надо динамик сразу на ногу контроллера вешать, делайте через транзюк или найдите звукоизлучатель с сопротивлением не менее 100 ом. Пикнуть можно, например, так:
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн май 31, 2010 14:19:52
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
ssvd писал(а):
есть atmega8, хотелось бы запустить один таймер(на внутреннем кристалле) для вывода данных, а часы посадить на таймер2 работающий в асинхронном режиме.
В АТmega8 выводы для подключения кварца к тактовому генератору или к таймеру Т2 - совмещены. Поэтому часовой кварц можно подключить к выводам для внешнего кварца (РВ6, РВ7), а в качестве тактового выбрать внутренний калиброванный RC генератор ячейками CKSEL3...0, если такой режим приемлем.
Последний раз редактировалось ValBag Пн май 31, 2010 14:54:06, всего редактировалось 1 раз.
Подскажите пожалуйста, как можно временно выключить генерацию аппаратного ШИМа МК таким образом, чтобы он как-бы работал (изменял свое состояние если это требуется), но напряжения на выходной ножке не было? Можно просто как-нибудь отключить ножку МК во время работы?
_________________ Не променяю медь на ржавую несгорайку!
Т.е. достаточно в нужном месте программы написать что-то типа DDRB=0x00; (все на вход) и все? Proteus при этом показывает что напряжение все-равно есть, но в два раза ниже... На самом деле все правильно и на ножке не будет напряжения?
_________________ Не променяю медь на ржавую несгорайку!
Ну не обязательно обнулять весь регистр. Работайте с отдельными битами. Насчёт напряжения, возможно, это влияние внешних элементов, либо у вас включена внутренняя подтяжка к плюсу, т.е. в соответствующем ноге бите регистра PORTX - единица. А так, если в DDRX и PORTX нули, то нога находится в Z-состоянии и никакого напряжения на ней быть не может.
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн май 31, 2010 18:52:23
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
Upgrader писал(а):
как можно временно выключить генерацию аппаратного ШИМа МК таким образом, чтобы он как-бы работал (изменял свое состояние если это требуется), но напряжения на выходной ножке не было?
Еще вариант: обнулить биты СОМхх регистра TCCRxx нужного таймера.
Насчёт напряжения, возможно, это влияние внешних элементов, либо у вас включена внутренняя подтяжка к плюсу, т.е. в соответствующем ноге бите регистра PORTX - единица. А так, если в DDRX и PORTX нули, то нога находится в Z-состоянии и никакого напряжения на ней быть не может.
Может быть не надо верить Porteus и он только путает, но я включаю ШИМ тут-же после этого на всякий случай пишу: DDRB=0x00; PORTB=0x00; и смотрю осциллографом в Porteus ногу - вижу на ней работу ШИМа как будто ничего и не менялось.
Пока еще нету в руках реального МК чтобы проверить, но все-равно хотелось бы узнать правильно ли я вообще делаю.
_________________ Не променяю медь на ржавую несгорайку!
Перешел на другой МК Tiny2313 (по причине наличия тут UART), теперь стало две проблемы. Напряжение на ШИМ ножке (именно на этой ножке, PB2) после "DDRB=0x00;" вместо того чтобы исчезнуть - наоборот появляется постоянно. И еще одна проблема... Не получается настроить срабатывание "[EXT_INT0] void ext_int0_isr" и/или "[EXT_INT1] void ext_int1_isr"
Похоже, что таймер в режиме ШИМ жестоко управляет регистрами PORTX. Так что при попытке назначить ногу на вход, с частотой шима начинает включаться и выключаться внутренняя подтяжка. Ранее я не замечал этого, т.к. если нога нагружена, то напряжение сразу просаживается. Так что, следует делать как говорил тов. ValBag, "отключать" ногу от таймера с помощью бита COM регистра TCCR. В вашем случаи, это будет выглядеть как TCCR0A&=0x80; для выключения и TCCR0A|=0x80; для включения. ЗЫ: Почитайте про дефайны(define), некрасиво заводить функцию ради пары операций: #define PwmOff() TCCR0A&=0x80; #define PwmOn() TCCR0A|=0x80;
А что не получается? Выводы INT0 и INT1 сконфигурированы как выходы и с низким уровнем. По заданным условиям они должны постоянно вызывать прерывания. Одно из них обрабатывается, а другое - вход и выход.
Я не совсем разобрался с таймерами... Мне просто нужно прерывание с определенной частотой (1000 Гц), изменял настройки по всякому, а у меня этого не происходит. (Хотя на Tiny44 работало.)
_________________ Не променяю медь на ржавую несгорайку!
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср июн 02, 2010 04:53:15
Потрогал лапой паяльник
Зарегистрирован: Сб сен 06, 2008 12:56:13 Сообщений: 326
Рейтинг сообщения:0
Upgrader писал(а):
Мне просто нужно прерывание с определенной частотой (1000 Гц)
Можно выбрать таймер1, режим СТС. Тактовую частоту поделить 8000000/8 и в OCR1A задать порог совпадения 1000, а изменение сигнала на выводе ОС1А - на противоположное при каждом совпадении. Прерывания будут возникать с частотой 1000 Гц, а на выводе OC1A частота меандра составит 500 Гц.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения