Автор Тема: Цифрова електроника – Основата  (Прочетена 20446 пъти)

Vexorian

  • Заклет Роботостроител
  • *****
  • Публикации: 305
    • Профил
Цифрова електроника – Основата
« -: Юни 22, 2009, 02:29:42 am »
1.    Що е цифрова електроника?
Здравейте и добре дошли в първа част от малката ми серия от статии за този огромен и важен раздел от електрониката, които всеки себе почитащ се робостроител трябва да знае. С тази серия се надявам да ви „вкарам” в основните принципи и елементи на този гигант, превзел почти целия свят(и наистина, ако се замислите, рядкост е да се види човек без мобилен телефон или компютър :) ). Ще ви запозная с много интегрални схеми(чипове) и тяхното приложение, не само в роботиката, а и в много други проекти и разработки. Но преди това, много хора сигурно си задават въпроса – „С какво точно се занимава тази електроника, че да има такова голямо влияние върху света?”. В общи линии от самото наименование се разбира с какво точно се занимава този огромен раздел – със цифри или по-точно – данни, представени във вид на множество електрически дигитални сигнали, които за разлика от аналоговите сигнали имат само две състояния. Това са разбира се 1 и 0. Познато нали? :D За момент може да ви се стори абсурдно колко много устройства функционират благодарение на тези две прости нива, но представете си цял масив от сигнали, разширявайки броят на състоянията от 2 на 2 ^ n *(n-броя на сигналите).  Това вече е друго нали? А сега си представете много логически компоненти, които извършват работа за всяко едно състояние и ето ви едно цифрово устройство. В тази тема обаче няма да започвам със самите интегрални схеми. Вместо това ще поясня някои основни принципи, термини и начинания в цифровата електроника, без които анализирането и създаването на дигитални устройства става трудно, и дори - невъзможно. Така, че ако вече сте навътре с материала, може съвсем спокойно да изчакате до следващата ми тема. За начинаещите обаче тази тема е важна и е нужен поне един прочит. Така че наслаждавайте се на темата, която се надявам да ви хареса и имайте търпение – скоро ще подхванем по-сложните неща. :)


* - a ^ n - a на степен n-та
2.    Дигитални сигнали и магистрали
Както споменах, цифровата електроника се занимава главно със данни и манипулация на дигитални сигнали и се използват логически операции за управлението им. Сигурно ви е ясно поне от обща култура, че електрически ток може да тече по проводници на ток, в две посоки, който най-често в аналоговата електроника е променлив.При цифровата електроника принципа е същия, с единствената разлика, че се използва само прав ток  и сигналите имат само две състояния – високо(HIGH) и ниско(LOW), като за високо най-често се използват напрежения над 0V, а за ниско се приема 0V и в редки случаи напрежение по-малко от това за високо ниво и по-голямо от 0V. При много дигитални схеми е прието, че ако дадено ниво задейства определен стадий на едно устройство, то това ниво се счита за активно(active). Тъй като единичен сигнал, не е достатъчен за да се представят повече състояния в дадена система, често се използва множество от сигнали, обединени в масив от сигнални линии, наречен електрическа магистрала (electrical bus), която може да има точно 2^n на брои състояния, както вече споменах и всяка линия се представя цифрово чрез единица наречена бит(bit) (което също е и наименованието на най-малкия тип данни в информатиката и програмирането) и служи да представя съответната линия от магистралата (или единичен сигнал). Всеки бит представя нивото на даден сигнал чрез две цифри – 1 съответно за високо и 0 за ниско ниво респективно.

Бележка: За да избегнем обърквания, от тук нататък когато говорим за състоянието на един бит, ще използваме 1 или 0, докато като говорим за състоянието на дигитален електрически сигнал, ще използваме „високо” или „ниско” ниво.

За да покажем пък големината на дадена магистрала според броя линии, казваме, че тя е n-битова и в електрически схеми и диаграми се представя чрез име, като до него в скоби се записва началото и края на битовата номерация. Сигналните линии, произлизащи от магистралата също носят името й, както и съответния номер в нея. Ето например схема, илюстрираща 8-битова магистрала А:

В случая отделните линии или проводници на сигналите приемат наименованията А0, А1, А2, ... А7 и са представени с по-тънки линии, които се събират в по-дебела, представяща магистралата с име А<0..7>. Има и други начини за именуване на магистрала, например А[0..7], A<0:7>, A [0:7], и т.н. но аз ще се придържам към първия вариант или към следния:

