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

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

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

Сообщение AVK »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3957440#p3957440"]выше прота г и не должно... т.к. там кончается доступное для битовых операций пространство.[/uquote]
ОФигеть, где про это почитать?
Реклама
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

в даташите на процессоры серии авр - в частности на любой атмеге написаны пределы доступности команд cbi sbi и почему так - можно понять по размеру их аргумента - тупо не хватило бит на бОльшее кол-во адресов
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Сообщение AVK »

[uquote="clawham",url="/forum/viewtopic.php?p=3957626#p3957626"]в даташите на процессоры серии авр - в частности на любой атмеге написаны пределы доступности команд cbi sbi и почему так - можно понять по размеру их аргумента - тупо не хватило бит на бОльшее кол-во адресов[/uquote]
Коммон, мне не нужно установить бит, мне нужно его посмотреть.
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

а это не важно :) флаговые операции через точку транслируются в 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
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Реклама
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Сообщение AVK »

Угу, я уже и сам понял.
Реклама
vek
Вымогатель припоя
Аватара пользователя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

Сообщение vek »

Доброго времени суток. Столкнулся с вопросом: CodeVisionAVR для студентов-нищебродов не могу найти с наскоку бесплатный. подскажите где скачать? мне нужна версия для тиньки2313 ,говнокод сильно меньше 4 кБ,современных дисплеев не буду подключать,современные библиотеки не нужны =( может у кого дистрибутив старый завалялся?
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Опытный кот
Аватара пользователя
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

Сообщение Serzh2000 »

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3960070#p3960070"]
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 тоже по идее должен быть в библиотеке...[/uquote]

может кто то может пример ARV в CVAVR написать . за ранее спасибо.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Serzh2000 писал(а):не получается в CodeVision AVR не такой библиотеки
Откуда в МК может быть текущее время ? :)))
Serzh2000 писал(а):может кто то может пример ARV в CVAVR написать
А что конкретно из этого непонятно ?
Примеров CRC для 1-Wire полно в интернете.
MAXRAM - это Вам только знать, сколько и чего у Вас там ...
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

Сообщение Serzh2000 »

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

если можете напишите как сделать чтоб rand() был случайным числом при включении каждый раз.
или поделитесь своим примером для задания начального значения случайной последовательности .
Вложения
ZveZda.zip
(979.1 КБ) 251 скачивание
Друг Кота
Аватара пользователя
Сообщения: 6323
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="Аlex",url="/forum/viewtopic.php?p=3988961#p3988961"]Откуда в МК может быть текущее время ? :)))[/uquote]
А мож у него DS1307 к МК прикошачен ? :)
Изображение
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Serzh2000 писал(а):Эта функция из библиотеки clc_crc_1wire ? какой то.
Это :
Serzh2000 писал(а):функция вычисления CRC по алгоритму 1-wire
:dont_know:
Вы можете взять любой, удобный Вам алгоритм. Хоть самый простой, типа обычной суммы.
Jack_A писал(а):А мож у него DS1307 к МК прикошачен ?
Может быть. Но я не уверен, судя по вопросам :)
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

К чему эти извращения.

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

EEMEM uint8_t ee_seed;
  randomSeed(eeprom_read_byte(&ee_seed));
  eeprom_write_byte(&ee_seed, eeprom_read_byte(&ee_seed) + 1);
Опытный кот
Аватара пользователя
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

Сообщение Serzh2000 »

[uquote="Jack_A",url="/forum/viewtopic.php?p=3989104#p3989104"][uquote="Аlex",url="/forum/viewtopic.php?p=3988961#p3988961"]Откуда в МК может быть текущее время ? :)))[/uquote]
А мож у него DS1307 к МК прикошачен ? :)[/uquote]

