Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 28 мар 2024, 15:10

Часовой пояс: UTC + 3 часа [ Летнее время ]



Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Анти-спам
Анти-спам:
Выполните задание
   

Обзор темы - USART PWM
Автор Сообщение
  Заголовок сообщения:  Re: USART PWM  
Цитата
Сообщение Добавлено: 15 апр 2012, 01:18
  Заголовок сообщения:  Re: USART PWM  
Цитата
Streetstyle
Спасибо конечно но мне нужно было управлять нагрузкой с пк
я уже разобрался
Сообщение Добавлено: 15 апр 2012, 01:16
  Заголовок сообщения:  Re: USART PWM  
Цитата
Сообщение Добавлено: 15 апр 2012, 01:13
  Заголовок сообщения:  Re: USART PWM  
Цитата
Нет вру ;) Советую писать в CodeVisionAVR там уже встроенны функции для работы со строками и UART, главное разбратся с Help-ом он только на английском
Сообщение Добавлено: 14 апр 2012, 20:55
  Заголовок сообщения:  Re: USART PWM  
Цитата
Больше нечем помоч немогу :zomg:


Вложения:
c.zip [113.24 КБ]
Скачиваний: 614
Сообщение Добавлено: 14 апр 2012, 20:15
  Заголовок сообщения:  Re: USART PWM  
Цитата
Хотел тебе написать прогу но у самого голова опухла :shock: я тоже новичек в этом деле.
Думаю тебя устроит простой вариант : :crazy:
кнопки 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)
{

}
}
Сообщение Добавлено: 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;
Получаю не верное значение!!!
Сообщение Добавлено: 14 апр 2012, 12:05
  Заголовок сообщения:  Re: USART PWM  
Цитата
Сообщение Добавлено: 14 апр 2012, 12:01
  Заголовок сообщения:  Re: USART PWM  
Цитата
Сообщение Добавлено: 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вух и более значных чисел.
Сообщение Добавлено: 13 апр 2012, 08:23

Часовой пояс: UTC + 3 часа [ Летнее время ]


Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB