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

Обсуждаем контроллеры компании Atmel.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

Сообщение roman.com »

проще... но не интересно... и самое главное - не эффективно))

зачем вообще писать библиотеки для UART ? Это же простейший интерфейс))

1.
открываем cvavr
выбираем чип
выбираем частоту чипа
Screenshot_1.jpg
(75.26 КБ) 277 скачиваний

2.
выбираем режим работы UART
Screenshot_2.jpg
(84.72 КБ) 255 скачиваний

3.
нажимаем сгенерировать новый проект
куда сохранить проект
имя проекта
Screenshot_3.jpg
(81.5 КБ) 227 скачиваний

4.
cvavr сгенерировал сам код для UART ))
Screenshot_4.jpg
(106.91 КБ) 243 скачивания

5.
вот функция прерывания... cvavr сгенерировал сам
Screenshot_5.jpg
(103.74 КБ) 250 скачиваний

6.
вот режим работы UART... cvavr сгенерировал сам

Добавлено after 2 minutes 57 seconds:
Screenshot_6.jpg
(94.79 КБ) 239 скачиваний

7.
или вот без прерываний...
Screenshot_7.jpg
(114.17 КБ) 232 скачивания

8.
вот режим работы UART...
Screenshot_8.jpg
(94 КБ) 244 скачивания

9.
и т.д. и т.п.))

cvavr ВСЁ сгенерировал сам ))
:tea:
Аватара пользователя
Diskovod
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пт окт 22, 2021 13:50:39
Контактная информация:

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

Сообщение Diskovod »


Доброго времени суток. Помогите адоптировать кусочек кода под CodeVision. 

Начну из далека. На сайте есть проэкт "БП с микроконтроллерным управлением и регулировкой параметров при помощи энкодера."  есть исходники написаные в CodeVision.Используется экранчик bc1602. А мне бы хотелось в этом пролэкте использовать графический lcd  на на st7567.....нашол код под него но он написан в avr studio .

В CodeVision он не работает.....компилируется и т.д но экран не реагирует.......

Кто подскажет где собака зарыта?


Я бы так сделал

CodeVision
Спойлер

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

#include <mega8.h>
#include <io.h>
#include <delay.h>
//#include <avr/pgmspace.h>
//#include "btg13264.h"


#define     CS    PORTC.0     //
#define     RES   PORTC.1    //
#define     DC    PORTC.2   //
#define     CLK   PORTC.3  //
#define     SDA   PORTC.4

#define LCD_bias_set 0b10100010        //
#define ADC_select 0b10100000        //
#define COM_out_mode 0b11001000        //
#define V_sel 0b00100101            //
#define VOL_set 0b10000001            //
#define COLUMN_adr_set 0b00011011    //
#define POWER_set 0b00101111        //
#define START_line_set 0b01000000    //
#define PAGE_adr_set 0b10110000     //
#define COLUMN_adr_up 0b00010000    //
#define COLUMN_adr_lo 0b00000000    //





void CpuInit(void)
{
    DDRC=0xFF;
    PORTC=0b11111111;
}


void LcdSend(char byte, char data ) //
{
    char i;
    if(data) DC = 1;
    else DC = 0;;

    CLK = 1 ; // SPI_MODE = 1
    CS = 0 ; // Chip Select - Enable

    for(i=0; i<8; i++)
    {

        if (byte & 0x80)
        {
            SDA = 1 ;
        }
        else
        {
            SDA = 0 ;
        }
        CLK = 0 ;
        byte <<= 1;
        CLK = 1 ;
    }
     CS = 1 ; // Chip Select - Disable
     CLK = 1 ; // SPI_MODE = 1
}

void LcdInit(void)
{
     CS - 0 ;
     RES = 0 ;
    DC = 0 ;
   delay_us(40);
    RES = 1 ;
   RES = 0 ;
   delay_us(10);
   RES = 1 ;


   LcdSend(LCD_bias_set, 0);
   LcdSend(ADC_select, 0);
   LcdSend(COM_out_mode, 0);
   LcdSend(V_sel, 0);
   LcdSend(VOL_set, 0);
   LcdSend(COLUMN_adr_set, 0);
   LcdSend(POWER_set, 0);




}

void LcdOn(void)
{
   LcdSend(0b10101111, 0);
}

void LcdGoToXYSym(char x, char y)//переход на знакоместо (1-22, 1-8)
{
   
   if(0<<y<=8)   LcdSend(PAGE_adr_set | (y-1), 0);

   if(0<<x<=22){

      x=(x-1)*6;

      LcdSend((COLUMN_adr_up | (x >> 4)), 0);
      LcdSend((COLUMN_adr_lo | (x & 0b00001111)), 0);
   }
}

