duminică, 31 martie 2013

Sursa de tensiune liniară (bazat pe LM317) - Afisor tensiune cu Arduino (4)

Am început lucrul la afișorul de tensiune pentru sursa de tensiune liniară. O să folosesc un controller ATMEGA168P, același controller folosit de Arduino. Deocamdată îmi strâng piesele și o să fabric plăcuța.
PCB-ul arată cam așa deocamdată:
Copie placa Arduino adaptata pentru un singur strat.
PCB ATMEGA168P

PCB-ul în format ExpressPCB îl găsiți aici.

Lista de piese este :
- 4 Condesatoare
- 11 rezistențe 
- controller ATMEGA168P
- regulator de tensiune 5 V
- o diodă de protecție
- oscilator 16 Mhz
- placă PCB
- LCD 16 caractere 2 linii

Specificațiile de bază pentru acest afișor sunt:
S1: Afișorul trebuie să citească în permanență tensiunea de la sursa de tensiune și să o afișeze în timp real
S2: Afișorul trebuie să fie alimentat separat
S3: Afișorul trebuie să afișeze tensiuni între 0 și 16 V
S4: Afișorul trebuie să fie protejat electric de sursa de teniune
S5: Afișorul trebuie să permită conectarea și altor senzori (ca de exemplu un senzor de temperatură care să măsoare temperatura internă a sursei)

O să mai detaliez totul în posturile viitoare pe măsură ce avansez cu proiectul acesta.

O săptămână frumoasă tuturor!

miercuri, 27 martie 2013

Înțelepciune și filozofie (2)

"Viata este ca mersul pe bicicleta. Nu cazi decât dacă te oprești din pedalat".
Claude PEPPER


"Sa nu va fie teama de eșec, ci de ziua în care nu veți mai fi dispuși sa va asumați riscul de a eșua".
Tony ROBBINS


”Faptul ca știm nu este îndeajuns; trebuie sa aplicam. Faptul ca vrem nu este de ajuns; trebuie sa acționăm”.
Johann Wolfgang von GOETHE
 


"Suntem ceea ce facem în mod repetat. Excelenta, prin urmare, nu este un act, ci o obișnuință".
ARISTOTEL
 


"Cel care a reușit să-și învingă îndoielile și temerile a învins și eșecul".
James ALLEN
 


”Putem avea mai mult decât avem deja pentru ca putem deveni mai mult decât ceea ce suntem”.
Jim ROHN
 


"Nimic nu este mai scump decât ceea ce primești pe gratis".
Proverb japonez
 


"Ești inteligent dacă nu crezi decât jumătate din ceea ce auzi. Ești înțelept dacă știi care jumătate".
Rudyard KIPLING
 


"Focul întărește întotdeauna ceea ce nu poate distruge".
Oscar WILDE
 


"Libertatea înseamnă răspundere, de aceea majoritatea oamenilor se tem de ea".
George Bernard SHAW
 


"Nu-ți fie frica sa faci un pas mare. Nu poți trece o prăpastie din doua sărituri mici".
David Lloyd GEORGE
 


"Nu te agita atât, lucrurile cele mai bune se petrec atunci când le aștepți mai puțin".
Gabriel Jose Garcia MARQUEZ
 


"Nebunie: sa faci același lucru iar și iar așteptându-te ca rezultatul să fie diferit".
Albert EINSTEIN
 


"Life is growth. If we stop growing, technically and spiritually, we are as good as dead."
Morihei Ueshiba


 

luni, 25 martie 2013

Circuit de test cu condesatoare şi sursă sinusoidală

Am făcut două simulari zilele trecute cu nişte circuite simple dar din care se pot învăţa multe lucruri. Primul este un circuit trei condensatoare în serie şi trei rezistoare în serie in curent continuu şi în curent alternativ.
După cum se ştie condensatorul în serie cu sursa de curent continuu se comportă ca un întrerupător deschis. Curentul curge prin circuit atat timp cat condensatorul se încarcă. După ce s-a încărcat condensatorul,  în circuit nu mai există miscare de elecrtroni de la borna pozitivă a bateriei la cea negativă.



În schimb acelaşi circuit în curent alternativ se comporta complet diferit. Vezi poza:

Graficul verde este tensiunea sinusoidala la sursa, cel albastru deschis este tensiunea sinusoidala pe condensatoare iar graficul rosu este tensiunea pe rezistenta R1.

vineri, 22 martie 2013

Înțelepciune și filozofie

"Fii ager, caci timpul găsește o soluție și fără ajutorul tău!" SOCRATE

"Inteligenta este arma omului sarac si valetul omului bogat". Jean ANOUILH

"In viata nu trebuie sa cauți răspunsuri imposibile. Este preferabil sa îți reformulezi întrebările".
Aldous HUXLEY


"Daca găsești un drum fără obstacole, probabil ca drumul acela nu duce nicăieri".
John F. KENNEDY


"Un om nu trebuie judecat după calitățile lui, ci după felul în care știe sa și le folosească".
La ROCHEFOUCAULD


"Caracterul fără inteligenta face mult. Inteligenta fără caracter nu face nimic".
CICERO
 


"Când ai de făcut o alegere și nu o faci, aceasta nepronunțare este ea însăși o alegere".
William JAMES
 


”Progresul are loc fiindcă unii oameni îndrăznesc sa fie diferiți”.
Harry MILNER
 


"Important este sa fii capabil în orice moment sa sacrifici tot ce ai pentru ce ai putea sa devii".
Charles DUBOIS
 


"Se știe ca un profesor bun e cel care face ca lucrurile mai grele sa ți se para ușoare".
Grigore MOISIL
 


"O situație trebuie ori rezolvata, ori acceptata. De ce sa o transformam într-o problema?"
Eckhart TOLLE
 


"Fii tu schimbarea și lumea din jur va începe sa se schimbe".
Dr. Gerald EPSTEIN
 


"Învață de la ziua de ieri, trăiește pentru ziua de azi, spera pentru mâine. Lucrul cel mai important este sa nu te oprești din a pune întrebări".
Albert EINSTEIN
 

marți, 19 martie 2013

Factură

Având în vedere ca statul plătește pentru un deținut circa 2400 lei (sursa), am făcut un calcul simplu cam cât a costat sejurul lui Adrian Năstase. Deci din 26 iunie 2012 până 18 martie 2013 sunt aproximativ 9 luni, rezultă 9 * 2400 = 21600 lei. Factura se face pe persoană fizică sau juridică ?

duminică, 17 martie 2013

Sursa de tensiune liniară (bazat pe LM317) - Calcule si masuratori (3)

Am făcut câteva măsurători cu privire la sursa de tensiune construita.
Tensiune peak to peak reprezintă diferența dintre minim și maximul de tensiune a formei de unda

\( U_{peak} =U_{max} - U_{min}\)

Calcularea voltajului peak to peak.

\( U_{rms} = U_{p}/ \sqrt{2} \)
\( U_{p} = U_{rms} * \sqrt{2} \)
\( U_{p} = U_{rms} * 1.42 \)

Exemplu pentru o tensiune de 12 V la bornele transformatorului iar după redresare tensiunea ajunge la 10.6 V. Diferența se disipă prin căldură.
Voltajul peak to peak calculat va fi:

\(U_{p} = 10.6 * 1.42 = 15,052 V\)


În imaginea de mai jos se vede redresarea tensiunii de rețea:

În imaginea de mai jos se poate vedea simularea completă a sursei liniare. Graficul de culoare albastru deschis este tensiunea de intrare. Graficul de culoare verde este tensiunea de iesire LM317 OUT, pentru cazul acesta aceasta tensiune este de 3.47 V.

Fisierul cu simularea îl găsiți aici (LTSpice IV).
Dimensionarea condensatorului C1 care se mai numește și condensator de liniarizare, se face în felul următor:

\(C = (5 * I_{o})/(U_{p}*f)\)
f - este frecventa formei de unda
Vp - tensiunea peak to peak
Io - intensitate curentului de iesire din redresor


În schema simulată la ieșirea redresorului avem totuși o forma de unda care nu se poate folosi pentru nici un microcontroler. Acestă forma de unda se observa în imagine reprezentata de linia roșie și care are următoarea formulă:

\(U_{r} = U_{p}/( R_{L}* C) * \delta{t}\)


Tensiunea la ieșirea redresorului mai îndetaliu arată cam așa:

Microcontrolerele sunt foarte sensibile din acest punct de vedere și tensiunea necesita o regularizare, adică o tensiune stabilă de 5 V de exemplu.
Calculele și măsurătorile pentru partea a doua a simulării o să o prezint într-un post viitor.
Spor la treabă !

