Кода на програмите
--
*Забележка – оказва се, че при инициализиране на посоката на данни за дата регистъра на пар. порта с 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.