Страница 161 из 421

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт дек 13, 2011 15:02:24
ankrish
я прошиваю Atmega8, Сom port3 выбран в настройках и программатор тоже в cjm3

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт дек 13, 2011 15:10:53
ankrish
может, я, что-то не так делаю???

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт дек 13, 2011 15:19:17
BerZerK-ku
Чей-то не хочется мне делать программатор и ставить CV чтобы узнать так или нет :)
Попробуйте прошить из AVR Studio, увидит AVRprog ваш программатор или нет.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт дек 13, 2011 15:26:39
ankrish
я уже столько пререпробывал...
я бы програмировал например родной программой, которая входила в комплект с драйверами, но там нету некоторых фьюзов, может есть решение?
программа Avr910Usb_Prog

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт дек 13, 2011 15:35:14
ankrish
усё здаюся... :facepalm: ...
программирование, видно- это не моё...

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт дек 13, 2011 18:31:12
Patrick
Фуух...Все, сам разобрался. Всем спасибо за моральную поддержку. :beer:

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 01:04:44
totty
Добрый вечер, подскажите как для CW будет звучать данная строчка?

while ((ADCSRA&_BV(ADIF))==0x00) //Дождатся окончания преобразования

заранее благодарен :)
речь идет об АЦП меги 8

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 05:22:37
BerZerK-ku
Добавьте в начало файла или заголовочный файл такую строку:

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

#define _BV(a) (1 << a)

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 07:18:26
Мастер Ломастер
BerZerK-ku писал(а):Добавьте в начало файла или заголовочный файл такую строку:

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

#define _BV(a) (1 << a)
правильнее так:

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

#define _BV(a) (1 << (a))

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 07:55:42
BerZerK-ku
:)) почему же правильнее? Чем работа дефайнов будет отличаться в приведенном примере?
Да и что надо туда пихать, чтобы понадобилась такая перестраховка ?!
ankrish писал(а):усё здаюся... :facepalm: ...
программирование, видно- это не моё...
Нашел макетку USB девайса, перекинул пару проводков, получил программатор. Поставил дрова, получил порт COM3. Запустил AVR Studio , в ней "Tools->AVR Prog..." заработало сразу )

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 17:13:28
totty
Спасибо, а вот если так while (ADCSRA.4==1)
вроде работает но правильно ли компилятор понимает такую запись?
в описании бит ADIF имеет 4 номер
#define _BV(a) (1 << a)
что это вообще значит (я про эту конструкцию _BV(a) (1 << a) ) ? установить бит в единицу?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 17:21:29
BerZerK-ku
ADIF это тоже дефайн.
Директива #define используется для подмены констант, строк и т.д.

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

#define _BV(a) (1 << a)
PORTB = _BV(4);
подменяется на такое выражение:

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

PORTB = (1 << 4)
, что равнозначно

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

PORTB = 0x10
Если ваш компилятор не ругается на подобную запись

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

ADCSRA.4==1
, то конечно можно.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 17:26:14
SubDia
totty писал(а):что это вообще значит (я про эту конструкцию _BV(a) (1 << a) ) ? установить бит в единицу?
Да. Этот макрос, позаимствованный из WinAVR, устанавливает бит a в единицу. Точнее, макрос создает число с установленным битом a в единицу. Таким образом, можно производить установку или сброс с помощью битовых операций.

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

#define CLK 4       //PF4
#define DATA 5      //PF5
//------------------------
PORTF &= ~_BV(CLK);     //сбросить бит CLK (4-й бит) порта F
PORTF |= _BV(DATA);     //установить бит DATA (5-й бит) порта F

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 17:53:28
ankrish
BerZerK-ku , а можете описать вообще все ваши действия от начала до конца, начиня с открытия программы CodeVisionAVR ???

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 18:22:11
BerZerK-ku
Можно, во-первых я его не устанавливал, а во-вторых не запускал :))
Проверял в AVR Studio.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 18:37:37
totty
ADIF это тоже дефайн.
это не одно и тоже, ADIF это флаг регистра, указывающий что работа АЦП завершена :)

Всем спаибо за ответы :))

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 18:40:01
ankrish
BerZerK-ku писал(а):Можно, во-первых я его не устанавливал, а во-вторых не запускал :))
Проверял в AVR Studio.
а ну да :)) ,

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 18:43:53
SubDia
totty писал(а):это не одно и тоже, ADIF это флаг регистра, указывающий что работа АЦП завершена
:))) :))) :)))
BerZerK-ku имел в виду, что биту под номером 4 было присвоено имя ADIF с помощью директивы #define.

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

#define ADIF 4
- для удобочитаемости кода. Если же мы не напишем в хидере вышеприведенной строки, то препроцессор просто пошлет нас гулять лесом вместе со своим ADIFом. =)
Причем даже если я установлю бит ADIF в любом регистре, совершенно не имеющем отношения к АЦП, то компилятор ко мне претензий иметь не будет никаких, и бит в нужный момент будет устанавливаться.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 18:52:25
Мастер Ломастер
BerZerK-ku писал(а)::)) почему же правильнее? Чем работа дефайнов будет отличаться в приведенном примере?
как говорится, чтобы понять, почувствуйте разницу:

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

#define your_variant(x) (1<<x)
#define my_variant(x) (1<<(x))
int i = 2;
int your_result = your_variant(5+i);
int my_result = my_variant(5+i);
сравните оба результата

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср дек 14, 2011 19:03:59
BerZerK-ku
А вы проверяли результат перед тем как это написать? Может это вас удивит, но оба варианта дают один результат :))
Может сами догадаетесь почему?