Този път, линията на магистралата е пресечена с по-малки отсечки и до тях е записан броят битове. Добавена е и стрелка, за да показва посоката й. Тук не е нужно изписването на битовата номерация в скоби до името.

Както истинските магистрали, и тези в цифровата електроника са двупосочни, т.е. в един момент данните „пътуват” от изходно към входящо устройство и обратното, но никога и двете едновременно. Прието е, че всички сигнални линии приемат една и съща посока – тази на магистралата към която принадлежат, без изключения и разногласия.

Съществуват два вида магистрали – паралелни(parallel) и серийни(serial). Магистралите които ви илюстрирах се наричат паралелни, тъй като са всъщност масив от проводници, по които пътуват отделни цифрови сигнали за да се постигнат повече от едно състояния и най-важното – сигналите пътуват едновременно. Обикновено се използват в приложения, когато се изисква бързо пренасяне на данни. Серийните обаче, имат съвсем различен метод за пренасяне на данни. Обикновено се състои от два елемента – електрическа цифрова линия(data line), по която пътуват сигналите един по един и специален механизъм за разграничаване на всеки отделен бит и неговото състояние. Типичен механизъм е втора електрическа линия, по която периодично пътуват сигнали, служещи да разграничават всеки отделен бит от магистралата, наречена часовникова линия(clock line), и често сигналите по нея се генерират от т. нар. тактов генератор(което всъщност е осцилатор). Ето пример за една такава 7-битова магистрала, който илюстрира нивата на сигналите по двете линии във времето:

Като за начало, всяка отделна кутийка с номер на цифровата линия е всъщност състоянието на съответния сигнал, или бит, т.е. сигналът може да е с високо или ниско ниво, и съответния бит може да е 1 или 0 респективно. Думичката “idle” в случая означава „неактивен”, и служи да показва състоянието на линиите, когато те са неактивни, т.е. данни не се пренасят по магистралата. Часовниковата линия, както забелязвате е периодичен сигнал, които се редува от високо към ниско ниво и обратното. За да може да се разграничава всеки отделен бит от магистралата, се избира едно ниво на сигнала(в случая високо), и в момента когато това ниво е достигнато, нивото на сигнала от цифровата линия се отчита и добавя в крайното състояние на магистралата. За да може точно да се определи края на изпращането на сигнали(и съответно големината на магистралата), се използва метод за маркиране началото и края на изпращането:

В случая се използват два допълнителни сигнала, различни от този, когато линията е неактивна(idle), за да стартират последователността. В конкретния пример, нивото на тези сигнали е високо. Обикновено, когато се разглежда състоянието на магистралата, битовете представящи тези сигнали се наричат стартиращ(start bit) и завършващ(stop bit). Този тип магистрали не са практични за изпращане на данни между отделни компоненти, но са изключително практични за комуникация между устройства (както и евтини). Такива магистрали са например RS-232, USB, Firewire, LAN и т.н. и те имат специални протоколи за изпращане на данните. Има разбира се и по-прости като SPI, CAN, I2C, 1-Wire и т.н. проектирани специално за комуникация между отделни интегрални схеми, когато е нужно изразходването на по малко входове или изходи на интегралните схеми. По-нататък ще разберете за какво говоря :)

И така, разгледахме различните типове магистрали и техните характеристики, но сигурно още не ви е ясно какво точно са те. Разбрахте, че данни се пренасят по тях, но кога, защо и към какво сигурно още не ви е ясно. Преди да ви покажа действителен пример, където две устройства са „свързани” едно към друго, трябва да знаете как се интерпретират данните. Четете нататък и ще разберете. :)
Викторио Семир Ел Хаким, София 20г.
Аналогова/Цифрова електроника, програмиране
I\'m watching your ass! :D

Vexorian

  • Заклет Роботостроител
  • *****
  • Публикации: 305
    • Профил
