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

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

Добавлено: Вс июн 05, 2011 18:14:51
DataLife
Может, конечно, но дело уже на принцип пошло.
Растолкуйте на пальцах, пожалуйста (только без среднего).

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

Добавлено: Вс июн 05, 2011 19:14:30
ValBag
DataLife
Поставьте внутреннюю подтяжку: PORTB.3=1;

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

Добавлено: Вс июн 05, 2011 21:07:51
ukw13
DataLife писал(а):Тыкните меня носом в то место, где я не так делаю?

PINB.3=1; - до начала программы, что бы дальнейший цикл не начался раньше времени, подаю на пинБ.3 лог_1.
PORTB=0x00; - все ноги на "выходе", вроде бы как...

Расталкуйте, что тут имеется в виду под подтяжкой? Я что-то запутался.

Голова кругом... не моё это программирование...
SOS! :idea:
Неплохо бы конечно почитать про устройство портов для начала, а то ШИМ, понимаешь..
PINB.3=1; - до начала программы, что бы дальнейший цикл не начался раньше времени, подаю на пинБ.3 лог_1.
Как физически выглядит ваше устройство? Вы можете записывать в ПИНБ.3 все что угодно, но при последующей проверке в цикле значение этого ПИНБ.3 будет определяться уровнями напряжений на нем. Сейчас у вас ПОРТБ.3 в воздухе болтается, вот

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

PORTB=0x00;
DDRB=0x03;
Значит что? А то что состояние Пина непредсказуемо, может быть как единицей, так и нулем в зависимости от погоды и мощности ближайшей радиостанции. Переведите в биты и увидьте что это означает что третий пин порта является входом без подтяжки. Подтяжка - в данном случае имеется ввиду подключение (внутри микроконтроллера) источника питания к выводу порта через некое большое (10К - 100К) сопротивление. Для того чтобы включить подтяжку в режиме работы Пина на вход (у вас DDRB=0x03;, соответственно 0 и 1 пины выход, а 3 и все остальные вход) необходимо записать в соответствующий(третий) Пин порта единицу, PORTB.3=1; Когда подтяжка включена на Пин порта, Пин порта является входом, и если больше ничего к этому Пину не подключено(а если и подключено) то по закону Ома можете прикинуть какой логический уровень будет в Пин? Единица будет.

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

Добавлено: Вт июн 07, 2011 01:49:47
demiurg301
Подскажите пжлст какая реальная скорость программного i2c в CVAVR. Где то читал что можно её увеличить путём уменьшения задержек в скомпиленно коде - мож кто поделится опытом ? - а то я c ASMoм на вы!!!

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

Добавлено: Ср июн 08, 2011 11:55:31
aleksandr88
Подскажите почему вылетает ошибка при определении порта и бита для датчика ds18b20
#asm
.equ __w1_port=0x15; PORTC
.equ __w1_bit=3
#endasm
ОШИБКА "Error(s) occured assembly" появляется вкладка библиотеки 1asm и в ней указывается на строки
.equ __w1_port=0x1B
.equ __w1_bit=0x00
если подключаю к этому порту и биту все фу рычит а другой назначить не могу
библиотека <1wire.h> подключена :cry:

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

Добавлено: Ср июн 08, 2011 12:11:11
*Trigger*
Так напиши там, куда указывает ошибка, то же, что и до этого написал.

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

Добавлено: Ср июн 08, 2011 12:18:43
aleksandr88
я прописываю но после компиляции все значение в 1.asm скидываются на прежние значение .вот скрин

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

Добавлено: Ср июн 08, 2011 12:21:40
*Trigger*
Скрин не видать. Какие вообще библиотеки подключены?

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

