Autore Topic: Espandere GPIO fonera  (Letto 19653 volte)

SilverFox89

  • Full Member
  • ***
  • Post: 183
    • Mostra profilo
    • Fonera Repository
    • E-mail
Re: Espandere GPIO fonera
« Risposta #90 il: Luglio 05, 2010, 01:39:18 pm »
I collegamenti sono esatti  8-)

Citazione
Poi setto i gpio con
"i2c-gpio-custom bus0=0,4,7"
 e vado a controllare con il solito "i2cdetect 0"

Questo te lo confermo  :wink:

Citazione
mentre se invece al posto di VCC lo collego a GRD a livello logico 0

Questo non so che dire..? da provare  :roll:
Fonera Repository -> http://silverfox89.dyndns.org/

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #91 il: Luglio 05, 2010, 04:16:12 pm »
Provato...

Codice: [Seleziona]
root@OpenWrt:~#
root@OpenWrt:~# insmod i2c-gpio-custom bus0=0,4,7

da ssh non da risposta ma da seriale l'output ?

Codice: [Seleziona]
i2c-gpio i2c-gpio.0: using pins 4 (SDA) and 7 (SCL)

poi...

Codice: [Seleziona]
root@OpenWrt:~# i2cdetect -l
i2c-0 i2c       i2c-gpio0                       I2C adapter

e...

Codice: [Seleziona]
root@OpenWrt:~# i2cdetect 0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                        

e rileva il PCF8574 collegato. questo, preso da futurlec,...





Vado a leggere....

Codice: [Seleziona]
oot@OpenWrt:~# i2cget 0 0x38
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will read from device file /dev/i2c-0, chip address 0x38, current data
address, using read byte.
Continue? [Y/n] y
0xff
root@OpenWrt:~#

Sembra funzioni...
« Ultima modifica: Luglio 06, 2010, 08:42:54 pm da truthahn »

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #92 il: Luglio 05, 2010, 05:31:22 pm »
Provato a collegare una scheda rel? e funziona... ma non tutte e 8 le uscite... me le accoppia 4 a 4... come si vede anche sopra mi legge solo due valori e non 8.
0xff
Prova e riprova ma se setto le uscite con

i2cset 0 0x38 0x00 ..... funziona
ma con
i2cset 0 0x38 0x00000000 nisba
dice che "data value out of range".

Vabb? ora devo scappare al lavoro... se qualcuno mi da una dritta sarebbe gradita.

Altra cosa...
Provato a collegare un ds1307 ma ? invisibile.


SilverFox89

  • Full Member
  • ***
  • Post: 183
    • Mostra profilo
    • Fonera Repository
    • E-mail
Re: Espandere GPIO fonera
« Risposta #93 il: Luglio 05, 2010, 08:12:14 pm »
Cerco di spiegare il concetto..spero si capisca  :wink:

I valori che si possono attribuire al PCF variano da 0x00 a 0xff, questo range contiene tutte le combinazioni possibili e immaginabili gestibili dagli 8 bit.

Calcolarlo ? molto semplice basta solo capire il meccanismo. Esempi:
1. Se vogliamo impostare la prima uscita a 1 e tutte le altre a 0, ovvero 10000000, dobbiamo settare 0x01
2. Se vogliamo impostare la seconda uscita a 1 e tutte le altre a 0, ovvero 01000000, dobbiamo settare 0x02
3. Se vogliamo impostare la terza uscita a 1 e tutte le altre a 0, ovvero 00100000, dobbiamo settare 0x04

La chiave del sistema sta nel convertire la maschera binaria in esadecimale invertendo la maschera stessa nel caso in cui i secondi 4 bit siano uguali a 0000..ovvero se vogliamo impostare questa maschera: 01010000, prendiamo i primi 4 bit |0101| e li invertiamo |1010| (ho ignorato gli altri 4 bit perch? valgono 0000), li trasformiamo in esadecimale e avremo 0x0a

Se invece nella maschera i primi 4 bit sono uguali a 0000, dobbiamo invertire i secondi 4 bit e aggiungere 0000..ovvero se vogliamo impostare questa maschera: 00000001, prendiamo i secondi 4 bit |0001| e li invertiamo |1000| e aggiungiamo 0000, li trasformiamo in esadeciamle e avremo 0x80

Spero di essere stato chiaro  8-)

Una piccola carrellata di esempi in chiusura:
10000000 0x01
01000000 0x02
11000000 0x03
00100000 0x04
10100000 0x05
01100000 0x06
11100000 0x07
00010000 0x08
10010000 0x09
01010000 0x0a
.............
00000001 0x80
.............
10000001 0x81
.............
10101010 0xaa
.............
11111111 0xff
« Ultima modifica: Ottobre 18, 2010, 10:49:32 am da SilverFox89 »
Fonera Repository -> http://silverfox89.dyndns.org/

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #94 il: Luglio 06, 2010, 12:35:15 pm »
Chiarissimo!!!!!!!  :lol: :lol: :lol:
Grazie.
Poi provo.

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #95 il: Luglio 06, 2010, 03:40:04 pm »
Perfetto!!! Funziona alla grande!! :lol:

Il problema da risolver ora mi sembra questo:
supponiamo di avere collegato al PCF8574 8 rel? che comandano altrettante periferiche. Diciamo che all'inizio attivo la numero 1,3,5,7 cio? 10101010 cio? do un
ic2set 0 0x38 0xaa

supponiamo ora di dover disattivare la 7 e attivare la 2 senza disattivare la 1 la 3 e la 5 tramite script, quindi che non "vede" cosa ci sta attivato e cosa no.
Dovr? leggere il valore all'indirizzo 0x38 (in esadecimale), trasformarlo in binario, controllare quali bit sono attivi, memorizzarli, costruire un nuovo numero binario che tenga conto dei bit da portare a "0", cambiare a "1" quelli attivati dall'ultimo comando, controllare se i primi o secondi 4 bit sono uguali a 0, invertire o meno la sequenza, trasformare il tutto in esadecimale e darlo in pasto a i2cset. Mi sembra complicato. o ci sta anche qui una soluzione "umana".

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #96 il: Luglio 06, 2010, 06:13:50 pm »
Non riesco invece a far andare un DS1307 (Real-Time Clock) che per me sarebbe importante perch? l'idea ? quella di utilizzare il tutto nei prossimi collegamenti di controllo di strutture pubbliche e dovendo programmare riscaldamento, luci e altro avere un Real-Time Clock mi eliminerebbe il rischio di caduta dell'ntp.
Sapete se con il DS1307 ci son problemi o necessita di qualche aggiunta?
C'? anche la possibilit? che lo abbia fatto fuori in precedenti mille esperimenti. :roll:

? questo, preso da futurlec

« Ultima modifica: Luglio 06, 2010, 08:40:29 pm da truthahn »

SilverFox89

  • Full Member
  • ***
  • Post: 183
    • Mostra profilo
    • Fonera Repository
    • E-mail
Re: Espandere GPIO fonera
« Risposta #97 il: Luglio 06, 2010, 08:53:47 pm »
Citazione
Mi sembra complicato. o ci sta anche qui una soluzione "umana".

Su due piedi non saprei risponderti..fai "prima" a provare  :wink:

Citazione
C'? anche la possibilit? che lo abbia fatto fuori in precedenti mille esperimenti.

Sicuramente  l'hai fatto fuori :-) il DS1307 ? pienamente compatibile..
« Ultima modifica: Luglio 06, 2010, 09:13:32 pm da SilverFox89 »
Fonera Repository -> http://silverfox89.dyndns.org/

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #98 il: Luglio 06, 2010, 10:44:56 pm »
Ordinati 4 nuovi, solo i ds1307,... vedremo se me li fulmino tutti. Son fortissimo in questo. :-D

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #99 il: Luglio 09, 2010, 08:59:14 am »
SilverFox molto gentilmente mi ha inviato una serie di applicativi i2c compilabili per OpenWrt, si tratta di applicativi per gestire pcf8574, ds1307, ds1621 1 lcd. Li ho compilati su backfire per il wrt54gl e qui trovate l'ipk...
http://82.186.215.122/truthrepo/i2c/i2c-utils_1.0_brcm47xx.ipk
Ho avuto m odo di utilizzare solo "pcf8574" in quanto il "ds1307" me lo son bruciato e gli altri non li ho (ancora).

Vediamo un po':
Ho collegato il pcf8574 al bus0 all'indirizzo 0x3f

questa la sintassi del comando:
Codice: [Seleziona]
root@OpenWrt:~# pcf8574
Usage :
pcf8574 -d /dev/i2c-x -a address -w mask -r -v
root@OpenWrt:~#

andiamo a leggere i valori dell'indirizzo...

Codice: [Seleziona]
root@OpenWrt:~# pcf8574 -d /dev/i2c-0 -a 0x3f -r -v
Testing
LSB                  MSB
 0  0  0  0  0  0  0  0
