Страница 414 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт янв 13, 2023 20:55:12
Kalisnik
WiseLord, Да, в var.c 1 строчка. Приинклюдил к lern.c файл stdint.h. Ошибка
Код: Выделить всё
var.h(4), #included from: lern.c: '(' expected
пропала. Ошибка
осталась.
Добавлено after 4 minutes 13 seconds:
Приинклюдил stdint.h и к var.c. Ошибки пропали. Спасибо за подсказку!
Добавлено after 3 minutes 18 seconds:
Но не понятно поведение компилятора. Если не раскидывать код на файлы, то инклюдить stdint.h не требуется, все и так работает.

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт янв 13, 2023 21:26:23
WiseLord
А откуда компилятор, по-вашему, поймёт, что такое uint8_t, если ни в файле, ни в том, что из них инклюдится, ничего про это нет? Это же не встроенный тип вроде int или char.
В случае одного файла все работает за счёт того, что оно через mega8.h где-то прилетает.
Поймите главное - каждый .c файл - это самостоятельная единица компиляции.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс апр 23, 2023 22:27:34
AVK
Можно ли поменять ASCII таблицу на свою? Индикатор на MAX7219 для наглядной записи кода.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср июн 21, 2023 15:47:41
Adusik
Не устанавливается на WIN7-64 AvrStudio4Setup-4.18. После начала установки больше ничего не происходит, значёк установки просто висит в панели задач. Подскажите как установить.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 19, 2023 07:24:18
AVK
Вот в функцию можно передать ссылку на массив типа void (char *mass)
А вот как бы передать ссылку на переменную? Чтобы менять эту переменную в функции.
А то приходится передавать ее в функцию и возвращать ее в нее же.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 19, 2023 11:10:29
WiseLord
Точно так же
Код: Выделить всё
void func(int *var)
{
*var = 5;
}
int main()
{
int a = 3;
func(&a); // a = 5 теперь
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 19, 2023 11:24:58
Ivanoff-iv
кстати, массив кодевижен всегда передает в функцию по указателю, это надо иметь в виду
(т.е. если передать массив в функцию и там его изменить, то исходный массив тоже изменится, как бы его ни передавали, хоть со звёздочками, хоть без)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 23, 2023 17:59:11
AVK
[uquote="WiseLord",url="/forum/viewtopic.php?p=4490951#p4490951"]Точно так же
Код: Выделить всё
void func(int *var)
{
*var = 5;
}
int main()
{
int a = 3;
func(&a); // a = 5 теперь
}
[/uquote]
Прикольно, оно работает, но компилится в больший размер, я думал будет экономия кода
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 25, 2023 08:02:08
Ivanoff-iv
я в этом плане тоже кодевижену удивляюсь, код, который по идее должен быть компактнее в итоге получается тяжелее...
както делал фильтр на 2 канала (надо было одинаково отфильтровать 2 переменные) самым компактным оказалось простое дублирование кода (через дефайны), звтем с функциями и с передачей в них массивов, самым тяжелым оказался код с указателями...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 26, 2023 21:02:38
edds
Братцы /, памагити!!! Кодвижен не хочет делать операцию деления
#include <mega8.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>
#define LATCH PORTB.1
#define DI PORTB.2
#define CLK PORTB.0
unsigned int long Big_data , Neu_data=0 , adc_data ;
unsigned int data=0 ;
//unsigned char data=0 ;
unsigned int Print_digit ;
unsigned char DIGIT [10]={ 0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000} ;
unsigned char count_LED_print=0, count_LED_flag=0 ;
unsigned char ;
/// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
// Read the AD conversion result
adc_data=ADCW;
//adc_flag=1 ;
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
unsigned char i=0 ;
for ( i=0 ; i<16 ; i++ ) {
if (Print_digit&0x8000) { DI=1 ; }
else { DI=0 ; }
CLK=1;
delay_us(5) ;
CLK=0;
Print_digit<<=1 ; }
count_LED_print++ ;
count_LED_flag=1 ;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned char R_digit =0x01, r=0 ;
PORTB=0x00;DDRB=0x0F;PORTC=0x00;DDRC=0x00;PORTD=0x00;DDRD=0x00;
TCCR0=0x04;TCNT0=0x00;
TCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;
OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;TCNT2=0x00;OCR2=0x00;
MCUCR=0x00;
TIMSK=0x01;
UCSRB=0x00;ACSR=0x80;SFIOR=0x00;
ADMUX=0x40 ;ADCSRA=0x8F;
SPCR=0x00;TWCR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
#asm("cli")
if(count_LED_flag==1) { count_LED_flag=0 ; // индикация начало
Print_digit= DIGIT [data%10] ;
data/=10 ;
Print_digit<<=8 ;
Print_digit|=R_digit;
R_digit<<=1;
LATCH=1 ;
delay_us(5) ;
LATCH=0 ;
if(count_LED_print==4) { R_digit =0x01 ;
data=(unsigned int) Big_data ;
count_LED_print=0 ; }
} // индикация конец
#asm("sei")
if (r<=4) { r++;
ADCSRA|=(1<<ADSC) ;
while((ADCSRA & (1<<ADSC))) { ; }
Big_data+=adc_data ; }
Big_data/=5 ;
r=0 ;
}
}
Вот проблемный участок
if (r<=4) { r++;
ADCSRA|=(1<<ADSC) ;
while((ADCSRA & (1<<ADSC))) { ; }
Big_data+=adc_data ; }
Big_data/=5 ;
r=0 ;
почему то Big_data/=5 ; не выполняется...
надо получить среднее значение за (n) измерений.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт окт 27, 2023 03:39:29
Аlex
edds писал(а):почему то Big_data/=5 ; не выполняется...
Скорее всего, Вам так только кажется.
Добавлено after 6 minutes 3 seconds:
ПыСы: Наш форум позволяет отображать код в красивом и отформатированном виде.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 30, 2023 21:51:32
AVK
Я бы делил на четыре, пусть будет среднее за четыре измерения, простым сдвигом.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб дек 23, 2023 21:11:41
сокол
Всем доброго вечера! Надо прошить ATmega8 в схеме используется часовой кварц 32768. В статье есть картинки с фъюзами как мне надо ставить для codevision? Помогите пожалуйста.

