MODULO PER LCD COMPATIBILE HD44780

Postato il 26 August 2011

Questo modulo permette la gestione di un comune modulo LCD del tipo HD44780 compatibile, interfacciato con il metodo a 4-bit, nel mio caso si è usato un LCD 16x2 tipo C216L01YBW00. La piedinatura di questo LCD è riportata di seguito

Con lo scopo di ottimizzare l’interfaccia di questo modulo e non renderlo troppo complesso, si sono fatte le seguenti scelte:

  • Il modulo viene interfacciato con un unico connettore a 8 pin: due pin di comando (RS e E), quattro pin di dati e due pin di alimentazione.
  • Il pin R/W viene impostato a livello logico basso in quanto interessa solo scrivere sul display
  • La regolazione del contrastro viene fatta con un trimmer direttamente sul modulo.

Con queste assunzioni lo schema circuitale è il seguente:


Per il controllo di questo modulo lato PIC io utilizzo la libreria predefinita del MikroC per il comando degli LCD. Bisogna sempre verificare nel codice le seguenti cose:

  • Siano stati settati correttamente tutti i bit di configurazione della libreria, come per il seguente esempio:
    sbit LCD_RS at RA4_bit;
    sbit LCD_EN at RB0_bit;
    sbit LCD_D4 at RB1_bit;
    sbit LCD_D5 at RB2_bit;
    sbit LCD_D6 at RB3_bit;
    sbit LCD_D7 at RB4_bit;
    sbit LCD_RS_Direction at TRISA0_bit;
    sbit LCD_EN_Direction at TRISB0_bit;
    sbit LCD_D4_Direction at TRISB1_bit;
    sbit LCD_D5_Direction at TRISB2_bit;
    sbit LCD_D6_Direction at TRISB3_bit;
    sbit LCD_D7_Direction at TRISB4_bit;
    Fate attenzione (controllare molte volte) che l’associazione di pin dichiarata sia effettivamente quella collegata sulla scheda
  • La libreria sia stata inizializzata con la chiamata a Lcd_Init();
  • Per la stampa di una stringa ho creato la seguente funzione

    #define LCD_N_LINE 2 //LCD number of lines
    #define LCD_LINE_LENGHT 16 //LCD line lenght
    #define LCD_SCREEN_LENGHT 32 //LCD_N_LINE * LCD_LINE_LENGHT

    void PrintScreen(char *txt, unsigned short dim){
    /************************************************
    * Print text on LCD
    **************************************************/
    unsigned short i; //Counter

    Lcd_Cmd(_LCD_CLEAR); // Clear display
    Lcd_Cmd(_LCD_RETURN_HOME);

    if(dim > LCD_SCREEN_LENGHT)
    dim = LCD_SCREEN_LENGHT;

    for(i=0; i if(i == LCD_LINE_LENGHT)
    Lcd_Cmd(_LCD_SECOND_ROW);
    Lcd_Chr_Cp(txt[i]);
    }
    }

Passaggio a PHP 5.3

Postato il 06 July 2011

L'hosting TopHost, su cui si appoggia questo blog, è migrato alla versione PHP 5.3. Per quel che riguarda il framework creato da me e sul quale si basa questo blog, ho avuto dei problemi riguardo la funzione __toString() che adesso non accetta più parametri di input.

Di seguito tutte le incompatibilità tra PHP 5.2 e 5.3 come riportate sul sito ufficiale.

Although most existing PHP 5 code should work without changes, please take note of some backward incompatible changes:

  • The newer internal parameter parsing API has been applied across all the extensions bundled with PHP 5.3.x. This parameter parsing API causes functions to return NULL when passed incompatible parameters. There are some exceptions to this rule, such as the get_class() function, which will continue to return FALSE on error.
  • clearstatcache() no longer clears the realpath cache by default.
  • realpath() is now fully platform-independent. Consequence of this is that invalid relative paths such as __FILE__ . "/../x" do not work anymore.
  • The call_user_func() family of functions now propagate $this even if the callee is a parent class.
  • The array functions natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), and array_unique() no longer accept objects passed as arguments. To apply these functions to an object, cast the object to an array first.
  • The behaviour of functions with by-reference parameters called by value has changed. Where previously the function would accept the by-value argument, a fatal error is now emitted. Any previous code passing constants or literals to functions expecting references, will need altering to assign the value to a variable before calling the function.
  • The new mysqlnd library necessitates the use of MySQL 4.1's newer 41-byte password format. Continued use of the old 16-byte passwords will cause mysql_connect() and similar functions to emit the error, "mysqlnd cannot connect to MySQL 4.1+ using old authentication."
  • The new mysqlnd library does not read mysql configuration files (my.cnf/my.ini), as the older libmysql library does. If your code relies on settings in the configuration file, you can load it explicitly with the mysqli_options() function. Note that this means the PDO specific constants PDO::MYSQL_ATTR_READ_DEFAULT_FILE and PDO::MYSQL_ATTR_READ_DEFAULT_GROUP are not defined if MySQL support in PDO is compiled with mysqlnd.
  • The trailing / has been removed from the SplFileInfo class and other related directory classes.
  • The __toString magic method can no longer accept arguments.
  • The magic methods __get, __set, __isset, __unset, and __call must always be public and can no longer be static. Method signatures are now enforced.
  • The __call magic method is now invoked on access to private and protected methods.
  • func_get_arg(), func_get_args() and func_num_args() can no longer be called from the outermost scope of a file that has been included by calling include() or require() from within a function in the calling file.
  • An emulation layer for the MHASH extension to wrap around the Hash extension have been added. However not all the algorithms are covered, notable the s2k hashing algorithm. This means that s2k hashing is no longer available as of PHP 5.3.0.

