Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
23.11.2007, 20:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от retcom
|
Я уже опух. Пожалейте меня!
Я понимаю 2ШИМ, это когда на PD5 - 1 в то время, когда на PD6 - 0.
|
А что у тебя в примере к задаче 8 курса где 2 ШИМ не получается менять ШИМ ???
У меня меняется. И этот же пример на заглавной странице курса рассмотрен.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
23.11.2007, 23:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от retcom
|
Я понимаю 2ШИМ, это когда на PD5 - 1 в то время, когда на PD6 - 0.
|
Неа, неправильно понимаешь. Два ШИМа получаются, в общем случае,
независимо друг от друга. Я же тебе уже говорил - смени OCR0A с нуля на что-нибудь среднее (на 0x80, например) - неужели не приходила мысль в голову, чтобы
получить второй ШИМ-сигнал на втором выходе, сменить OCR0B с 0xFF также на что-нить среднее? Если оба значения будут одинаковыми - будет одинаковая
скважность, разными - разная скважность (при Wave Generation Mode, равном 7 (0b111)). А в твоем изначальном варианте у тебя по одному выводу шёл сигнал со скважностью 0%, а по другому - 100% (процентами пользуюсь с намёком! ), вот ты и видел на одном выводе всегда ноль, а другом - всегда единицу...
В даташите это всё английским по белому прописано... Лень читать, что ли?
Сообщение от avr123-nm-ru
|
...то помочь тебе было бы легче
|
Куда уж легче-то? Чтобы обнаружить грубые ошибки, симулятор не нужен, то есть - напрочь!
-- Прилагается рисунок: --
|
|
|
|
24.11.2007, 03:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Совсем уже сплю - "разная скважность (при Wave Generation Mode, равном 7 (0b111))" - на самом деле все эти рассуждения относятся к Wave Generation Mode, равном 3 (0b011).
Ффсё, спааать!
|
|
|
|
24.11.2007, 09:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
retcom, а ведь у тебя именно седьмая мода генерации включена... смени-ка её на третью! Вот тут - " TCCR0B=0x0D;//00001101" - сбрось бит WGM02: " TCCR0B=0x05;//00000101".
_______________________________
" Сядем retcom, поговорим lat-com...
|
|
|
|
25.11.2007, 21:50
|
|
Вид на жительство
Регистрация: 27.07.2006
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Цитата:
|
Я же тебе уже говорил - смени OCR0A с нуля на что-нибудь среднее (на 0x80, например) - неужели не приходила мысль в голову, чтобы
получить второй ШИМ-сигнал на втором выходе, сменить OCR0B с 0xFF также на что-нить среднее?
|
Из 2ШИМ, OCR0A управляет 1ШИМ, а OCR0B для другого?
Цитата:
|
ведь у тебя именно седьмая мода генерации включена... смени-ка её на третью! Вот тут - "TCCR0B=0x0D;//00001101" - сбрось бит WGM02: "TCCR0B=0x05;//00000101".
|
Не успел еще сделать, завтра сделаю.
Более-менее разобрался, огромное спасибо. Отдельно хочу поблагодарить tempora, твои советы оказались неоценимы для меня.
У меня осталось еще в этой теме несколько вопросов. Ответьте, пожалуйста, и если можно, также как и раньше отвечали:
Я выставляю начальную частоту генератора 3 686 400 Гц.
Делю пределителем на 1024. Получаю 3600.
Ставлю в ТСNТ0 значение 184, чтоб в итоге частота прерываний была 50 Гц.
1.Вопрос:
На какой частоте совершаются действия в прерывании?
3686400, 3600 или 50 Гц?
//================================================== ==
Для ATmega48, вот такая кодировка:
Код:
|
interrapt()
{
PINB.0 = 1;
} |
Будет выводить в каждом нечетном разе лог. 1, в каждом четном лог. 0.
2.Вопрос:
Как сделать, чтоб значение на выводе PINx, не инвертировалось? Чтоб значение держалось постоянно? Другой контроллер попробовать?
|
|
|
|
25.11.2007, 22:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Для начала скажу, что ты смешал программный и аппаратный ШИМы, а это не одно и то же - программно ты генеришь ШИМ сигнал, переключая выход инструкцией вывода, а аппаратно ты только настраиваешь ШИМ-периферию, а дальше она делает всё сама, а программа может заниматься другими делами.
Сообщение от retcom
|
Из 2ШИМ, OCR0A управляет 1ШИМ, а OCR0B для другого?
|
В режиме WGM=3, так и есть.
Сообщение от retcom
|
1.Вопрос: На какой частоте совершаются действия в прерывании? 3686400, 3600 или 50 Гц?
|
Смотри на блок-схему из даташита - счётчик тактируется от выбранного источника (см. биты CS (ClockSelect) в управляющем регистре TCCRxn), пропущенного через предделитель. По достижении верхнего значения, счетчик сбрасывается в 0 и может сгенерить прерывание по переполнению. То есть, прерывание возникает с частотой Fclck/N_Div/Top. Для 8-битного счетчика Top=255 и сбрасывается он в 0, но период счета можно сократить, если в прерывании, возникшем после сброса счетчика в 0, вписать в счетчик большее начальное значение счета.
[quote="retcom"]
Сообщение от retcom
|
Код:
|
interrupt()
{
PINB.0 = 1;
} |
2.Вопрос: Как сделать, чтоб значение на выводе PINx, не инвертировалось? Чтоб значение держалось постоянно? Другой контроллер попробовать?
|
Если понимать этот вопрос буквально, то сделать это просто - отключить прерывание (или, если оно делает еще что-то полезное, убрать из него инструкцию, перекидывающую пин), сконфигурить пин на выход и вывести в него то значение, которое ты хотел видеть там постоянно. Но сдается мне, ты подразумевал что-то другое.
Если все, чего ты добиваешься, это получение ШИМ-сигнала на выходе, то ты его уже получил аппаратным ШИМом и генерить его ещё и программно, абсолютно незачем. Хуже того - ты же будешь мешать аппаратному ШИМу, записывая что-то из обработчика прерываний в те же пины, в которые пишет аппаратный ШИМ.
В том коде, который ты уже нащупал, нужно-то было только сменить инициализацию WGM'а - писать туда не семерку, а тройку. И всё - никаких прерываний, делай что хочешь другое.
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/25112007/992752.gif" frameborder="0" name="fr5977858" scrolling="yes" width="470" height="509" align="bottom"›[img]nuke/users_images/25112007/992752.gif[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.
‹/IFRAME›
‹/center›
|
|
|
|
26.11.2007, 11:07
|
|
Вид на жительство
Регистрация: 27.07.2006
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Значит в прерывании работа идет на 3600.
Цитата:
|
убрать из него инструкцию, перекидывающую пин
|
Как это делается?
|
|
|
|
26.11.2007, 11:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от retcom
|
Значит в прерывании работа идет на 3600.
|
Нет, я так понимаю, что на 50-ти герцах... точнее - на ста, ведь, чтобы получить 50 единиц и 50 нулей в секунду, твое прерывание должно 100 раз в секунду выполнить инструкцию PINB.0 = 1.
Сообщение от retcom
|
Как это делается?
|
Ну, например, вот так:
Сообщение от tempora исправил то, что retcom
|
interrupt()
{
/* PINB.0 = 1; */
}
|
По-моему, ты не понял моих намеков на необходимость различать аппаратный и программный ШИМ... Различать и не пытаться соединить их на одних и тех же пинах... Ну, что ж, "свои грабли ближе к о лбу", как говорится...
На вот, поиграйся с параметрами времён, посмотри, как оно дышит, попереключайся между WGM0=3 и WGM0=7. Заметь - никаких прерываний нет напрочь!
Код:
|
/************************************************** ***
Project : Fast PWM feature testing
Version : 1.0
Date : 26.11.2007
Author : tempora
Company : na
Comments:
Chip type : ATtiny45
Clock frequency : 8.000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 64
************************************************** ***/
#include ‹tiny45.h›
#include ‹delay.h›
void InitMC( void ){
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Input/Output Ports initialization
PORTB=0x00;
DDRB=0x03;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125.000 kHz
// Mode: Fast PWM top=OCR0A
// OC0A output: Non-Inverted PWM
// OC0B output: Non-Inverted PWM
TCCR0A=0xA3;
//TCCR0B=0x0A; // WGM02 = 1 :: FastPWM, TOP = OCR0A (седьмой режим WGM0)
TCCR0B=0x02; // WGM02 = 0 :: FastPWM, TOP = 0xFF (третий режим WGM0)
TCNT0=0xB8;
OCR0A=0x10;
OCR0B=0x10;
// Timer/Counter 1 initialization - all off
PLLCSR=0x00;
TCCR1=0x00;
GTCCR=0x00;
TCNT1=0x00;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x00;
// INT0: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Universal Serial Interface initialization - Off
USICR=0x00;
// Analog Comparator initialization - Off
ACSR=0x80;
ADCSRB=0x00;
}
void main(void)
{
InitMC();
while (1) {
delay_ms(2000);
OCR0A=0x05;
OCR0B=0x05;
delay_ms(2000);
OCR0A=0xF8;
OCR0B=0xF8;
delay_ms(2000);
OCR0A=0xF8;
OCR0B=0x10;
delay_ms(2000);
OCR0A=0x10;
OCR0B=0xF8;
};
} |
Светодиоды на 5-ю и 6-ю ноги повесь, дааа?!
|
|
|
|
26.11.2007, 14:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Как говорят дамы - проще дать, чем объяснить, почему ты его не хочешь...
|
|
|
|
26.11.2007, 14:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
CVAVR while и таймер
|
kr11507 |
Микроконтроллеры, АЦП, память и т.д |
10 |
13.12.2008 21:29 |
Таймер на 5 часов
|
alecsandr27 |
Автоматика и аппаратура связи |
6 |
11.10.2008 20:25 |
Часы - таймер
|
s5s5 |
Микроконтроллеры, АЦП, память и т.д |
5 |
16.05.2008 11:36 |
Таймер
|
Serq |
Автоматика и аппаратура связи |
18 |
27.11.2007 18:32 |
Таймер
|
dem9968 |
Делимся опытом |
1 |
03.02.2005 09:03 |
Часовой пояс GMT +4, время: 01:49.
|
|