CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
эта конструкция с условным переходом давать шаг 150 нсек при 1 байте
300 при 2х байтах и 600 при 4х
напрашивается конструкция с 16 бит таймером и коррекцией времени перезагрузки
например нужна задержка 100000+ начальная предустановка циклов
это 65536+ 34464 - вторая предустановка таймера . все сложно но теоретических препятствий нет
300 при 2х байтах и 600 при 4х
напрашивается конструкция с 16 бит таймером и коррекцией времени перезагрузки
например нужна задержка 100000+ начальная предустановка циклов
это 65536+ 34464 - вторая предустановка таймера . все сложно но теоретических препятствий нет
ух ты.... показывает
Re: CodeVision AVR в вопросах и ответах
как сделать чтобы 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
невозможно же такты посчитать .
.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
ух ты.... показывает
Re: CodeVision AVR в вопросах и ответах
Ребята подскажите пожалуйста.
Внутренние часы сходят с ума от этого неправильно работает программа, какие надо делители поменять .
Внутренние часы сходят с ума от этого неправильно работает программа, какие надо делители поменять .
Последний раз редактировалось https Пн окт 31, 2016 14:09:13, всего редактировалось 2 раза.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Посмотрите в даташит описания регистров таймеров. В частности, для ATmega168 (оно же 0b100) означает установку делителя в 256. При переходе на большую в 8 раз частоту надо бы и делитель в 8 раз увеличить, чтобы таймеры работали по-прежнему. Но максимум делителя (0b101) позволяет лишь увеличение в 4 раза.
Нужно смотреть, что там в прерывании происходит. Возможно, там сразу же TCNT1x подбрасываются до какого-то значения, чтобы быстрее досчитать до переполнения. Тогда помимо увеличения делителя в 4 раза нужно будет это значение тоже поменять, чтобы досчитывало вдвое дольше - итого получится требуемое 8-кратное замедление. Например, в Вашем случае при TCNT1 = 0xA473 = 42099 до переполнения остаётся 23436 тактов таймера. А нужно x2 = 46872 тактов, значит в прерывании надо выставлять TCNT1 в 65535-46872 = 18663 = 0x48E7
По прочим таймерам тоже надо смотреть их биты CSxx на предмет текущего делителя и его увеличения в 8 раз.
Код: Выделить всё
(1<<CS12) | (0<<CS11) | (0<<CS10)Нужно смотреть, что там в прерывании происходит. Возможно, там сразу же TCNT1x подбрасываются до какого-то значения, чтобы быстрее досчитать до переполнения. Тогда помимо увеличения делителя в 4 раза нужно будет это значение тоже поменять, чтобы досчитывало вдвое дольше - итого получится требуемое 8-кратное замедление. Например, в Вашем случае при TCNT1 = 0xA473 = 42099 до переполнения остаётся 23436 тактов таймера. А нужно x2 = 46872 тактов, значит в прерывании надо выставлять TCNT1 в 65535-46872 = 18663 = 0x48E7
По прочим таймерам тоже надо смотреть их биты CSxx на предмет текущего делителя и его увеличения в 8 раз.
Re: CodeVision AVR в вопросах и ответах
А нужно ли трогать TCCR0B это ведь тоже делитель, если здесь сделать 0x04 то получится как раз увеличение в 8 раз?
Последний раз редактировалось https Пн окт 31, 2016 14:08:35, всего редактировалось 1 раз.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну я же написал, что надо по другим таймерам тоже делители смотреть. Да, 0x02 => 0x04 для Timer0 как раз повысит делитель в 8 раз. Но я бы лучше пользовался битами вида (1<<CS02), как и для первого. Так код более читабелен и портируем.
- SIV
- Первый раз сказал Мяу!
- Сообщения: 32
- Зарегистрирован: Вт июл 12, 2011 18:37:43
- Откуда: Україна, Львів
Re: CodeVision AVR в вопросах и ответах
Подскажите где скачать CodeVision AVR 1.25.9
Или скажите кто может сбросить на емейл
Или скажите кто может сбросить на емейл
Re: CodeVision AVR в вопросах и ответах
Подскажите.
Есть два массива:
unsigned char ENC_Data[8];
unsigned char ENC_SN[8];
Нужно передать в функцию адреса начала этих массивов. Чтоб можно было в этой функции с ними на ассемблере поколдовать.
Как это сделать? Пример очень приветствуется.
Есть два массива:
unsigned char ENC_Data[8];
unsigned char ENC_SN[8];
Нужно передать в функцию адреса начала этих массивов. Чтоб можно было в этой функции с ними на ассемблере поколдовать.
Как это сделать? Пример очень приветствуется.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
realm писал(а):Как это сделать?
элементарно, азы языка Си
Код: Выделить всё
void my_function(unsigned char *massiv1, unsigned char *massiv2){
// тут ваше колдовство на ассемблере
}
// обращение к этой функции
my_function(ENC_Data, ENC_SN);если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
Так да не так.
К сожалению так пердается не адрес оперативной памяти, иначе он был бы unsigned int, а не unsigned char.
Это не то.
К сожалению так пердается не адрес оперативной памяти, иначе он был бы unsigned int, а не unsigned char.
Это не то.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
может вам начать с чтения книг по языку Си? а то не понятно, откуда вы набрались своих знаний...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 в вопросах и ответах
Указатель всегда адрес и другого быть не может.
Re: CodeVision AVR в вопросах и ответах
ARV писал(а):учите матчасть
Неее спасибо. Моя язык паскаль. На С только в оооочень оооочень редких случаях и если ооочень сильно попросят.
Даже вникать не хочу в тонкости avrовского языка у которого однобайтовые переменные резко в двухбайтовые превращаются, а Int с какого-то перепуга 2-х байтный.
Последний раз редактировалось realm Вт ноя 08, 2016 08:29:03, всего редактировалось 1 раз.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
хозяин - барин, как говорится.realm писал(а):Даже вникать не хочу в тонкости языка у которого однобайтовые переменные резко в двухбайтовые превращаются
в приведенном мною выше примере нет никаких однобайтных переменных (я о параметрах функции, через который вы хотели бы получить адрес начала массивов).
и боюсь вас огорчить: в паскале неявное преобразование типов постоянно и непрерывно происходит... а тот факт, что вы об этом не в курсе, лишь говорит о вашем уровне неуча.
Последний раз редактировалось ARV Вт ноя 08, 2016 08:29:48, всего редактировалось 2 раза.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Никто не во что не превращается. Переменная может быть сколько угодно байт, а указатель асегда двухбайтовый (для AVR). Если Вы не различаете переменную и указатель и даже не хотите пытаться это понять - дело Ваше.
Re: CodeVision AVR в вопросах и ответах
ARV писал(а): о вашем уровне неуча.
Уч, неуч... За собой лучше следите.
Добавлено after 8 minutes 44 seconds:
WiseLord писал(а):Никто не во что не превращается.
unsigned char ... ничего не замечаете, не?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
а вы замечаете, что unsigned char * - не?realm писал(а):unsigned char ... ничего не замечаете, не?
само собой. а вам советую зарыться с головой в литературу по программированию.realm писал(а):За собой лучше следите
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ещё один умник пришёл блеснуть знаниями 

Re: CodeVision AVR в вопросах и ответах
В общем нифига эти указатели не работают.
Давайте немного по другому задам вопрос.
Есть два массива:
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. И никак по другому, иначе я на ассемблере с массивами работать не могу.
Есть идеи? В С - шных заморочках я не селен.
Давайте немного по другому задам вопрос.
Есть два массива:
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. И никак по другому, иначе я на ассемблере с массивами работать не могу.
Есть идеи? В С - шных заморочках я не селен.
