Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
1

AT90CAN128 (Atmel Studio 6). Перевод символов для ЖКИ

28.03.2014, 13:28. Просмотров 2667. Ответов 21
Метки нет (Все метки)

здравствуйте
есть такой код для перевода символов для ЖКИ, если подставлять его тупо в массив то всё ок работает, но это неудобно, поэтому написал пару функций:
Код:
C
1
2
3
4
5
6
7
8
9
10
unsigned char alf(char a)
{
   switch (a)
   {
      case 'А': return 0x41; case 'а': return 0x61; break;
      case 'Б': return 0xA0;case 'б': return 0xB2; break;
//пропускаю таблицу дабы сэкономить место
      case ' ': return 0x20; case ',': return 0x2C; break;
   }
}
есть такая функция для ввода в глобальный массив S:
Код:
C
1
2
3
4
5
6
7
8
9
10
void getChar(char *a)
{
   for (i=0;i<21;i++)
   {
   S[i]=alf(a[i]);
      if (a[i]=='А')    // сравниваю тупо вручную русский симол А с массивом
      PORTA=0x10;  //
   }
i=0;
}
сам вызов функции:

C
1
getChar("АБВГДЖЗ        ");
вообще эффекта ноль, толи оишбка в том что не получается инициализировать char* a строкой вида "АБВГДЖЗ ") , Толи я уж теряюсь....

пробовал оптимизатор выкл/вкл, не то
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 13:28
Ответы с готовыми решениями:

Atmel Studio (Двоично-десятич перевод)
двоично-десятичный перевод двухбайтного числа из двоичной формы в десятичную и обратно. Вторая...

Atmel Studio для компилирования Ардуино?
Участвую в проекте умного дома где основные интузиасты ардуинщики Мне среда ардуино не очень...

Ошибки и предупреждения при компиляции проекта для Attiny2313 в Atmel Studio 7.0
Всем привет.И сразу к сути.У меня написана программа которая должна выводить текст на светодиодах....

Почему AVR Studio 4, а не Atmel Studio 6?
По какой причине большинство специалистов по AVR микроконтроллерам в основном используют AVR Studyo...

Выход из прерывания для CAN (AT90CAN128)
Всем привет! Столкнулся с такой проблемой: Вот моя мейновая функция: void main(void) { ...

21
Voland_
1694 / 1038 / 98
Регистрация: 04.01.2010
Сообщений: 3,517
28.03.2014, 16:52 2
dzrkot, для вашего вопроса надо ОБЯЗАТЕЛЬНО указывать используемую платформу и компилятор.
Из соседних веток я помню, что вы юзаете CVAVR, тогда все объяснимо - как параметр в getChar вы передаете тип char flash[], а внутри работаете как с переменной. Объявите функцию как
C++
1
void getChar(char flash *a)
и эта часть должна поехать.
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
28.03.2014, 18:43  [ТС] 3
да прсотите...
нет сейчас в atmel studio 6 , компилятор там gcc avr, контроллер - AT9CAN128
Цитата Сообщение от Voland_ Посмотреть сообщение
void getChar(char flash *a)
нашёлимер на С++, там тоже было использовано flash... поясните если не сложно - flash как тут интерпритируется...? не совсем понимаю
0
VladimirU
132 / 110 / 20
Регистрация: 14.02.2013
Сообщений: 799
29.03.2014, 14:10 4
C++
1
void getChar(char flash *a)
dzrkot, а что такое "*a"?

Добавлено через 5 минут
C++
1
2
3
4
unsigned short a;
void getChar(char flash *a)
{
}
вот так использовать функцию?
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
29.03.2014, 14:26  [ТС] 5
Цитата Сообщение от VladimirU Посмотреть сообщение
dzrkot, а что такое "*a"?
эм...разыменыватель указателя...
0
VladimirU
132 / 110 / 20
Регистрация: 14.02.2013
Сообщений: 799
29.03.2014, 14:45 6
Не подумайте что я придираюсь.
А вы не могли бы привести рабочий пример любой с данной функцией.
C++
1
2
3
void getChar(char flash *a)
{
}
1
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
29.03.2014, 16:19 7
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
31.03.2014, 08:48  [ТС] 8
atmel studio ругается на, т.к. слова flash в ней нет
C
1
void getChar(char flash *a)
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
31.03.2014, 09:03 9
а вот так __flash
1
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,364
Завершенные тесты: 1
31.03.2014, 09:21 10
[quote="dzrkot;5964156"]есть такой код для перевода символов для ЖКИ, если подставлять его тупо в массив то всё ок работает, но это неудобно, поэтому написал пару функций:
гораздо проще и быстрее табличный метод
вот моя функция написаная для ATMega 8535 на CodeVision используется встроенная библиотека lcd

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 flash unsigned char Table_coder[]={
/*0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
 */
0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0x33,0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8,//А Б В Г Д Е Ж З И Й К Л М Н О П
0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,0xAC,0xE2,0xAC,0xAE,0x62,0xAF,0xB0,0xB1,//Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,0xB8,0xA6,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE,//а б в г д е ж з и й к л м н о п
0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,0xC1,0xE6,0xC2,0xC3,0XC4,0xC5,0xC6,0xC7 //р с т у ф х ц ч ш щ ъ ы ь э ю я
};  
 
void my_lcd_putchar(unsigned char c)
{
 if(c<0xC0)
  lcd_putchar(c); 
 else 
  lcd_putchar(Table_coder[ c-0xC0]);
};
если размер позволяет то можно раскомментировать часть массива будет массив на 256
и
упростить функцию
C++
1
2
3
4
 void my_lcd_putchar(unsigned char c)
{
  lcd_putchar(Table_coder[ c]);
};
а вот набор функция для вывода строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void my_lcd_puts(char *str)
{
 while(*str)
 {
  my_lcd_putchar(*str);
  str++; 
 }
}
 
void my_lcd_putsf(char flash *str)
{
 while(*str)
 {
  my_lcd_putchar(*str);
  str++; 
 }
Добавлено через 2 минуты
Цитата Сообщение от dzrkot Посмотреть сообщение
atmel studio ругается на, т.к. слова flash в ней нет
в ней по моему используется code
это для переменных, массивов которые записаны в память программ
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
31.03.2014, 09:21  [ТС] 11
у меня то atmel studio 6 ... =(
там нет слова flash вообще, это походу чисто IARовская фишка
0
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,364
Завершенные тесты: 1
31.03.2014, 09:24 12
поднимай документацию на слово code
ну а потом меняй flash code
чтобы много не переписываться создай такой макрос
C++
1
#define flash code
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
31.03.2014, 09:41  [ТС] 13
прикол в том, что происходит неправильная запись в массив символов кирилицы, т.е. к прмиеру если я запигшу в таблицу символов case 's':PORTA=0x08; то загорается диод, т.е. он считывает всё как надо из строки, а вот если тоже самое но с символом кирилоицы то 0 реакции....видимо где-то в недрах настроки компилятора это должно быть...

Добавлено через 15 минут
на слово code он тоже ругается..
0
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,364
Завершенные тесты: 1
31.03.2014, 09:47 14
Цитата Сообщение от dzrkot Посмотреть сообщение
на слово code он тоже ругается..
предлагаешь мне скачать компилятор и разбиратся?
гуглу отменили?
вот одна из многих статей
http://microsin.net/programming/AVR/avrstudio-gcc-progmem.html
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
31.03.2014, 09:59  [ТС] 15
Цитата Сообщение от ValeryS Посмотреть сообщение
предлагаешь мне скачать компилятор и разбиратся?
гуглу отменили?
я собственно тем и занимаюсь, что сижу и гуглю, но толкового по atmel studio (кроме того что это редкостная лажа и в ней есть косяки при работе с массивами) пока не нашёл, и вообще подумываю качнуть что-то другое, жаль бесплатного IAR'а не хватит
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
31.03.2014, 11:01 16
Есть, на ру трекере
1
Voland_
1694 / 1038 / 98
Регистрация: 04.01.2010
Сообщений: 3,517
31.03.2014, 13:06 17
во задачка .
... в зависимости от компилера разные слова объявления переменных и констант для AVR. __flash - такого вообще не встречал, видать, потому что не работал с IAR. в AVR Studio кажись flash имеет обычные указатели const char или char, но работать с ними надо через "prog_mem"- функции, которые читают/пишут в/из flash'a.
в CV AVR компилер автоматически разруливает работу с переменной, если к ней приставлять слова const, flash и eeprom. В зависимости от этого компилер будет действовать по-разному.
ТС, это все сразу не расскажешь - потрудитесь нажать F1 в вашем IDE и почитать про обращение к "памятям" с их помощью. Вот там-то точно не врут .
1
ValeryS
Модератор
7481 / 5664 / 725
Регистрация: 14.02.2011
Сообщений: 19,364
Завершенные тесты: 1
31.03.2014, 13:10 18
Цитата Сообщение от Voland_ Посмотреть сообщение
AVR Studio кажись flash имеет обычные указатели const char или char,
не совсем, нужно еще ключевое слово PROGMEM
в статье на которую я кинул ссылку об этом говорится
1
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
31.03.2014, 13:17 19
уже кидал, но повторюсь
1
dzrkot
zzzZZZ...
523 / 354 / 94
Регистрация: 11.09.2013
Сообщений: 2,039
31.03.2014, 14:49  [ТС] 20
плюнал на этот atmel studio, судя по отзывам об IDE штука весьма плохая, да и в моей новой конторе принято использовать cvavr 1.25 =)) , так что буду им компилировать и не выпендриваться)
0
31.03.2014, 14:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 14:49

Atmel studio 6
Вопрос таков, есть некая библиотека, в lcd_lib.h прототипы, в lcd_lib.c сами функции, оба файла...

Atmel Studio
помогите написать программу работы светофора на языке Assembler

Atmel Studio 6.0
Здравствуйте! Подскажите пожалуйста , не пойму почему при запуске программы компилятор выдает : ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru