LINUX.ORG.RU

Знакомимся с AVR

 , ,


0

2

На скрине процесс начала моего знакомства с микроконтроллерами семейства AVR.
В открытом Vim код на C, а в окне mplayer'а прямая трансляция с веб-камеры, где видна тестовая платформа и тот самый код в действии.
В роли подопытных - ATtiny2313 и LCD RC0802A.
Микроконтроллер шьется через самопальный программатор USBasp
Домашний компьютер - Arch, Openbox с иконками в меню, fbpanel, conky.

>>> Просмотр (1600x1200, 1427 Kb)



Проверено: Shaman007 ()
Последнее исправление: lnx (всего исправлений: 1)

Ответ на: комментарий от Artificial_Thought

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

lnx
() автор топика

Комментарии на русском доставили :)

f1xmAn ★★★★★
()
  while(1){
Lcd…

так верст^W^W татьяныч будет недоволен…

arsi ★★★★★
()
Ответ на: комментарий от lnx

Да в курсе я про то, что там не кодовая таблица, а говно. И пихать таблицу преобразования в контроллер смысла может и нет.

Artificial_Thought ★★★★
()

Вот такие скрины можно и подтверждать. Потому что интересно, а не просто десктоп с обоями и окошко ФМ или плеера. Хотя скрин конечно не ахти, критики и обливания будет полно.

Привет!

wbrer ★★★
()

ШГ, конечно. Но за AVR можно все простить. =)

mopsene ★★★
()

за авр большой +, сам по работе с ними ковыряюсь.

sol13 ★★★★★
()

За avr зачёт. А можно ли чем-нибудь заменить функцию InitLcd и LcdWriteData, там куда-нибудь бит записать, чтобы изображенеи вывелось на дисплей? Чтобы не использовать стандартную библиотеку

xterro ★★★★★
()
Ответ на: комментарий от xterro

всё так и делается, это ни какая не стандартная библиотека.

void InitLcd(void)
{
  //настраиваем порты ввода/вывода
  DDRX_DATA = 0xff;
  PORT_DATA = 0xff;   
  DDRX_SIG = 0xff;
  PORT_SIG |= (1<<RW)|(1<<RS)|(1<<EN);
  ClearBit(PORT_SIG, RW);
  _delay_ms(60);
  LcdWriteCom(0x38); //0b00111000 - 8 разрядная шина, 2 строки
 _delay_ms(60);
  LcdWriteCom(0x0c);  //0b00001111 - дисплей, курсор, мерцание включены
  _delay_ms(60);
  LcdWriteCom(0x01);  //0b00000001 - очистка дисплея
  _delay_ms(60);
  LcdWriteCom(0x06);  //0b00000110 - курсор движется вправо, сдвига нет
    _delay_ms(60);
}

void LcdWriteData(unsigned char data)
{
  _delay_us(100);
  SetBit(PORT_SIG, RS);     //устанавливаем RS в 1
  _delay_us(100);
  PORT_DATA = data;        //выводим данные на шину     
  _delay_us(100);
  SetBit(PORT_SIG, EN);     //устанавливаем Е в 1
  _delay_us(100);
  ClearBit(PORT_SIG, EN);    // устанавливаем Е в 0
}

lnx
() автор топика

более Ъ было бы написать на ассемблере, на AVR он очень красивый и приятный

и да, такой вопрос - судя по фотке, шлейф идет от одной платы к другой, а где проводки, идущие к LCD?

Harald ★★★★★
()
Ответ на: комментарий от Harald

плата слева - программатор USBasp, от нее идет шлейф 10 проводков к макетной плате, на разъеме лежит LCD, а LCD и макетная плата соединены шлейфом в 14 проводков.

lnx
() автор топика

Хорошо, годно. Да ещё и монитор 4:3.

GotF ★★★★★
()

Хороший скрин, дельный.

iLoveoOz ★★★★
()

в чем отлаживаешь? avr-gdb?
к сожалению, лучше AVR Studio я пока ничего не нашел, да и вряд ли есть

Fatalist
()
Ответ на: комментарий от lnx

просто я начал с ассемблера и в AVR Studio, а она блин только под винду, приходится мучится с виртуалками, так как замены нет