Цифрова електроника – Основата
« Отговор #1 -: Юни 22, 2009, 02:35:19 am »
3.    Двоична бройна система
И така, стигнахме до момента където ще опиша как точно се интерпретират данните(или състоянията) постъпващи в дадена електрическа магистрала. Още от начало споменах, че всички състояния на една магистрала се представят чрез цяло, положително число(0 включително). Най-често се използват числата от десетичната бройна система която ние всички познаваме. Но как ще ни помогне тя, ако искаме да разберем състоянието на всеки отделен бит, представящ нивото на съответния му сигнал в магистралата? Решението е двоичната бройна система(binary). Нарича се двоична, тъй като всяка цифра от числото, представено в тази система може да бъде 1 или 0. Сигурно вече се досетихте, че всъщност цифрите на едно двоично число са състоянията(битовете) на сигналите от дадена магистрала, а самото число – състоянието на магистралата в даден момент. Ето пример за двоично число:

 

            100101(2)

 

И така, нека започнем да анализираме този пример. Първото нещо което е нужно да отбележа е, че накрая на числото, в скоби е поставено друго число, репрезентиращо съответната система. Така например 12(8 )е от осмичната бройна система(осми-чна), 12(10) от десетичната и т.н. Това е прост, но ефективен начин да се разграничават числата, представени от различни системи.

След това ще забележите, че числото започва с 1. Подразбира се, че магистралата със съответното състояние има брои сигнали, колкото са цифрите в числото. В нашия случай те са 6, затова приемаме, че нашата магистрала е 6-битова. Но ако например числото е представено така:

 

            00100101(2),

 

тогава числото е състояние на 8-битова магистрала. Ако пък преди това, е изрично казано, че една магистрала е 8-битова, може съвсем спокойно да премахнем нулите в началото и да го запишем, както при първия пример. Друг важен момент при този вид систематизация е, че първия и последния бит, имат специални наименования – Най-високо стоящ бит(MSB – most significant bit) и Най-ниско бит(LSB – least significant bit) – които също можем да наречем и най-ляв и най-десен бит респективно. Последното ви впечатление сигурно е, че това число представено в двоичната бройна система няма нищо общо със същото число в десетичната. Това е така, защото не може да намерите връзка между системите – с една дума, не знаете как да го превърнете в десетично. Но не се тревожете, има си начин и за това. Ще използваме проста математическа формула за да разберем десетичната репрезентация на числото:

 

            X (10) = 2^0*1 + 2^1*0 + 2^2*1 + 2^3*0 + 2^4*0 + 2^5*1 = 1 + 0 + 4 + 32 = 37

            100101(2) = 37(10)

 

И така, какво всъщност направих? Първото което ще забележите е, че умножих всеки бит по 2 на степен, увеличаваща се с 1 на всеки бит, започвайки от 0. Второ ще забележите, че събирам произведенията, за да получа крайния резултат. Така може да си направим една обща формула за превръщане на двоични числа в десетични:

           

            X (10) = 2^0*A0 + 2^1*A1 + 2^2*A2 + 2^3*A3 + 2^n*An,

            където X е числото в десетичната бройна система, An всеки отделен бит, а n – номерът на съответния бит, катo:

             0 ≤ n < k; k – броят битове в числото

 

