Обсуждаем контроллеры компании Atmel.
Ответить

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

Чт окт 12, 2017 19:58:23

в железе работает
протеус на мыло
Прекрасно в протеусе работает.
СпойлерИзображение

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

Вт окт 24, 2017 15:20:02

Помогите новичку! АмперВольтметр, дисплей 1602, вывод данных АЦП на дисплей так
//Текущее напряжение
lcd_gotoxy(0,0);
result=(adc_data[0]*0.01955); //пересчитываем значение АЦП в вольты
sprintf(lcd_buffer,"%.1f V ",result); //помещаем во временную переменную результат
lcd_puts(lcd_buffer); //выводим на экран
Как то же самое вывести на дисплей Nokia 5110 (PCD8544)?

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

Чт ноя 09, 2017 09:39:22

Доброго времени суток. Поделитесь пожалуйста ссылкой для скачивания версии 2.50 с crack, нигде не могу найти.

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

Сб фев 10, 2018 21:46:54

Немного непонятно как в массиве с помощью указателя вытащить элемент c индексом -0. Просто имя массива ссылается на его первый элемент?
В общем нужен совет
int *p; -указатель на целочисл число
p= masiv; или так p=&masiv[0]
int masiv[8]={1,2,3, ... } 0-й элемент массива 1 , 1-й элемент массива 2 и т д
Если записать так PORTD = masiv[*p] то запишется 1 в PD.1
А чтобы зажечь PD.0 надо изголиться - PORTD = masiv[*p-1]
Вот это [*p-1] не очень нравиться

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

Сб фев 10, 2018 21:59:59

sergejjj123 писал(а):Если записать так PORTD = masiv[*p] то запишется 1 в PD.1
А чтобы зажечь PD.0 надо изголиться - PORTD = masiv[*p-1]
Я не специалист в CVAVR, но это не похоже на правду.
PORTD = masiv[*p] запишет не в PD.1 единицу, а в PORTD число 2. И хотя это выглядит похоже, но это совсем разные вещи.

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

Вс фев 11, 2018 02:36:31

Ну это понятно что запишеться весь порт а не только в конкретный бит.
Видно и так что под нулевым индексом в дес формате цифра 1 (1; в бинарном остальные слева заполнятся нулями)
Как не крути единичка должна появиться только на нулевом разряде порта .
Может как-то неправильно я поставил вопрос .
Вы смотрите синтаксис языка а сути вопроса не поняли.
Как в массиве с помощью указателя вытащить с 0-го индекса значение?
У меня получается только с 1-го индекса это цифра десятичн 2 а номер бита в порте -1 (10; в бинарном тоже слева куча нулей)
Почему-то когда пишу так [0] работает правильно
А если так [*p] -то берет значение массива 1-го индекса

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

Вс фев 11, 2018 07:26:02

Ну так естественно. Ведь *p = 1, поэтому и берётся masiv[1].
Если нужно вытянуть с нулевого индекса значение, то это (выбирайте на вкус):
masiv[0] = *masiv = *(masiv + 0) = *p = *(p + 0) = p[0]
Абсолютно так же и для других индесов, например 3:
masiv[3] = *(masiv + 3) = *(p + 3) = p[3].
Вы же по какой-то причине пытаетесь разыменовать указатель дважды. Делая
masiv[*p], по сути делаете masiv[masiv[0]].
sergejjj123 писал(а):Как в массиве с помощью указателя вытащить с 0-го индекса значение?
Ещё раз,резюмируя. Проще всего это сделать так:
masiv[0].
И не вводить ещё один лишний указатель p, фактически являющийся полным дублем masiv.

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

Ср фев 14, 2018 14:56:42

Привет всем и с праздником святого Валентина!
Прошу меня простить, возможно это уже где то описано.
Codevisionavr 3.12. В отдельном модуле описываю метод локальный:
===================
void set_port( volatile uint8_t *pReg, uint8_t bit ) {
*pReg |= ( 1 << bit );
}
А она выдает мне ошибку: "Error: C:\Users\1\Documents\AVR\Tester\macros.c(20): invalid combination of type specifiers".
Если этот метод сделать общедоступным, вынести название в хидер, то имеют место 3 ошибки:
================
Error: C:\Users\1\Documents\AVR\Tester\macros.h(7), #included from: main.c: invalid combination of type specifiers
Error: C:\Users\1\Documents\AVR\Tester\macros.h(7), #included from: macros.c: invalid combination of type specifiers
Error: C:\Users\1\Documents\AVR\Tester\macros.c(16): invalid combination of type specifiers
================
Мой модуль macros.c включает заглавие macros.h и главный модуль проэкта тоже включает macros.h.
И почему то codevisionavr мне это выдает за ошибку.
Подскажите мне, будте добры, где я здесь ошибся. я уже второй день над этим голову ламаю. мозги уже выносит.
В Atmel Studio это компилируется, но там почему то не так компилируется как нужно. Уже оптимизацию менял. В дебаговом режиме студия пропускает строки. Одним словом, что то у меня не совсем срослось :)
Буду очень признателел за обе подсказки. Потому что писать мне больше нравится в студии, но не могу толком настроить.

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

