| Автор | 
			Сообщение | 
		
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								| 
									
									
										 [quote="hitalik"][quote="Streetstyle"]Выглядит ужасно !!! :shock: 
  PWM = (int)str;//преобр Как я пнял :crazy:  этим ты хочмш преобразовать строку к примеру "25" в число 25 если да то это ошибка ! Для преобразования строки в число нужна функчия atoi() из библиотеки stdlib.h :cool:[/quote] Вы правы, я всю ночь сидел и думал, и пришол к выводу что ШИМ получает только первый сивол мною переданный, и когда я увидел ваше сообшение всё столо на свой места но atoi() не работает с сиволом ему нужна строка [b]мне нужен буфер как я понял помогите с этим!!![/b][/quote] [b]вам огромное спасибо[/b] Ваше замечание было решающие... 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 15 апр 2012, 01:18 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								| 
									 Streetstyle Спасибо конечно но мне нужно было управлять нагрузкой с пк я уже разобрался 
									
										Streetstyle Спасибо конечно но мне нужно было управлять нагрузкой с пк я уже разобрался 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 15 апр 2012, 01:16 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								| 
									
									
										 Вообщем спасибо всем зделал так и работае изумительно
  [code]void PWM_Transmit()//функция для передачи  OCR1 в ШИМ {    static char * str;//переменная для масива строк    int count = 0;//переменная для количества символов    while (count < 3)//делаем цикл в 3 раза так как моё число не превышает 999 то мне хватает    {      while ( !(UCSRA & (1<<RXC)) ); //ждем пока не будет символа      str=(char*) realloc(str, count); //выделяем память под символ      *(str+count)=UDR;               //пишем полученный символ в масив 	 count++;                       //индексируем масив    }       OCR1B = (int)atoi(str);//в итоге говорим что OCR1B = полученный масив str преобразованный из строчного в числовой (int)atoi(str)    USART_Transmit('j');//так для отладки } int main( void ) //Главная функция {  USART_Init(12); //Скорость соединения  115200 init_PWM();//инсталируем ШИМ while (1)   {      	 if (UDR == 'h')//если получаем h  	     { 		  PWM_Transmit();//то переходим сюда 	     } 	//отправляем  в терминал h511 можно и h001 и получаем на выходе то что и требовалось!!! 		   }   } [/code] Я понимаю что вы будете говорит за всякие буфера и всё такое но мне нужно было чтоб работало быстро и чётко!!! 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 15 апр 2012, 01:13 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								
									Нет вру      Советую писать в CodeVisionAVR там уже встроенны функции для работы со строками и UART, главное разбратся с Help-ом он только на английском  
									
										Нет вру  ;)  Советую писать в CodeVisionAVR там уже встроенны функции для работы со строками и UART, главное разбратся с Help-ом он только на английском 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 14 апр 2012, 20:55 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								
									Больше нечем помоч немогу    
									
										
  
										
										
											| Вложения:  | 
										 
										
											
												
			
				  
				c.zip [113.24 КБ]
			 
			Скачиваний: 1098
		
		 
	 | 
											 
										
										 
									
										Больше нечем помоч немогу :zomg: 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 14 апр 2012, 20:15 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								
									Хотел тебе написать прогу но у самого голова опухла       я тоже новичек в этом деле. Думаю тебя устроит простой вариант :     кнопки a и s прибовляют z и x уменшают    Написано в AVR Studio 5 если будут проблемы с модулем delay.h то надо включит оптимизацию. хотя его можно удалить он сдесь ненужен // DEFINE___________________________________________________________
  #define F_CPU 8000000UL // Скорость мк 8 Мгц
  #define BAUD 9600L
  #define CR 0x13 #define LF 0x10
 
  // INCLUDE__________________________________________________________
  #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h>
 
  // VARIABLES________________________________________________________
  volatile char temp;
 
  // INTERRUPT________________________________________________________
  ISR(USART_RX_vect) { 	temp=UDR; 	switch (temp) 	{ 	case 'a': OCR0A=OCR0A+10; break; 	case 'z': OCR0A=OCR0A-10; break; 	case 's': OCR0B=OCR0B+10; break; 	case 'x': OCR0B=OCR0B-10;  	} }
 
  // INIT FUNCTIONS___________________________________________________
  void port_init(void) { 	DDRB=0xff; 	PORTB=0x00; 	DDRD=0xff; 	PORTD=0x00; }
  void pwm_init(void) // Выводы OC0A и OC0B шим { 	TCCR0A|=_BV(WGM00)|_BV(WGM01)|_BV(COM0B1)|_BV(COM0A1); 	TCCR0B|=_BV(CS02); 	OCR0A=0x00; 	OCR0B=0x00; }
  void usrt_init(void)  // 8bit 1stop NOParity { 	UCSRB|=_BV(RXEN)|_BV(TXEN)|_BV(RXCIE); 	UCSRC|=_BV(UCSZ0)|_BV(UCSZ1); 	UBRRH=(F_CPU/16/BAUD-1)>>8;     UBRRL=(F_CPU/16/BAUD-1)&0xff; 	sei(); }
 
  // FUNCTIONS________________________________________________________
  void usrt_send(char data) { 	while(!(UCSRA&_BV(UDRE))); 	UDR=data; }
 
  // MAIN FUNCTION____________________________________________________
  int main(void) { 	port_init(); 	usrt_init(); 	pwm_init(); 	usrt_send('o'); 	usrt_send('k');     	     while(1)     {             } } 
									
										Хотел тебе написать прогу но у самого голова опухла   :shock:  я тоже новичек в этом деле. Думаю тебя устроит простой вариант :  :crazy:  кнопки a и s прибовляют z и x уменшают ;) 
  Написано в AVR Studio 5 если будут проблемы с модулем delay.h то надо включит оптимизацию. хотя его можно удалить он сдесь ненужен
  [color=#0000BF]// DEFINE___________________________________________________________
  #define F_CPU 8000000UL // Скорость мк 8 Мгц
  #define BAUD 9600L
  #define CR 0x13 #define LF 0x10
 
  // INCLUDE__________________________________________________________
  #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h>
 
  // VARIABLES________________________________________________________
  volatile char temp;
 
  // INTERRUPT________________________________________________________
  ISR(USART_RX_vect) { 	temp=UDR; 	switch (temp) 	{ 	case 'a': OCR0A=OCR0A+10; break; 	case 'z': OCR0A=OCR0A-10; break; 	case 's': OCR0B=OCR0B+10; break; 	case 'x': OCR0B=OCR0B-10;  	} }
 
  // INIT FUNCTIONS___________________________________________________
  void port_init(void) { 	DDRB=0xff; 	PORTB=0x00; 	DDRD=0xff; 	PORTD=0x00; }
  void pwm_init(void) // Выводы OC0A и OC0B шим { 	TCCR0A|=_BV(WGM00)|_BV(WGM01)|_BV(COM0B1)|_BV(COM0A1); 	TCCR0B|=_BV(CS02); 	OCR0A=0x00; 	OCR0B=0x00; }
  void usrt_init(void)  // 8bit 1stop NOParity { 	UCSRB|=_BV(RXEN)|_BV(TXEN)|_BV(RXCIE); 	UCSRC|=_BV(UCSZ0)|_BV(UCSZ1); 	UBRRH=(F_CPU/16/BAUD-1)>>8;     UBRRL=(F_CPU/16/BAUD-1)&0xff; 	sei(); }
 
  // FUNCTIONS________________________________________________________
  void usrt_send(char data) { 	while(!(UCSRA&_BV(UDRE))); 	UDR=data; }
 
  // MAIN FUNCTION____________________________________________________
  int main(void) { 	port_init(); 	usrt_init(); 	pwm_init(); 	usrt_send('o'); 	usrt_send('k');     	     while(1)     {             } }[/color] 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 14 апр 2012, 20:14 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								| 
									 void PutChar(unsigned char sym) {   if (count < SIZE_BUF){   //если в буфере еще есть место       TxBuf[tail] = sym;    //помещаем в него символ       count++;                    //инкрементируем счетчик символов       tail++;                           //и индекс хвоста буфера       if (tail == SIZE_BUF) tail = 0;     } 	  }
  //взять символ из буфера unsigned char GetChar(void) {    unsigned char sym = 0;    if (count > 0){                            //если буфер не пустой       sym = TxBuf[head];              //считываем символ из буфера       count--;                                   //уменьшаем счетчик символов       head++;                                  //инкрементируем индекс головы буфера       if (head == SIZE_BUF) head = 0;    }        return sym;    }
   char * USART_SendStr(void) {  char * str= NULL;  int i=0;   while(count > 0)   {     unsigned char sym;     	sym = GetChar(); 	 	*(str+i)=sym;  	 i++;   }       return str; }
  /////////////////////////////////////////////////// PutChar('5'); while (1)   { 	 	int i = atoi(USART_SendStr()); 	USART_Transmit(i);//получаю не то что должнобыть  	    } Если я ложу в буфер PutChar('5'); И также извлекаю с буфера GetChar() Но как только я хочу сформировать из масива строкку *(str+i)=sym;  Получаю не верное значение!!! 
									
										void PutChar(unsigned char sym) {   if (count < SIZE_BUF){   //если в буфере еще есть место       TxBuf[tail] = sym;    //помещаем в него символ       count++;                    //инкрементируем счетчик символов       tail++;                           //и индекс хвоста буфера       if (tail == SIZE_BUF) tail = 0;     } 	  }
  //взять символ из буфера unsigned char GetChar(void) {    unsigned char sym = 0;    if (count > 0){                            //если буфер не пустой       sym = TxBuf[head];              //считываем символ из буфера       count--;                                   //уменьшаем счетчик символов       head++;                                  //инкрементируем индекс головы буфера       if (head == SIZE_BUF) head = 0;    }        return sym;    }
   char * USART_SendStr(void) {  char * str= NULL;  int i=0;   while(count > 0)   {     unsigned char sym;     	sym = GetChar(); 	 	*(str+i)=sym;  	 i++;   }       return str; }
  /////////////////////////////////////////////////// PutChar('5'); while (1)   { 	 	int i = atoi(USART_SendStr()); 	USART_Transmit(i);//получаю не то что должнобыть  	    } Если я ложу в буфер PutChar('5'); И также извлекаю с буфера GetChar() Но как только я хочу сформировать из масива строкку *(str+i)=sym;  Получаю не верное значение!!! 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 14 апр 2012, 12:05 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								| 
									
									
										 [quote="Streetstyle"]UCSRC = (1<<USBS) | (3<<UCSZ0);   ):\  USART_Transmit( USART_Receive() ); :?  -------------------------------------------- [quote]отправляю 31 прибовляю 1 получаю 32 [/quote] :smile:  :smile:  :smile:  :smile: 
  отправь 99 и получиш 910  :smile:  :smile:  :smile:  :smile:  :smile:  :smile:  :smile:  :smile:  :smile:[/quote] Нет я решил по другому но тут опять не задача  char * USART_SendStr(void) {  char * str= NULL;  int i=0;   while(count > 0)   {     unsigned char sym;     	sym = GetChar();//здесь фенкция извлекает символ  	 	*(str+i)=sym; //НЕ РАБОТАЕТ в str получеается какаето хрень 	 i++;   }       return str; } 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 14 апр 2012, 12:01 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								| 
									
									
										 UCSRC = (1<<USBS) | (3<<UCSZ0);   ):\  USART_Transmit( USART_Receive() ); :?  -------------------------------------------- [quote]отправляю 31 прибовляю 1 получаю 32 [/quote] :smile:  :smile:  :smile:  :smile: 
  отправь 99 и получиш 910  :smile:  :smile:  :smile:  :smile:  :smile:  :smile:  :smile:  :smile:  :smile: 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 13 апр 2012, 19:46 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  | 
			
		
				| 
					
				 | 
				
					
					
						|   | 
						Заголовок сообщения:  | 
						Re: USART PWM | 
						 Цитата | 
					 
					 
				 | 
			
			
				
					
					
						
							
							
								| 
									 char b,a='1';
  b=atoi(a); // b=1  // atoi работает только с числовыми символами, к примеру('1','500','12225') и неработает с ('a','ghg','crap') ----------------------- char b,a='1';  // переменной а присвоено значение 49 из кодовой таблицы asc соответствующее знаку 1
  b=a; // b=49  ----------------------- да тебе нужен буфер для 2вух и более значных чисел. 
									
										char b,a='1';
  b=atoi(a); // b=1  // atoi работает только с числовыми символами, к примеру('1','500','12225') и неработает с ('a','ghg','crap') ----------------------- char b,a='1';  // переменной а присвоено значение 49 из кодовой таблицы asc соответствующее знаку 1
  b=a; // b=49  ----------------------- да тебе нужен буфер для 2вух и более значных чисел. 
									
								 | 
							 
							 
						 | 
					 
					
						
							
							
								 | 
								  | 
								Добавлено: 13 апр 2012, 08:23 | 
							 
							 
						 | 
					 
					 
				 | 
				
			
			
				  |