root@OpenWrt:~#

modifichiamo ...
Codice: [Seleziona]
root@OpenWrt:~# pcf8574 -d /dev/i2c-0 -a 0x3f -w 0xaa
root@OpenWrt:~# pcf8574 -d /dev/i2c-0 -a 0x3f -r -v
Testing
LSB                  MSB
 0  1  0  1  0  1  0  1
root@OpenWrt:~#

la comodit? dell'applicativo mi sembra essere quella di poter vedere immediatamente lo stato dei bit e quindi di avere un riscontro immediato e utile per uno script di verifica e cambiamento di stato.

La stessa cosa si pu? fare con i2cset ma con la necessit? di trasformare poi l'esadecimale in binario.
Sarebbe ottimo poter avere uno script che da in pasto a "pcf8574" un binario e ci pensasse lui a fare il lavoro, tipo

Codice: [Seleziona]
root@OpenWrt:~# pcf8574 -d /dev/i2c-0 -a 0x3f -wb 01101011  :roll:

cos? si avrebbe un controllo immediato...


truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #100 il: Luglio 09, 2010, 10:33:14 am »
Per trasformare i valori nelle varie basi si pu? comunque velocemente utilizzare "bc" installabile dal repo ufficiale di openwrt..
esempio:
trasformare 0xaa in binario

prima si trasforma in decimale
Codice: [Seleziona]
truthahn@truthahn-laptop:~$ echo "ibase=16; AA" | bc
170

e poi in binario

Codice: [Seleziona]
truthahn@truthahn-laptop:~$ echo "obase=2; 170" | bc
10101010

Naturalmente invertendo i valori a "ibase"  e "obase" si ottiene il contrario.
 
« Ultima modifica: Luglio 09, 2010, 11:29:02 am da truthahn »

SilverFox89

  • Full Member
  • ***
  • Post: 183
    • Mostra profilo
    • Fonera Repository
    • E-mail
Re: Espandere GPIO fonera
« Risposta #101 il: Luglio 09, 2010, 11:14:51 am »
Qu? il repository contenente documentazione, sorgenti e pacchetti per Fonera:

http://silverfox89.dyndns.org/index.php?dir=fonera/i2c/

Spero sia utile a chi vorr? cimentarsi  :mrgreen:
« Ultima modifica: Gennaio 19, 2011, 06:44:45 pm da SilverFox89 »
Fonera Repository -> http://silverfox89.dyndns.org/

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #102 il: Luglio 19, 2010, 02:39:27 pm »
Sicuramente  l'hai fatto fuori :-) il DS1307 ? pienamente compatibile..
Sei sicuro?? mi sono arrivati quelli nuovi ma non riesco proprio a vederli. :?

Codice: [Seleziona]
root@OpenWrt:~# i2cdetect 0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                         
root@OpenWrt:~#

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #103 il: Luglio 19, 2010, 03:14:11 pm »
Scusa ancora...
con che driver comunicano i ds?

truthahn

  • Global Moderator
  • Hero Member
  • *****
  • Post: 1546
    • Mostra profilo
Re: Espandere GPIO fonera
« Risposta #104 il: Luglio 22, 2010, 09:05:48 pm »
Oggi mi sono arrivati i ds1621, termometri tanto per capirci, cos? visto che c'ero ho modificato un wrt54gl portando all'"aperto" la seriale, la jtag, la 3,3 V, la 12 V e naturalmente il bus i2c (2 bus quello sui gpio 4 e 7 3 quello sui 2 e 3)
Intanto per provare il ds1621 l'ho messo volante.

Al primo colpo il bel termometrino ha funzionato.. Coviene comunque prendere i dip, questi hanno una dimensione di pochi millimetri e saldarci i cavi ci vuol... tanta ma tanta pazienza.
Codice: [Seleziona]
root@OpenWrt:~# i2cdetect 0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                        
root@OpenWrt:~#
e con la comodissima utility postata da SilverFox

Codice: [Seleziona]
root@OpenWrt:~# ds1621 -d /dev/i2c-0 -a 0x48
22.50
root@OpenWrt:~#





Mica male ??? Intendo la temperatura. Sono nel mio eremo sul monte e ho dormito tutta estate con la coperta. :-D

Invece non riesco proprio a far andare il ds1307. :?
« Ultima modifica: Luglio 22, 2010, 10:09:25 pm da truthahn »