Ср фев 14, 2018 15:06:15

А volatile допустим в аргументах функции в CVAVR?

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

Ср фев 14, 2018 16:12:13

sergejjj123 писал(а):Если записать так PORTD = masiv[*p] то запишется 1 в PD.1
А чтобы зажечь PD.0 надо изголиться - PORTD = masiv[*p-1]
Я не специалист в CVAVR, но это не похоже на правду.
PORTD = masiv[*p] запишет не в PD.1 единицу, а в PORTD число 2. И хотя это выглядит похоже, но это совсем разные вещи.


А тут я так понял, что надо просто использовать не присвоение, а побитовое или с присвоением
PORTD |= *p;
Тогда и все биты останутся не тронутыми, кроме как того, какое число будет в *p

Добавлено after 54 minutes 2 seconds:
А volatile допустим в аргументах функции в CVAVR?


Я пробовал без volatile, ничего не меняется.
А как же тогда заставить codevision запихать переменную в регистр? Но это не вопрос.
Спасибо большое!

Добавлено after 6 minutes 1 second:
Может лучше сразу прицепить весь проект.
Вложения
Tester.rar
(105.04 KiB) Скачиваний: 194

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

Ср фев 14, 2018 19:04:09

rvk писал(а):А как же тогда заставить codevision запихать переменную в регистр?
может быть, наоборот - регистр в переменную? я так вангую, вы хотите свою функцию set_port использовать как-то так
Код:
set_port(&PORTB, 3); // устанавливаем 3-й бит в PORTB
set_port(&PORTD, 2); // 2-й бит в PORTD
такое возможно на самом деле в AVR-GCC, но на сколько мне известно, не в CVAVR.

в большинстве случаев вместо подобной функции вполне неплохо проявляют себя макросы
Код:
#define set_port(p,b) do{ p |= (1 << (b));}while(0)

set_port(PORTB, 3);
set_port(PORTD, 2);

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

Чт фев 15, 2018 00:55:43

такое возможно на самом деле в AVR-GCC, но на сколько мне известно, не в CVAVR.

в большинстве случаев вместо подобной функции вполне неплохо проявляют себя макросы


Да. Спасибо!
Написал вот так:
Код:
#define SET_PORT ( *reg, bit ) ( ( *reg ) |= ( 1 << ( bit ) ) )
#define CLEAR_PORT ( *reg, bit ) ( ( *reg ) &= ~( 1 << ( bit ) ) )
#define CHECK_PIN ( *pin, bit ) ( ( *pin ) & ( 1 << ( bit ) ) )

:)) Помогло. :))
Пока не знаю, как будет работать в програме CHECK_PIN, но SET и CLEAR должны.
Можно ли будет создать условие: if ( CHECK_PIN( &PINA, 2 ) ) {}, буду пробовать.
Но я сегодня :shock: :shock: :shock: . А вчера компилятор от этого выражения был в :shock: :shock: :shock: .
Или я где то лажанул по полной.
Спасибо! Спасибо! Спасибо!
А еще вот не понял выражения
#define set_port(p,b) do{ p |= (1 << (b));}while(0)

Для чего и как это работает? Зачем здесь цикл?

Добавлено after 24 minutes 28 seconds:
У меня написано:

Код:
#define SET_PORT ( *reg, bit ) ( ( *reg ) |= ( 1 << ( bit ) ) )
#define CLEAR_PORT ( *reg, bit ) ( ( *reg ) &= ~( 1 << ( bit ) ) )
#define CHECK_PIN ( *pin, bit ) ( ( *pin ) & ( 1 << ( bit ) ) )

uint8_t BITS_CHIP_PANEL[]  = { 0, 1, 7, 6, 5, 4 };
uint8_t *PORTS_CHIP_PANEL[] = { &PORTA, &PORTA, &PORTD, &PORTD, &PORTC, &PORTC };
uint8_t *PINS_CHIP_PANEL[]  = { &PINA, &PINA, &PIND, &PIND, &PINC, &PINC };
uint8_t *DDRS_CHIP_PANEL[]  = { &DDRA, &DDRA, &DDRD, &DDRD, &DDRC, &DDRC };