нет не прикошачен
Спойлер/*****************************************************


#include <mega8.h>
#include <stdlib.h>
#include <delay.h>

unsigned char digit_out[5], // буфер экрана (нумерация от 0 до 4 разрядa)
cur_dig; // тек.высвечиваемый символ (позиция)

unsigned int speed,delit, // время кадра
h=1, // число повторов эффекта
yarkost=255; // яркость


static flash unsigned char digits[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};




// ---------------- Timer 2 overflow interrupt service routine -----------------------------


interrupt [TIM2_OVF] void timer2_ovf_isr(void){

PORTC&=0b00000000; // потушить все (разряды - off)

PORTD=~digits[digit_out[cur_dig]];

PORTC |= (1<<cur_dig); // засветить нужный разряд (бит знакоместа - on)

cur_dig++; if (cur_dig >= 5) {
cur_dig = 0;
OCR2 = yarkost;
}

}// ----------------------------------------------------------------------------------------

// ------------------ Timer2 output compare interrupt service routine ----------------------

interrupt [TIM2_COMP] void timer2_comp_isr(void){
PORTC&=0b00000000;
// PORTD=0b11111111;


}
// ------------------ случайная скорость эффекта ------------------------------------------
void view_speed(void) {
yarkost=255;
speed=rand()%4+1; // случайное число от 1 до 6
delit= rand()%100+80; // случайное число от 50 до 100
speed=speed*delit;

}
//-----------------------------------------------------------------------------------------
void yarkost_umenshit(void) {

while(yarkost>2)
{
yarkost--;
delay_ms(10);
}
}
// view_speed(); delay_ms(speed);
//-----------------------------------------------------------------------------------------

void view_flasher_0(void) {
int j;

for (j =0; j<h;++j){
yarkost=2;
digit_out[0] = 15;
digit_out[1] = 15;
digit_out[2] = 15;
digit_out[3] = 15;
digit_out[4] = 15;

while(yarkost<255)
{
yarkost++;
delay_ms(10);
}
delay_ms(400);
while(yarkost>2)
{ yarkost--;
delay_ms(10);
}

}

}
//-----------------------------------------------------------------------------------------
void view_flasher_1(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = {15,15,15,15,15};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = { 0,0,0,0,0};


digit_out[0] = A;
digit_out[1] = B;
digit_out[2] = C;
digit_out[3] = D;
digit_out[4] = E;

delay_ms(speed);
}


}

// ----------------------------------------------------------------------------------------
void view_flasher_2(void) {
int i,j;

view_speed();


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

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = {15,15,15,15,15};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = { 0,0,0,0,0};

digit_out[0] = A;
digit_out[1] = B;
digit_out[2] = C;
digit_out[3] = D;
digit_out[4] = E;

delay_ms(speed);
}

}

void view_flasher_3(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = {15,15,15,15,15};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = { 0,0,0,0,0};


digit_out[0] = A[i];
digit_out[1] = B[i];
digit_out[2] = C[i];
digit_out[3] = D[i];
digit_out[4] = E[i];

delay_ms(speed);
}

}
//----------------------------------------------------------------------------------------

void view_flasher_4(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = {15,15,15,15,15};
unsigned int E[] = { 0,0,0,0,0};


digit_out[0] = A[i];
digit_out[1] = B[i];
digit_out[2] = C[i];
digit_out[3] = D[i];
digit_out[4] = E[i];

delay_ms(speed);
}


}

// ----------------------------------------------------------------------------------------
void view_flasher_5(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = {15,15,15,15,15};


digit_out[0] = A[i];
digit_out[1] = B[i];
digit_out[2] = C[i];
digit_out[3] = D[i];
digit_out[4] = E[i];

delay_ms(speed);
}



}

// ----------------------------------------------------------------------------------------


//=================== main ==========

//основаня функция
void main(void){
int seed;

digit_out[0]=0; // очистить экран
digit_out[1]=0;
digit_out[2]=0;
digit_out[3]=0;
digit_out[4]=0;


srand(2); // устанавливаем стартовое значение - 4 541



//настройка портов
PORTB=0b00000000;
DDRB=0b00000000;
PORTC=0b00000000; //порт С 4 первые по умолчанию 1
DDRC=0b00011111; //порт С 4 первые ноги на вывод
PORTD=0b00000000; //порт D по умолчанию все ноги на 0
DDRD=0b00001111; //порт D все ноги на вывод

TCCR2=0x04;
TIMSK=0b11000000;
// 0b11000001
// || | |
// || | Timer0
// || Timer1
// |Timer2
//
#asm("sei") // Глобальные прерывания включения

// -------------------------------- рабочая часть ------------------------------------------
while (1) {

int ef,t,g,j,k,n;
int effect[] = {0,1,2,3,4,5};

n = sizeof(effect) / sizeof(effect[0]);
for (k = 0; k < n - 1; k++)
{
j = rand()% (n - k);

t = effect[k];
effect[k] = effect[j];
effect[j] = t;

}
for(g = 0; g < n; g++) {
ef = effect[g];
//----------
switch(ef)
{
case 0:
view_flasher_5();
break;
case 1:
view_flasher_1();
break;
case 2:
view_flasher_2();
break;
case 3:
view_flasher_3();
break;
case 4:
view_flasher_4();
break;


}

}

view_flasher_0();
}; // ----------------------------- рабочая часть (end) ------------------------------------

} // ================= end main ======

//
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- The End -=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//

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 при следующем включении не хочу использовать
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

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];
Контактная информация:
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="Serzh2000",url="/forum/viewtopic.php?p=3989121#p3989121"]да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ...[/uquote]
Офигеть! Тяжело, чтоль, посчитать?
Опытный кот
Аватара пользователя
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

Сообщение Serzh2000 »

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;


это отрывок кода из Atmel Studio , а я пишу в CVAVR... выдает ошибки
Спойлер/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : zvezda
Version : luchshaay
Date : 12.12.2018
Author : Serzh
Company :
Comments:


Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/

/* Движок в звезде от часов Danko, большое спасибо ему.
https://radiokot.ru/forum/viewtopic.php?f=57&t=21235 */

