diablero Postat Iulie 1, 2011 Partajează Postat Iulie 1, 2011 In acest prim tutorial sunt prezentate primele elemente pregatitoare necesare pentru invatarea programarii microcontrollerelor PIC. Acesta va fi continuat de alte tutoriale, in care se vor prezenta gradual: variante de placi de dezvoltare si programatoare, elementele de arhitectura interna, initiere in limbajul de asamblare, glosar de termeni utilizati, etc. Acord de licenţă: Gratuită, totuşi dacă găsiţi valoroasă şi utilă această comunicare sau o utilizaţi în scopuri comerciale, o donaţie simbolică va fi apreciată, pentru a susţine efortul de dezvoltare ulterioară a lucrării. Mulţumesc! Motto: „Dacă orice cunoştinţă pe care o deprinde un copil va fi depăşită moral înainte ca acesta să o poată folosi, care este utilitatea procesului de învăţare? Răspunsul este unul singur: unica abilitate cu adevărat competitivă şi valoroasă pe termen lung este capacitatea de a învăţa.” - Seymour Papert Istoric Anul 1971, prin fabricarea primului procesor de către societatea Intel, este considerat ca fiind cel care marchează începutul erei informaticii industriale. Acesta, setul 4004, proiectat de catre un designer “legendar”, Federico Faggin, devenit ulterior preşedinte al faimoasei societăţi Zilog, avea deja 2300 tranzistoare integrate pe cip şi lucra cu un bus de date de 4 biţi. 4004 cuprindea o memorie fixă de 256 octeţi, o memorie RAM de 32 de biţi cu un port de ieşire de 4 biţi, un registru de deplasare de 10 biţi şi un microprocesor pe 4 biţi. Integrarea unui număr tot mai mare de tranzistoare pe cip a evoluat exponenţial (conform legii lui Moore), în paralel cu creşterea puterii de calcul şi a vitezei de execuţie. Ca “pietre de hotar” pe tărâmul acestor excelente realizări, au urmat celebrele 8080, 8085 şi Z80. Avantajul principal al implementării cu microprocesor faţă de logica denumită “cablată” este aceea că se execută un program plasat în memorie, deci care se poate modifica. Acesta este principiul automatului programabil, la care sunt conectate toate intrările unei aplicaţii, programul administrând ieşirile în virtutea ecuaţiilor predefinite de către proiectant. Logica clasică (cablată), deşi încă extrem de aplicabilă, pare rămasă puţin în urmă faţă de avântul acestor componente noi şi performante, care îmbunătăţesc enorm flexibilitatea utilizării. În ziua de azi, majoritatea realizărilor electronice fac apel la aceste componente, care pot controla eficient practic indiferent ce element de automatizare, de uz casnic sau profesional. Apariţia microcontrollerelor care asociază unui microprocesor “de bază” un program integrat în circuit, ca şi integrarea perifericelor şi a mai multor tipuri de memorie (RAM, EEPROM şi Flash) a permis evoluţia montajelor în sensul simplităţii şi a vitezei. Mai mult decât atât, prin progresul proceselor tehnologice o mulţime de periferice uzuale au fost integrate în circuit (exemple: USB, I2C, RS232, etc.). Ca un rezultat, există în acest moment pe piaţă numeroase familii de microcontrollere. La începutul anilor 90, compania Microchip a proiectat un microcontroller CMOS (Complementary Metal Oxide Semiconductor – termenul se referă la tehnologia de realizare), anume microcontrollerul PIC. Extrem de utilizată la ora actuală, această componentă este un compromis între simplitate în utilizare, rapiditate şi preţ de cost scăzut. MCU (MicroController Unit - abreviere uzuală pentru microcontrollere) din această familie posedă un set de instrucţiuni redus, fapt care îl plasează în familia de circuite de tip RISC (Reduced Instruction Set Computer). Nu în ultimul rând, PIC sunt apreciate pentru curba de învăţare rapidă (este vorba doar de 35 de instrucţiuni de bază). Încă de la apariţie, microcontrollerele PIC au fost fabricate în mai multe versiuni: - PIC UVPROM, care se pot şterge cu ajutorul unei surse de raze ultraviolete (UV) - PIC OTPROM, programabile o singură dată (OTP – One Time Programmable) - PIC EEPROM şi Flash EPROM, care sunt şterse electric şi re-inscriptibile Din familiile de mai sus, practic astăzi ultimele sunt extrem de cunoscute (componentele cu memorie Flash – exemplu PIC 16F628), datorită flexibilităţii în utilizare. Există încă variantele OTP (cu posibilitatea de a fi scrise chiar de către fabricant) pentru aplicaţii ne-modificabile. Deşi re-inscriptibile, cele din gama UV sunt la un preţ de cost ridicat, datorită prezenţei ferestrei de cuarţ plasate pe cip, care permite ştergerea cu raze ultra-violete. Când discutăm despre PIC, discutăm în fond despre o întreagă familie de microcontrollere. Modul în care diverse microcontrollere PIC diferă unele de altele este în cantitatea de resurse integrate pe cip: dimensiunea memoriilor RAM, EEPROM şi Flash, prezenţa / absenţa anumitor periferice (cum ar fi: I2C, RS232 – serial, USB, etc.) sau frecvenţa maximă a oscilatorului (pentru a aminti doar câteva dintre ele). O implicaţie importantă faţă de cele spuse mai sus este necesitatea ca în funcţionare, PIC să opereze în conformitate cu caracteristicile tehnice proprii. Setarea anumitor parametri de funcţionare este prevăzută prin „cuvântul de configurare” (Configuration Word), înainte de punerea în funcţiune. Modul de configurare poate fi definit chiar în etapa elaborării programului. Rezultatul va fi scrierea acestui cuvânt special într-o locaţie rezervată a memoriei program, cunoscut sub numele de „cuvânt de configurare” (Configuration Word). Dar pentru că este un subiect destul de “delicat”, voi reveni pe larg cu o altă ocazie. Preambul Faţă de posibilităţile electronicii cu precădere analogice, în aceste zile tot mai mulţi tineri se simt atraşi de ideea de a învăţa să scrie aplicaţii cu microcontrollere (o componentă atrăgătoare şi magică totodată). Preţul relativ scăzut al componentelor, inteligenţa înglobată în chip, popularitatea mediilor de dezvoltare (unele dintre ele gratuite) şi dorinţa de asigurare de cunoştinţe solide pe termen lung ar putea fi doar câteva dintre motivele acestei tendinţe. Pentru început, prezentarea aceasta ar fi putut avea un caracter general, indiferent dacă s-ar fi referit la microcontrollere de tip PIC (Microchip) sau AVR (Atmel) – pentru a aminti de cele mai utilizate componente de acest tip. Totuşi, pentru fixarea cunoştinţelor şi focalizarea discuţiei, vom alege să ne referim la microcontrollere de tip PIC (produse de către compania Microchip). Este posibil, ca, în viitorul apropiat, o prezentare similară să fie făcută pentru MCU AVR Atmel. În plus, un model de urmat va fi explicarea programelor realizate în asamblor, urmată de varianta lor într-un limbaj de nivel înalt, în scopul unei mai bune fixări a cunoştinţelor. O variantă de limbaj de nivel înalt este JAL, foarte interesant, intuitiv si elegant, având în plus şi o caracteristică imbatabilă: este absolut gratuit. Nu în ultimul rând, JAL este susţinut de o echipă entuziastă de dezvoltatori, care contribuie prin munca lor generoasă la dezvoltarea şi actualizarea bibliotecilor limbajului. Oricum, despre istoricul şi evoluţia limbajului JAL vom mai discuta. Cerinţe preliminare Înainte de a porni la drum, trebuie mai întâi: 1. să aveţi cel puţin o placă de dezvoltare minimală. Pentru asigurarea acestei plăci de dezvoltare minimale există mai multe posibilităţi: fie va fi construită de la zero (în fond sunteţi electronişti, nu-i aşa?), fie va fi una cumpărată (dacă aveţi de unde), fie veţi face un cablaj pe care ulterior vor fi lipite componentele Pentru început este utilă şi o placă de test (gata găurită) sau o placă breadboard (universală – pe care facem conexiunile prin fire). Această placă minimală înseamnă un mare pas înainte. Placa de dezvoltare este concepută pentru a vă ajuta să urmaţi câteva tutoriale, desene şi modele prototip simple. 2. să aveţi acces la un un programator pentru PIC: la început vom alege şi bootloader-ul care va fi scris in microcontrollerul PIC existent pe placa de dezvoltare. Pentru a face acest lucru, veţi avea nevoie de un programator PIC, cel puţin o dată (o singură dată - chiar pentru programarea bootloader-ului). Pe internet veţi găsi o mulţime de exemple de programatoare: PICkit2 clone, JDM, etc. O alternativă este de a construi chiar propriul dvs. programator gratuit. 3. a avea câteva piese obişnuite: un LED şi un rezistor (470 / 560 ohmi, de exemplu). Componentele sunt necesare pentru atingerea punctului culminant al acestui ghid, obiectivul final către care tindem să ajungem, acela de a scrie faimosul program „Hello world!” (în „embedded software” echivalentul său este "BlinkingLED" – vom reveni) 4. (evident) un calculator: fie un PC sub Windows, Mac OSX sau Linux. În funcţie de bootloader-ul selectat, un port RS-232 serial va fi necesar. Deoarece plăcile de bază cu un conector DB-9 (conectorul portului serial) sunt tot mai rare, ca alternativă puteţi folosi un convertor USB-to-serial (despre care vom discuta pe larg în cursul altei lecţii). Odată ce sunteţi gata, ne vom sufleca mânecile, ne vom mobiliza interior şi vom porni la drum... tutorial1.pdf Link spre comentariu
diablero Postat Iulie 10, 2011 Autor Partajează Postat Iulie 10, 2011 Cuvântul de configurareAjunsesem în finalul episodului trecut, la noţiunea de cuvânt de configurare. În lecţia de astăzi vom încerca să lămurim (cu exemple) importanţa acestui concept. Revenim: un mod în care diverse microcontrollere PIC diferă unele faţă de altele este în capacitatea lor de a avea anumiţi parametri de funcţionare prevăzuţi de configurare, atunci când sunt conectaţi la sursa de alimentare. Modurile de configurare sunt definite prin scrierea unui cuvânt special în memoria program, cunoscut sub numele de „cuvânt de configurare” (Configuration Word). Pentru a evita neclarităţile, să facem următoarea convenţie de denumire: în cele ce urmează denumirile microcontroller, MCU sau PIC se referă la aceeaşi entitate logică. Una dintre problemele care apar frecvent este aceea că, atunci când noi utilizatori încep să lucreze cu PIC, înţelegerea modului în care se utilizează şi este configurat acest cuvânt este ignorată de cele mai multe ori, până în momentul „decisiv”, în care un cip trebuie programat şi testat într-o aplicaţie. În acel moment, ei încearcă să îşi dea seama de valorile corecte pentru cuvântul de configurare, dar obţin de cele mai multe ori o valoare incorectă. Valorile incorecte vor provoca o funcţionare haotică a PIC MCU la punere sub tensiunea de alimentare, iar acesta se va reseta aparent la fiecare câteva momente. Nu în ultimul rând, acest tip de erori sunt foarte dificil de depistat...La început, când cineva doreşte să înveţe noţiunile fundamentale ale programării ”embedded”, se loveşte de primele dificultăţi: prezentarea arhitecturii MCU pare extrem de stufoasă, iar prezentarea este lungă şi aridă. Foaia de catalog a dispozitivului este cu atât mai complexă cu cât dispozitivul este înzestrat cu un număr semnificativ de elemente periferice. O bună parte din cărţile mai vechi, care prezentau programarea familiei de microcontrollere PIC, se refereau la dispozitivul PIC 16F84. Azi, acesta este considerat deja “bătrân” şi depăşit moral, dar discuţia avea un avantaj important: datorită simplităţii, PIC 16F84 era un foarte bun exemplu “didactic”. Pentru început, vom căuta să procedăm în mod asemănător... Orice program în MPLAB are la început o structură bine definită, primele trei instrucţiuni fiind practic întotdeauna următoarele (comentariile sunt introduse de simbolul “;”): LIST p=16F84A ; precizarea procesorului #include ; fişierul de includere, precizarea definirii variabilelor ; cuvântul de configurare al dispozitivului __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC; '__CONFIG' precizează parametrii codificaţi în microcontroller în momentul programării. Se ; face apel la definiţiile care se află în fişierul de includere ; Valorile şi definiţiile lor:; _CP_ON protecţia codului ON: imposibil de citit; _CP_OFF protecţia codului OFF; _PWRTE_ON Timer - ul la reset (la power on) activat; _PWRTE_OFF Timer - ul la reset (la power on) dezactivat; _WDT_ON Watch-dog activat ; _WDT_OFF Watch-dog dezactivat; _LP_OSC Oscilator cu cuarţ de frecvenţă joasă ; _XT_OSC Oscilator cu cuarţ de frecvenţă medie ; _HS_OSC Oscilator cu cuarţ de frecvenţă înaltă ; _RC_OSC Oscilator cu reţea RCPrima instrucţiune specifică dispozitivul (procesorul PIC 16F84) cu care se va lucra. A doua instrucţiune, introdusă de semnul “#” se referă la fişierul de includere (similar fişierelor de tip “header” în limbajul C), care va fi folosit implicit în decursul programului. Sintaxa acestei instrucţiuni poate fi uşor înţeleasă de către cei care au avut legături anterioare cu programarea în limbajul C (se poate observa intenţia de „compatibilizare” a proiectanţilor MPLAB cu acest limbaj, de largă utilizare). Câteva explicaţii pentru cei care o văd pentru prima dată.Orice limbaj de programare (inclusiv mediul de programare MPLAB) este important în sine cât şi mai ales datorită resurselor împreună cu care poate fi utilizat. Cea mai simplă înţelegere asupra ideii de resurse o avem atunci când ne referim la bibliotecile limbajului. Fără existenţa acestora, orice utilizator ar trebui să le scrie singur, pentru a realiza cele mai uzuale manevre (operaţii matematice, de intrare / ieşire, etc.). Programarea „embedded” face intens apel la arhitectura MCU – iar cei care au deja primele noţiuni vor înţelege mai bine - mai ales în ceea ce priveşte registrele generale de funcţionare (de exemplu: STATUS, W, TRISA, etc) şi a registrelor de control ale perifericelor (de ex: EECON, ADCON, etc). Faptul că aceste registre sunt denumite într-un mod unic de către fabricant cu nume simbolice, iar aceste denumiri sunt grupate în fişiere cu extensia ”.inc” face mai uşoară munca utilizatorului. Gândiţi-vă, prin absurd, ce s-ar întâmpla dacă, fiecare utilizator ar denumi registrele de control la propria inspiraţie - sigur portabilitatea programelor ar fi inexistentă... Cu alte cuvinte, prin instrucţiunea de includere, i se comunică microcontroller-ului: pentru tot ceea ce urmează, dacă sunt neclarităţi de definiţie a simbolurilor, sursa de referinţă este fişierul p16F84A.inc! Ca un exerciţiu, puteţi deschide acest fişier, pentru a vă lămuri ce conţine – este util tocmai pentru a vă putea corecta eventual, anumite erori de denumire în interiorul programului. Cuvântul de configurare este următoarea declaraţie şi începe cu două linii „underscore”,precedate de un “spaţiu alb” (tasta sau ). Dacă spaţiul alb nu este prezent, un mesaj de avertizare va atenţiona că directiva __CONFIG este în prima coloana (în această coloană fiind permise numai etichetele, restricţie impusă de mediul de dezvoltare MPLAB). Se tastează două linii underscore (“_”) înaintea directivei CONFIG şi apoi numele etichetelorde configurare. Oricare din etichetele de configurare definite în fişierele de includere (“header”) vor fi separate cu un simbol “ampersand” (“&”), ceea ce va permite operarea acestora printr-un “ŞI” logic (astfel fiind posibil calculul „manual” al Configuration Word).În exemplul dat, se configurează resurse de care dispune PIC16F84A:_CP_OFF - protecţia codului este dezactivată _WDT_OFF - utilizarea WDT (Watch Dog Timer) este dezactivată _PWRTE_ON - timer-ul de reset (suplimentar) la punerea sub tensiune este activat _XT_OSC - specificarea funcţionării oscilatorului - cristal de cuarţ extern la frecvenţa medie (de exemplu, 4 MHz)Nu vom descrie încă în detaliu sensul acestor configurări (deşi protecţia codului şi precizarea funcţionării oscilatorului sunt destul de clare). Vom reveni mai pe larg într-o lecţie care va urma, în condiţiile în care vom explica diversele surse de reset ale dispozitivului. Astfel sensul lor va fi mai bine înţeles. Ce este important de spus este faptul că, dacă aţi scrie un program care se adresează PIC 16F84, setările prezentate ar fi din categoria celor “implicite”. O singură observaţie: dacă aţi folosi un cristal de cuarţ la 20 MHz (de exemplu), ar trebui să schimbaţi _XT_OSC în _HS_OSC. Pentru fixarea noţiunilor, vom lua însă un alt exemplu, pentru o familie cu specificaţii extinse, PIC16F87x. Exemplul despre PIC16F877 arată linia __CONFIG definită. În acest exemplu, avem următoarele etichete de configurare (pe unele le putem recunoaşte deja): _CP_OFF protecţia codului este dezactivată _DEBUG_OFF posibilitatea depanării in-circuit a programului prin utilizarea ICD (In Circuit debugger) dezactivată _WRT_ENABLE_ON scrierea în memoria program de tip Flash activată _LVP_ON programarea serială in-circuit a dispozitivului la nivel de tensiune coborât activată_WDT_ON utilizarea WDT (Watch Dog Timer) este activată _BODEN_ON utilizarea circuitului de protecţie la scăderea accidentală a tensiunii de alimentare (Brown-Out Reset) activată _CPD_OFF protecţia programului din memoria de date EEPROM dezactivată _PWRTE_ON timer-ul de reset la punerea sub tensiune este activat _RC_OSC specificarea funcţionării oscilatorului – reţea internă RC În concluzie, primele trei linii de program ar trebui să arate în felul următor: LIST p=16F877A ; precizarea procesorului #include ; fişierul de includere, precizarea definirii variabilelor ; urmate de cuvântul de configurare al dispozitivului __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _LVP_ON & _WDT_ON & _BODEN_ON & _CPD_OFF & _PWRTE_ON & _RC_OSC ...Reamintim: este recomandabilă includerea precizărilor cuvântului de configurare în program (corespunzător specificaţiilor) la momentul scrierii programului. Astfel informatiile sunt stocate în MCU PIC, încât acesta va porni corect, fără nici o intervenţie externă. Procedeul reduce posibilitatea ca dispozitivele să fie programate cu inadvertenţe sau cu configurări incorecte. Link spre comentariu
romica-b Postat Iulie 12, 2011 Partajează Postat Iulie 12, 2011 Apreciez si-ti sunt recunoscator ptr. efortul de-a deslusi ABC-ul lumii mirifice a microcontrollerelor.Stiu ca nu-ti tin de cald multumirile mele,dar as vrea ,totusi sa stii ca eu si probabil si altii asteptam cu nerabdare urmatorul pas.Cu deosebita stima,Romica-b Link spre comentariu
diablero Postat Iulie 13, 2011 Autor Partajează Postat Iulie 13, 2011 Multumesc pentru apreciere, urmatorul pas va fi in curand (mi-am propus, in limita posibilitatilor, sa scriu in fiecare saptamana una sau doua lectii noi). Merge destul de incet, caut sa explic si lucruri care par evidente si care poate ii plictisesc pe unii dintre voi. Vom trece usor - usor si peste partea "plicticoasa" (cuvant de configurare, elemente de arhitectura, etc.) si vom ajunge si la programare (care este oricum mai spectaculoasa). Link spre comentariu
ratza Postat Iulie 13, 2011 Partajează Postat Iulie 13, 2011 Poate par plicticoase pentru unii, dar pentru cei care nu le cunosc vor fi foarte utile. Link spre comentariu
Vizitator didiccna Postat Iulie 15, 2011 Partajează Postat Iulie 15, 2011 Excelenta prezentarea.Va rugam sa continuati.Sunt programator si am parcurs multe carti de programare,inclusiv unele titluri celebre.Ma bucur ca exista o astfel de prezentare si in limba romana.Exact ce trebuie.Mult succes. Link spre comentariu
victor_andrey Postat Iulie 15, 2011 Partajează Postat Iulie 15, 2011 Astept cu nerabdare urmatoarea lectie.......multumirile noastre pentru efortul depus Link spre comentariu
tiritrobo Postat Iulie 16, 2011 Partajează Postat Iulie 16, 2011 Si eu sunt foarte interesat de acest tutorial. Tot timpul ma lovesc de aceasta parte a programarii si anume scrierea sintaxelor. Nu inteleg de exemplu, de ce anumite "linii de program" sunt trecute haotic (cu tab) si nu una sub alta ca in BASIC. Link spre comentariu
diablero Postat Iulie 16, 2011 Autor Partajează Postat Iulie 16, 2011 Va multumesc foarte mult pentru aprecieri, este foarte placut ca cineva sa iti aprecieze munca. In privinta user-ului tiritrobo, incerc sa ii dau un raspuns la intrebarea "Nu inteleg de exemplu, de ce anumite "linii de program" sunt trecute haotic (cu tab) si nu una sub alta ca in BASIC". Cel putin la programarea in C/C++, pe care o voi prezenta "tangential" discutand despre MikroC intr-o lectie care va urma, introducerea de tab-uri creste lizibilitatea codului. Acesta este motivul cel mai important pentru care se introduc indentari. Am auzit ca in SUA chiar exista un concurs de programare in care concurentii sunt invitati sa scrie cat mai putin lizibil, cat mai putin structurat. Am vazut asemenea exemple de cod, dar credeti-ma, este un mare efort sa intelegi ceea ce programatorul a vrut sa spuna (in conditiile in care programul functioneaza perfect!). Deci, si eu recomand introducerea de tab-uri. Link spre comentariu
ratza Postat Iulie 17, 2011 Partajează Postat Iulie 17, 2011 Eu recomand spaţii în locul taburilor. Codul poate arăta extrem de diferit în alt editor. Link spre comentariu
diablero Postat Iulie 17, 2011 Autor Partajează Postat Iulie 17, 2011 Eu recomand spaţii în locul taburilor. Codul poate arăta extrem de diferit în alt editor.Cand spun "tab-uri", ma gandesc la "indentari" in general. Apoi este adevarat ca in editoare diferite, codul arata altfel. Deci recomand utilizarea de indentari (introducerea de 2, 3, 4 spatii albe, practic cat este convenabil si necesar) in ideea de a face codul structurat si usor de citit (nu ar trebui uitata nici recomandarea de folosire intensa a comentariilor). Link spre comentariu
tiritrobo Postat Iulie 17, 2011 Partajează Postat Iulie 17, 2011 introducerea de tab-uri creste lizibilitatea codului.Aha. Multumesc, si astept restul de lumină!! Link spre comentariu
victor_andrey Postat August 12, 2011 Partajează Postat August 12, 2011 nimic.....inca asteptam multam Link spre comentariu
1960 Postat Decembrie 23, 2011 Partajează Postat Decembrie 23, 2011 Şi uite aşa, un tutorial ce începuse să promită, chiar dacă parte din ce-i expus este "puţin" din alte locuri, se termină brusc, cu câteva păreri şi mulţumiri.Nu era mai corect să lăsaţi omul să scrie ce are de scris, fără a discuta despre una, alta?Mulţumirile, părerea mea, ar fi putut fi transmise extrem de simplu, prin mesagerie, iar tutorialul ar fi rămas ceea ce se dorea - UN TUTORIAL, fără alte comentarii.Nu este unicul, cam aşa se termină orice lucru util începătorilor, datorită celor atotştiutori ce încep să facă diverse observaţii.Păcat.Am citit acest început de tutorial, de mai multe ori, dar nu am înţeles mai nimic din el, datorită lipsei de informaţie şi a continuării sale.Ne lovim mereu, cei ca mine, fără cunoştinţe în zona programării pic-urilor, de acelaşi zid, ridicat de cei ce cunosc în amănunt unele "trucuri", dar nu consideră că ar fi de ajutor dacă le-ar explica şi altora, răspunzând de multe ori în răspăr, ori cu fraze ce nu conţin decât o "miştokăreală" de prost gust. Nu este cazul aici. Link spre comentariu
diablero Postat Decembrie 24, 2011 Autor Partajează Postat Decembrie 24, 2011 Nu observatiile "atotstiutorilor" m-au deranjat (desi este un user din slobozia care cred ca irita pe toata lumea cu remarcile si intrebarile sale "inchizitoriale"). Ce m-a deranjat au fost doua lucruri, pe care din respect pentru cei care au citit si apreciat tutorialul, le precizez aici:- anuntarea unui concurs de tutoriale, cu premierea lunara a celui mai bun. Cand l-am intrebat pe conducatorul forumului cum se va stabili acest "cel mai bun" tutorial (prin votul user-ilor, sau prin numarul de citiri, etc), mi s-a raspuns ca nu este vorba de niciun concurs!- chiar in finalul primei luni dupa primele publicari, am remarcat o activitate "suspecta", de crestere anormala (oarecum exponentiala) a numarului de cititori pe un subiect relativ banal (este vorba de doua zile, o sambata si o duminica in care foarte multi utilizatori invatau brusc, cum se lipesc piesele).Cum eu cred ca "ceea ce vorbim ar trebui sa si fumam" iar la concursuri de genul Eurovision nu intentionez sa particip, am abandonat ideea continuarii tutorialului pe acest forum. Sper cu convingere ca voi gasi timp pentru a il muta pe un blog pe care intentionez sa il tin si pe care sa adaug lectii noi relativ constant. Oricum, inca o data, multumiri pentru aprecieri si, cu ocazia Craciunului, un calduros "La Multi Ani!" Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum