Автор Тема: Hello AVR  (Прочетена 5355 пъти)

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Hello AVR
« -: Jul 06, 2011, 17:31 »
 Тази тема е нещо като продължение на предишната, “Arduino Scada”, само че са в обратен ред – тази трябваше да е първа.
И тук всичко ще е стъпка по стъпка описано – подробно.
-------------------------
Първо, какъв ще е хардуера? Ами преди време купих  4 бр. Atiny26L, помня за жълти стотинки , сега ги гледам  в комет http://www.comet.bg  по 1,16 евро.
Корпуса им е DIP, и трябва и поне един цокъл  20 крачета. 
Платката е универсална, за проводник използвам жилата от един дефектен кабел за интернет – различни цветове, а и достатъчно тънки за да минат през отворите.Има и още по добър проводник, едножилен и калайдисан, минава през отворите а и няма нужда да се зачиства – направо се запоява, за съжаление не мога да дам магазин. Имам го отдавна, за опроводяване на пратки беше.
Още нещо което трябва за начало, е и един куплонг за паралелният порт, мъжки, DB25, а и съпротивления – от 410 ом до 1к, каквито има.

Този куплонг за пар. Порта ни трябва за програматор, а и за връзка после.
 В сайта на ардуйно.
http://www.arduino.cc/en/Hacking/ParallelProgrammer
http://www.dl1dow.de/inhalt/arduino/bootloader/e_arduino_bootloader.htm
http://www.javiervalcarce.eu/wiki/Program_Arduino_with_AVR-GCC

Това е 'dapa' (Direct AVR Parallel Access cable)
Друг популярен програматор е 'bsd' , протраматор даден от Браян Дийн, автора на програмата 'avrdude' , която ще ползваме за запис.
Въпреки че тези програматори са на паралелният порт, те по същество са серийни. И тъй като не ползват “високо” напрежение за програмеране, имат и ограничения. Високо е в кавички, щото 12Волта едва ли е високо, но програматорите, които го пролзват, могат и да изтриват “заключени” или с грешно програмирани “фюзове”
 чипове.  Но затова после, а засега, за празен чип, и без кварц, тези са перфектни.
На всички линии, които вързваме,  може да сложим предпазно съпротивление 510Ом - 1к примерно, масата – директно.
Кокво може да сбъркаме?
Ами 'dapa' е изпитан кабел, но все пак, какво би станало, ако 16 краче на пар.порта – изход, и   PB7 е програмиран като изход и е във високо ниво?
Теоретичен въпрос, но възниква, затова по добре да има резистор. На схемата с кръгче. Чипа идва фабрично с краче 10 , PB7  ползвано като Reset, вход, за да променим това ни трябва да пограмираме fuse, така че въпроса е теоретичен.
 Втори начин да прецакаме нещата е да програмираме като clock , тактовата честота на процесора, от външен кварц или друго. Чипа идва програмиран на 1МХц вътрешен тактов генератор, това което без проблеми може веднага да сменим е да го сложим на 8МХц., вътрешен тактов генератор.
« Последна редакция: Jul 06, 2011, 18:06 от ivo1204 »
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #1 -: Jul 06, 2011, 22:22 »
 Ако смятаме да позваме аналоговите входове / които са 11 /, трябва да помислим и за стабилно захранване, както и едно важно изискване, което за съжаление в Ардуйно не е спазено – а именно, да развържем аналоговото захранване VACC от другото, това ще повиши точността на преобразуване.

С тази команда ще прочетем Fuse High Byte

avrdude -p t26 -P /dev/parport0  -U hfuse:r:-:h   
при мен - 0х17
но с тях нямаме работа засега, това, което ни интересува е Fuse Low Byte

avrdude -p t26 -P /dev/parport0  -U lfuse:r:-:h
при мен – 0хE4, 8Мнц,  в незаписан чип -  0хЕ1 - 1МХц вътрешен  тактов генератор
И понеже това е малко трудоемка работа, лесното е да ползваме сайта
http://www.engbedded.com/fusecalc/

записа става с
avrdude -c dapa -p t26 -P /dev/parport0  -U lfuse:w:0xE4:m
« Последна редакция: Jul 07, 2011, 14:52 от ivo1204 »
Активен

bot

  • Гост
