WinAVR + Atmega8 = USB устройство
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
Уже руки опускаются с этих COM портом, интересно, а с USB HID так же тяжело работать, мда, наверно моя панель для авиасимулятора будет долго разрабатываться, хочу сделать панель автопилота с ручками задачи высоты авт. скорости и т.д.
и что бы все значения отображались на индикаторе
и что бы все значения отображались на индикаторе
- Реклама
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: WinAVR + Atmega8 = USB устройство
Какие настройки у тебя стоят в Virtual Terminal?
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: WinAVR + Atmega8 = USB устройство
Ну тогда уж, конечно наврядли, но для верности: частоты ядра, установленная при компиляции и выставленная в симуляторе, совпадают?
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
Совпадают в makefile указал F_OSC = 8000000 и в свойствах MK 8Mz
- Реклама
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: WinAVR + Atmega8 = USB устройство
Это что-то странно. В том то и дело, что если вы передаёте просто символ '0', то он у вас, как я понимаю, правильно принимается, а если i+'0', то всё уходит в какую-то не ту степь, как будто в i число не от 0 до 9, а какое-то там типа 200.
Ну я даже не знаю, попробуйте так, чтоли:
USART_vSendByte((unsigned char)i+'0'); USART_vSendByte((unsigned char)j+'0');
Но вряд ли поможет.
Ну я даже не знаю, попробуйте так, чтоли:
USART_vSendByte((unsigned char)i+'0'); USART_vSendByte((unsigned char)j+'0');
Но вряд ли поможет.
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
Цифры у меня вообще ни в каком формате не принимаются ни в 0x31 ..... ни в i+'0' ни просто как '0', да и буквы не все принимает нормально, короче вообще ерунда какая-то
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
О чудо, последнее помогло
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
Я кажется понял, где собака зарыта!
в makefile указана скорость 8Mz в свойствах МК указал ради эксперимента 2Mz и в строке
#define USART_UBBR_VALUE ((F_CPU/USART_BAUD/16)-1) поставил F_CPU/USART_BAUD/8
только одного не пойму что за формула и какая блин конечная частота проца будет в реале, там 2 герца указал, тут 8, а там вообще частоту делим на скорость порта делим и на то что в makefile указал. Странно но по другому не работает
в 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 устройство
Формула эта из даташита на контроллер.
А раз такая шняга пошла, то тогда рекомендую объявить переменные нормальных типов. Для i и j это будет, например, тип char.
Кстати, у меня этот код вообще не работает. ^_^ То есть делает кое-что: медленно дергает ногой PD5. Видимо дело в компиляторе. Компилирую avr-gcc.
А раз такая шняга пошла, то тогда рекомендую объявить переменные нормальных типов. Для i и j это будет, например, тип char.
Кстати, у меня этот код вообще не работает. ^_^ То есть делает кое-что: медленно дергает ногой PD5. Видимо дело в компиляторе. Компилирую avr-gcc.
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
Я пользуюсь WinAVR самым последним, он удобен и прост в обращении.
Есть ли какая-нибудь шняга, которая измеряет частоту работы проца?
судя по формуле и мои значениям для этой формулы реальная скорость передачи получается 600 вместо заявленных 9600?! Так что ли
Есть ли какая-нибудь шняга, которая измеряет частоту работы проца?
судя по формуле и мои значениям для этой формулы реальная скорость передачи получается 600 вместо заявленных 9600?! Так что ли
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: WinAVR + Atmega8 = USB устройство
Ну WinAVR это он и есть только по Винду. А у меня консоль - тоже проста и удобна в обращении. 
Кстати, сейчас кое-что подкрутил - заработало. На терминал числа отправляет правильно, но с каким-то мусором. Надо разобраться.
Кстати, сейчас кое-что подкрутил - заработало. На терминал числа отправляет правильно, но с каким-то мусором. Надо разобраться.
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
как мне тогда высчитать, я хочу выйти на скорость 57600 и частоту 12Mz как мне кажетcя самая оптимальная для mega8
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: WinAVR + Atmega8 = USB устройство
Ну так из даташита формула расчёта значения UBRR выглядит так: UBRR = F_CPU/(16*BAUD) - 1; где BAUD - скорость обмена, F_CPU - частота ядра.
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 устройство
Окончательно разобрался с ком портом, заменил некоторые строки
//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 типа игрок включил тумблер и в игре включить какую-нибудь приколюху, типичный джой.
Только вот думаю, как бы профи на моем месте сделал бы, ведь тумблер не кнопка, он постоянно может быть вкл. и что тогда проц должен постоянно посылать на комп сигнал о том что он вкл. это конечно может избавит от каких-нибудь багов, ну мало ли.
//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 устройство
Как говорил мне один преподаватель, если соединяешь комп и контроллер, то процессом обмена данными должен управлять комп.
Контроллер по команде должен возвращать данные о состоянии управляющих механизмов. И уж никак не бомбить впустую порт ненужными посылками. Это в качестве информации к размышлению, не как навязчивый совет.
Контроллер по команде должен возвращать данные о состоянии управляющих механизмов. И уж никак не бомбить впустую порт ненужными посылками. Это в качестве информации к размышлению, не как навязчивый совет.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
Слушай, а можно ли как то записать USART_vSendByte('Hello World'); что бы при компиляции не выдавало ошибок
Re: WinAVR + Atmega8 = USB устройство
Это как утвержать, что при секосе женщина всегда должны быть снизу -))SubDia писал(а):Как говорил мне один преподаватель, если соединяешь комп и контроллер, то процессом обмена данными должен управлять комп.
Контроллер по команде должен возвращать данные о состоянии управляющих механизмов. И уж никак не бомбить впустую порт ненужными посылками. Это в качестве информации к размышлению, не как навязчивый совет.
Кто инициатор и в какую сторону зависит от задачи, а не от таких сенсационных аксиом.
А преподы - слушать их надо очень аккуратно. Ведь как правило, знания их очень локальные, при этом и объем практики пренебрежимо мал по сравнению с теорией -))
-
alexey6522
- Встал на лапы
- Сообщения: 149
- Зарегистрирован: Чт июл 28, 2011 18:12:28
Re: WinAVR + Atmega8 = USB устройство
как послать на порт 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'); //Отправляем данные в порт
}



