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

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

Ср фев 16, 2022 17:42:46

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

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

1.
открываем cvavr
выбираем чип
выбираем частоту чипа
Screenshot_1.jpg
(75.26 KiB) Скачиваний: 168

2.
выбираем режим работы UART
Screenshot_2.jpg
(84.72 KiB) Скачиваний: 157

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

4.
cvavr сгенерировал сам код для UART ))
Screenshot_4.jpg
(106.91 KiB) Скачиваний: 155

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

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

Добавлено after 2 minutes 57 seconds:
Screenshot_6.jpg
(94.79 KiB) Скачиваний: 145

7.
или вот без прерываний...
Screenshot_7.jpg
(114.17 KiB) Скачиваний: 140

8.
вот режим работы UART...
Screenshot_8.jpg
(94 KiB) Скачиваний: 143

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

cvavr ВСЁ сгенерировал сам ))
:tea:

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

Ср фев 16, 2022 23:42:40


Доброго времени суток. Помогите адоптировать кусочек кода под 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);


      }
}




 

 

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

Пн фев 28, 2022 16:23:52

Не с того не с сего перестал работать CVAVR версии 3.12, пропали все кнопки ( или как они там называются), в основном окне только окно с программой и то маленького размера. Переустановка не помогла, антивирусник ничего не нашёл... Может было такое у кого нить?
Изображение

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

Вс мар 13, 2022 20:44:24

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

Попробуйте другое название функции придумать.

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

Пн апр 25, 2022 19:33:17

Всем доброго времени суток. Нужна помощь есть архив для 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 раз(а).

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

Вс май 08, 2022 12:45:39

Сам с 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 имеющихся в Тиньке...

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

Вс май 08, 2022 13:23:40

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

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

Вс май 08, 2022 13:30:54

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

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

Теперь стала задача сделать программный UART, ибо не доглядел, что аппаратного там нет...

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

Вс май 08, 2022 13:46:47

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

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

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

Вс июл 17, 2022 07:04:02

У блока USART есть три прерывания окончание приема, окончание передачи и опустошение буфера.
Но в CV доступны только первые два. Это нормально или как то можно третье прерывание завести?

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

Пн июл 25, 2022 12:25:45

Есть ли возможность в 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?

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

Пн июл 25, 2022 13:34:35

а зачем, если не секрет?

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

Пн июл 25, 2022 21:24:37

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


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

Конечно, 2 и 3 сегодня уже не сильно актуально для авр. Но 3 вариант лично использовал на Stm без собственной еепром.

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

Сб дек 17, 2022 16:34:26

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

Пробовал на разных версиях везде одно и тоже. Поставил на другой комп все работает.
НЕ могу понять где искать.

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

Сб дек 17, 2022 17:47:37

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

Добавлено after 3 minutes 23 seconds:
Вроде бы какие то файлы из какой то папки самой кавр удалял....

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

Сб дек 17, 2022 18:46:55

Теперь осталось выяснить с какой папки и какие файлы)

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

Сб дек 17, 2022 19:13:43

https://forum.easyelectronics.ru/viewto ... 14&t=24303

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

Сб дек 17, 2022 22:49:23

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

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

Спасибо НКВД!!!

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

Пт янв 13, 2023 19:35:27

Вылазит 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

      }
}

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

Пт янв 13, 2023 20:29:06

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