Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Проблема с аппаратным ШИМ в мега169

Непрочитано 08.07.2010, 23:02  
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию Проблема с аппаратным ШИМ в мега169

Всем добрый день.

Помогите разобраться со следующей проблемой :
Есть необходимость генерировать на ноге контроллера ШИМ сигнал.
С компа передаю число от 0 до 255, где 255 это 100% скважности ШИМ.
ШИП аппаратный на Timer0.
Ниже представленный код работает не верно.
Я не получаю эхо от МК и скважность ШИМ не меняется в процессе работы.
Если же убрать процедуры инициализации ШИМ на Timer0, то отправка и прием числа происходит, эхо-запрос работает.



Код:
int main(void)
{
char data=0;
OSCCAL_calibration(); //процедура калибровки внутреннего генератора по RTC

// Initialize the USART
USARTinit(); Инициализация USART 19200,1 стоповый, нет четности

DDRB =(1‹‹PORTB4); порт будет выходом для ШИМ сигнала


TCCR0A=(1‹‹WGM01)|(1‹‹WGM00)|(1‹‹COM0A1)|(1‹‹CS01); инициализируем timer0 в режиме FastPWM
 OCR0A=125; Значение для сравнения, скважность

for(;;) 
{	
                
if( isCharAvailable() == 1 ) Если получен чар с ПК
 {
  TCCR0A=(1‹‹WGM00)|(1‹‹WGM01)|(0‹‹CS00)|(1‹‹COM0A1); Останавливаем счетчик
  data=receiveChar();
  sendChar(data);     //отправляем на комп, для проверки
  OCR0A=data;         Записываем новое значение для ШИм

  TCCR0A=(1‹‹WGM00)|(1‹‹WGM01)|(1‹‹CS00)|(1‹‹COM0A1); запускаем счетчик
   }
}
 return 0;
}


char isCharAvailable()
{	
// Does the RX0 bit of the USART Status and Control Register
// indicate a char has been received?
if ( (UCSRA & (0x80)) ) return 1;
else return 0;
}

char receiveChar()
{
// Return the char in the UDR0 register
return UDR;
}

void sendChar(char data)
{
int i = 0;
// To send data with the USART put the data in the USART data register 
UDR = data;
 // Check to see if the global interrupts are enabled
 if(SREG & 0x80)
{
// Wait until the byte is sent or we count out
	while ( !(UCSRA&0x40) && (i‹10000) )
{
		i++;
}
}
else  // Wait until the byte is sent
 while( !(UCSRA&0x40) );
// Clear the TXCflag        
UCSRA=UCSRA|0x40;          
}
Реклама:
Archer07 вне форума  
Непрочитано 09.07.2010, 12:38  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Проблема с аппаратным ШИМ в мега169

while ( !(UCSRA&0x40) && (i‹10000) )
Очень странная конструкция. Все равно i оптимизатор выкинет, да и зачем задержка?
Вообще зачем ждать конца передачи непонятно, тем более это просто "эхо".
И UCSRA&0x40 лучше делать как (UCSRA&(1‹‹TXC)) это куда удобнее проверять. Вы так делаете с таймером, почему же UART не повезло?
Попробуйте не останавливать таймер:
Код:
if( isCharAvailable() == 1 ) Если получен чар с ПК
 {
    data=receiveChar();
  sendChar(data);     //отправляем на комп, для проверки
  OCR0A=data;         Записываем новое значение для ШИм
   }
}
 return 0;
}
Зачем проверять включены ли прерывания, если у Вас нет обработчиков?
Отправка байта может быть примерно такой:
Код:
void sendChar(char data)
{
while(!(UCSRA & (1‹‹UDRE)){};
UDR = data;
}
kison вне форума  
Непрочитано 09.07.2010, 15:05  
Archer07
Прописка
 
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Archer07 на пути к лучшему
По умолчанию Re: Проблема с аппаратным ШИМ в мега169

А что значит "оптимизатор i выкинет"?
Archer07 вне форума  
Непрочитано 09.07.2010, 15:40  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Проблема с аппаратным ШИМ в мега169

Сообщение от Archer07 Посмотреть сообщение
А что значит "оптимизатор i выкинет"?
Да то и значит. Какой смысл ему увеличивать переменную, если она не несет никакого смысла? Так что ее сократят и просто будет ждать конца передачи. Причем непонятно зачем.
kison вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HV9961. Проблема с ложными срабатываниями HeatSink Источники питания и свет 16 25.11.2010 20:51
Посоветуйте ШИМ Easyrider83 Информация по радиокомпонентам 19 04.10.2010 14:13
Ищу ШИМ контроллер serb-radio Информация по радиокомпонентам 1 16.02.2010 21:10
не работает ШИМ в контроллере 40inD Proteus 10 11.01.2010 00:22
Регулятор шим для шд5 Pavelrb Автоматика и аппаратура связи 6 27.12.2008 22:34


Часовой пояс GMT +4, время: 03:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.