void LcdClear(void)
{
    char num;
    char i;
   LcdSend(START_line_set, 0);

   for(num=1; num<=8; num++){

      LcdGoToXYSym(1, num);

      for(i=0; i < 132; i++ ){

         LcdSend(0x00, 1);

      }
   }
}






void main(void)
{

CpuInit();
LcdInit();
LcdClear();
LcdOn();

while (1)
{
    LcdGoToXYSym(3, 3);
    LcdSend(0x07, 1);
    LcdSend(0x08, 1);
    LcdSend(0x70, 1);
    LcdSend(0x08, 1);
    LcdSend(0x07, 1);
    LcdSend(0x00, 1);
    delay_ms(500);


      }
}




 

 
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

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

Сообщение Alex_641 »

Не с того не с сего перестал работать CVAVR версии 3.12, пропали все кнопки ( или как они там называются), в основном окне только окно с программой и то маленького размера. Переустановка не помогла, антивирусник ничего не нашёл... Может было такое у кого нить?
Изображение
Не спрашивай по ком звонит колокол, он звонит по тебе !
codenamehawk
Вымогатель припоя
Сообщения: 527
Зарегистрирован: Вт фев 09, 2010 17:52:26

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

Сообщение codenamehawk »

и компилятор ругается что я что то не так объявляю. что не так не могу понять

Попробуйте другое название функции придумать.
foxmikola
Родился
Сообщения: 18
Зарегистрирован: Вт янв 05, 2016 11:44:44

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

Сообщение foxmikola »

Всем доброго времени суток. Нужна помощь есть архив для CodeVision AVR1.24.7
http://gornvasiliy.narod.ru/schrulle_a1.htm
в конце архив в строке:

Проект, исходный текст, прошивка для CodeVisionAVR1.24.7 здесь

Сам с CodeVision пока никак, уровень могу прошить AVR на программаторе tl866. Просьба, нужен HEX или BIN и как поставить фьюзы.
У меня не получается устройство работает, но не правильно.
Последний раз редактировалось foxmikola Вт апр 26, 2022 08:03:11, всего редактировалось 3 раза.
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

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

Сообщение DataLife »

Сам с CodeVision пока никак, уровень могу прошить AVR на программаторе tl866. Просьба, нужен HEX или BIN и как поставить фьюзы.
У меня не получается устройство работает, но не правильно.


HEX есть в архиве, прошивайте удобным вам методом. Фьюзы - выставить на работу от внутренего генератора на 8 МГц.

Добавлено after 17 minutes 55 seconds:
Всем доброго дня!
Поставил себе задачу впихнуть в ATTiny13A программу сбора показаний с нескольких DS18b20 и передачу из по UART.
Помощник CVAVR сделал все необходимые первичные настройки, активировал 1-wire и тд, но даже без UARTa компилятор ругается на недостаток RAM (Linker error: global RAM variables size: 81 bytes is too large) ! Я просто выхожу из мастера генерации кода и пробую всё собрать!

СпойлерBuild configuration: Release
Chip: ATtiny13A
Clock frequency: 1,200000 MHz
Memory model: Tiny
Optimize for: Size
(s)printf features: int, width
(s)scanf features: int, width
Promote 'char' to 'int': Yes
'char' is unsigned: Yes
global 'const' stored in FLASH: Yes
8 bit enums: Yes
Enhanced function parameters passing: Yes
Automatic register allocation: Yes

Build: 7
764 line(s) compiled
1 error(s)
No warnings

Bit variables size: 0 byte(s)

Data Stack area: 0x60 to 0x6F
Data Stack size: 16 byte(s)
Estimated Data Stack usage: 0 byte(s)

RAM Global variables area: 0x70 to 0xC0
RAM Global variables size: 81 byte(s)

Hardware Stack area: 0xC1 to 0x9F
Hardware Stack size: -33 byte(s)

Heap size: 0 byte(s)

EEPROM usage: 0 byte(s), 0,0% of EEPROM

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

Попробовал уменьшить дефайн MAX_DS1820 ... при "2" - проект собирается:
СпойлерBuild configuration: Release
Chip: ATtiny13A
Clock frequency: 1,200000 MHz
Memory model: Tiny
Optimize for: Size
(s)printf features: int, width
(s)scanf features: int, width
Promote 'char' to 'int': Yes
'char' is unsigned: Yes
global 'const' stored in FLASH: Yes
8 bit enums: Yes
Enhanced function parameters passing: Yes
Automatic register allocation: Yes