Сега като изясних вече метода за превръщане от двоично в десетично число, ще разгледаме обратното. Принципът се свежда до разлагане на десетичното число на множители, като последователно се разделя на 2, докато се стигне до резултат равен на 0. По време на процеса ако делимото е четно, поставяме НВБ(най-високо стоящ бит) в новото двоично число – 0, иначе поставяме НВБ – 1 и премахваме дробната част от частното(ако има такава). Ето пример за преобразуване на числото 134 в двоичната бройна система:

 

            134 : 2 = 67 (# - делимото е четно число, поставяме 0) 0

            67 : 2 = 33,5(## - делимото е нечетно число, поставяме 1 и махаме дробната част) 10

            33 : 2 = 16,5(##) 110

            16 : 2 = 8(#) 0110

            8 : 2 = 4 (#) 00110

            4 : 2 = 2 (#) 000110

            2 : 2 = 1 (#) 0000110

            1 : 2 = 0,5(##) 10000110

            0 (Прекратяваме разлагането).

           

            134(10) = 10000110(2)

 

Трябва да отбележа, че начина по които направих превръщането, не е най-удачния. Единствената причина, за да го използвам беше да ви покажа стъпка по стъпка процеса. Ето как най-лесно става записът на превръщането:

 

   134   | 0 (ННБ – най-ниско стоящ бит)

   67   | 1

   33   | 1

   16   | 0

   8   | 0

   4   | 0

   2   | 0

   1   | 1 (НВБ)

   0

 

Това вече е по-друго, нали? :P Както виждате аз направо записвам всеки резултат от делението, без делене на две и направо премахвам дробната част.

Бележка: Като използвате този метод, винаги запомнете да започвате записа на двоичното число от долу нагоре, а не обратното. Следният запис е грешен – 01100001(2).

 

И така, въведох ви в една от най-важните системи за представяне на данни и състояния на дадена магистрала и оттук нататък ще използваме най-вече нея за да анализираме логически операции с цифрови интегрални схеми. Разбира се някои от вас си мислят, че съм изпуснал още 2 системи, много често използвани при интерпретация на данни – осмичната(octal) и шестнадесетичната(hexadecimal). Всъщност съм напълно наясно с този факт, и тактично ще изпусна тези 2 системи, тъй като те рядко се използват в електрониката, а по-скоро в информатиката и програмирането. Повярвайте ми, няма да ви трябват, ако ще се занимавате с проектиране на дигитални устройства. Даже и десетичната не ви трябва :)
Викторио Семир Ел Хаким, София 20г.
Аналогова/Цифрова електроника, програмиране
I\'m watching your ass! :D

Vexorian

  • Заклет Роботостроител
  • *****
  • Публикации: 305
    • Профил
Цифрова електроника – Основата
« Отговор #2 -: Юни 22, 2009, 03:16:47 am »
4.    Интегралните схеми...
...да ама не.. За съжаление няма да се втурвам много в тази тема. Вместо това ще използвам шанса да придам смисъл на това, което четохте досега и ще ви обясня най-важните елементи на чиповете и тъй като сте вече запознати със начина на интерпретация на данни, пътуващи по електрическите магистрали, ще ви покажа пример с две интегрални схеми свързани по-между си. Разгледайте следната диаграма:

Нека започнем анализа. Първо кои са интегралните схеми? На тази диаграма точно, това са жълтите правоъгълници, с множеството „крачета” (pin). Тези крачета, всъщност са проводници, част от интегралната схема, които й позволяват да „контактува” със заобикалящия свят. Всеки такъв проводник, има 3 функции – вход(input ; in), изход(output ; out) и захранващи(power). Входовете на цифровите интегрални схеми служат да приемат цифрови сигнали, които променят поведението на интегралната схема по определен начин, зависейки от нивото на сигнала. Примери за входове са A, B, CLR, CLK, OE, T/R и т.н. Изходите на интегрална схема пък, служат да изпращат цифрови сигнали, нивата на които зависят от поведението на схемата. Такива са QA, QB,QC,..Qx от първата инт. схема. Захранващите крачета, както името подсказва, служат да захранват интегралните схеми от право-токов източник. Обикновено се приема символа GND(земя) за обозначение на крачетата, изискващи захранване от 0V и Vxx(напрежение) за обозначение на крачета изискващи положително напрежение. Има и крачета които са едновременно входове и изходи, като например схемата от дясно, която има крачета с двупосочни стрелки. Всъщност това не означава, че по един и същи проводник минават сигналите в две посоки едновременно, а че с течение на времето те могат да сменят функциите си от входове на изходи и обратното. И именно  това е функцията на тази интегрална схема – да променя посоката на магистралите. Важен елемент който ще забележите, е че повечето крачета са пригодени специално да се свързват с други, обратни на тях по функция чрез електрическа магистрала. Например това са изходите QА - QH от първата нит. схема свързани към входовете A0 – A7 на втората. Всички тези крачета от съответният чип имат една и съща функция и се свързват чрез паралелната магистрала D<0..7>. Така може да се изпрати 8-битово число от първият чип към вторият. Например първата схема може да изпраща числото 45(10) (00101101(2)) към втората. В случая сигналите ще пътуват по съответните линии и състоянията им отдадени от изходите на първата, ще бъдат приети от входовете на втората. Ето най-после един солиден пример за електрическа магистрала в действие. Има още две магистрали – ако забелязвате към входовете B и CLK на първата нит. схема, са свързани две линии DATA и CLOCK, които ако си спомняте са основни елементи на серийна магистрала. Именно този чип, служи да приема данни по серийна магистрала, и да ги изпраща по паралелна. Но как точно, ще се уточни по-нататък. :) Третата магистрала A<0..7> е свързана към входо-изходите (I/O) B0 - B7 на втората нит. схема. Всички тези крачета, специално пригодени за връзка чрез електрически магистрали се наричат портове(port). Сигурно ви е познато това наименование от компютърния хардуер например USB порт, Сериен порт и Паралелния порт. Дотук с интегралните схеми, по-нататък ще разберете повече.
5.    Булева алгебра
През 1854 г. Джордж Бул започва нов раздел от математиката, наречен булева алгебра. За разлика от нормалната алгебра обаче, тази използва двоичната бройна система, и освен нормалните операции като събиране, изваждане и т.н, се извършват и логически операции върху отделни битове. Тези логически операции са „сърцето” на модерната цифрова електроника, тъй като са основните функции, които извършват най-простите интегрални схеми и които ще разгледаме подробно в следващата тема. Като за начало, нека се запознаем с най-простите, а именно логическо ‘НЕ’, ‘И’ и ‘ИЛИ’.

      Логическо ‘НЕ’ (NOT) или инвертор(inverter), е най-простата операция, която служи да ‘обръща’ състоянието на даден бит, т.е. истината(true) става неистина(false), 1 става 0, високото ниво става ниско и обратно. В булевата алгебра се използва специален знак - ¬ (или просто -, ~)  В електрониката обаче, за да се покаже това състояние (независимо дали е за отделен или много битове/цифрови сигнали) се надчертават имената. Например  е обратното състояние на ‘р’. За да покажа действието на тази операция, ще използвам т. нар. таблица на истинността(truth table), която ще използвам всеки път, когато разглеждам операцията на дадено логическо устройство. Нека имаме битовете А и B, като B = ¬А и получаваме следната таблица за инверсия:

Както виждате, таблицата представлява 2 или повече колони и редове. Всяка колона може да е входяща(input) или изходяща(output),т.е. в единия случай се записват текущите състояния на даден бит, а в другия – изходните. На всеки ред се записва комбинацията от битове и изходните им положения. За улеснение, най-често се използват 2 колони, съответно входяща и изходяща, като в всяка се записват под двоично число състоянията на битовете, както ще се убедите по-нататък. Същите тези таблици се използват при анализиране на цифрови у-ва, като А и В са примерно наименованията на входове или изходи. В електрониката или по-точно в електрическите схеми, се използва символътза да илюстрира елементи, които обръщат нивата на ел. сигнали и обикновено този елемент е част от инт. схема. В случая А е вход, а В е изход.

 

            Следващата функция е логическо ‘И’ (AND ; AND gate), още позната и като логическо умножение или конюнкция. За разлика от логическо ‘НЕ’, тази функция изисква 2 или повече входящи битове, за да се извърши операцията. Означава се със следния знак ‘’ в математиката, в електрониката с ‘.’ (знак за умножение) и в програмирането и прочие – с ‘&’. Ще се придържам с означението при електрониката :) Ето и таблицата за тази функция, ако имаме А . B = C:

Както забелязвате единствения случай С да е 1 е когато А и В също са 1, т.е. С е истина ако А и В са истина. Това държание на функцията е много подобно при това на класическото умножение, при което всяко число умножено по 0 е 0, а по 1 дава същото число. В електрониката, елементи използващи електрически нива на сигнали за да се постигне същата функция, се илюстрират със символа в схемите.
            Последната функция логическо ‘ИЛИ’(OR), логическо събиране или дизюнкция е обратната версия на конюнкцията. Означава се с ‘’ в математиката, ‘+’ в електрониката и ‘|’ в програмирането, и както при логическото ‘И’, така и логическото ‘ИЛИ’ изисква 2 или повече операнди. Ето и съответната таблица ако имаме А + В = С:

Операцията е пълна противоположност на логическото ‘И’ както се забелязва, т.е. единственият момент, в който С е 0 е когато и двата входящи бита също са 0, в всички други комбинации С = 1. Ето как изглежда и съответния елемент в електрониката, извършващ тази функция -
         Всички тези операции се прилагат в т.нар. логически уравнения. За да придобиете малка представа за тях и за да опровергая допълнително, че дизюнкцията е действително обратна версия на конюнкцията, нека разгледаме следното уравнение –

             ¬ (¬А . ¬В) = С <=> ¬А . ¬В = ¬(A + B)

Ето как изглежда и таблицата му:

Разглеждайки таблицата и уравнението, лесно се разбира как обръщането на резултата от конюнкция, с обърнати входящи битове става дизюнкция, т.е. ¬ (¬А . ¬В) = С <=> A + B = C. Впрочем представянето на дизюнкцията, чрез конюнкцията в това уравнение е едно от т.нар. логически зависимости или зависимостите на Де Морган. Такава зависимост е и конюнкцията представена чрез дизюнкция –

             ¬ (¬А + ¬В) = С <=> ¬А + ¬В = ¬(A . B)


И по същия начин, получаваме резултат в последната колона, като този при логическо умножение. Тези уравнения могат да се представят в електрониката по следния начин, чрез респективните символи на операциите във вид на ел. схеми:
¬ (¬А . ¬В) = С
¬ (¬А + ¬В) = С
Разгледайте ги и разберете как се формират схеми на други уравнения. Други зависимости са например:
         

            A . (B . C) = (A . B) . C;

            A  + (B + C) = (A + B) + C;

            A + (B . C) = (A + B) . (B + C);

            A . (B + C) = (A . B) + (B . C);

            A + A = A;

            A . A = A;
Не бъркаите С от тези уравнения, с С от предишните. В случая това С е вход.
Логически операции могат да се извършват не само между отделни битове, а и между цели числа, като за целта се представят в двоичната бройна система и се извършва дадена операция между съответните битове. Ето няколко такива изчисления:
            НЕ 68 = ¬ 1000100 = 10111011(2) = 187(10) или  
                        Бележка: При тази операция е задължително да се отбележи максималният брои битове в числото. В случая съм приемаме, че максимума е 8 бита и затова обръщам и нулите в началото на числото(които формално ги няма).

            15 И 25 = 1111 . 11001 = 1001(2) = 9(10) или  

            45 ИЛИ 53 = 101101 + 110101 = 111101(2) = 61(10) или    
Викторио Семир Ел Хаким, София 20г.
Аналогова/Цифрова електроника, програмиране
I\'m watching your ass! :D

Vexorian

  • Заклет Роботостроител
  • *****
  • Публикации: 305
    • Профил
Цифрова електроника – Основата
« Отговор #3 -: Юни 22, 2009, 03:23:04 am »
6.    Задачи
 
В този раздел няма проектиране, тъй като е с цел да ви запознае с най-основните неща свързани с електрониката. Вместо това ще ви дам няколко задачи за да проверите знанията си :)

Като за начало се опитайте да именувате всеки отделен проводник от магистралата показана на следната схема, като имате предвид името й и битовата номерация.

А коя от следните магистрали е грешно начертана?

Представете средната магистрала, като тази от първия пример.
---------------------
Сега като знаете вече как се преобразуват числа от десетичната в двоичната бройна система и обратно, превърнете следните числа:

 
            45(10) = X(2)
            37(10) = X(2)
            1001101(2) = X(10)
            11101010111(2) = X(10)
            58(10) = X(2)
            11111111(2) = X(10)
            257(10) = X(2)
            101010101(2) = X(10)

Ето и малко булеви уравнения, попълнете таблицата за всяко едно от тях:

            |A         |B         |C
            |0         |0         |?
            |0         |1         |?
            |1         |0         |?
            |1         |1         |?

 

            ¬ (A . B) + (A + B) = C
            ¬ (A . (A + B)) = C
            A + (¬A . B) = C
            A . ¬A = C
            A + ¬B = C

---------------------
Представете чрез логическо уравнение всяка от схемите:
1. 2. 3.

И сега малко по-трудно. Извършете логическите операции между числата, имайки предвид, че те са 8-битови. (превърнете ги в двоични и след това извършете действията):
         
            ¬35 = ?
            67 . 33 = ?
            4 + 20 = ?
            ¬55 . 5 + 1 = ?

И това беше засега, надявам се да ви е харесала темата и да сте поразбрали основните работи. Ако да, то следващата тема ще ви е много по-приятна и няма да си губим толкова времето с теория, а направо ще се втурнем в проектирането. Ако имате въпроси питайте, приемам всякакъв вид критики и подкрепа. До следващата тема :)
Викторио Семир Ел Хаким, София 20г.
Аналогова/Цифрова електроника, програмиране
I\'m watching your ass! :D