Re: Hello AVR
« Отговор #2 -: Jul 06, 2011, 23:13 »
 В Ардуино, особенно ако е базирано на ATMega8 разделянето на аналоговото от цифровото захранване е безсмислено защото...
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=20967&start=0
 се оказва че по погрешка са ги свързали вътре в чипа. Това, което си показал е един филтър, който филтрира смущения с определена честота. За развързване е необходимо отделно захранване или отделен стабилизатор по напрежение, който да е свързан не само към аналоговото захранване на чипа ами и към цялата аналогова схема, включваща датчик, операционни усилватели и активни филтри и др. звена на аналоговия интерфейс. В частност, ако източника на сигнал си има автономно захранване може да се използва един и същ източник на напрежение за цифровата и аналогова част, а за по-стабилно измерване да се използва външен източник на опорно напрежение. Пък и вграденото АЦП на този Атмел е само 10 бита, което си е доста нисък клас за съвременните стандарти на цифрово преобразуване.
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #3 -: Jul 07, 2011, 13:27 »
Bot, прав си, че за аналоговите функции имат доста спесифика.  Atmega8, както и  Attiny26L не се произвеждат вече, Arduino ползва Atmega328p /ATmega168 в по старите версии/. Схемата за развързване на AVCC
e препоръчваната от datasheet -a на чипа. За аналоговите функции има доста спесифични изисквания и който смята да ги ползва, е добре да прочете повече
http://www.atmel.com/dyn/products/documents.asp?category_id=163&family_id=607&subfamily_id=760

http://www.atmel.com/dyn/products/documents.asp?category_id=163&family_id=607&subfamily_id=791

!!! Точно тук може и да стане фал, затова – никакъв минус или напрежение на
Areff /PA3 – 17 краче,  засега. !!!
Иначе при начално включване не се ползва вътрешното 2.56 V
 за reference, а Avcc.  По точният вариант е кондезатор към Areff  и превключване на


ADMUX
 регистъра
Voltage Reference Selection

 Internal Voltage Reference (2.56 V) with external capacitor at AREF pin

 (PA3).
 
Bit 7, 6 – REFS1=>1, REFS0 =>1: Reference Selection Bits
 
А пък останалите битове в този регистър са избор на канал, което е крайно неудобно защото постоянно ще ги въртим, така че още по лесно да направим белята...
Има още доста неща и техники при меренето, режими, тариране, спиране цифрова част, и т.н.

“Note you must call analogReference() before using analogRead(); otherwise you will short the internal reference voltage to the AREF pin – possibly damaging your board.”
http://tronixstuff.wordpress.com/2010/12/07/tutorial-arduino-and-the-aref-pin/

 

« Последна редакция: Jul 07, 2011, 14:52 от ivo1204 »
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #4 -: Jul 08, 2011, 12:51 »
Още малко схеми за хардуера
+ леко app да за тест на  крачетата на програматора
Като разгледаме връзката между PC и AVR платката, виждаме
1-во краче на куплунга на паралелният порт е нулевият бит на контролният регистър /адрес 0х37А / , фактически по него се подават стробиращите данните импулси, а по 2-ро краче, /което е нулевият бит на регистъра за данни 0х378 / се подават самите данни.
   Същото това 1-во краче е вързано към SCK /PB2/ на avr чипа. Atiny26 е от старите чипе, няма SPI интерфейс, има много подобният    Universal Serial Interface, USI, който си е същото с няколко липси и ограничения. Тук липсва хардуерната линия SS, слейв селект, която би ни позволила да вържем повече такива платки и PC да избира и комуникира с всяка по отделно без да занимаваме софтуера с адресацията.
Този  USI има режим  3-wire , / което подсказва SPI / и режим 2-wire /това пък е  TWI  или I2C, едно и също е /. Като ще връзваме мотори едва ли ще имаме голям обем на данни, така че  SPI ни устройва.
Липсата на SS ще я компенсираме с хардуерно прекъсване в avr-a.
 USI  може да ползва за стробиране  на данните идващи по 2кр-PC => MOSI =>    PB0     линията 1кр-PC => SCK /PB2/.
Фактически се броят имулсите по SCK , и положителни и отрицателните фронтове.  Когато станат 16, има хардеурно преекъсване и т.н.
Има специален 4 битов брояч / до 16/ за тая цел, той дава прекъсването.
А при всеки положителен фронт на SCK / или отрицателен, ако сме инициализирали така/ се запизва бита от линията MOSI в серииният USI Data Register – USIDR и се шифтва за да се запише следващият бит.
Хардуерното прекъсване трябва да прочете данните и подготви за ново приемане /предаване/.