sâmbătă, 16 martie 2013

Produse traditionale

Cumpărați produse tradiționale ! Orice bănuț dat oamenilor din regiunea dumneavoastră îi ajută să vă aducă în fiecare săptămâna produse ecologice, proaspete și gustoase. Regiunea se va dezvolta economic și toată lumea va fi fericită :). Enumăr câteva produse pe care le apreciez: mere, suc de mere, oua, pâine, lapte, cartofi, ceapa, usturoi,carne, brânzeturi și altele. De exemplu am cumpărat azi un suc de mere îmbuteliat la Slimnic care mă unge la suflet :).
Articolul de mai jos e mai vechi dar târgul de la Sala Transilvania Sibiu se tine încă în fiecare sâmbătă:
http://adevarul.ro/locale/sibiu/targ-produse-traditionale-ecologice-sala-transilvania-1_50acb4c77c42d5a6638899fb/index.html
Și aici aveți site-ul de produse tradiționale din Sibiu: www.produsetraditionalesibiu.ro
Nu mai cumpărați produse străine, pentru ca sunt mai proaste și mai scumpe.De exemplu usturoiul din China este net inferior calitativ celui din România.
Spor la cumpărături !

marți, 5 martie 2013

Instrumente pentru documentaţie automatizată

Doxygen este cel mai cunoscut tool care generează documentaţie şi referinţe API similar cu javadoc.Este folosit pentru mai mult comentariile oficiale și nu este neapărat folosit pentru toate comentariile din cod.
Poate produce documentație de calitate, care dacă este foarte bine redactată poate face parte din documentaţia oficială a unui produs, şi care poate ajunge chiar la clienţi. Documentaţia rezultată este utilizată mai ales pentru faza de design unde toate variabilele globale şi funcţiile globale API (şi nu numai) sunt descrise în detaliu. Poate produce html, pdf, chm, rtf, xml, etc. Pentru mai multe detalii vezi aici http://www.doxygen.org
Exemplu - Doxygen function header:
/** \brief Returns the value of the specified port
**
** This function reads and returns the value of the
** port specified by the parameter \p PortId.
**
** \pre The \p PortId is valid (only checked in
** development mode)
**
** \param[in] PortId The numeric id of the port
**
** \retval The value of the port, range depends on the
** width of the port 0 .. 2ˆPortWidth-1
** \retval 0 if \p PortId is invalid
** (development mode only) */
extern PortLevelType ReadPort (PortType PortId);

Părerea mea este să folosiţi cu încredere acest tool care vă poate scuti de o grămadă de muncă.
Alternative pentru acest tool găsiţi aici .

luni, 4 martie 2013

TRUE sau FALSE

Care credeţi că pot fi valorile reale ale acestor două define-uri ?
Primul răspuns este normal TRUE=1 și FALSE=0. Asa am învăţat toţi că ar trebui să fie.
Prin urmare codul sursă va arăta cam aşa:
#include "stdio.h"

/*#define TRUE 0x01U */
const unsigned char TRUE =1;
/*#define FALSE 0x00U */
const unsigned char FALSE=0;

int main(void)
{
  unsigned char i;
  unsigned char flag = FALSE;
  /* alte procesări aici */
  /* se modifică flag-ul */
  /* alte procesări aici */
  if(flag == TRUE)
  {
    /* Temperatura componenta vitală este OK */
    /* Afisare flag */
    printf("%d",flag);
  } 
  else
  {
    if(flag == FALSE)
    {
      /* Temperatura componenta vitală nu este OK */
      /* Afisare flag */
      printf("%d",flag);
     }
  }
  return 1;
}
Programul de mai sus va rula perfect ... într-o lume perfectă.
Dar să presupunem că valoare define-urilor se modifică involuntar în timpul funcţionării inversându-se valorile. Cum se poate întâmpla acest lucru ? Locaţia din FLASH unde este stocat define-ul este alterat din cauza unei defecţiuni este un posibil răspuns. Puţin probabil puteţi spune, dar există posibilitatea aceasta pentru că şi în componentele electronice se pot produce defecţiuni neaşteptate.
Imaginați-vă dacă acest cod rulează pe un ECU într-un avion plin cu pasageri şi că măsoară de exemplu temperatura unei componente vitale pentru siguranţa zborului ....
Ce va rezulta ? Execuţia codului se va inversa !!!
Şi mai departe vă las pe voi să vă imaginaţi continuarea. Se poate întâmpla orice ... Această componentă văzută ca stricată va alerta pilotul, care probabil va decide să aterizeze forţat de miri pe unde.
Cum s-ar putea preveni această situaţie ?
O posibilă rezolvare propusă de mine este:
#include "stdio.h"