А теперь, когда я это использую
Код:
CLEAR_PORT( PORTS_CHIP_PANEL[ i ], i );
, компилятор снова испуган: "Error: C:\Users\1\Documents\AVR\Tester\macros.c(42): undefined symbol 'reg'"
И не проходит ни PORTS_CHIP_PANEL[ i ], ни *PORTS_CHIP_PANEL[ i ], ни &PORTS_CHIP_PANEL[ i ].
Ошибка одинаковая. В студии это работает.
Похоже мне снова не повезло.
Надо спрыгивать на 4 студию.

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

Чт фев 15, 2018 03:42:16

define некорректные, а именно -звездочки в них.

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

Чт фев 15, 2018 11:39:42

define некорректные, а именно -звездочки в них.

Этот код в студии работает. Значит точно ничего не выйдет в Codevision.
:idea: А подскажите, коты, пожалуйста, как можно переменную по ссылке передать? Ведь этой переменной должен быть порт ЦП.
Потому что у меня есть 20 портов, которые часто используются. Вот как выйти из положения не создавая массива портов?
Спасибо всем!

Сегодня праздник большой. Всех с праздником Сретения! :)) :)

Добавлено after 2 hours 39 minutes 2 seconds:
Вот, наконец то, результаты есть!
Этот код:
Код:
uint8_t BITS_CHIP_PANEL[]  = { 0, 1, 7, 6, 5, 4 };
uint8_t *PORTS_CHIP_PANEL[] = { &PORTA, &PORTA, &PORTD, &PORTD, &PORTC, &PORTC };

заданы переменные
А потом использование
Код:
*PORTS_CHIP_PANEL[ 3 ] |= ( 1 << BITS_CHIP_PANEL[ 3 ] );

РАБОТАЕТ!!!!!!
Не нужно придумывать в Codevision ниаких методов или define-ов - работать у меня отказалось, а вот самый обыкновенный код, работает.
И можно использовать в указателе на массив адреса портов !!!!!!!!!!!
УРРРРРРААААА!
:)) :)) :))) :music: :solder:
Всем удачи и спасибо!

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

Вт фев 27, 2018 13:01:55

Код:
  // Задаем режим работы таймера-счетчика 0
  TCCR0A = _BV(COM0A0) |          // COM0A1 = 0 и COM0A0 = 1 - переключение OC0A в момент совпадения
           _BV(WGM01);            // WGM = 010 - режим CTC
  TCCR0B = _BV(CS02)|             // CS = 101 - от внутреннего источника
           _BV(CS00);             // с предделителем 1024
  OCR0A = M;                      // Инициализируем счетчик


Помогите начинающему. Есть кусок программы переделываю этот код под CV AVR не могу понять как в визарте сделать эти пол строки
_BV(WGM01); // WGM = 010 - режим CTC
первую половину делаю так Timer0 / Out.A Toggle on compare match
А дальше как. Эта моя первая программа.

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

Вт фев 27, 2018 15:51:04

неужели долго ручками?
Код:
 TCCR0A = (1<<COM0A0) | (1<<WGM01);           

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

Ср фев 28, 2018 06:53:33

Благодарю за подсказку. Но я хочу понять как это работает в визарде программа которую я переделываю не работает вот я и хочу понять и найти ошибки, а ошибки есть проверял в протэусе вот еще
TCCR1B = _BV(WGM12) | // WGM = 0100 - режим CTC
_BV(CS12)| // CS = 111 - от внешнего источника (по фронту)
_BV(CS11)|
_BV(CS10);
как с этим разобраться не пойму. здесь на оборот 1ю половину не пойму а вторую половину понял как сделать. Подскажите как с этим бороться.

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

Ср фев 28, 2018 10:00:02

как с этим разобраться
лучший способ - плюнуть на визарды и взять справочник/datasheet. Если очень плохо с английским скачайте книжки Евстифеева - Микроконтроллеры AVR семейств Tiny и Mega - там все разжевано

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

Ср фев 28, 2018 10:15:33

Скачал Белов А В Создаем устройства на микроконтроллерах пытаюсь вникнуть, а даташит на русском не нашел в школе учил немецкий.
Вообще существует даташит на аттини 2313 на русском. Поделитесь если есть.

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

Ср фев 28, 2018 10:37:13

bango писал(а):Поделитесь если есть
.. я же вам название дал, неужели поиск в гугле запретили? http://avr.ru/docs/books/avr
Ответить