Сега от другата страна – PC-то.
 Ще трабва да установяваме бит по бит на 2-кр. /D0 data register/ и да превключим два пъти / горе и долу/  SCK / 1-кр 0-бит на контр. Рег./.

 Начините с които може да правим това са 3 – директно, без да се занимаваме
с драйвери, кернели и т.н. Искаме права чрез
ioperm(....)  и си пишем и четем чрез outb(...) inb(...).
Лично на мен тоя най ми харесва, ама почва вой... не искам да споря, макар че баш тоя тоя пар. порт едва ли е притрябвал за нещо друго.
Вторият начин – драйвер, ама да си го пишем … ами ОК, ако си струва труда...
А би си струвало ако например тоя драйвер правеше някакви интерполации в движенията или нещо от тоя ранг. Ама да прати 2 байта позиция ,не си струва.
Третия, който ще ползваме реално / за да не ни одумват/  е чрез  драйвера  ppdev

Характерното при обращенията към ядрото е / ioctl(...)/ , че те връщат резултата от операцията /успешна, неуспешна и т.н./, а за данните, които искаме да получим или пратим  правим променлива, и я предаваме чрез адреса и / &var/.
 
Отваряме порта с 
fd = open("/dev/parport0", O_RDWR);
 и получаваме fd който ще ползваме винаги за тоя порт
 PPRSTATUS, – четене  в статус регистъра
 PPRDATA , PPWDATA четене и запис в DATA регистъра
 PPRCONTROL,  PPWCONTROL четене и запис в CONTROL регистъра
 PPCLAIM   захращане и PPRELEASE пускане на порта
close(fd); затваряне
Това са нещата които ще ползваме, декларирани в  /usr/include/linux/ppdev.h
« Последна редакция: Jul 09, 2011, 12:35 от ivo1204 »
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Hello AVR
« Отговор #5 -: Jul 10, 2011, 18:18 »
Ще си разреша да препоръчам една книга за начинаещи (и аз в момента я чета от любопитство :) )
Practical Arduino Cool Projects For Open Source Hardware от Jonathan Oxer и Hugh Blemings
Активен

0x2B|~0x2B

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #6 -: Jul 11, 2011, 12:15 »
Кода на програмите
--
*Забележка – оказва се, че при инициализиране на посоката на данни за дата регистъра на пар. порта с FE, /всички вход, само D0, 2-ро краче, изход/  не винаги се инициализира порта.
Може би бъркам, а може и да и хардуерен проблем при мен, мързи ме да го търся какво е точно...
В конструктора на pp, pp.c
  data_dir = 0x00;   < =//беше data_dir = 0xFE;
   ioctl(fd, PPDATADIR, &data_dir);
премахва проблема.

Ако искаме да четем входните данни от avr-a, когато изпращаме байт, получаваме по линията MISO, 11-то краче на РС купланга, S7 Status register, PB1/miso,2кр на atiny26/ данните -DI, като първо идва най-старшият бит. Още, S7 e инверсно, то трябва да го инвертираме да получим вярната стойност.Не можем  да четем без да пишем, четенето и изпращането са еднобременнен процес.
**********
 Видяхме, че може да приемаме и получаваме данни от AVR платката , сега малко размишления по въпроса.
***Скоростта?
Ами може да и значително по голяма от тази на Ардуйното, теоретично Fcpu/4
за slave  и Fcpu/2 за  master. Значи теоретично 2МХц в нашият случай – 8 Мхц клок.
ATtiny 26 не се произвежда,  Attiny261/461/861 са наследниците му. При една и съща честота с  една Ардуйно – мега, уно и т. н.  платка  с Attiny261  ще имат значително по голямо бързодействие, поради
когато влиза и излиза от прекъсване, не се запазва  адрес за връщане  в стека – дума, а байт
когато адресира индексно, а то е често, указателите X,Y,Z не са двойки регистри а само младшият байт, например
ld r6,X+ зарежда регистъра и увеличава брояч от регистри r26:r27, a при тинито, само r26
всички регистри са в малките адреси, така че обръщения към тях ще са с 'in'   и 'out' инструкции, по бързи и по къси.
При Ардуйно Мега,  нещата са още по зле, когато флаш програмата ползва функции от далечни адреси / 64к думи/ – зарежда се и нова страница.
Но най – бавното в Ардуйно е ако ползваме готовите му функции, впрочем това го чоплихме.
Разбира се, 2 Мхц е непостижима скорост – при 8 Мхц са само 4 инструкции, при 16 Мхц – 8.
Това е и причината, ако търсим скорост, прекъсването да се пише на асемблер, някои ненужни регистри да се обявят за променливи, и тогава, може да свалим кода на прекъсването да една инстукция
register uint8_t  rec_data  __asm__ (“r2”);

