LINUX.ORG.RU

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

 , ,


0

2

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

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



Проверено: Shaman007 ()

А чего LcdWriteData на каждую буковку руками дёргаем?

Artificial_Thought ★★★★ ()
Ответ на: комментарий от 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 ()
Ответ на: комментарий от lnx

Я думал используется стандартная библиотека arduino. Можно ещё текст функции LcdWriteCom?, спасибо :)

xterro ★★★★★ ()

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

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

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

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

lnx ()

и до сих пор никто не сказал что AVR ненужно, а PIC наше все? лор не торт

vostrik ★★★☆ ()

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

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

У PIC годен лишь их отладчик/программатор - PicKit2. MSP430, STM - вот наше все.

nand ()

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

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

Этот этап еще только предстоит осилить, пока надо еще со многим разобраться.

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

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

Fatalist ()

а батарека зачем? почему от компа не запитали

anykey_mlya ()

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

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

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

мне тоже было бы стыдно если бы я вместо массива + цикл показывал такое... :)

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от 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 ★★ ()
Ответ на: комментарий от nand

> Сравните в свободное время характеристики этих камней.
QFP - спасибо, не надо.

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

А там для avr доступна стандартная библиотека, ну там, чтобы вызвать скажем strlen?

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