Fatalist
()

Лучший скриншот за последний год.

moogle ★★
()
Ответ на: комментарий от exception13

ТолькоCamelCase!

CamelCase нет пути!

ИдуПоУлице, ВдругВижуПареньВФутболке «Under_score_rules!» ЯЕмуСразуСВертушки...ТолькоCamelCase, ТолькоХардкод!

Camel ★★★★★
()
Ответ на: ТолькоCamelCase! от Camel

ИдуПоУлице, ВдругВижуПареньВФутболке «Under_score_rules!» ЯЕмуСразуСВертушки...ТолькоCamelCase, ТолькоХардкод!

таки зависит от ЯП и рулесов по именованию. в C нет пути ВерблюжеРегистру.

exception13 ★★★★★
()
Ответ на: комментарий от Dragon59

Мсье не осилил циклы.

Я думаю, это у него будет следующий шаг - написать над функцией передачи одного байта работу со строками.

Главное, что хоть такой вариант в принципе заработал.

Годный, интересный скриншот.

hobbit ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft
int main( void )
{
  unsigned char message[16]={0xa8,'p',0xb8,0xb3,'e',0xbf,',',' ',' ',' ','L','O','R','!',' '};
  int i=0;
  InitLcd();
  while(i<14)
  {
      LcdWriteData(message[i]);
      if (i==7) LcdWriteCom(0xc0);
      i++;
  }
... ....

так лучше? :)
Но замечу, что в результате размер прошивки вырос на 25% или с 440 байт до 550. А всего на борту только 2К.

lnx
() автор топика
Ответ на: комментарий от anykey_mlya

Потому что изначально схема питается от собственного источника питания В-24М :), с батарейкой было проще разместить схему на столе.
Да и не гоже питать схему от программатора.

lnx
() автор топика
Ответ на: комментарий от hobbit

Работа со строками, по-моему, здесь не совсем уместна - лишняя трата ресурсов на разбор строки или перекодировку, наверное, правильнее будет массивы и циклы.
Но, если не использовать кирилицу или спецсимволы (кодовая таблица в этих LCD никакая), то, возможно, да - со строками будет проще.

lnx
() автор топика

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

Corey
()
Ответ на: комментарий от lnx

Работа со строками, по-моему, здесь не совсем уместна - лишняя трата ресурсов на разбор строки или перекодировку, наверное, правильнее будет массивы и циклы.

Так функция, выводящая строку, и будет представлять собой цикл по массиву :) - просто строки надо взять классические, ASCIIZ.

в результате размер прошивки вырос на 25% или с 440 байт до 550. А всего на борту только 2К.

Если в прошивке текст выводится один раз - то да, это аргумент. А если там будут чередоваться несколько надписей, подозреваю, с какого-то объёма «посимвольный» вывод по жирноте кода переплюнет «массивный». Но это надо пробовать, конечно, я не хочу заниматься бездоказательным теоретизированием.

Удачи.

hobbit ★★★★★
()
Ответ на: комментарий от lnx

так лучше? :) Но замечу, что в результате размер прошивки вырос на 25% или с 440 байт до 550. А всего на борту только 2К.

ну ты прям внук чурова, странно все это ;)

I-Love-Microsoft ★★★★★
()

оО...Такой же программатор собрал себе в прошлом году. Даже внешне похож.

Разработку устройст лучше всего вести подвендой. Например, под nix вообще нет ни ассемблера, ни компилятора под STM8.

exst ★★★★
()
Ответ на: комментарий от lnx

Под 2313 вообще лучше на ассемблере писать. Мое мнение.

exst ★★★★
()
Ответ на: комментарий от exst

AVR ценой вообще не радуют: в моем городе MSP430F247 стоит дешевле mega16. Так что не понимаю о чем вы. Сравните в свободное время характеристики этих камней. Я от avr отказался около двух лет назад, когда был дефицит mega8 и atmel элементарно не мог отгрузить сей камень всем желающим. Цены в местных сетях были просто воздушные (ситуация с этими восьмибитками была примерно как сейчас с HDD).

nand
()

> ATtiny2313

код на C

440 байт


Расчехляйте ассемблер, а С оставьте для ПК ;)

Made_in_China ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.