Свежие обсуждения
Микроконтроллеры

AVR начинающим - вопросы и ответы

1 35 68

cvavr и под вистой работает. Ставил cvavr v.1.25.9, v.2.03.x, v.2.04.0a. Все работали нормально. А какие проблемы? Если после запуска с ошибкой вылетает, то: для версий cvavr v.2.03.x и ниже, необходимо наличие в папке %windir%\system32\drivers файла ioport.sys. После установки, первый (и только) запуск надо выполнить от имени администратора (по правой кнопке мыши доступно, например). Всё. Вообще, если отключить UAC, то многие проблемы бы ушли с совместимостью, а эта и не возникла бы даже. Также желательно располагать папку с cvavr в корневом каталоге диска С:\. А чтобы справка (не только от cvavr-а v.1.xx.x) в hlp-формате открывалась, надо установить обновление kb917607 (600кб) для висты.

 

Спасибо. Однако завелось. От себя добавлю. Ссылка на AVR910 USB программатор драйвер для Висты Protoss_vista_32.zip здесь http://electronix.ru/forum/index.php?showtopic=18676&st=720&p=444519&...

 

Ох, а как с этим Prottossom м_е_д_л_е_н_н_о работать стал программатор CVAVR. Может кто знает как это исправить. Или может быть из-за чего другого.

 

Как int разбить на два charа? Т. е. есть переменная int a. Надо получить переменную char b (старшие разряды) и переменную char c (младшие разряды).
Маской и сдвигом? Или можно проще?

 

union
{unsigned short a;
struct {char c; char b;} aa;
} x;

Обращение x.a - слово, x.aa.c - старший байт, x.aa.b - младший байт. Только нужно уточнить, как в Вашем случае хранятся целые - мой пример для "младшими байтами вперед" (если что - поменяйте местами c и b). Достоинство - не требуется ни одной лишней команды, причем независимо от уровня оптимизации. Для int - аналогично.

 

chav1961, спасибо, но, честно говоря не очень понял.
Мне это нужно для следующего. Есть 16-разрядные переменные. Мне надо их загонять через SPI. SPI естестественно 8-и разрядный. В компиляторе есть готовая функция spi() тоже 8-и разрядная. Т. е надо применить ее дважды. К старшему байту и к младшему. Хотел написать функцию, которой можно было бы передать сразу 16-и разрядное слово и осуществить передачу по SPI .

 

Тогда проще не заморачиваться, а сделать так, как Вы предлагали Можно, конечно, написать что-нибудь наподобие void spi16(int x){spi(x >> 8); spi(x & 0xFF);}, только, IMHO, ценность такой функции минимальна.

 

chav1961: только, IMHO, ценность такой функции минимальна.
Че-то опять не понял. Я же так и хотел сделать, но мне показалось, что что-то тут не того, что для этого есть другие возможности.
chav1961: void spi16(int x){spi(x >> 8); spi(x & 0xFF);}
Почему ценность минимальна? Что сделать, чтобы была максимальна?

 

Zandy: chav1961, спасибо, но, честно говоря не очень понял.
Мне это нужно для следующего. Есть 16-разрядные переменные. Мне надо их загонять через SPI. SPI естестественно 8-и разрядный. В компиляторе есть готовая функция spi() тоже 8-и разрядная. Т. е надо применить ее дважды. К старшему байту и к младшему. Хотел написать функцию, которой можно было бы передать сразу 16-и разрядное слово и осуществить передачу по SPI .

С жк индикатором работаешь ?
16 битную картинку загоняешь ?

 

Ув Zandy, я просто свое IMHO высказал Делайте, конечно. Просто не вижу смысла писать такой переходник, если им в программе от силы пару раз воспользуются