Fonte: http://php.net/manual/en/migration53.incompatible.php

Sistema di irrigamento: PARTE 1

Postato il 05 July 2011

Il primo progetto che voglio presentare è una centralina per il controllo dell'irrigamento; ho cominciato a lavorare su questo progetto per automatizzare l’inaffiamento delle piante del mio balcone, ad oggi il sistema è in una fase di test e pronto per essere installato in via definitiva.

Vediamo quali sono i requisiti base di questo sistema:

  • Dovrà interfacciare almeno due valvole bistatiche con comando a 9V. Le valvole bi statiche permettono di comandare l’apertura e la chiusura con semplici impulsi di pochi millisecondi, una volta aperta (o chiusa) la valvola mantiene il suo stato senza bisogno di essere alimentata.
  • I tempi di apertura della valvola ed i tempi di ripetizione devo essere impostabili a piacere.
  • Alimentazione dalla rete elettrica 220V
  • Dovrà avere dei LED per l’indicazione dello stato (acceso, circuito aperto, circuito chiuso)

Dai precedenti requisiti è stata derivato il design della centralina: l’elettronica è gestita da un microcontrollore PIC, il software installato sul microcontrollore implementa un timer a 8 bit ad alta precisione interfacciando un oscillatore a quarzo a 8MHz. Il clock interno al microcontrollore permette, in base ai tempi di accensione impostati e cablati nel SW, al microcontrollore di gestire l’apertura e la chiusura della valvola bistatica. Il controllo della valvola avviene comandando su due pin diversi del micro degli impulsi da 5V; questi impulsi, attraverso un ponte a diodi, vengono convertiti in impulsi a 9V e mandati alla valvola. La scheda principale, che contiene microcontrollore e ponte a diodi, è  alimentata a 12V DC e contiene i trasformatori DC/DC per derivare le alimentazioni secondarie di 5V e 9V; la prima per alimentare il processore e la seconda per il ponte a diodi. Come feature aggiuntiva la scheda madre implementa anche l’interfaccia I2C del PIC, questa accortezza fornisce alla centralina una interfaccia digitale con unità esterne. La centralina include una scheda di trasformazione della tensione di alimentazione delle rete industriale 220V AC a 12V DC; questa scheda è provvista di un fusibile sulla linea 220V e di un interruttore. Una serie di LED sulla scheda di alimentazione e su quella principale permettono di valutare lo stato della alimentazione (ON-OFF) e lo stato dell’impianto di irrigazione (OPEN-CLOSED).

Di seguito lo schema della scheda madre, come microcontrollore è stato scelto un PIC16F819 in quanto dispone di tutte le features richieste ed è piuttosto compatto; come ponte a diodi è stato scelto un integrato L293D.

Il nuovo NullSpace

Postato il 04 July 2011

Ecco a voi il nuovo volto di NullSpace! Dopo aver provato per ben due volte, con alterni successi, a lanciare un mio sito/blog non potevo non provarci una terza. Il sito è ancora in una versione primordiale, ma voglio cominciare da subito ad inserire qualche post, per iniziare a popolare da subito il mio spazio virtuale. NullSpace.it è il mio spazio, da riempire con tutto quello che mi passa per la testa, i miei progetti, idee e riflessioni. Ecco cosa troverete tra le pagine di questo blog:

  • I miei progetti di elettronica ed i robot
  • I miei programmi per PC
  • Idee e appunti su tutto ciò che ruota attorno a spazio, informatica, matematica, elettronica,...

Insomma un calderone per la raccolta di tutto ciò che mi interessa, per tenere traccia delle mie piccole 'invenzioni', per essere di aiuto a qualcuno che cerca di attuare la mia stessa idea, o semplicemente per condividere con la rete i miei interessi. Il sito stesso è in realtà uno dei miei progetti, infatti il framework sul quale si basa questo sito è stato interamente sviluppato da me nel corso di diversi anni; tutto il framework è basato su PHP e database MySQL con qualche pizzico di Javascript e script esterni.

Ovviamente consigli e commenti sono graditissimi.

Marco