Страница 369 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт окт 28, 2016 14:55:00
12val12
эта конструкция с условным переходом давать шаг 150 нсек при 1 байте
300 при 2х байтах и 600 при 4х
напрашивается конструкция с 16 бит таймером и коррекцией времени перезагрузки
например нужна задержка 100000+ начальная предустановка циклов
это 65536+ 34464 - вторая предустановка таймера . все сложно но теоретических препятствий нет
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб окт 29, 2016 22:06:04
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
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 31, 2016 10:48:44
https
Ребята подскажите пожалуйста.
Внутренние часы сходят с ума от этого неправильно работает программа, какие надо делители поменять .
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 31, 2016 11:31:52
WiseLord
Посмотрите в даташит описания регистров таймеров. В частности, для ATmega168
(оно же 0b100) означает установку делителя в 256. При переходе на большую в 8 раз частоту надо бы и делитель в 8 раз увеличить, чтобы таймеры работали по-прежнему. Но максимум делителя (0b101) позволяет лишь увеличение в 4 раза.
Нужно смотреть, что там в прерывании происходит. Возможно, там сразу же TCNT1x подбрасываются до какого-то значения, чтобы быстрее досчитать до переполнения. Тогда помимо увеличения делителя в 4 раза нужно будет это значение тоже поменять, чтобы досчитывало вдвое дольше - итого получится требуемое 8-кратное замедление. Например, в Вашем случае при TCNT1 = 0xA473 = 42099 до переполнения остаётся 23436 тактов таймера. А нужно x2 = 46872 тактов, значит в прерывании надо выставлять TCNT1 в 65535-46872 = 18663 = 0x48E7
По прочим таймерам тоже надо смотреть их биты CSxx на предмет текущего делителя и его увеличения в 8 раз.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 31, 2016 11:49:34
https
А нужно ли трогать TCCR0B это ведь тоже делитель, если здесь сделать 0x04 то получится как раз увеличение в 8 раз?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 31, 2016 12:15:19
WiseLord
Ну я же написал, что надо по другим таймерам тоже делители смотреть. Да, 0x02 => 0x04 для Timer0 как раз повысит делитель в 8 раз. Но я бы лучше пользовался битами вида (1<<CS02), как и для первого. Так код более читабелен и портируем.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 01, 2016 21:03:46
SIV
Подскажите где скачать CodeVision AVR 1.25.9
Или скажите кто может сбросить на емейл
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 04, 2016 22:28:33
12val12
CodeVision AVR 1.25.9
есть куда кинуть
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 03:35:54
realm
Подскажите.
Есть два массива:
unsigned char ENC_Data[8];
unsigned char ENC_SN[8];
Нужно передать в функцию адреса начала этих массивов. Чтоб можно было в этой функции с ними на ассемблере поколдовать.
Как это сделать? Пример очень приветствуется.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 06:45:13
ARV
realm писал(а):Как это сделать?
элементарно, азы языка Си
Код: Выделить всё
void my_function(unsigned char *massiv1, unsigned char *massiv2){
// тут ваше колдовство на ассемблере
}
// обращение к этой функции
my_function(ENC_Data, ENC_SN);
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 07:52:45
realm
Так да не так.
К сожалению так пердается не адрес оперативной памяти, иначе он был бы unsigned int, а не unsigned char.
Это не то.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 07:59:06
ARV
realm писал(а):Это не то
может вам начать с чтения книг по языку Си? а то не понятно, откуда вы набрались своих знаний...
unsigned char * - это указатель. в Си он (во всяком случае для AVR) совпадает по размерности с int, т.е.
sizeof(unsigned char *) == sizeof(int)
учите матчасть
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 07:59:50
Z_h_e
Указатель всегда адрес и другого быть не может.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 08:19:47
realm
ARV писал(а):
учите матчасть
Неее спасибо. Моя язык паскаль. На С только в оооочень оооочень редких случаях и если ооочень сильно попросят.
Даже вникать не хочу в тонкости avrовского языка у которого однобайтовые переменные резко в двухбайтовые превращаются, а Int с какого-то перепуга 2-х байтный.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 08:22:56
ARV
realm писал(а):Даже вникать не хочу в тонкости языка у которого однобайтовые переменные резко в двухбайтовые превращаются
хозяин - барин, как говорится.
в приведенном мною выше примере нет никаких однобайтных переменных (я о параметрах функции, через который вы хотели бы получить адрес начала массивов).
и боюсь вас огорчить: в паскале неявное преобразование типов постоянно и непрерывно происходит... а тот факт, что вы об этом не в курсе, лишь говорит о вашем уровне неуча.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 08:25:20
WiseLord
Никто не во что не превращается. Переменная может быть сколько угодно байт, а указатель асегда двухбайтовый (для AVR). Если Вы не различаете переменную и указатель и даже не хотите пытаться это понять - дело Ваше.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 08:48:39
realm
ARV писал(а): о вашем уровне неуча.
Уч, неуч... За собой лучше следите.
Добавлено after 8 minutes 44 seconds:
WiseLord писал(а):Никто не во что не превращается.
unsigned char ... ничего не замечаете, не?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 08:53:49
ARV
realm писал(а):unsigned char ... ничего не замечаете, не?
а вы замечаете, что
unsigned char * - не?
realm писал(а):За собой лучше следите
само собой. а вам советую зарыться с головой в литературу по программированию.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт ноя 08, 2016 09:07:54
Аlex
Ещё один умник пришёл блеснуть знаниями

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