Страница 2 из 3

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 20:49:50
alexey6522
Уже руки опускаются с этих COM портом, интересно, а с USB HID так же тяжело работать, мда, наверно моя панель для авиасимулятора будет долго разрабатываться, хочу сделать панель автопилота с ручками задачи высоты авт. скорости и т.д.
и что бы все значения отображались на индикаторе

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 20:52:57
IfoR
Какие настройки у тебя стоят в Virtual Terminal?

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 20:56:57
alexey6522
Стандартные

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:00:44
IfoR
Ну тогда уж, конечно наврядли, но для верности: частоты ядра, установленная при компиляции и выставленная в симуляторе, совпадают?

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:08:16
alexey6522
Совпадают в makefile указал F_OSC = 8000000 и в свойствах MK 8Mz

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:15:26
IfoR
Это что-то странно. В том то и дело, что если вы передаёте просто символ '0', то он у вас, как я понимаю, правильно принимается, а если i+'0', то всё уходит в какую-то не ту степь, как будто в i число не от 0 до 9, а какое-то там типа 200.
Ну я даже не знаю, попробуйте так, чтоли:
USART_vSendByte((unsigned char)i+'0'); USART_vSendByte((unsigned char)j+'0');
Но вряд ли поможет. :roll:

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:22:39
alexey6522
Цифры у меня вообще ни в каком формате не принимаются ни в 0x31 ..... ни в i+'0' ни просто как '0', да и буквы не все принимает нормально, короче вообще ерунда какая-то

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:25:25
alexey6522
О чудо, последнее помогло

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:34:55
alexey6522
Я кажется понял, где собака зарыта!
в makefile указана скорость 8Mz в свойствах МК указал ради эксперимента 2Mz и в строке
#define USART_UBBR_VALUE ((F_CPU/USART_BAUD/16)-1) поставил F_CPU/USART_BAUD/8
только одного не пойму что за формула и какая блин конечная частота проца будет в реале, там 2 герца указал, тут 8, а там вообще частоту делим на скорость порта делим и на то что в makefile указал. Странно но по другому не работает

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:40:03
IfoR
Формула эта из даташита на контроллер.
А раз такая шняга пошла, то тогда рекомендую объявить переменные нормальных типов. Для i и j это будет, например, тип char. :)

Кстати, у меня этот код вообще не работает. ^_^ То есть делает кое-что: медленно дергает ногой PD5. Видимо дело в компиляторе. Компилирую avr-gcc.

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:47:06
alexey6522
Я пользуюсь WinAVR самым последним, он удобен и прост в обращении.
Есть ли какая-нибудь шняга, которая измеряет частоту работы проца?
судя по формуле и мои значениям для этой формулы реальная скорость передачи получается 600 вместо заявленных 9600?! Так что ли

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:57:30
IfoR
Ну WinAVR это он и есть только по Винду. А у меня консоль - тоже проста и удобна в обращении. :)
Кстати, сейчас кое-что подкрутил - заработало. На терминал числа отправляет правильно, но с каким-то мусором. Надо разобраться.

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 21:59:18
alexey6522
как мне тогда высчитать, я хочу выйти на скорость 57600 и частоту 12Mz как мне кажетcя самая оптимальная для mega8

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 22:02:41
IfoR
Ну так из даташита формула расчёта значения UBRR выглядит так: UBRR = F_CPU/(16*BAUD) - 1; где BAUD - скорость обмена, F_CPU - частота ядра.

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 23:00:01
Мурик
alexey6522 писал(а):интересно, а с USB HID так же тяжело работать
Нет там все довольно просто.
На предыдущей странице кинул ссылку на статью об USB HID.
Там все довольно подробно описано и приведены примеры программы для микроконтроллера ATmega8, на котором реализовано USB HID устройство и примеры компьютерных программ.
наверно моя панель для авиасимулятора будет долго разрабатываться
Вот похожий девайс на USB HID. http://www.radiokot.ru/forum/viewtopic.php?f=24&t=32313
Посмотрите, может наведет на мысли.

