sergeus 0 3 февраля, 2008 Опубликовано 3 февраля, 2008 · Жалоба Здравствуйте! Помогите пожалуйста, не могу разобраться с example (hid usb mouse): http://atmel.com/dyn/resources/prod_docume...mouse-1_0_3.zip может кто разобрался, или есть какие-нибудь материалы? И как мне показалось, по дефолту внутренний RC-генератор на 8MHZ отключен(в даташите написано, что подключен), т.к. без внешнего кварца at90usb162 не определялся, а Flip не хотел прошивать. С уважением, Сергей Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба Чем компилируете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeus 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба Чем компилируете? AVRStudio Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 (изменено) · Жалоба AVRStudio .... ну нельзя же не знать названя инструментов которыми вы пользуетесь... зачем заставлять людей играть в угадалки..... avr-gcc входящий в состав WinAVR компилирует неправильный код для AT90USB162 и AT90USB82 контролеров. Он использует инструкции умножения, хотя они не не работают в AT90USB162 и AT90USB82. Или ждите новый WinAVR или попробуйте использовать сборку от klen-на: http://electronix.ru/forum/index.php?showtopic=42167 Анатолий. Изменено 4 февраля, 2008 пользователем aesok Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeus 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба .... ну нельзя же не знать названя инструментов которыми вы пользуетесь... зачем заставлять людей играть в угадалки..... avr-gcc входящий в состав WinAVR компилирует неправильный код для AT90USB162 и AT90USB82 контролеров. Он использует инструкции умножения, хотя они не не работают в AT90USB162 и AT90USB82. Или ждите новый WinAVR или попробуйте использовать сборку от klen-на: http://electronix.ru/forum/index.php?showtopic=42167 Анатолий. Подскажите пожалуйста, поэтому эта программа откомпиленная в WinAVR под at90usb162 работает но "не очень правильно": /*at90usb162 я повесил внешний кварц = 8MHZ (т.к. мне показалось, что внутренний RC - генератор отключен по дефолту), кнопка висит к земле на PD.3 (светодиоды на PB.0 и PB.1) при нажатой кнопке красный светодиод мигает с периодом 10мс, при отпущенной кнопке мигает зелёный с периодом 20мс */ #include <avr/io.h> #include <util/delay.h> #define F_CPU = 8000000; char i; void led (char a){ switch (a){ case 0: // кнопка не нажата { for (i=0; i<200; i++){ PORTB = 0b00000010; // green led _delay_ms(10); PORTB = 0x00; _delay_ms(10); } return 0; }; case 1: // кнопка нажата { for (i=0; i<200; i++){ PORTB = 0b00000001; // red led _delay_ms(5); PORTB = 0x00; _delay_ms(5); } return 0; }; } } void button (void){ if ((PIND & 0b00001000) == 0b00001000) led(0); else led(1); } int main (void){ DDRB = 0xFF; // portb - output PORTB = 0x00; DDRD = 0x00; // all - inpupts PORTD = 0xFF; // all pull up resistors ON while(1) { button(); } } не всё good с количеством циклов for i... (проверял на осциллографе) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба Во первых: #include <avr/io.h> #define F_CPU = 8000000UL; #include <util/delay.h> Во вторых: char i; void led (char a){ .... { for (i=0; i<200; i++){...} .... } Какое максимальное число можно сохранить а веременой типа char? Анатолий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeus 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 (изменено) · Жалоба Во первых: #include <avr/io.h> #define F_CPU = 8000000UL; #include <util/delay.h> Во вторых: char i; void led (char a){ .... { for (i=0; i<200; i++){...} .... } Какое максимальное число можно сохранить а веременой типа char? Анатолий. Спасибо. что означает UL? #include <avr/io.h> #define F_CPU = 8000000UL; #include <util/delay.h> - после правки, как Вы посоветовали, компилятор выдает ошибку: Compiling: led_usb.c ... c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_us': c:/avr/winavr/bin/../avr/include/util/delay.h:106: error: expected expression before '=' token c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_ms': c:/avr/winavr/bin/../avr/include/util/delay.h:131: error: expected expression before '=' token ... make.exe: *** [led_usb.o] Error 1 Насчет сhar: тип char от 0 до 255 (1байт) Изменено 4 февраля, 2008 пользователем sergeus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба что означает UL?Керниган и Ритчи, "Язык программирования С". Книга не настолько большая, чтобы ее тут пересказывали в каждой теме, где упоминается <avr/delay.h>Насколько я знаю, #define F_CPU может располагаться в любой части программы, а компилятор сам поймет, что описано, а что нет.Сам не поймет. Символ должен быть определен до того места, где он будет использован. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба Насчет сhar: тип char от 0 до 255 (1байт) char - (-128).. +127 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeus 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба Керниган и Ритчи, "Язык программирования С". Книга не настолько большая, чтобы ее тут пересказывали в каждой теме, где упоминается <avr/delay.h>Сам не поймет. Символ должен быть определен до того места, где он будет использован. Спасибо за четкие ответы. Скажите пожалуйста тогда почему выдаёт ошибку: Compiling: led_usb.c c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_us': c:/avr/winavr/bin/../avr/include/util/delay.h:106: error: expected expression before '=' token c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_ms': c:/avr/winavr/bin/../avr/include/util/delay.h:131: error: expected expression before '=' token make.exe: *** [led_usb.o] Error 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 (изменено) · Жалоба Насчет сhar: тип char от 0 до 255 (1байт) Строго говоря в языке С три типа char. 1. unsigned char - может принимать значения от 0 до 255. 2. signed char - может принимать значения от -127 до 128. 3. char - в зависимость от реализации компилятора может быть как 'unsigned char' так и 'signed char'. В makefile из приведеного Вами примера код компилируеться с ключем компилятора '-fsigned-char' - тоесть тип 'char' эквивалентен типу 'signed char' и следовательно максимальное значение переменой i равно 128. Вот вы и видете меньше 200 миганий светодиода. 128? Анатолий. Изменено 4 февраля, 2008 пользователем aesok Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeus 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба char - (-128).. +127 точно, я ошибся это unsigned char от 0 до 255, а просто char от -128 до +127 Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 (изменено) · Жалоба Спасибо за четкие ответы. Скажите пожалуйста тогда почему выдаёт ошибку: Compiling: led_usb.c c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_us': c:/avr/winavr/bin/../avr/include/util/delay.h:106: error: expected expression before '=' token c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_ms': c:/avr/winavr/bin/../avr/include/util/delay.h:131: error: expected expression before '=' token make.exe: *** [led_usb.o] Error 1 #define F_CPU = 8000000UL; удалите ; в конце строки Анатолий. Изменено 4 февраля, 2008 пользователем aesok Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeus 0 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба #include <avr/io.h> #define F_CPU = 1000000UL; - когда комментирую эту строку - не выдает ошибку #include <util/delay.h> если не комментировать 2-ую строку, компилятор выдает сообщение об ошибке: Compiling: led_usb.c ... c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_us': c:/avr/winavr/bin/../avr/include/util/delay.h:106: error: expected expression before '=' token c:/avr/winavr/bin/../avr/include/util/delay.h: In function '_delay_ms': c:/avr/winavr/bin/../avr/include/util/delay.h:131: error: expected expression before '=' token led_usb.c: In function 'led': из <util/delay.h> void _delay_us(double __us) { uint8_t __ticks; double __tmp = ((F_CPU) / 3e6) * __us; !!!! эта свмая 106 строка if (__tmp < 1.0) __ticks = 1; else if (__tmp > 255) __ticks = 0; /* i.e. 256 */ else __ticks = (uint8_t)__tmp; _delay_loop_1(__ticks); } ... void _delay_ms(double __ms) { uint16_t __ticks; double __tmp = ((F_CPU) / 4e3) * __ms; !!! а это 131 if (__tmp < 1.0) __ticks = 1; else if (__tmp > 65535) __ticks = 0; /* i.e. 65536 */ else __ticks = (uint16_t)__tmp; _delay_loop_2(__ticks); } Может кто сталкивался с подобной проблемой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 4 февраля, 2008 Опубликовано 4 февраля, 2008 · Жалоба #define F_CPU = 1000000UL; - когда комментирую эту строку - не выдает ошибкуПричитайте K&R, честное слово - очень полезная книжка. #define указывает компилятору сделать в исходном тексте текстовую постановку: заменить F_CPU на то, что написано в #define справа от F_CPU. Авторы библиотеки ожидали, что строка будет выглядеть примерно так: #define F_CPU 1000000UL Без ; и без =. Теперь подумайте, как компилятор должен был отреагировать на получившуюся после вашего определения F_CPU строку: double __tmp = ((= 1000000UL;) / 4e3) * __ms; Вы сами, какое поведение ожидаете от компилятора на такой исходник? А если символ F_CPU не определен в вашем исходном коде, он определяется в delay.h (что мне кажется неправильным) и это как раз и происходит, когда вы коментируете строку в своем файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться