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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

boobonick, а что вы хотели-то? определяете массив символов, а втюхиваете в него строки... разница все-таки есть, как ни крути :)
и вообще, кусок кода какой-то несуразный....
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

помогите пожалуйста.
мне надо хранить в микроконтроллере массив 3-х мерный.
mas[5][5][5] подскажите пожалуйста хвалит ли мне attiny 2313?
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

можно, даже нужно, что бы этот масив был bit только насколько я знаю можно только около 100 битовых переменых.

вот как мне обойти эту гадость?

я думал что можно сделать еще вот так

extern char mas1[25];
extern char mas2[25];
extern char mas3[25];
extern char mas4[25];
extern char mas5[25];

как раз получается 1000 байт
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

вы начните с того, что ответьте: сколько ОЗУ в тини2313? там всего-то 128 байт памяти - куда вы собрались такой массив пихать?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

ну и как быть? какой микроконтроллер предложите?)
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

PacMan писал(а):ну и как быть? какой микроконтроллер предложите?)
Займитесь простой арифметикой. Сначала определитесь, какой тип нужен для элементов. char - 1 байт, int - 2 байт. Умножьте это значение на число элементов в массиве (произведение размерностей). Получится размер памяти для хранения массива. Сравните со значениями ОЗУ и flash различных микроконтроллеров (даташиты никто не отменял) начиная последовательно от tiny2313, atmega8, atmega16, atmega32, ... Если памяти ОЗУ не хватает для единовременной обработки массива, сохраните его в flash-памяти (только там свои ограничения и могут возникнуть определённые глюки). Потренируйтесь на Протеусе.

Под вопросом - возможность создания трёхмерного массива в C. Возможно проще создать функцию обработки одномерного массива как трёхмерного.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

пока что у меня создается впечатление, что ваша проблема в том, что задача поставлена неправильно. огласите задачу полностью.

почему я так думаю?
во-первых, вы хотите массив битовых значений. это настораживает
во-вторых, трехмерный массив... так же вызывает подозрения на счет необходимости...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Redrik Shuhart
Друг Кота
Сообщения: 3641
Зарегистрирован: Пт апр 03, 2009 22:12:58
Откуда: Из Украины, Кировоградская облась,

Сообщение Redrik Shuhart »

мож кто поможет, НЕ ПОСЫЛАТЬ В ДАТАШИТИ! все равно в них кроме распиновки нече не понимяу, короч, как запустить прерывания+ их счетчик, который будет сравнивать Общее число прерываний с определенным, и по нему перепрыгивать на другую бесконечную подпрограмму, ну типа если количество =0, тогда идет основная програма, если 1= то 2 программа, если 2 то 3 программа.......
Мотание тороидов- вышивание по мужски.
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

вообщем хочу собрать led cube 5x5x5 вот и нужен 3-х мерный массив. у меня только 2 цвета
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

PacMan писал(а):вообщем хочу собрать led cube 5x5x5 вот и нужен 3-х мерный массив. у меня только 2 цвета
2 цвета - это включено и выключено? ;)

для вашей задачи хватит двумерного массива из байтов char cube[5][5] - всего 25 байт :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

да вкл и выкл))

а как мне это реализовать через 2-х мерный?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

у вас куб состоит из 5 слоев 5х5 - так?
каждый слой состоит из 5 полосок по 5 светодиодов, так?
каждая полоска - это байт, каждый светодиод - это бит в байте.
улавливаете?

картинки ваши будете рисовать по слоям. например вот так будет закодирован ромбик:
0b00000100
0b00001010
0b00010001
0b00001010
0b00000100

улавливаете? ;)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

да это я понимаю. вопрос не в этом))
как мне записать или считать тот или иной бит в байте)))
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

typedef char[5] sloy_t;
sloy_t cube[5];

// установка для заданного слоя кубика в строке и столбике бита в 1
voig set_bit(sloy_t *sloy, char stroka, char stolb){
   char bit = 1 << stolb;
   *sloy[stroka] |= bit;
}
надеюсь, сброс бита в 0 и прочие функции вы по аналогии сделаете самостоятельно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

boobonick писал(а):...подскажите,пожалуйста,не понимаю, компилятор выдает сообщение "missing ;" ... возможно ли так в структурах делать?

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

struct  { 
   char lcd_menu_master[x_element][y_element]= {
      {"Menu1"},
      {"Menu2"},
      {"Menu3"}
   };
};
ARV писал(а):boobonick, а что вы хотели-то? определяете массив символов, а втюхиваете в него строки... разница все-таки есть, как ни крути :)
"Втюхивать" строки в char-массивы стандартом Си разрешено, более того - делать так зачастую удобнее, чем лепить кучу отдельных символов.
В Си - массивы, строки и указатели очень тесно связаны, и это отражается, в частности, в способах инициализации. Разница, конечно, есть, но язык Си задумывался для написания осперационных систем и потому должен был давать программисту максимум (логичных) возможностей, так как изначально предполагалось, что писать на Си будет системный программист, который по определению лучше компилятора ориентируется в ситуации и знает о ней больше. Разумеется, ответственность за написанное, при таком раскладе, лежит только на нём. :)))

boobonick, отдели инициатор от объявления структуры и будет тебе счастье:

Изображение
Только учти наличие в строках маркера конца строки.

P.S. Что-то имя "menu" заставляет меня сомневаться в том, что ты выбрал для достижения своих целей правильные средства - строки меню очень редко бывают одинаковой длины... Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Yellow Tiger писал(а):"Втюхивать" строки в char-массивы стандартом Си разрешено, более того - делать так зачастую удобнее, чем лепить кучу отдельных символов.
если бы все знали все, что можно в Си и умели бы этим пользоваться - ни у кого не возникаоло бы вопросов :) не уверен, что автор вопроса мог бы дать ответ на мои сомнения про "втюхивание" так, как Вы. поэтому мое мнение - чем проще, тем лучше. то есть лучше использовать 50% возможностей Си, но при этом на 100% понимать, что происходит, чем сгоряча всюду использовать напропалую 100% возможностей, но при этом спрашивать "почему компилятор ругается". поэтому я и намекнул, что написано нечто более сложное, чем доступно по уровню знаний.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
boobonick
Встал на лапы
Сообщения: 123
Зарегистрирован: Сб ноя 18, 2006 17:14:15

Сообщение boobonick »

Yellow Tiger писал(а):
boobonick писал(а):...подскажите,пожалуйста,не понимаю, компилятор выдает сообщение "missing ;" ... возможно ли так в структурах делать?

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

struct  { 
   char lcd_menu_master[x_element][y_element]= {
      {"Menu1"},
      {"Menu2"},
      {"Menu3"}
   };
};
ARV писал(а):boobonick, а что вы хотели-то? определяете массив символов, а втюхиваете в него строки... разница все-таки есть, как ни крути :)


Да, наверное мое представление неправильное, но, как я думаю,
строка - это набор символов, с '/n'?




P.S. Что-то имя "menu" заставляет меня сомневаться в том, что ты выбрал для достижения своих целей правильные средства - строки меню очень редко бывают одинаковой длины... Изображение


А под одну строку [x_element] же я выделил много символов [y_element], т.е. строки же разные могли быть или я не понимаю чего-то?

Вот сегодня перечитал про указатели и сделал вот так
:music: :

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

static char  *lcd_menu_master[]= {"Menu1","Menu2","Menu3"};


Спасибо большое за ответы!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

boobonick писал(а):...но, как я думаю, строка - это набор символов, с '/n'
Нет, это в текстовом файле строка ограничивается символом перевода строки, а Си-шный набор данных, называемый строкой, оканчивается нулем - '\0'.
boobonick писал(а):...сегодня перечитал про указатели и сделал вот так:

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

static char  *lcd_menu_master[]= {"Menu1","Menu2","Menu3"};
Вот теперь правильно. ;)
К.С.А
Грызет канифоль
Сообщения: 265
Зарегистрирован: Пн окт 27, 2008 22:55:45

Сообщение К.С.А »

Здравствуйте уважаемые!
Возникла проблема, пожалуйста помогите справиться.

Это самое первое что я "изобрел" сам!
Тоесть я ТОЛЬКО ТОЛЬКО начинаю.
Другими словами "ЧАЙНИК"!!!

Схема проста.

ATmega16.
На PORTA.0 подключена кнопка, замыкающая на землю.
На порт С подключен ЖКИ 1602 на контроллере 44780.

Если кнопка не нажата, то на ЖКИ выводятся надписи:
"Hello word"
"AVR 123 kurs"

Если она нажата то:
"Урааа!!"
"Работает!!!"


Использую:
CodeWizardAVR V2.03.9 Evaluation
PonyProg2000 Version 2.06f Beta
windows XP профешнл.

К стати! Что означает Evaluation?

Вот только нехочет оно правильно работать!
Подскажите пожалуйста что я делаю неправильно?
Уже всю голову себе поломал!



Вот основной кусок кода:

PORTA=0x01;//Подтягиваю PINA.0 к питанию.
DDRA=0x00;

// LCD module initialization
lcd_init(16);

static char a; //обьявляю переменную "а"
while (PINA.0==0) { //Проверяю не нажата ли кнопка
};

a=PINA.0;
//Результат проверки заношу в "а"

if(a)
{
//Если не нажата то выводим на индикатор следующие две строки
lcd_clear(); //Очищаю индикатор
lcd_gotoxy(3,0); // Куда писать
lcd_putsf("Hello word"); // Что писать
lcd_gotoxy(2,1); // Куда писать
lcd_putsf("AVR 123 kurs"); // Что писать
}
//Если нажата то выводим на индикатор следующие две строки
else
{
lcd_clear();
//Очищаю индикатор от предыдущих показаний
lcd_gotoxy(3,0);
lcd_putsf("©paaa!");
lcd_gotoxy(2,1);
lcd_putsf("PaІoїaeї!!!");
};

}
// Это осталось от main.


И еще
Что и в каких случаях нужно вписывать в скобки lcd_clear(); ?
Может быть в них можно указать конкретные знакоместа ЖКИ? Если да, то как это сделать правильно?
Спасибо
С уважением Сергей.
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Самый простой вариант который пришёл в голову.

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

while (1) {
if(PINA.0==1){

Если кнопка нажата то выводим на LCD “Ура это может работать!!!”

}else{

Если кнопка не нажата то выводим на LCD “Не работает!!!”

}
};
Ответить

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