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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Вот тут не понял, в чем будут ограничены действия

1. Откройте редактор с кодом, нажмите CTRL+F
2. В поле поиска вбейте "odin", в поле замены - "44"
3. Нажмите "Replace all"
4. Вы получили абсолютно идентичный код тому, который был.
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Коты, есть вопрос:
Есть массив:
int DisplayArray [16][8] = {
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0}, //тут тот пиксель что мне нужен
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
В цикле проверяю каждый сегмент массива на предмет "1",
И если элемент == 1 то я его зажигаю на матрице 8*16
int i,j;
...
for (i=0; i == 16; i++) {
for (j=0; j == 8; j++) {
if (DisplayArray[i][j] == 1)
Display(j,i); //потому что указание в двухмерном массиве идёт с "y"!?
}
}
...
Но на матрице пусто.
В работоспособности ф-ции Display(x,y); уверен.
Если возникнут вопросы - посмотрите на мой аватар.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

for (i=0; i < 16; i++)
... ну Вы расточительно к памяти AVR относитесь... ;)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

ну Вы расточительно к памяти AVR относитесь.

int DisplayArray
В целых 32 раза :)
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Я не пойму у вас один пиксель кодируется целым int ? Реально расточительство.
Можно вместо [8] просто unsigned char [32]{0b0000000,
0b0000000,
0b0000000,
0b0001000,//тут то, что зажигать хотим.
0b0000000,
0b0000000,
0b0000000,
0b0000000,
0b0000000,
0b0000000,
0b0000000,
}
и точно так же как храним можно и выводить!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Тогда уж не 32, а 16 :)

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

unsigned char DisplayArray[16]{
 0b0000000,
 0b0000000,
 0b0000000,
 0b0001000,   //тут то, что зажигать хотим.
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000,
 0b0000000
}

............
............
unsigned char i, j;

for(i=0;i<sizeof(DisplayArray);i++){
  unsigned char tmp=DisplayArray[i];
  for(j=0;j<8;j++){
    if(tmp&0x01)  Display(j,i);
    tmp>>=1;
  }
}
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

16*8*4 = 512 байт вместо просто 16 байт. 512/16 = в 32 раза.

У него 16*8 INTов (каждый по 4 байта)

---
Ой, это не мне было, ну да ладно :)
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

ploop, это я про массив.
А так, да, в 32 раза памяти больше... :facepalm:
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Стоп, не в 32, а в 16 раз больше.
В INT'е же 16 бит, а не 32. Это в CV на сколько я помню, но не уверен.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Аlex писал(а):Тогда уж не 32, а 16 :)
Во во именно это я и хотел написать, просто с телефона не очень удобно. :)))
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

В INT'е же 16 бит, а не 32

Да? :shock:
Вот поэтому я всегда использую явные типы: int8_t, int16_t и тд. А то развели тут бардак, где 16, где 32 :)))
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Не, секунду, мне надо ещё в массив записывать.
Типа DisplayArray[2][4]==1
Если возникнут вопросы - посмотрите на мой аватар.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

И что ? А в отдельный бит нельзя что-ли записать единичку или нолик ?
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

0867532 писал(а):Не, секунду, мне надо ещё в массив записывать.
Типа DisplayArray[2][4]==1
:facepalm: Блин , переписать функцию на вывод целой строки не судьба?

Дальше какие вопросы пойдут? Позвольте предположить: как сложить два массива?

Я так понял это все для тетриса вопросы?
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Я не понял что вы про строку написали, но про сложение массивов, м! это интересно...


А зачем тогда форумы нужны? -Чтоб одни спрашивали а другие отвечали, или обсуждали что-то.
Во всяком случае мне так кажется.
Если возникнут вопросы - посмотрите на мой аватар.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Дык Вам и отвечают. Только вот обратной реакции нет никакой, как со стенкой общаешься... обидно...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

0867532 писал(а):Я не понял что вы про строку написали,

Я говорю Нафига анализировать каждый бит, когда можно анализировать целую строку. таким же образом можно выводить целую строку.
0867532 писал(а):
но про сложение массивов, м! это интересно...

Я могу подсказать простую, но еще не проверенную идею, если вы до сих пор тетрис делаете. Но лучше в отдельной теме, чтобы все это не было разбросано по веткам.
0867532 писал(а):
А зачем тогда форумы нужны? -Чтоб одни спрашивали а другие отвечали, или обсуждали что-то.
Во всяком случае мне так кажется.

Правильно, вас пока что никто еще не выгонял, просто реакции на советы плохо видны. Ладно хоть с массивами разобрались... :))
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Коты,здравствуйте!
Подмогните пожалуйста(у меня очередная проблема) :)))
Дана Atmega 8 и 3 микрухи 74hc595,в последовательном соединении.
программа :

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

#define reset PORTD.7      // MR 
#define SCK PORTD.6        // SHCP
#define ss PORTD.5          //  STCP
#define MOSI PORTD.4     //  DS


void send_byte_74595 (unsigned char data){ unsigned char i;
ss = 1;
 for (i = 0; i < 24; i++) {
        if ( (data>>i)&1)  MOSI = 1;
        else              MOSI = 0;
        #asm("nop")
        SCK = 1;
        #asm("nop")
        SCK = 0;
        #asm("nop")
         } 
         ss = 0;             
    } 
 

Светодиоды подключенные к микрухам работают хаотично.
Соответственно выводится лебелерда.
Толкните на путь истинный,пожалуйста!
Благодарю!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

А как это Вы из байта (unsigned char data) вытягиваете 24 бита ? :)
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Ну даже если из байта сдвигом вытягивать 24 бита все равно должно получиться. Только будет байт и 16 нулей. Значит что то не так выводится все таки.
Лучше попробовать для начала вывести один байт и посмотреть что получается.
Ответить

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