Добавлено: Ср июн 08, 2011 12:27:44
aleksandr88
да скрин не хочет грузится(
библиотеки 1wire,delay.h,ds18b20.h,lcd.h,stdio.h и проект подключил автоматом mega16_bits.h,stdarg.h

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

Добавлено: Ср июн 08, 2011 12:47:23
*Trigger*
Если можно дайте пожалуйста код на Си.

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

Добавлено: Ср июн 08, 2011 12:54:01
aleksandr88
вот код держите

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

Добавлено: Ср июн 08, 2011 13:38:48
*Trigger*
Посмотрел, вроде всё правильно... Извините за наглость, но потребовался проект. Попробую скомпилировать.

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

Добавлено: Ср июн 08, 2011 14:01:10
aleksandr88
уф )))) все разрешилось методом научного тыка ))) я ассемблерную вставку просто перенес в самый верх программы
и заработало все. Спасибо вам *Trigger* за оперативность ответа и желание помочь не думал что кто то сразу откликаться на мой вопрос )еще раз спасибо!!!

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

Добавлено: Пн июн 20, 2011 23:34:09
demonchik
КОТЫ!! привет!!! возник вопрос, но поиск по теме ничего не находит, вот я его и задам... есть необходимость передавать в функцию массив по указателю. ДА!!! плевое дело!!! но с передачей строки. а вот с передачей двумерного массива по ссылке уже стало проблемой. пишет что Error: 2.c(68): function argument #1 of type 'unsigned char [10][8]' is incompatible with required parameter of type 'unsigned char *'. как сделать чтоб понял кодвижен. тут есть наверно отступление от стандартов, свойственных данной среде?

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

Добавлено: Вт июн 21, 2011 05:05:39
IfoR
Ну динамический массив описывается как указатель на блок указателей на блок элементов. В таком случае в функцию достаточно было бы вписать параметр

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

unsigned char **X
. Здесь проблем никаких не будет.
Но у вас используется статический массив, который представляется как указатель на одномерный массив, а обращение к элементу осуществляется с помощью высчитывания смещения, учитывая заданные границы массива.
Отсюда вывод: обращаться к матрице так, как вы обращаетесь технически можно, но компилятор вам не даёт это сделать по этическим соображениям. :)
Например, можно так:

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

char M[10][10];

void func(char *X)
{
}

int main()
{
 func( (char *)M ): 

 return 0;
}
Или так:

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

char M[10][10];

void func(void *X)
{
}

int main()
{
 func( M ): 

 return 0;
}
Однако, здесь возникает проблема: А как, не зная размеры матрицы, высчитать смещение? Тогда придется передать функции ещё и размер матрицы и вручную вычислять смещение.
По этому в параметре функции, в общем случае, придётся объявлять опять же статический массив:

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

char M[10][10];

void func(char X[10][10])
{
}

int main()
{
 func( M ): 

 return 0;
}
К слову, первое число в объявлении не обязательно, т.к. оно не участвует в формировании смещения:

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

void func(char X[][10])
Ну а далее по ситуации.

P.S. да, стати, по ссылке массив передавать, ну скажем так, не имеет смысла, т.к. сама конструкция массива уже подразумевает присутствие указателя на этот массив. По этому вычислять ещё один указатель (который будет указывать на указатель на массив) для передачи по ссылке...

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

Добавлено: Вт июн 21, 2011 12:34:37
demonchik
IfoR, спасиб за вразумительное обьяснение!!! понял. :tea: буду идти дальше. вот примонтировал карточку к контроллеру, перенес дисплей на програмный SPI, теперь думаю писать что-то вроде файлового менеджера. СПАСИБ ОГРОМНОЕ ЗА ПОМОЩЬ, IfoR, и всем остальным также, откликавшимся ранее!!!

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

Добавлено: Вт июн 21, 2011 14:07:02
boobonick
Подскажите, плиз, а как копировать ворнинги и ошибки в буфер обмена?

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

Добавлено: Вт июн 21, 2011 14:11:15
*Trigger*
Правой клавишей -> Copy.

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

Добавлено: Вт июн 21, 2011 14:25:01
boobonick
Наверное не там смотрю))

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

Добавлено: Вт июн 21, 2011 14:29:52
*Trigger*
Надо снизе нажимать. В поле Messages.