Area SX srl - Informatica e Microelettronica
0
Torna a: Home Page Soluzioni Microcontrollori BasicX Usare la scheda di espansione IN/OUT SX16 con il Basicx 24

Usare la scheda di espansione IN/OUT SX16 con il Basicx 24

Data di pubblicazione: 16-06-2005 | Versione Italiana  | (No English Version)The English version of this article does not exists
Parole chiave: - BX24 - Domotica - How-To - Schede Area SX -

La scheda di espansione IN/OUT SX16, prodotta da AreaSX S.r.l., la cui documentazione completa è reperibile all 'url:
http://www.areasx.com/index.php?D=1&id=8091
permette, grazie ad un sistema di pilotaggio a shift register, di utilizzare soltanto otto linee del microprocessore a cui è collegata e di avere ben 24 ingressi di cui:

  • 8 ingressi diretti a livelli TTL (0V-5V)
  • 8 ingressi filtrati (filtro CLC) a livelli TTL (0V-5V)
  • 8 ingressi optiosolati a cui è possibile collegare tensioni fino a 24V CC, configurabili anche come ingressi TTL (0V-5V)

    6 uscite a relè che consentono di operare tensioni fino a 48V (2A di carico) e un sensore di temperatura digitale DS1621.

    La scheda SX16 è la soluzione ideale per implementare un completo stadio d'input/output in tutti que progetti in cui si dispone di un numero limitato di linee di I/O.

    In quest'articolo vediamo come interfacciare tutti gli stadi che compongono la SX 16 con il microprocessore della netmedia (http://www.netmedia.com/) Basicx 24

    Gestione dello stadio relè

    Per pilotare i sei relè (2) presenti sulla SX16, è necessario collegare il connettore a vaschetta denominato JP2 (1) visibile nella foto riportata di seguito

    alle linee del basicx secondo lo schema che segue:

    e caricare il programma basic nella memoria del micro attraverso il tool sviluppo NetMedia scaricabile gratuitamente dal sito web http://www.basicx.com.
    Sorgente in basic:

    Option Explicit

    'Linee per comandare i Relè
    Const ODA As Byte = 13
    Const OCL As Byte = 14
    Const STR AS Byte = 15

    'Setta lo stato dei Relè
    Sub Put2Rele (ByVal bByte As Byte)

    Dim bMask As Byte
    Dim bCount As Byte

    bMask = bx00100000
    Call PutPin(ODA, 0)
    Call PutPin(OCL, 0)
    Call PutPin(STR, 0)
    For bCount = 0 to 5
    Call PutPin(OCL, 0)
    Call PutPin(ODA, ((bByte And bMask) \ bMask))
    Call PutPin(OCL, 1)
    bMask = bMask \ 2
    Next
    Call PutPin(STR, 1)
    Call PutPin(STR, 0)
    Call PutPin(ODA, 0)
    Call PutPin(OCL, 0)
    End Sub


    Public Sub Main()
    Debug.Print "COMANDA I RELE' SX16"
    Call Put2Rele(0)
    Debug.Print "TUTTI I RELE' SPENTI"
    Call Delay(3.0)
    Call Put2Rele(1)
    Debug.Print "RELE' 1 ACCESO"
    Call Delay(3.0)
    Call Put2Rele(3)
    Debug.Print "RELE' 1 E 2 ACCESI"
    Call Delay(3.0)
    Call Put2Rele(63)
    Debug.Print "TUTTI I RELE' ACCESI"
    End Sub

    Le linee del BX24 usate per comandare la SX16 (pin 13,14 e 15) possono essere modificate cambiando il valore delle tre costanti

    Const ODA As Byte = 13
    Const OCL As Byte = 14
    Const STR AS Byte = 15

    Gestione dello stadio input

    La SX16, come precedentemente detto, è dotata di ben 24 linee d'ingresso separate a blocchi di otto come visibile in foto

    otto ingressi optiosolati (2) a cui è possibile collegare tensioni fino a 24V CC
    otto ingressi diretti (3) a livelli TTL (0V-5V)
    e otto ingressi filtrati (4) (filtro CLC) a livelli TTL (0V-5V) .
    Le linee di controllo del basicx vanno collegate secondo lo schema che segue:

    Il sorgente da caricare nel BX24 per leggere lo stato dei 24 ingressi uno ad uno, è il seguente:

    Option Explicit

    'Linee per la lettura ingressi
    Const ICL As Byte = 10
    Const IDA As Byte = 11
    Const IPL AS Byte = 12

    Public Sub Main()
    Dim i as byte
    Do
    Debug.Print "LETTURA LINEE INPUT"
    Call PutPin(IPL, 1)
    Call PutPin(IPL, 0) 'Abilito il latch
    Call PutPin(IPL, 1) 'Blocco il latch
    For i=0 to 23
    Call PutPin(ICL, 0) 'Fronte clock basso
    if (i>=0) and (i<=7) then 'Primi 8 bit stato ingressi optoisolai
    Debug.Print "OPTO: " & cstr(i+1) & " stato: " & cstr(GetPin(IDA))
    End if
    If (i>=8) and (i<=15) then
    Debug.Print "TTL: " & cstr(i-7) & " stato: " & cstr(GetPin(IDA))
    End if
    If (i>=16) and (i<=23) then
    Debug.Print "RC: " & cstr(i -15) & " stato: " & cstr(GetPin(IDA))
    End if
    If (i=7) or (i=15) or (i=23) then
    Debug.Print "----------------"
    End if
    Call PutPin(ICL, 1)
    Next
    Call Delay(3.0)
    loop
    End Sub

    Anche per questo esempio vale la stessa regola del precedete e cioè la possibilità di modificare le linee che collegano il BX24 alla SX16, modificando il valore delle costani:

    Const ICL As Byte = 10
    Const IDA As Byte = 11
    Const IPL AS Byte = 12

    Lettura della temperatura:

    Su ogni SX16 è montato un sensore digitale di tempetatura DS1621(2) (datasheet) con range di lettura compreso tra -55°C e +125°C.
    Il tipo di comunicazione usato dal DS1621 è di tipo I2C bus.

    I collegamenti da effettuare tra micro Basicx 24 e il connettore JP2 sull SX16 devomo rispettare il seguente schema elettrico:

    Il sorgente per Basicx 24 che segue può essere usato, oltre che per leggere il sensore montato sulla SX16, anche per comunicare con un DS1621 montato su un proprio circuito.

    Option Explicit

    Const SCL As Byte = 5
    Const SDA As Byte = 6

    '////////////////////////////////////////////////////
    ' I2C BUS FUNCTION
    '////////////////////////////////////////////////////
    Public Sub I2C_in_byte(ByRef I_byte As Byte)
    DIM N as Byte, Y as Byte
    I_byte = 0
    For N = 1 to 8 Step 1
    Call I2C_high_SCL() ' bring clock high
    Y = GetPin(SDA) ' read 6
    Call I2C_low_SCL()
    I_byte = I_byte * 2 + Y ' shift left and insert Y
    Next
    call SendAck()
    End Sub
    '///////////////////////////////////////////////////////////////////////
    Public Sub I2C_out_byte(ByVal O_byte As Byte)

    DIM N as Byte
    For N = 1 TO 8 Step 1
    If (O_byte >= 128) then ' most sig bit is a one
    Call I2C_high_SDA()
    Else
    Call I2C_low_SDA() ' set 6
    End If
    Call I2C_high_SCL() 'Clock Pulse
    Call I2C_low_SCL() 'Clock Pulse
    O_byte = O_byte * 2 ' shift left
    Next
    call ReadAck()'Reads the acknowledge from the slave device.
    End Sub
    '/////////////////////////////////////////////////////////////////////////////
    Public Sub ReadAck() ' allows slave to acknowledge

    Call I2C_high_SDA()
    Call I2C_high_SCL()
    Call delay(0.0)
    Call I2C_low_SCL()
    End Sub
    '///////////////////////////////////////////////////////////////////////////////
    Public Sub I2cReport()

    Dim ackack as Byte
    ackack=GetPin(SDA)
    If ackack=0 Then
    'debug.print "Acknowledge Received"
    Exit Sub
    End If
    End Sub
    '///////////////////////////////////////////////////////////////////////////
    Public Sub SendAck()

    Call I2C_low_SDA()
    Call I2C_high_SCL()
    Call delay(0.0)
    Call I2C_low_SCL()
    Call I2C_high_SDA()
    End Sub
    '///////////////////////////////////////////////////////////////////////////
    Public Sub I2C_start()

    Call I2C_high_SDA()
    Call I2C_high_SCL()
    Call I2C_low_SDA()
    Call I2C_low_SCL()
    End Sub
    '////////////////////////////////////////////////////////////////////////////
    Public Sub I2C_stop()

    Call I2C_low_SCL()
    Call I2C_low_SDA()
    Call I2C_high_SCL()
    Call I2C_high_SDA()
    End Sub
    '///////////////////////////////////////////////////////////////////////////
    Public Sub I2C_high_SDA()

    Call PutPin(SDA, 2) ' tristate
    End Sub
    '//////////////////////////////////////////////////////////////////////////
    Public Sub I2C_high_SCL()

    Call PutPin(SCL, 2) ' tristate
    End Su b
    '///////////////////////////////////////////////////////////////////////////
    Public Sub I2C_low_SDA()

    Call PutPin(SDA, 0) ' hard logic zero
    End Sub
    '/////////////////////////////////////////////////////////////////////////////
    Public Sub I2C_low_SCL()
    Call PutPin(SCL, 0) ' hard logic zero
    End Sub
    '////////////////////////////////////////////////////
    ' END I2C BUS FUNCTION
    '////////////////////////////////////////////////////


    '///////////////////////////////////////////////////
    'DS1621 FUNCTION
    '///////////////////////////////////////////////////
    Public Sub DS1621_init(ByVal address As Byte)
    call I2C_stop()
    call I2C_start()
    call I2C_out_byte(144 or (address*2))
    call I2C_out_byte(172)
    call I2C_out_byte(172)
    call I2C_start()
    call I2C_out_byte(144 or (address*2))
    call I2C_out_byte(238)
    call I2C_stop()
    End Sub
    /////////////////////////////////////////////////////
    Public Function DS1621_readtmp(ByVal address As Byte) as single
    dim Temp as single
    dim tmp(1) as byte
    tmp(0)=0
    tmp(1)=0
    Call I2C_stop()
    Call I2C_start()
    Call I2C_out_byte(144 or (address*2))
    Call I2C_out_byte(170)
    Call I2C_start()
    Call I2C_out_byte(145 or (address*2))
    Call I2C_in_byte(tmp(0))
    If(tmp(0)>127) then
    Temp = csng((not(tmp(0))) + 1)
    Temp = Temp * (-1.0)
    Else
    Temp = csng(tmp(0))
    End if
    Call I2C_in_byte(tmp(1))
    If(tmp(1)=128) then
    Temp = Temp + 0.5
    End if
    Call Delay(0.0)
    Call I2C_stop()
    DS1621_readtmp = Temp
    End Function

    '///////////////////////////////////////////////////
    ' END DS1621 FUNCTION
    '///////////////////////////////////////////////////

    Public Sub Main()
    Dim Temperatura as single
    'Inizializzazioni
    Call DS1621_init(0)
    'Lettura
    Do
    Temperatura = DS1621_readtmp(0)
    Debug.print "Temperatura: " & cstr(Temperatura) & " °C"
    Call Delay(2.0)
    Loop
    End Sub

    Per cambiare le linee del BX24, le costanti da modificare sono:

    Const SCL As Byte = 5
    Const SDA As Byte = 6


    Sorgenti d'esempio SX16_BASICX24.zip
    Schema elettrico della SX16 SX16.pdf


    Segnala questo articolo: 



    Parole chiave: - BX24 - Domotica - How-To - Schede Area SX -

  • Data di pubblicazione: 16-06-2005Hits: 41846
    I marchi citati sono propriet� dei titolari dei relativi diritti. Le caratteristiche tecniche e i prezzi riportati sono indicativi e soggetti a variazioni senza preavviso. Le foto non hanno valore contrattuale. Nonostante accurate verifiche, il presente documento pu� contenere prezzi o specifiche errati. Area SX si scusa in anticipo e si impegna ad evitare tali imprecisioni.

     Area SX store
    In questa sezione puoi ordinare direttamente i prodotti descritti in questo articolo
    SX16-BASE;BX24;BX24-BUNDLE5;SX18-BX24;BX24P;LCD+20X4;LCD16X2S;LCDX;SX18-BX24;SX18-BX24-Bundle,FLEX-OUTPUT
    Tutti i prezzi indicati sono espressi in Euro con IVA e spese di trasporto escluse. I prezzi si riferiscono al singolo pezzo
    DescrizioneCodicePrezzo
    Per maggiori informazioniMicrocontrollore BasicX BX 24
    Il BX24P è un potente microcontrollore programmabile in Basic, un linguaggio molto simile al Visual Basic. Dotato di 16 linee di I/O di cui 8 configurabili come ingressi AD a 10bit, multitasking, gestione matematica in virgola mobile, orologio di sistema, ecc.In ridottissime dimensioni il BX24P racchiude un completo sistema ideale per sviluppare velocemente le proprie applicazioni.
    Il nuovo microprocessore BasicX 24P oltre a supportare un range di temerature industriale(da -40°C a +85°C), è nettamente più performate, infatti rispetto al modello precedente è ben il 29% più veloce e arriva ad eseguire fino a 83.000 istruzioni al secondo.


    Prodotto compliant RoHs
    BX24
    Chiamare lo 06.99.33.02.57 per informazioni e prezzo del prodotto

    Questo prodotto richiede un contatto diretto

    Chiamare lo (+39)06.99.33.02.57 oppure inviare una email ad [email protected] per ulteriori informazioni
    Per maggiori informazioniPer maggiori informazioni
     

    Rivenditori Social Contatti Condizioni
    Area SX s.r.l
    Via Stefano Longanesi 25
    00146 Roma

    Tel: +39.06.99.33.02.57
    Fax: +39.06.62.20.27.85
    P.IVA 06491151004
    Condizioni di vendita
    Procedura di rientro in garanzia
    Condizioni per i rivenditori