ISR(USI_OVF_vect)
{
rec_data = USIDR;   // чете данните от USI в променлива.
reti
}

.global  USI_OVF_vect
USI_OVF_vect:
in r2, USIDR
reti

Макар и същи по смесъл,  най вероятно ще дадат различен по големина код.Затова, се гледа какво е сътворил gcc в *.lss файла.
 
Скростта е ограничена и от PC , въпреки че пар порта може да е много бързичък. А и от кабела, или от недобри нива на сигналите.
 Въпреки чи не забелязвам проблеми де.

*** Липсва ли ни софтуера на Ардуйно?
Ами според мен не, по скоро липсват готови и тествани  примери, да може да се преизползва код.

*** Сега – напред.
Ако някой е гледал кода, е забелязал, че ползвам  Eclipse за AVR -a, rQT Creator за РС.
QT има едно разширение за технически приложения, libqwt.
Там има много ценни неща, не случайно  Pvbrowser ги ползва.
http://pvbrowser.de/pvbrowser/index.php

Има пакети за Убунту, но как може да ги инсталирами ръчно?
Ами много лесно
svn co https://qwt.svn.sourceforge.net/svnroot/qwt/trunk/qwt
ще ни изтегли най-новото, по натам – първо махаме libqwt* ,дори може да се наложи
cd /usr/lib
rm -f libqwt*
Ако версията не е от svn, може да се наложи да махнем makefile – тата
Трябва обаче да знаем, какво qt*** работи при нас – 3 или 4?
За Убунту
update-alternatives --config qtconfig
и така за moc, uic, qmake, lrealise, designer....
Второто нещо е да редактираме qwtconfig.pri   - къде да инсталира.
Ако се прежалим и да решим  да е
QWT_INSTALL_PREFIX    = /usr
трябва и да видим къде ще отиде плагина за designer. Може и ръчно да си го копираме де.
-------------
qmake
make
make install
------------
За да ползваме новите 'гяволии' в *.pro файла ще добавим и

LIBS += -lqwt

Ако сме компилирали от сорс, ще се компилират и примерите .../qwt/examples и може да ги стартираме – те са в .../qwt/examples/bin.
Вторият пример например, веднага ме навежда на мисълтта, че QwtPlot би могъл да изобразява и аналоговите стойностти, които Attiny – то би могла да праща.
Ако искаме обаче да ги ползваме и променяме за нашите нужди, щракаме на *.pro файла и отваряме проекта с QT Creator. За да го стартираме, премахваме реда include( $${PWD}/../examples.pri ) и добавяме LIBS += -lqwt.


« Последна редакция: Jul 14, 2011, 20:46 от ivo1204 »
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #7 -: Jul 15, 2011, 11:05 »
Разбира се, далеч съм от мисълтта, че тука ще почнеме да изучаваме
С++, QT и т.н. По скоро идеята е да се преизползва максимално лесно кода, защото действително е лесно, ако има реални елементарни примери.
И веднага давам такъв за илюстрация, - генерираме си с QT Creator

File → New file or project →  QT C++ progect /QT Cui app/ → …
→ … → за Base class  избираме Qwidget

Във формата с дизайнера плескаме един QwtPlot, добавяме една
QwtPlotCurve, даваме и стойности и я показваме... / кода проекта е
приложен/