тут кусок исходника

Вот так правильно?

Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 15, 2024 20:23:08
SP634
Добрый день, уважаемые коллеги!
Пришлось мне сделать "умную" кнопку включения на ATTINY13. За основу взял проект из сети. Алгоритм такой: устройство находится в Спящем режиме, при нажатии кнопки (вывод 6 PORT PB1) и удержании ее в течение 1 секунды логическая единица появляется на выводе 5 , а затем через еще через секунду на выводе 2. При повторном нажатии на кнопку и ее удержании в течение 1 секунды на выходах появляется лог. 0 и устройство уходит в спячку. Так работает прошивка из архива (проект CVAVR).
Коллеги, прошу помочь: заменить вывод 5 (PORT PB0) на вывод 7 (PORT PB2). В остальном все выводы и алгоритм включения остается как есть. К сожалению, моих познаний в программировании для этого недостаточно
Вопрос решен. Тему можно закрыть
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 06, 2024 00:08:30
AVK
Вот есть у меня массив типа char set[23]
И как бы в него писать наглядно?
шоб написать функцию которая будет заполнять его с нужного индекса?
типа set[3]='asdert';
а то приходится писать в каждую ячейку отдельно, это сильно усложняет восприятие кода.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 06, 2024 18:51:06
AVK
CV не дает работать с массивами во флеше через указатели.
типа в функцию copy(*mas); если mas будет во флеше компилятор выдаст ошибку.
Как то можно это обойти?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 06, 2024 18:56:23
>TEHb<
Так имя массива это же и есть указатель. Звёздочка не нужна.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 06, 2024 21:49:00
AVK
[uquote=">TEHb<",url="/forum/viewtopic.php?p=4623010#p4623010"]Так имя массива это же и есть указатель. Звёздочка не нужна.[/uquote]
Да это понятно, я прототип функции написал, в теле ясно дело без звездочки.
Добавлено after 2 hours 41 minute 44 seconds:
Идея вообще такая: на 1602 дисплей нужно писать разные сообщения, я делаю здоровый массив где их подряд все пишу и когда надо копирую из этого массива в массив дисплея. Но не дает компилятор такие забавы делать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб сен 07, 2024 17:12:30
AVK
Вот такая функция работает только если второй массив в ОЗУ.
void copy (char *mas, char *mas1, char adr, char adr1, char size)
{
for (i=0; i<size; i++)
mas[adr+i]=mas1[adr1+i]
}
если он во флеше то фигушки. Как это можно оформить что бы работало?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб сен 07, 2024 17:41:16
veso74