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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

ЗЫ: Хотя, есть такой коэффициент, и он равен нулю. Зависимости не будет вообще никакой :))
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

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

Сообщение levaclaus »

Аlex писал(а):
levaclaus писал(а):есть число "б", которое прямо пропорционально зависит от "а"
levaclaus писал(а): чтобы "б" не было зависимо от "а"
Это как ? Одно противоречит другому :))

а это так, к примеру "а" изменилось на величину "х" допустим равную -10db, "б" соответственно изменится тоже на -10 db. Зная это можно домножить "б" на 1,12 в степени "х", в случае если "х"==0, "а"="б" . В результате получим "б", не зависящую от ослабления "а". Но что-то атмега16 не очень резво степень считает.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

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

Сообщение misterkuk »

Подскажите.

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

int time;
time=32/31250;

Результат деления НОЛЬ. почему не 0.001024? Что я не так делаю.?
Аватара пользователя
ua1arn
Встал на лапы
Сообщения: 81
Зарегистрирован: Вт май 08, 2012 23:15:45
Откуда: Санкт - Петербург

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

Сообщение ua1arn »

потому что int - т.е., переменная целого типа. Да и делитель с делимым тоже целые.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

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

Сообщение misterkuk »

ua1arn писал(а):потому что int - т.е., переменная целого типа. Да и делитель с делимым тоже целые.

То есть мне переменную объявить как float? а делить не на 31250, а на 31250.0? но так всё равно не работает. Подскажите запись.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

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

float time;
time = 32.0/31250;
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Коты. помогите глупому:
периодически сталкиваюсь с тем, что не могу скомпилировать код, в котором есть большой массив. раньше просто разбивал на более мелкие, но сейчас лень. Как можно исправить?
Изображение
(пишет что пропущено "," в третьей строке массива)
Последний раз редактировалось 0867532 Сб сен 27, 2014 20:35:56, всего редактировалось 1 раз.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Что-то картинка слишком большая, всё на столько отлично видно, что глаза аж разбегаются :)
ЗЫ: А файл с кодом выложить никак ? :)
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

тут массив немного подрезан, но ошибка та же
P.S. ну это так img.radiokot сжимает
P.P.S. только нормально инициализировал чип, а данные не могу в него загнать
EDIT: Ясно, не учел размер флешки
Вложения
sta013code.zip
(122.83 КБ) 173 скачивания
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Аlex писал(а):Что-то картинка слишком большая, всё на столько отлично видно, что глаза аж разбегаются :)

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

http://img.radiokot.ru/files/88152/medium/gg6j1enil.png

Убираете medium из ссылки и видите полную картинку (аналогично ссылка с /thumbnail/ - это то, что в посте видно)
Хотя по хорошему это сделать должен был тот, кто ссылку с картинкой в пост выкладывает.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

0867532 писал(а):P.P.S. только нормально инициализировал чип, а данные не могу в него загнать
EDIT: Ясно, не учел размер флешки


Да у вас просто индийский код.

Программу уж точно нужно оптимизировать.

Ну или контроллер по старше... Вам уже решать
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Я просто, в первый раз инициализировал этот чип. Нужно было понять работает хоть чуть-чуть, или нет. Если интересно - то звук появился, но обрывисто. Думаю AtMega32@1MHz просто не успевает, да и кусок файла размером в 30kB довольно короткий. Конечно, теперь буду пробовать на AtMega128@20MHz с SDкартой и прочими плюхами.
Paha100
Родился
Сообщения: 13
Зарегистрирован: Вс апр 25, 2010 20:45:03

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

Сообщение Paha100 »

В Си не особо. Подскажите что делает эта строка?

PORTB=255-(1<<byte1);b1=PINA;

Спасибо
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Paha100 писал(а):что делает эта строка?
http://www.c-cpp.ru/books/bitovye-operatory
Paha100
Родился
Сообщения: 13
Зарегистрирован: Вс апр 25, 2010 20:45:03

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

Сообщение Paha100 »

За то что послали на изучение битовых операций спасибо.
переменная byte1 как битовая
понятно что в эту переменную записывается 1, представлено 1<<byte1
а что делает именно вот это 255-
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

а что делает именно вот это 255-

По всему видимому, вычитает. :dont_know:
переменная byte1 как битовая
понятно что в эту переменную записывается 1, представлено 1<<byte1

в byte1 ничего не записывается. Скорее всего, это вообще числовая константа, а не переменная.
Fucking static initialization order fiasco
Paha100
Родился
Сообщения: 13
Зарегистрирован: Вс апр 25, 2010 20:45:03

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

Сообщение Paha100 »

Вот более полный код
Читает с внешнего регистра 32 бит данные побайтно.
b1, b2,b3,b4 соотв байты
а byte1 и т.д. это для управления регистром какой байт читать, привязаны к ногам МК

но почему PORTB=255-(1<<byte1) так записано, это и смутило.

#define byte1 PB4
#define byte2 PB3
#define byte3 PB2
#define byte4 PB1

unsigned long val=123456;
void read(){
unsigned long b4,b3,b2,b1;
PORTB=255-(1<<byte1);b1=PINA;
PORTB=255-(1<<byte2);b2=PINA;
PORTB=255-(1<<byte3);b3=PINA;
PORTB=255-(1<<byte4);b4=PINA;
PORTB=0;PORTB=255;//RESET
val=b1+b2*256+b3*65536+b4*16777216; // ad 'em up
val=val/3355;
}
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

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

Сообщение Pink-Pank »

автор таким образом задал инверсию. Регистр, видимо, работает по входу на обратной логике. Активный 0 - выбор байта.

255-(1<<byte1) == ~(1<<byte1)
Fucking static initialization order fiasco
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Paha100 писал(а):#define byte1 PB4
#define byte2 PB3
#define byte3 PB2
#define byte4 PB1

unsigned long val=123456;
void read(){
unsigned long b4,b3,b2,b1;
PORTB=255-(1<<byte1);b1=PINA;
PORTB=255-(1<<byte2);b2=PINA;
PORTB=255-(1<<byte3);b3=PINA;
PORTB=255-(1<<byte4);b4=PINA;
PORTB=0;PORTB=255;//RESET
val=b1+b2*256+b3*65536+b4*16777216; // ad 'em up
val=val/3355;
}
Ужасный код :facepalm:
Зачем b4,b3,b2,b1 - long, если в них читается 8-ми битный порт ? Да ещё и такие бешеные умножения... А всё ради того, чтобы уложить 4 байта в long-переменную...

Хотя бы как-нибудь так:

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

void read(){
        union{ unsigned char b[4]; unsigned long l; }val_tmp;

        PORTB=~(1<<byte1);val_tmp.b[0]=PINA;
        PORTB=~(1<<byte2);val_tmp.b[1]=PINA;
        PORTB=~(1<<byte3);val_tmp.b[2]=PINA;
        PORTB=~(1<<byte4);val_tmp.b[3]=PINA;
        PORTB=0;PORTB=255;//RESET

        val=val_tmp.l/3355;
}
Paha100
Родился
Сообщения: 13
Зарегистрирован: Вс апр 25, 2010 20:45:03

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

Сообщение Paha100 »

Аlex писал(а):Ужасный код :facepalm:


К счастью не мой ))
На просторах интернета найден.
Ваш читается с ходу, даже с моими сильно поверхностными знаниями Си.
Ответить

Вернуться в «AVR»