**Няколко думи за документацията
За Eclipse, писахме вече
http://home.gna.org/eclox/#update-site
За QTCreator – мързеливото е изтегляме плагините от
http://dev.kofee.org/projects/qtcreator-doxygen/wiki
отваряме Synaptic, намираме qtcreator, мишка – Properties – Installed Files гледаме къде е директорията с плагините,  /usr/lib/qtcreator/plugins/Nokia  при мен. Разархивираме и плескаме плагините там.
**
« Последна редакция: Jul 20, 2011, 10:42 от ivo1204 »
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #8 -: Jul 23, 2011, 12:30 »
 Значи, до повторим, SPI обмена в нашият случай физически се осъществява, като master / РС-то/ поставя по mosi линията / master output, slave input/ най – старшият бит на предаваният байт. Същото прави и  slave / AVR -a /по линията miso / master input slave outnput/. Данните трябва да са валидни преди да превключим клока – SCK.
Условието за това с съответните линии да са установени правилно като изходи – входове, а   miso е в зависимост на нивото на  SCK, в контролният регистър  USICR с битовете USICS1 ,  USICS0 се определя поляритета на получаваният SCK .
Това е важно, защото по първият му фронт / от 1 в 0 или от 0 в 1/ се записват данните, а по вторият /обратният, съответно 0->1,1->0/ се шифтва регистъра и на линията   miso си появява следващият бит. И така докато се предаде целият байт, след което се извиква хардуерно прекъсване. Регистъра в AVR  slave е блокиран, докато не бъде разблокиран със запис 1-ца в  USIOIF бита /сваля флага за прекъсване/ в регистъра  USISR./USI Status Reg./ Това трябва да стане преди да запишем нови данни в него.
На физическо ниво, протокола е ясен и не би трябвало да има проблеми,това е доста надежден протокол.
В случаят със стъпковият мотор,/ който ползвам за пример/, а и за обмен на прочетени аналогови данни, ни са нужни най-малко два различни байта,  старши и младши, за да предадем/прочетем позиция или една 16 битова величина.
В примера,който прилагам,  ползваме предаване/получаване на 2 байта позиция.
Трябва да уточня, че това си е напълно работещ пример,със стъпково моторче, тестван и реализиран, работещ при мен, не е просто теория...
Още средата и развойната среда / QTCreator и Eclipse/ позволяват едновременно да работим кода и на РС и AVR-a, да стартираме и флашваме фърмуера и РС приложението без абсолютно никакво закачане/откачане на куплонги и платки, както при истинкото Ардуйно, само че много по бързо и на сериозни дев. платформи и среди.
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #9 -: Jul 27, 2011, 12:26 »
Използването на С++ също не е проблем, ако спазваме някои ограничения. В примера, който 
 давам / работещ, същият стъпков мотор / , има един интересен клас, Buffer, който има голяма практическа стойност.
 Подържа два буфера, приемен и предавателен, чрез които фактически обмена между РС и AVR платката e  сведен до писане и четене в  локални масиви и променливи. За разлика от ардуйновското  Serial.read , write, begin, ... поддръжката на комуникацията е  е нулева, а пък и хардуера е многократно облекчен от този обмен, така че почти всички ресурси са за приложението ни. И като се напише един заглавен файл, в който се дефинира, че от еди кой си байт  масива ще е държим еди коя си аналогова стойност, прочетена от AVR -a, абсолютно същият заглавен файл просто ще го включим когато пък пишем приложението за РС.
Може според нуждите да си включи каквото поиска и конфигурира– флагове, контролни суми. Тук освен сериален, имаме и блоков обмен, така че даже AVR може да получава и блокове с данни.  Имам предвид идеята му, а не точно този код, предполагам доста за деляне има по него, а и за оптимизиране, но ще си струва труда де.
 Ограниченията в С++ са няколко, например динамичното създаване на обект с 'new' и 'delete'.
По принцип то не е ограничение, с добавяне на няколко реда лесно го прескачаме,
http://lists.gnu.org/archive/html/avr-libc-dev/2011-02/msg00002.html
А трябва още и ред за изключението. Но, дори и да го сложат в toolchan-a,  не го ползвайте, яде яко памет. И рам, и флаш. Деструктори също не ползвайте за AVR , ненужни и лакоми са.
Подозрителен съм и към конструктора, особено ако смятаме, че цялата програма трябва да е в него.
Иначе С++ си отличен език, кода е малко по дълъг за къси програми, но и нямаме ограничения от ресурси дори за такава въшка като Attiny26.
Активен

BULFON

  • Administrator
  • Напреднали
  • *****
  • Публикации: 478
  • Distribution: Fedora
  • Window Manager: Gnome
    • Профил
