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

Обсуждаем контроллеры компании Atmel.
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

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

Сообщение 12val12 »

эта конструкция с условным переходом давать шаг 150 нсек при 1 байте
300 при 2х байтах и 600 при 4х

напрашивается конструкция с 16 бит таймером и коррекцией времени перезагрузки
например нужна задержка 100000+ начальная предустановка циклов
это 65536+ 34464 - вторая предустановка таймера . все сложно но теоретических препятствий нет
ух ты.... показывает
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

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

Сообщение 12val12 »

как сделать чтобы CV AVR не раскладывал куски программ в макросы ?
невозможно же такты посчитать .

.MACRO __ADDD1N
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
SBCI R22,BYTE3(-@0)
SBCI R23,BYTE4(-@0)
.ENDM

.MACRO __ADDD2N
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
SBCI R24,BYTE3(-@0)
SBCI R25,BYTE4(-@0)
.ENDM

.MACRO __SUBD1N
SUBI R30,LOW(@0)
SBCI R31,HIGH(@0)
SBCI R22,BYTE3(@0)
SBCI R23,BYTE4(@0)
.ENDM

.MACRO __SUBD2N
SUBI R26,LOW(@0)
SBCI R27,HIGH(@0)
SBCI R24,BYTE3(@0)
SBCI R25,BYTE4(@0)
.ENDM
ух ты.... показывает
https
Родился
Сообщения: 11
Зарегистрирован: Вс окт 30, 2016 21:33:31

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

Сообщение https »

Ребята подскажите пожалуйста.
Внутренние часы сходят с ума от этого неправильно работает программа, какие надо делители поменять .
Последний раз редактировалось https Пн окт 31, 2016 14:09:13, всего редактировалось 2 раза.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Посмотрите в даташит описания регистров таймеров. В частности, для ATmega168

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

(1<<CS12) | (0<<CS11) | (0<<CS10)
(оно же 0b100) означает установку делителя в 256. При переходе на большую в 8 раз частоту надо бы и делитель в 8 раз увеличить, чтобы таймеры работали по-прежнему. Но максимум делителя (0b101) позволяет лишь увеличение в 4 раза.

Нужно смотреть, что там в прерывании происходит. Возможно, там сразу же TCNT1x подбрасываются до какого-то значения, чтобы быстрее досчитать до переполнения. Тогда помимо увеличения делителя в 4 раза нужно будет это значение тоже поменять, чтобы досчитывало вдвое дольше - итого получится требуемое 8-кратное замедление. Например, в Вашем случае при TCNT1 = 0xA473 = 42099 до переполнения остаётся 23436 тактов таймера. А нужно x2 = 46872 тактов, значит в прерывании надо выставлять TCNT1 в 65535-46872 = 18663 = 0x48E7

По прочим таймерам тоже надо смотреть их биты CSxx на предмет текущего делителя и его увеличения в 8 раз.
https
Родился
Сообщения: 11
Зарегистрирован: Вс окт 30, 2016 21:33:31

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

Сообщение https »

А нужно ли трогать TCCR0B это ведь тоже делитель, если здесь сделать 0x04 то получится как раз увеличение в 8 раз?
Последний раз редактировалось https Пн окт 31, 2016 14:08:35, всего редактировалось 1 раз.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Ну я же написал, что надо по другим таймерам тоже делители смотреть. Да, 0x02 => 0x04 для Timer0 как раз повысит делитель в 8 раз. Но я бы лучше пользовался битами вида (1<<CS02), как и для первого. Так код более читабелен и портируем.
Аватара пользователя
SIV
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт июл 12, 2011 18:37:43
Откуда: Україна, Львів

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

Сообщение SIV »

Подскажите где скачать CodeVision AVR 1.25.9
Или скажите кто может сбросить на емейл
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

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

Сообщение 12val12 »

CodeVision AVR 1.25.9
есть куда кинуть
ух ты.... показывает
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение realm »

Подскажите.
Есть два массива:
unsigned char ENC_Data[8];
unsigned char ENC_SN[8];
Нужно передать в функцию адреса начала этих массивов. Чтоб можно было в этой функции с ними на ассемблере поколдовать.
Как это сделать? Пример очень приветствуется.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

realm писал(а):Как это сделать?

элементарно, азы языка Си

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

void my_function(unsigned char *massiv1, unsigned char *massiv2){
   // тут ваше колдовство на ассемблере
}

// обращение к этой функции
   my_function(ENC_Data, ENC_SN);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение realm »

Так да не так.
К сожалению так пердается не адрес оперативной памяти, иначе он был бы unsigned int, а не unsigned char.
Это не то.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

realm писал(а):Это не то
может вам начать с чтения книг по языку Си? а то не понятно, откуда вы набрались своих знаний...
unsigned char * - это указатель. в Си он (во всяком случае для AVR) совпадает по размерности с int, т.е. sizeof(unsigned char *) == sizeof(int)
учите матчасть
Последний раз редактировалось ARV Вт ноя 08, 2016 08:00:49, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Указатель всегда адрес и другого быть не может.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение realm »

ARV писал(а):учите матчасть

Неее спасибо. Моя язык паскаль. На С только в оооочень оооочень редких случаях и если ооочень сильно попросят.
Даже вникать не хочу в тонкости avrовского языка у которого однобайтовые переменные резко в двухбайтовые превращаются, а Int с какого-то перепуга 2-х байтный.
Последний раз редактировалось realm Вт ноя 08, 2016 08:29:03, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

realm писал(а):Даже вникать не хочу в тонкости языка у которого однобайтовые переменные резко в двухбайтовые превращаются
хозяин - барин, как говорится.
в приведенном мною выше примере нет никаких однобайтных переменных (я о параметрах функции, через который вы хотели бы получить адрес начала массивов).

и боюсь вас огорчить: в паскале неявное преобразование типов постоянно и непрерывно происходит... а тот факт, что вы об этом не в курсе, лишь говорит о вашем уровне неуча.
Последний раз редактировалось ARV Вт ноя 08, 2016 08:29:48, всего редактировалось 2 раза.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение WiseLord »

Никто не во что не превращается. Переменная может быть сколько угодно байт, а указатель асегда двухбайтовый (для AVR). Если Вы не различаете переменную и указатель и даже не хотите пытаться это понять - дело Ваше.
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение realm »

ARV писал(а): о вашем уровне неуча.

Уч, неуч... За собой лучше следите.

Добавлено after 8 minutes 44 seconds:
WiseLord писал(а):Никто не во что не превращается.

unsigned char ... ничего не замечаете, не?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

realm писал(а):unsigned char ... ничего не замечаете, не?
а вы замечаете, что unsigned char * - не?

realm писал(а):За собой лучше следите
само собой. а вам советую зарыться с головой в литературу по программированию.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

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

Ещё один умник пришёл блеснуть знаниями :facepalm:
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение realm »

В общем нифига эти указатели не работают.

Давайте немного по другому задам вопрос.

Есть два массива:
unsigned char DES_ENC_Data[8];
unsigned char DES_ENC_SN[8];
И функция:
void tde (unsigned int Data_RAM_Address, unsigned int SN_RAM_Address)
Которая написана на ассемблере.
На входе она должна получить физический адрес нулевой ячейки массивов DES_ENC_Data и DES_ENC_SN. И никак по другому, иначе я на ассемблере с массивами работать не могу.
Есть идеи? В С - шных заморочках я не селен.
Ответить

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