#include <mega8.h>
#include <stdlib.h>
#include <delay.h>
unsigned char crc = 0;
unsgned char *p_mem;
unsigned char digit_out[5], // буфер экрана (нумерация от 0 до 4 разрядa)
cur_dig; // тек.высвечиваемый символ (позиция)

unsigned int speed,ii,delit, // время кадра
h=1, // число повторов эффекта
yarkost=255; // яркость


static flash unsigned char digits[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};




// ---------------- Timer 2 overflow interrupt service routine -----------------------------


interrupt [TIM2_OVF] void timer2_ovf_isr(void){

PORTC&=0b00000000; // потушить все (разряды - off)

PORTD=~digits[digit_out[cur_dig]];

PORTC |= (1<<cur_dig); // засветить нужный разряд (бит знакоместа - on)

cur_dig++; if (cur_dig >= 5) {
cur_dig = 0;
OCR2 = yarkost;
}

}// ----------------------------------------------------------------------------------------

// ------------------ Timer2 output compare interrupt service routine ----------------------

interrupt [TIM2_COMP] void timer2_comp_isr(void){
PORTC&=0b00000000;
// PORTD=0b11111111;


}
// ------------------ случайная скорость эффекта ------------------------------------------
void view_speed(void) {
yarkost=255;
speed=rand()%4+1; // случайное число от 1 до 6
delit= rand()%100+80; // случайное число от 50 до 100
speed=speed*delit;

}
//-----------------------------------------------------------------------------------------
void yarkost_umenshit(void) {

while(yarkost>2)
{
yarkost--;
delay_ms(10);
}
}
// view_speed(); delay_ms(speed);
//-----------------------------------------------------------------------------------------

void view_flasher_0(void) {
int j;

for (j =0; j<h;++j){
yarkost=2;
digit_out[0] = 15;
digit_out[1] = 15;
digit_out[2] = 15;
digit_out[3] = 15;
digit_out[4] = 15;

while(yarkost<255)
{
yarkost++;
delay_ms(10);
}
delay_ms(400);
while(yarkost>2)
{ yarkost--;
delay_ms(10);
}

}

}
//-----------------------------------------------------------------------------------------
void view_flasher_1(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = {15,15,15,15,15};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = { 0,0,0,0,0};


digit_out[0] = A;
digit_out[1] = B;
digit_out[2] = C;
digit_out[3] = D;
digit_out[4] = E;

delay_ms(speed);
}


}

// ----------------------------------------------------------------------------------------
void view_flasher_2(void) {
int i,j;

view_speed();


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

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = {15,15,15,15,15};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = { 0,0,0,0,0};

digit_out[0] = A;
digit_out[1] = B;
digit_out[2] = C;
digit_out[3] = D;
digit_out[4] = E[i];

delay_ms(speed);
}

}