Re: Hello AVR
« Отговор #10 -: Jul 27, 2011, 17:28 »
Може би кода, който публикуваш, ще е добре да е качен на някой от сайтовете за хостване на проекти: github, code.google.com...
Аз мога да добавя малка схема за връзка към ATTiny26L през серийния порт и софтуерен UART, който ползва USI. Предимството е, че от страна на компютъра можеш да ползваш проста терминална програма или да пишеш директно (echo) към серийния порт.
« Последна редакция: Jul 27, 2011, 18:02 от BULFON »
Активен

фонокартен телефонен апарат

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #11 -: Jul 28, 2011, 12:22 »
Здравей, BULFON
Схемата и  идеята е естествено добре дошла, 
 Кода, който закачам към постовете е за илюстрация, няма версия и не смятам да го  поддържам, и всеки път има нещо умишлено различно. Като сега например ми си ще да спомена библиотеките 'parapin'
 http://parapin.sourceforge.net/
http://www.youtube.com/watch?v=tE1EfjwX7mk
и с тях ( а и без тях де, ) много лесно може да си напишем една команда -  ' echo_t26 ' например, и не само да пишем, а и да четем с нея от команден ред.
Може и kernel модул, вероятно има и нещо близко написано за да го вземем за основа, не би било трудно, един от най – лесните драйвери би бил... ще видя.
http://tldp.org/LDP/lkmpg/2.6/html/x569.html
 Идеята отначало ме бе такава, но понеже се движа в много строги изисквания – а именно, цена – до кутия цигари, сглобяване – за човек, хванал поялник за пръв път,  закачане на платката и после абсолютно никакво откачане, мощни софтуерни платформи за които да има и Debug, и т.н.
От там на татък, AVRDude, с който си флашваме чипа директно от  Eclipse, ползва ppdev който пък ползва parport_pc, и затова ползвам същите линии  и драйвери за обмен.
Така че като флашнеме, си рънваме програмата, и  си стартираме QTCreator едновременно,
и да може да правим както хардуерно симулиране на чипа и дебъг от  Eclipse, така и софтуерен  - на PC частта и буфера с qDebug,   а при AVR а – с добавяне на  на код, който просто записва каквото ни интересува в буфера и то да стане видимо за нас.
Нещата могат да станат по много и най – различни начини, то и в това и силата /ама и слабостта/ на отворения код.
 За сериалния интерфейс съм закачил в предишната тема много по сериозен софтуер – по компактен и бърз от ардуйновият със същата функционалност и много подобни имена – serial_begin , serial_write – байт, блок и т.н. Както и програми за комуникациите през /dev/ttyUSB0 на Си и Пърл.

П.П
Впрочем, като се поразмеслих малко по въпроса за драйвера, BULFON е абсолютно прав. Наример ако искаме да вържем платката с Proview, кокто в предишната тема,
трябва да имаме файл в /dev/...  например /dev/t26   char,  в който като минимум да пишем и четем, а второта пречина е, че в 2к флаш паметта на чипа едва ли е рентабилно да се декодира протокола на Proview, след като драйвера може да свърши това, а обмена с платката да си остане елементарен. И трето, драйвера трябва да е наша грижа, а не на разработчиците на някои друг продук.
 
**** Сорс на модула t26,
  Tова е груба, срязана начална версия на драйвера t26. На този етап поне при мен не забива компютъра
Модула компилираме с
cd /to_source_dir
make
инсталиране с  insmod t26.ko
 mknod -m 0666 /dev/t26 c xxx 0  - правим /dev/t26 , xxx го четем от dmesg
Преди инсталиране  махаме lp, ppdev, parport => modprobe -r 'name' , засега не е нужно
махане с rmmod t26
Тестване
 с dmesg -c чистим
echo -n  "01234567890123450123456789" >/dev/t26
dmesg
cat /dev/t26
« Последна редакция: Jul 29, 2011, 18:08 от ivo1204 »
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Hello AVR
« Отговор #12 -: Jul 30, 2011, 15:56 »
Драйвера t26, работещ, може да се ползва, в този пост ще слагам последната му версия.
 
echo "9999" >/dev/t26  мести  до позицията 9999
echo "хххх" >/dev/t26   мести  до позицията хххх

« Последна редакция: Jul 31, 2011, 13:40 от ivo1204 »
Активен