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

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

Пн янв 11, 2021 08:50:28

выше прота г и не должно... т.к. там кончается доступное для битовых операций пространство.

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

Пн янв 11, 2021 12:53:14

выше прота г и не должно... т.к. там кончается доступное для битовых операций пространство.

ОФигеть, где про это почитать?

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

Пн янв 11, 2021 15:17:21

в даташите на процессоры серии авр - в частности на любой атмеге написаны пределы доступности команд cbi sbi и почему так - можно понять по размеру их аргумента - тупо не хватило бит на бОльшее кол-во адресов

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

Пн янв 11, 2021 16:27:40

в даташите на процессоры серии авр - в частности на любой атмеге написаны пределы доступности команд cbi sbi и почему так - можно понять по размеру их аргумента - тупо не хватило бит на бОльшее кол-во адресов

Коммон, мне не нужно установить бит, мне нужно его посмотреть.

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

Пн янв 11, 2021 17:20:13

а это не важно :) флаговые операции через точку транслируются в sbi cbi и если такового не может быть осуществлено - то и читать и писать вы это не сможете через точку.

это написано в подсказке самой CVAVR
The bit level access to the I/O registers can be also accomplished by using bit selectors appended after the name of the I/O register.
Because bit level access to I/O registers is done using the CBI, SBI, SBIC and SBIS instructions, the register address must be in the 0 to 1Fh range

Note: Bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can't be used for RAM access.

Перевод нужен? порты с адресами выше 0x1F - недоступны для битовых атомарных операций CBI, SBI, SBIC and SBIS
туда доступ только через команду out

так же в файле atmega2560юр есть перечень всех регистров, к которым допустимо битовое атомарное обращение
sfrb PINA=0;
sfrb DDRA=1;
sfrb PORTA=2;
sfrb PINB=3;
sfrb DDRB=4;
sfrb PORTB=5;
sfrb PINC=6;
sfrb DDRC=7;
sfrb PORTC=8;
sfrb PIND=9;
sfrb DDRD=0xa;
sfrb PORTD=0xb;
sfrb PINE=0xc;
sfrb DDRE=0xd;
sfrb PORTE=0xe;
sfrb PINF=0xf;
sfrb DDRF=0x10;
sfrb PORTF=0x11;
sfrb PING=0x12;
sfrb DDRG=0x13;
sfrb PORTG=0x14;
sfrb TIFR0=0x15;
sfrb TIFR1=0x16;
sfrb TIFR2=0x17;
sfrb TIFR3=0x18;
sfrb TIFR4=0x19;
sfrb TIFR5=0x1a;
sfrb PCIFR=0x1b;
sfrb EIFR=0x1c;
sfrb EIMSK=0x1d;
sfrb GPIOR0=0x1e;
sfrb EECR=0x1f;
sfrb EEDR=0x20;
sfrb EEARL=0x21;
sfrb EEARH=0x22;
sfrw EEAR=0X21; // 16 bit access
sfrb GTCCR=0x23;
sfrb TCCR0A=0x24;
sfrb TCCR0B=0x25;
sfrb TCNT0=0x26;
sfrb OCR0A=0x27;
sfrb OCR0B=0x28;
sfrb GPIOR1=0x2a;
sfrb GPIOR2=0x2b;
sfrb SPCR=0x2c;
sfrb SPSR=0x2d;
sfrb SPDR=0x2e;
sfrb ACSR=0x30;
sfrb OCDR=0x31;
sfrb SMCR=0x33;
sfrb MCUSR=0x34;
sfrb MCUCR=0x35;
sfrb SPMCSR=0x37;
sfrb RAMPZ=0x3b;
sfrb EIND=0x3c;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-


как видите всё закончилось на PORTK

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

Ср янв 13, 2021 11:16:17

Угу, я уже и сам понял.

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

Пт янв 15, 2021 18:09:26

Доброго времени суток. Столкнулся с вопросом: CodeVisionAVR для студентов-нищебродов не могу найти с наскоку бесплатный. подскажите где скачать? мне нужна версия для тиньки2313 ,говнокод сильно меньше 4 кБ,современных дисплеев не буду подключать,современные библиотеки не нужны =( может у кого дистрибутив старый завалялся?

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

Вс фев 28, 2021 11:26:19

добрый день.
как получить разные случайные числа при каждом запуске программы? использовать текущее время в качестве начального числа для генератора случайных чисел
#include<time.h>
srand(time(0));

не получается в CodeVision AVR не такой библиотеки, тогда как?

Serzh2000 писал(а):желательно попроще и поподробнее!
проще некуда.
Serzh2000 писал(а):с примером в CodeVisionAVR
а вот с этим никак, ибо использую только avr-gcc (WinAVR).

в общем и целом как-то так:
Код:
unsigned char *ptr = (void*)0;
int sum = 0;

for(int i=0; i < MAXRAM; ptr++) sum = calc_crc_1wire(sum, *ptr);

srand(sum);
MAXRAM - это максимальный адрес доступного RAM в выбраном МК, а clc_crc_1wire - это функция вычисления CRC по алгоритму 1-wire, можно и по любому иному алгоритму, но этот самый известный и в CVAVR тоже по идее должен быть в библиотеке...


может кто то может пример ARV в CVAVR написать . за ранее спасибо.

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

Вс фев 28, 2021 12:10:04

Serzh2000 писал(а):не получается в CodeVision AVR не такой библиотеки
Откуда в МК может быть текущее время ? :)))