/*#define TRUE 0xAAU in binar 1010 1010 */
const unsigned char TRUE = 0xAAU;
/*#define FALSE 0x55U in binar 0101 0101 */
const unsigned char FALSE = 0x55U;

int main(void)
{
  unsigned char i;
  unsigned char flag = FLASE;
  /* alte procesări aici */
  /* se modifică flag-ul */
  /* alte procesări aici */
  if(flag == TRUE)
  {
    /* Temperatura componenta vitală este OK */
    /* Afisare flag */
    printf("%d",flag);
  } 
  else
  {
    if(flag == FALSE)
    {
      /* Temperatura componenta vitală nu este OK */
      /* Afisare flag */
      printf("%d",flag);
     }
     else 
     {
       /* eroare grava de procesare */
       /* iniţiază procedura de backup */
       printf("%d",flag);
       return -1;
     }
  }
  return 1;
}

Chiar dacă un bit din unul din define-uri se va modifica accidental, acest lucru va fi detectat de către codul sursă. Ideea de bază este că se poate întâmpla orice şi codul sursă trebuie să fie pregătit pentru orice situaţie neaşteptată. Acest stil de programare se numeşte "programare defensivă" şi este recomandată mai ales pentru componente de care depinde siguranţa oamenilor sau a unor componente greu de înlocuit. De exemplu pentru airbaguri, aeronautică, ECU-uri pentru spaţiul cosmic. În acest caz este foarte bine să aplicăm această gândirea excesiv de preventivă. Mai bine să fie copilul în siguranţă decât să cadă drobul de sare de pe dulap şi să omoare copilul. :) Prostia omenească de Ion Creangă
PS: Am primit atenţionarea din partea unui coleg despre define-uri, care de fapt se înlocuiesc în momentul preprocesării ceea ce face exemplul meu aproape inutil, şi am schimbat cu nişte constante . Constatele sunt stocate in FLASH şi se pot altera, dar în acelaşi timp în timpul rularii se folosesc în mod direct.

sâmbătă, 2 martie 2013

Statul la coadă la plata întreținerii

Hai să ne imaginăm o activitate mai plictisitoare decât statul la coadă pentru plata întreținerii :-w.... Tre să recunoașteți că nu prea există o astfel de activitate. Eu urăsc să stau la coadă poate de asta mi se pare atât de plictisitor. Minute, câteodată chiar zeci de minute  pierdute din viață pentru a da niște bani unui individ cu privire acră. Acest omuleț are nevoie de vreo 5 - 8 minute până "rezolvă" un "client" și nu a auzit în viața lui de plata cu cardul și nici de vreo casă de marcat (sunt curios cum arată contabilitatea asociației). De ce durează așa de mult ?! ....păi, procedează în felul următor dar cu o viteză fenomenal de mică:
1. caută numele "clientului" în niște dosare,
2. chitanțele le scrie de mână,
3. ștampilează carnetul de plată
3. ia banii, $-)
4. dă rest (opțional)  @-)
De obicei restul este rotunjit automat astfel cei 10-20 bani îi donezi individului. x( OK... dar casieria este deschisă doar de două ori pe săptămână de la 17:30 la 20:00 (cred) și de fiecare dată găsesc cel putin 10 inși la coadă. Dar asta nu este tot, "clienții" plătesc de obicei mai multor rude și cunoștințe care au găsit o cale să evite statul la coadă. Acum faceți înmulțirile: (10 clienți * 2 cunoștințe) * 6 minute => 120 min într-o zi aglomerată.  E o adevărată fericire pe capul tău când ai plătit și ieși de la casierie ...cred că nici de la târfe nu ieși așa de fericit .... aaaaaam scăăăăăpaaatttttt .. :-j dar peste 10 min. îți amintești că peste 2 luni tre să te duci iar la plata întreținerii :( .  Eu unul sincer nu rezist să stau la coadă în fiecare lună și plătesc două o dată.

Prin contrast de exemplu toate celelalte plăți le fac prin internet și nu durează mai mult de  5 min. (toate).