Build: 6
764 line(s) compiled
No errors
No warnings

Bit variables size: 0 byte(s)

Data Stack area: 0x60 to 0x6F
Data Stack size: 16 byte(s)
Estimated Data Stack usage: 0 byte(s)

RAM Global variables area: 0x70 to 0x8A
RAM Global variables size: 27 byte(s)

Hardware Stack area: 0x8B to 0x9F
Hardware Stack size: 21 byte(s)

Heap size: 0 byte(s)

EEPROM usage: 0 byte(s), 0,0% of EEPROM
Program size: 226 words (452 bytes), 44,1% of FLASH
0 words (0 bytes), 0,0% reduced by Code Compression

Может какие настройки в компиляторе нужно сделать?

Пустая программа, которая не помещается:
Спойлер

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

/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator

Chip type               : ATtiny13A
AVR Core Clock frequency: 1,200000 MHz         9.6 Mhz / 8 preskaller
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 16
*******************************************************/

#include <tiny13a.h>
   
// 1 Wire Bus interface functions
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds1820.h>

// maximum number of DS1820 devices
// connected to the 1 Wire bus
#define MAX_DS1820 8

// number of DS1820 devices
// connected to the 1 Wire bus
unsigned char ds1820_devices;
// DS1820 devices ROM code storage area,
// 9 bytes are used for each device
// (see the w1_search function description in the help)
unsigned char ds1820_rom_codes[MAX_DS1820][9];

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);


// 1 Wire Bus initialization
// 1 Wire Data port: PORTB
// 1 Wire Data bit: 4
// Note: 1 Wire port settings are specified in the
// Project|Configure|C Compiler|Libraries|1 Wire menu.
w1_init();

// Determine the number of DS1820 devices
// connected to the 1 Wire bus
ds1820_devices = w1_search(0xf0,ds1820_rom_codes);

while (1)
      {
      // Place your code here

      }
}


UPD: думаю мне понятно... 9 bytes are used for each device ... 8 устройств Х 9 байт = 72 байта, что уже больше 64 имеющихся в Тиньке...
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Из этой части кода, которым поделились, оптимизацию памяти вероятно сделать невозможно. Код, предложенный в компиляторе, часто является примерным и не оптимизированным (для памяти). Он часто универсален. Нужно переделывать (по возможности) код в других файлах. Например, почему данные всех датчиков хранятся в памяти? Выполнить действия с одним, определиться с результатом и загрузить в память другое. Максимум для сохранения: текущих температур как окончательный результат (но для этого тоже нужен объем памяти). И лично: зачем нужен такой минималистичный вариант? Лучше замените контроллер. Нет даже место запускать ни один алгоритм статистической обработки данных, хоть усреднение, хоть moving average ... о более сложных алгоритми просто нет смысла думать. И в конце: показания температуры будут колебаться +/-x.xx, что не связано с физическим процессом.
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

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

Сообщение DataLife »

Из этой части кода, которым поделились, оптимизацию памяти вероятно сделать невозможно. Код, предложенный в компиляторе, часто является примерным и не оптимизированным для памяти. Нужно переделывать (по возможности) код в других файлах. Например, почему данные всех датчиков хранятся в памяти? Выполнить действия с одним, определиться с результатом и загрузить в память другое. Максимум для сохранения: текущих температур как окончательный результат (но для этого тоже нужен объем памяти). И лично: зачем нужен такой минималистичный вариант? Лучше замените контроллер. Нет даже место запускать ни один алгоритм статистической обработки данных, хоть усреднение, хоть moving average ...

Да, посмотрел в сторону Тини85 - размер тот же, возможностей намного больше. И цена та же...
На счёт - зачем хранить - судя по всему, основной объём занимает хранение ROM-кодов датчиков (те самые 9 байт на датчик). А без их хранения - получится ли их все опрашивать? Пока не понял. В любом случае - выбор в пользу тини85 даёт прирост в ОЗУ до 512 Байт. Всё поместится.

Теперь стала задача сделать программный UART, ибо не доглядел, что аппаратного там нет...
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

... основной объём занимает хранение ROM-кодов датчиков (те самые 9 байт на датчик).

Можно сделать функцию: считать датчик (возвращает, например, уже считанную текущую температуру) и применить ко всем датчикам. Таким образом, промежуточные результаты чтения регистров не будут постоянно сохраняться. При необходимости сохраните только уже считанные температуры с каждой датчик (8 штук * 2 байт).
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

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

Сообщение AVK »

У блока USART есть три прерывания окончание приема, окончание передачи и опустошение буфера.
Но в CV доступны только первые два. Это нормально или как то можно третье прерывание завести?
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Есть ли возможность в CVAVR встроенными средствами разместить flash константу по фиксированному адресу?

Придумал пока использовать asm вставку:

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

// область глобальных переменных в отдельном С-файле:
#asm
.cseg
.org 8000 // адрес
.db 0x64 // константа
#endasm


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

// В main:
OSCCAL = *((volatile flash uint8_t *) OSCCAL_CONST_ADRESS);


Проблема в том что компилятор дальше пытается разместить за этой константой блок данных или код из других файлов, который вылезает далеко за пределы флеш Atmega168. При этом в середине флеш оказывается свободна. То есть решение не является правильным.

В Keil MDK или GCC для этого я создавал scatter-файл или скрипт линкера где делал собственные сегменты и назначал в таких сегментах нужные мне константы.

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

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

Сообщение ARV »

а зачем, если не секрет?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

ARV писал(а):а зачем, если не секрет?


1. Калибровка RC генератора. Вам наверно известно что при запуске загружается значение в OSCCAL для 1МГц(Например Atmega8 и др.). Для 8МГц надо считать программатором константу и записать в флеш или еепром. Дело не очень хлопотное когда программируется только 1 устройство. Можно и программу пересобрать. А когда 10-100 штук? А когда приходит время исправлений или обновлений, адреса калибровок начинают съезжать. Это лишний источник ошибок.
2. Работа с бутлоадером. Для этого надо разместить функции и блоки данных по фиксированным адресам.
3. Эмуляция еепром во флеш памяти. Надо назначать переменным адреса страниц не пересекающиеся с адресами кода.

Конечно, 2 и 3 сегодня уже не сильно актуально для авр. Но 3 вариант лично использовал на Stm без собственной еепром.
Аватара пользователя
Burguy
Открыл глаза
Сообщения: 44
Зарегистрирован: Ср ноя 21, 2012 00:00:49

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

Сообщение Burguy »

Доброго всем вечера прошу помощи. Перестал работать интерфейс.
....
Основное окно Codevision замораживается, пропадают все кнопки. Просто серое окно.. Работает только выход, свернуть или закрыть программу с несохраненными данными по по нажатию кнопок сверху слева на окне.
CAVR 3.12, 3.14, Windows 8 64 бит.

Пробовал на разных версиях везде одно и тоже. Поставил на другой комп все работает.
НЕ могу понять где искать.
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

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

Сообщение Alex_641 »

У меня такое же было недавно, сын что то сделал - заработало.

Добавлено after 3 minutes 23 seconds:
Вроде бы какие то файлы из какой то папки самой кавр удалял....
Не спрашивай по ком звонит колокол, он звонит по тебе !
Аватара пользователя
Burguy
Открыл глаза
Сообщения: 44
Зарегистрирован: Ср ноя 21, 2012 00:00:49

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

Сообщение Burguy »

Теперь осталось выяснить с какой папки и какие файлы)
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

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

Сообщение Alex_641 »

Не спрашивай по ком звонит колокол, он звонит по тебе !
Аватара пользователя
Burguy
Открыл глаза
Сообщения: 44
Зарегистрирован: Ср ноя 21, 2012 00:00:49

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

Сообщение Burguy »

Попробую. Но в Вашем примере хотя-бы окна видны и кнопки меню. У меня просто серое окно.
Доберусь через пару часов до компа проверю. Надеюсь сработает.

Добавлено after 2 hours 57 minutes 22 seconds:
УУУРРААА!!! Работает!!!!
Нужно было удалить файлы из папки c:\ProgramData\HP InfoTech\CodeVisionAVR\

Спасибо НКВД!!!
Kalisnik
Мучитель микросхем
Сообщения: 430
Зарегистрирован: Вс апр 18, 2021 15:43:55

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

Сообщение Kalisnik »

Вылазит 2 ошибки. В чем я ошибся? Как сделать правильно?

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

var.h(4), #included from: lern.c: '(' expected
var.c(1): '(' expected


var.h

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

#ifndef H_VAR
    #define H_VAR
 
    extern uint8_t i;
 
#endif


var.c:

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

uint8_t i = 8;


lern.c

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

#include <mega8.h>
#include "var.h"

void main(void)
{

...

while (1)
      {
      // Place your code here

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

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

Сообщение WiseLord »

В var.c только одна строчка? Ни var.h не инклюдится, ни stdint.h?
Ответить

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