Страница 413 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср фев 16, 2022 17:42:46
roman.com
проще... но не интересно... и самое главное - не эффективно))
зачем вообще писать библиотеки для UART ? Это же простейший интерфейс))
1.
открываем cvavr
выбираем чип
выбираем частоту чипа
2.
выбираем режим работы UART
3.
нажимаем сгенерировать новый проект
куда сохранить проект
имя проекта
4.
cvavr сгенерировал сам код для UART ))
5.
вот функция прерывания... cvavr сгенерировал сам
6.
вот режим работы UART... cvavr сгенерировал сам
Добавлено after 2 minutes 57 seconds:
7.
или вот без прерываний...
8.
вот режим работы UART...
9.
и т.д. и т.п.))
cvavr ВСЁ сгенерировал сам ))

Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср фев 16, 2022 23:42:40
Diskovod
[uquote="stepan_31",url="/forum/viewtopic.php?p=4146648#p4146648"]
Доброго времени суток. Помогите адоптировать кусочек кода под CodeVision.
Начну из далека. На сайте есть проэкт "БП с микроконтроллерным управлением и регулировкой параметров при помощи энкодера." есть исходники написаные в CodeVision.Используется экранчик bc1602. А мне бы хотелось в этом пролэкте использовать графический lcd на на st7567.....нашол код под него но он написан в avr studio .
В CodeVision он не работает.....компилируется и т.д но экран не реагирует.......
Кто подскажет где собака зарыта?
[/uquote]
Я бы так сделал
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
Alex_641
Не с того не с сего перестал работать CVAVR версии 3.12, пропали все кнопки ( или как они там называются), в основном окне только окно с программой и то маленького размера. Переустановка не помогла, антивирусник ничего не нашёл... Может было такое у кого нить?

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс мар 13, 2022 20:44:24
codenamehawk
[uquote="mixon46",url="/forum/viewtopic.php?p=4182169#p4182169"]и компилятор ругается что я что то не так объявляю. что не так не могу понять[/uquote]
Попробуйте другое название функции придумать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн апр 25, 2022 19:33:17
foxmikola
Всем доброго времени суток. Нужна помощь есть архив для CodeVision AVR1.24.7
http://gornvasiliy.narod.ru/schrulle_a1.htm
в конце архив в строке:
Проект, исходный текст, прошивка для CodeVisionAVR1.24.7 здесь
Сам с CodeVision пока никак, уровень могу прошить AVR на программаторе tl866. Просьба, нужен HEX или BIN и как поставить фьюзы.
У меня не получается устройство работает, но не правильно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 08, 2022 12:45:39
DataLife
[uquote="foxmikola",url="/forum/viewtopic.php?p=4221771#p4221771"]Сам с CodeVision пока никак, уровень могу прошить AVR на программаторе tl866. Просьба, нужен HEX или BIN и как поставить фьюзы.
У меня не получается устройство работает, но не правильно.[/uquote]
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
veso74
Из этой части кода, которым поделились, оптимизацию памяти вероятно сделать невозможно. Код, предложенный в компиляторе, часто является примерным и не оптимизированным (для памяти). Он часто универсален. Нужно переделывать (по возможности) код в других файлах. Например, почему данные всех датчиков хранятся в памяти? Выполнить действия с одним, определиться с результатом и загрузить в память другое. Максимум для сохранения: текущих температур как окончательный результат (но для этого тоже нужен объем памяти). И лично: зачем нужен такой минималистичный вариант? Лучше замените контроллер. Нет даже место запускать ни один алгоритм статистической обработки данных, хоть усреднение, хоть moving average ... о более сложных алгоритми просто нет смысла думать. И в конце: показания температуры будут колебаться +/-x.xx, что не связано с физическим процессом.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 08, 2022 13:30:54
DataLife
[uquote="veso74",url="/forum/viewtopic.php?p=4228672#p4228672"]Из этой части кода, которым поделились, оптимизацию памяти вероятно сделать невозможно. Код, предложенный в компиляторе, часто является примерным и не оптимизированным для памяти. Нужно переделывать (по возможности) код в других файлах. Например, почему данные всех датчиков хранятся в памяти? Выполнить действия с одним, определиться с результатом и загрузить в память другое. Максимум для сохранения: текущих температур как окончательный результат (но для этого тоже нужен объем памяти). И лично: зачем нужен такой минималистичный вариант? Лучше замените контроллер. Нет даже место запускать ни один алгоритм статистической обработки данных, хоть усреднение, хоть moving average ...[/uquote]
Да, посмотрел в сторону Тини85 - размер тот же, возможностей намного больше. И цена та же...
На счёт - зачем хранить - судя по всему, основной объём занимает хранение ROM-кодов датчиков (те самые 9 байт на датчик). А без их хранения - получится ли их все опрашивать? Пока не понял. В любом случае - выбор в пользу тини85 даёт прирост в ОЗУ до 512 Байт. Всё поместится.
Теперь стала задача сделать программный UART, ибо не доглядел, что аппаратного там нет...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 08, 2022 13:46:47
veso74
[uquote="DataLife",url="/forum/viewtopic.php?p=4228680#p4228680"]... основной объём занимает хранение ROM-кодов датчиков (те самые 9 байт на датчик).[/uquote]
Можно сделать функцию: считать датчик (возвращает, например, уже считанную текущую температуру) и применить ко всем датчикам. Таким образом, промежуточные результаты чтения регистров не будут постоянно сохраняться. При необходимости сохраните только уже считанные температуры с каждой датчик (8 штук * 2 байт).
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс июл 17, 2022 07:04:02
AVK
У блока USART есть три прерывания окончание приема, окончание передачи и опустошение буфера.
Но в CV доступны только первые два. Это нормально или как то можно третье прерывание завести?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июл 25, 2022 12:25:45
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?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июл 25, 2022 13:34:35
ARV
а зачем, если не секрет?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июл 25, 2022 21:24:37
uk8amk
ARV писал(а):а зачем, если не секрет?
1. Калибровка RC генератора. Вам наверно известно что при запуске загружается значение в OSCCAL для 1МГц(Например Atmega8 и др.). Для 8МГц надо считать программатором константу и записать в флеш или еепром. Дело не очень хлопотное когда программируется только 1 устройство. Можно и программу пересобрать. А когда 10-100 штук? А когда приходит время исправлений или обновлений, адреса калибровок начинают съезжать. Это лишний источник ошибок.
2. Работа с бутлоадером. Для этого надо разместить функции и блоки данных по фиксированным адресам.
3. Эмуляция еепром во флеш памяти. Надо назначать переменным адреса страниц не пересекающиеся с адресами кода.
Конечно, 2 и 3 сегодня уже не сильно актуально для авр. Но 3 вариант лично использовал на Stm без собственной еепром.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб дек 17, 2022 16:34:26
Burguy
Доброго всем вечера прошу помощи. Перестал работать интерфейс.
....
Основное окно Codevision замораживается, пропадают все кнопки. Просто серое окно.. Работает только выход, свернуть или закрыть программу с несохраненными данными по по нажатию кнопок сверху слева на окне.
CAVR 3.12, 3.14, Windows 8 64 бит.
Пробовал на разных версиях везде одно и тоже. Поставил на другой комп все работает.
НЕ могу понять где искать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб дек 17, 2022 17:47:37
Alex_641
У меня такое же было недавно, сын что то сделал - заработало.
Добавлено after 3 minutes 23 seconds:
Вроде бы какие то файлы из какой то папки самой кавр удалял....
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб дек 17, 2022 18:46:55
Burguy
Теперь осталось выяснить с какой папки и какие файлы)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб дек 17, 2022 19:13:43
Alex_641
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб дек 17, 2022 22:49:23
Burguy
Попробую. Но в Вашем примере хотя-бы окна видны и кнопки меню. У меня просто серое окно.
Доберусь через пару часов до компа проверю. Надеюсь сработает.
Добавлено after 2 hours 57 minutes 22 seconds:
УУУРРААА!!! Работает!!!!
Нужно было удалить файлы из папки c:\ProgramData\HP InfoTech\CodeVisionAVR\
Спасибо НКВД!!!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт янв 13, 2023 19:35:27
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:
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
WiseLord
В var.c только одна строчка? Ни var.h не инклюдится, ни stdint.h?