Serzh2000 писал(а):может кто то может пример ARV в CVAVR написать
А что конкретно из этого непонятно ?
Примеров CRC для 1-Wire полно в интернете.
MAXRAM - это Вам только знать, сколько и чего у Вас там ...

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

Вс фев 28, 2021 13:31:19

У МЕНЯ АТМЕГА 8.
А что конкретно из этого непонятно ?
Примеров CRC для 1-Wire полно в интернете.
MAXRAM - это Вам только знать, сколько и чего у Вас там ...


я не понимаю как читать точнее написать это в CVAVR. Эта функция из библиотеки clc_crc_1wire ? какой то.

если можете напишите как сделать чтоб rand() был случайным числом при включении каждый раз.
или поделитесь своим примером для задания начального значения случайной последовательности .
Вложения
ZveZda.zip
(979.1 KiB) Скачиваний: 212

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

Вс фев 28, 2021 16:31:10

Откуда в МК может быть текущее время ? :)))

А мож у него DS1307 к МК прикошачен ? :)

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

Вс фев 28, 2021 16:34:53

Serzh2000 писал(а):Эта функция из библиотеки clc_crc_1wire ? какой то.
Это :
Serzh2000 писал(а):функция вычисления CRC по алгоритму 1-wire
:dont_know:
Вы можете взять любой, удобный Вам алгоритм. Хоть самый простой, типа обычной суммы.

Jack_A писал(а):А мож у него DS1307 к МК прикошачен ?
Может быть. Но я не уверен, судя по вопросам :)

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

Вс фев 28, 2021 16:47:26

К чему эти извращения.
Код:
EEMEM uint8_t ee_seed;
  randomSeed(eeprom_read_byte(&ee_seed));
  eeprom_write_byte(&ee_seed, eeprom_read_byte(&ee_seed) + 1);

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

Вс фев 28, 2021 17:11:09

Откуда в МК может быть текущее время ? :)))

А мож у него DS1307 к МК прикошачен ? :)


нет не прикошачен


Serzh2000 писал(а):
функция вычисления CRC по алгоритму 1-wire
:dont_know:
Вы можете взять любой, удобный Вам алгоритм. Хоть самый простой, типа обычной суммы.


я новичок в программировании ... приведите рабочий пример в CVAVR попробую разобраться/ вникнуть /понять

К чему эти извращения.
Код:
EEMEM uint8_t ee_seed;
randomSeed(eeprom_read_byte(&ee_seed));
eeprom_write_byte(&ee_seed, eeprom_read_byte(&ee_seed) + 1);




да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ... по этому вариант
при выключении записывал результат rand () в eeprom, и использовал его как seed при следующем включении не хочу использовать

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

Вс фев 28, 2021 17:23:01

Serzh2000 писал(а):приведите рабочий пример в CVAVR попробую разобраться/ вникнуть /понять

Попробуйте :
Код:
#define   MAX_RAM         1024      // Размер ОЗУ


unsigned char   crc = 0;
unsgned char    *p_mem = (unsigned char*) 0;
for(int i=0; i<MAX_RAM; i++)   crc += p_mem[i];

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

Вс фев 28, 2021 17:43:15

да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ...

Офигеть! Тяжело, чтоль, посчитать?

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

Вс фев 28, 2021 17:58:25

Serzh2000 писал(а):
да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ...

Офигеть! Тяжело, чтоль, посчитать?


???
да для профессионала наверно все просто ... для меня вообще не ясно что посчитать?

Попробуйте :
Код:
#define MAX_RAM 1024 // Размер ОЗУ


unsigned char crc = 0;
unsgned char *p_mem = (unsigned char*) 0;
for(int i=0; i<MAX_RAM; i++) crc += p_mem[i];


это отрывок кода из Atmel Studio , а я пишу в CVAVR... выдает ошибки

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

Вс фев 28, 2021 18:14:39

Serzh2000 писал(а):
да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ...

Офигеть! Тяжело, чтоль, посчитать?


???
да для профессионала наверно все просто ... для меня вообще не ясно что посчитать?

Ну вы ведь заявляете о проблеме! На основании чего? Выкладывайте. Или просто бла-бла-бла?

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

Вс фев 28, 2021 19:48:39

Serzh2000 писал(а):
Цитата:
Serzh2000 писал(а):
да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ...

Офигеть! Тяжело, чтоль, посчитать?


???
да для профессионала наверно все просто ... для меня вообще не ясно что посчитать?

Ну вы ведь заявляете о проблеме! На основании чего? Выкладывайте. Или просто бла-бла-бла?


???
спрошу еще раз
при каждом запуске программы rand() числа остаются одинаковыми. Генератор Псевдо Случайных Чисел использует единственное начальное значение.
мне нужно чтобы при запуске программы случайное число было случайным!!!
как это реализовать CVAVR? помогите. :facepalm: :facepalm:
Вложения
ZveZda.zip
(979.1 KiB) Скачиваний: 194

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

Вс фев 28, 2021 21:08:18

1. перед выключением сохранять случайное число, сгенерированное rand(), в EEPROM.
2. при включении вызывать srand(N), где N - то самое число (seed).

Помимо eeprom, число N в пункте 2 можно добыть и другими способами, про которые тут уже много рассказали:
- способ с вычитыванием всей памяти EEPROM и получением некоторой "контрольной" суммы).
- если есть RTC, можно из него брать текущее время в секундах в качестве seed.
Ответить