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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

Уже руки опускаются с этих COM портом, интересно, а с USB HID так же тяжело работать, мда, наверно моя панель для авиасимулятора будет долго разрабатываться, хочу сделать панель автопилота с ручками задачи высоты авт. скорости и т.д.
и что бы все значения отображались на индикаторе
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Какие настройки у тебя стоят в Virtual Terminal?
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

Стандартные
Вложения
Безымянный.JPG
(33.88 КБ) 427 скачиваний
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Ну тогда уж, конечно наврядли, но для верности: частоты ядра, установленная при компиляции и выставленная в симуляторе, совпадают?
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
Эиком - электронные компоненты и радиодетали
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

Совпадают в makefile указал F_OSC = 8000000 и в свойствах MK 8Mz
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Это что-то странно. В том то и дело, что если вы передаёте просто символ '0', то он у вас, как я понимаю, правильно принимается, а если i+'0', то всё уходит в какую-то не ту степь, как будто в i число не от 0 до 9, а какое-то там типа 200.
Ну я даже не знаю, попробуйте так, чтоли:
USART_vSendByte((unsigned char)i+'0'); USART_vSendByte((unsigned char)j+'0');
Но вряд ли поможет. :roll:
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

Цифры у меня вообще ни в каком формате не принимаются ни в 0x31 ..... ни в i+'0' ни просто как '0', да и буквы не все принимает нормально, короче вообще ерунда какая-то
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

О чудо, последнее помогло
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

Я кажется понял, где собака зарыта!
в makefile указана скорость 8Mz в свойствах МК указал ради эксперимента 2Mz и в строке
#define USART_UBBR_VALUE ((F_CPU/USART_BAUD/16)-1) поставил F_CPU/USART_BAUD/8
только одного не пойму что за формула и какая блин конечная частота проца будет в реале, там 2 герца указал, тут 8, а там вообще частоту делим на скорость порта делим и на то что в makefile указал. Странно но по другому не работает
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

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

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

OS: openSUSE 13.2 (x86_64)
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

Я пользуюсь WinAVR самым последним, он удобен и прост в обращении.
Есть ли какая-нибудь шняга, которая измеряет частоту работы проца?
судя по формуле и мои значениям для этой формулы реальная скорость передачи получается 600 вместо заявленных 9600?! Так что ли
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Ну WinAVR это он и есть только по Винду. А у меня консоль - тоже проста и удобна в обращении. :)
Кстати, сейчас кое-что подкрутил - заработало. На терминал числа отправляет правильно, но с каким-то мусором. Надо разобраться.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

как мне тогда высчитать, я хочу выйти на скорость 57600 и частоту 12Mz как мне кажетcя самая оптимальная для mega8
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Ну так из даташита формула расчёта значения UBRR выглядит так: UBRR = F_CPU/(16*BAUD) - 1; где BAUD - скорость обмена, F_CPU - частота ядра.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3384
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

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
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение 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 типа игрок включил тумблер и в игре включить какую-нибудь приколюху, типичный джой.
Только вот думаю, как бы профи на моем месте сделал бы, ведь тумблер не кнопка, он постоянно может быть вкл. и что тогда проц должен постоянно посылать на комп сигнал о том что он вкл. это конечно может избавит от каких-нибудь багов, ну мало ли.
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

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

Сообщение SubDia »

Как говорил мне один преподаватель, если соединяешь комп и контроллер, то процессом обмена данными должен управлять комп.
Контроллер по команде должен возвращать данные о состоянии управляющих механизмов. И уж никак не бомбить впустую порт ненужными посылками. Это в качестве информации к размышлению, не как навязчивый совет. :)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение alexey6522 »

Слушай, а можно ли как то записать USART_vSendByte('Hello World'); что бы при компиляции не выдавало ошибок
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

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

Сообщение Satyr »

SubDia писал(а):Как говорил мне один преподаватель, если соединяешь комп и контроллер, то процессом обмена данными должен управлять комп.
Контроллер по команде должен возвращать данные о состоянии управляющих механизмов. И уж никак не бомбить впустую порт ненужными посылками. Это в качестве информации к размышлению, не как навязчивый совет. :)
Это как утвержать, что при секосе женщина всегда должны быть снизу -))
Кто инициатор и в какую сторону зависит от задачи, а не от таких сенсационных аксиом.
А преподы - слушать их надо очень аккуратно. Ведь как правило, знания их очень локальные, при этом и объем практики пренебрежимо мал по сравнению с теорией -))
alexey6522
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

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

Сообщение 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'); //Отправляем данные в порт
}
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»