PS.
А вот еще один USB HID девайс на ATmega8 http://www.radiokot.ru/forum/viewtopic.php?f=24&t=35808

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 23:14:04
alexey6522
Окончательно разобрался с ком портом, заменил некоторые строки
//UBRRH = (unsigned char)(USART_UBBR_VALUE>>8);
на
UBRRH=0;
и
//UBRRL = (unsigned char)USART_UBBR_VALUE;
на
UBRRL=0x8; //скорость обмена сост 57600 бод
а
#define USART_BAUD 9600
#define USART_UBBR_VALUE (F_CPU/USART_BAUD/8)-1)
вообще удалил и теперь проц раб на 8Mz и скоростью 57600 макс возможной для эмулятора!
На счет тех самых приборок, я читал про них. Хочется свое, родное с нуля так сказать и потом, там нет опроса каких либо переключателей, а у меня будет, например, теперь я хочу включить тумблер и что бы загорелся светодиод на одном из каналов и в ПК отправить 1 типа игрок включил тумблер и в игре включить какую-нибудь приколюху, типичный джой.
Только вот думаю, как бы профи на моем месте сделал бы, ведь тумблер не кнопка, он постоянно может быть вкл. и что тогда проц должен постоянно посылать на комп сигнал о том что он вкл. это конечно может избавит от каких-нибудь багов, ну мало ли.

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Пт авг 12, 2011 23:52:26
SubDia
Как говорил мне один преподаватель, если соединяешь комп и контроллер, то процессом обмена данными должен управлять комп.
Контроллер по команде должен возвращать данные о состоянии управляющих механизмов. И уж никак не бомбить впустую порт ненужными посылками. Это в качестве информации к размышлению, не как навязчивый совет. :)

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Вс авг 14, 2011 16:07:27
alexey6522
Слушай, а можно ли как то записать USART_vSendByte('Hello World'); что бы при компиляции не выдавало ошибок

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Вс авг 14, 2011 16:27:58
Satyr
SubDia писал(а):Как говорил мне один преподаватель, если соединяешь комп и контроллер, то процессом обмена данными должен управлять комп.
Контроллер по команде должен возвращать данные о состоянии управляющих механизмов. И уж никак не бомбить впустую порт ненужными посылками. Это в качестве информации к размышлению, не как навязчивый совет. :)
Это как утвержать, что при секосе женщина всегда должны быть снизу -))
Кто инициатор и в какую сторону зависит от задачи, а не от таких сенсационных аксиом.
А преподы - слушать их надо очень аккуратно. Ведь как правило, знания их очень локальные, при этом и объем практики пренебрежимо мал по сравнению с теорией -))

Re: WinAVR + Atmega8 = USB устройство

Добавлено: Вс авг 14, 2011 16:32:04
alexey6522
как послать на порт USART_vSendByte('Hello World'); что бы при компиляции не выдавало ошибок, что я пытаюсь послать более одного символа за раз, все равно отправит только тот символ который был последним

Код: Выделить всё

void USART_vInit(void) {
// Set baud rate
UBRRH=0;
UBRRL=0x8; //скорость обмена 9600 бод
// Set frame format to 8 data bits, no parity, 1 stop bit
UCSRC = (0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<URSEL);  //размер слова 8 разрядов
UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //разр. прерыв при приеме, разр приема, разр передачи.
}

void USART_vSendByte(unsigned char u8Data) {
// Wait if a byte is being transmitted
while((UCSRA&(1<<UDRE)) == 0);
// Transmit data
UDR = u8Data;
}

int main(void)
{
// Initialise USART
USART_vInit();
  PORTD=0x00; //Первоначально устанавливаем на всех выходах 0
  DDRD=0xff; //установить PD0-PD2 как выходы
  DDRD&=~_BV(PD0); //устанавливаем PD0 как ввод 
  USART_vSendByte('Hello World'); //Отправляем данные в порт
}