void view_flasher_3(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = {15,15,15,15,15};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = { 0,0,0,0,0};


digit_out[0] = A[i];
digit_out[1] = B[i];
digit_out[2] = C[i];
digit_out[3] = D[i];
digit_out[4] = E[i];

delay_ms(speed);
}

}
//----------------------------------------------------------------------------------------

void view_flasher_4(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = {15,15,15,15,15};
unsigned int E[] = { 0,0,0,0,0};


digit_out[0] = A[i];
digit_out[1] = B[i];
digit_out[2] = C[i];
digit_out[3] = D[i];
digit_out[4] = E[i];

delay_ms(speed);
}


}

// ----------------------------------------------------------------------------------------
void view_flasher_5(void) {
int i,j;

view_speed();
for (i =0; i<5;++i){

unsigned int A[] = { 0,0,0,0,0};
unsigned int B[] = { 0,0,0,0,0};
unsigned int C[] = { 0,0,0,0,0};
unsigned int D[] = { 0,0,0,0,0};
unsigned int E[] = {15,15,15,15,15};


digit_out[0] = A[i];
digit_out[1] = B[i];
digit_out[2] = C[i];
digit_out[3] = D[i];
digit_out[4] = E[i];

delay_ms(speed);
}



}

// ----------------------------------------------------------------------------------------


//=================== main ==========

//основаня функция
void main(void){
int seed;

digit_out[0]=0; // очистить экран
digit_out[1]=0;
digit_out[2]=0;
digit_out[3]=0;
digit_out[4]=0;



*p_mem = (unsigned char*) 0;
for(ii=0; ii<1024; ii++) crc += p_mem[ii];



//настройка портов
PORTB=0b00000000;
DDRB=0b00000000;
PORTC=0b00000000; //порт С 4 первые по умолчанию 1
DDRC=0b00011111; //порт С 4 первые ноги на вывод
PORTD=0b00000000; //порт D по умолчанию все ноги на 0
DDRD=0b00001111; //порт D все ноги на вывод

TCCR2=0x04;
TIMSK=0b11000000;
// 0b11000001
// || | |
// || | Timer0
// || Timer1
// |Timer2
//
#asm("sei") // Глобальные прерывания включения

// -------------------------------- рабочая часть ------------------------------------------
while (1) {

int ef,t,g,j,k,n;
int effect[] = {0,1,2,3,4,5};

n = sizeof(effect) / sizeof(effect[0]);
for (k = 0; k < n - 1; k++)
{
j = rand()% (n - k);

t = effect[k];
effect[k] = effect[j];
effect[j] = t;

}
for(g = 0; g < n; g++) {
ef = effect[g];
//----------
switch(ef)
{
case 0:
view_flasher_5();
break;
case 1:
view_flasher_1();
break;
case 2:
view_flasher_2();
break;
case 3:
view_flasher_3();
break;
case 4:
view_flasher_4();
break;


}

}

view_flasher_0();
}; // ----------------------------- рабочая часть (end) ------------------------------------

} // ================= end main ======

//
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- The End -=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="Serzh2000",url="/forum/viewtopic.php?p=3989155#p3989155"]
Serzh2000 писал(а):
да да eeprom пробывал получается... смущает одно атмега 8 китайская и сколько перезаписей она выдержит вопрос ...

Офигеть! Тяжело, чтоль, посчитать?
???
да для профессионала наверно все просто ... для меня вообще не ясно что посчитать?[/uquote]
Ну вы ведь заявляете о проблеме! На основании чего? Выкладывайте. Или просто бла-бла-бла?
Опытный кот
Аватара пользователя
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

Сообщение Serzh2000 »

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

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


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

Ну вы ведь заявляете о проблеме! На основании чего? Выкладывайте. Или просто бла-бла-бла?
???
спрошу еще раз
при каждом запуске программы rand() числа остаются одинаковыми. Генератор Псевдо Случайных Чисел использует единственное начальное значение.
мне нужно чтобы при запуске программы случайное число было случайным!!!
как это реализовать CVAVR? помогите. :facepalm: :facepalm:
Вложения
ZveZda.zip
(979.1 КБ) 230 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

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

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