supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Problema con I2C

Wed Sep 26, 2018 10:53 pm

Salve a tutti

5 anni fa avevo costruito un lcd touch per controllare l'acquario...
Hardware Rasberry PI 2 e schermo 2,8 adaftruit con touch capacitivo

sul bus I2C vi era sia il controllo del touch che tutta una serie di periferiche di mia costruzione con arduino e tutto funzionava bene

Ho perso il programma e il backup, per cui ho ritirato su tutto su un'ultima distribuzione e ho avuto un imprevisto con I2C da cui non riesco a uscire.

Se collego solo il display tutto funziona (sia il display che il touch) ma noto già una cosa strana... lanciando i2cdetect all'indirizzo del touch anzichè 38 mi compare UU

[email protected]:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

se collego il mio bus con le periferiche 0x04 0x05 0x06 ottengo

[email protected]:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 05 06 -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

a questo punto però il touch non funziona più
se cerco di leggere una delle mie periferiche o il touch ottengo il messaggio:

>>> print(bus.read_i2c_block_data(38,10,1))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 121] Remote I/O error
>>>

mentre se provo a scrivere sulle periferiche:
ledout_values = [2, 3]
bus.write_i2c_block_data(0x04,3,ledout_values)


funziona perfettamente

questo naturalmente dopo aver importato le librerie...
import smbus
import array
import time
import sys
bus = smbus.SMBus(1)


naturalmente con una vecchia versione del sistema senza lcd riesco a leggere perfettamente tutte le periferiche

ho cercato questo errore 121 ma non sono riuscito a capire di che si tratta
non capisco come il touch riesca a leggere sul bus ma con python non ci riesco
ho provato anche con python2 ma senza risultati

qualcuno ha un idea?

macca
Posts: 104
Joined: Tue Oct 16, 2012 9:14 am

Re: Problema con I2C

Thu Sep 27, 2018 9:25 am

man i2cdetect

UU significa indirizzo riservato.

Questo forse può aiutarti:
https://www.raspberrypi.org/forums/view ... hp?t=96838

In altre parole... Google!

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Thu Sep 27, 2018 6:42 pm

ho letto il post grazie...
ma non ho capito il problema...

nel mio /boot/config.txt ho:

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
dtparam=i2s=off
#dtparam=spi=on

# Enable audio (loads snd_bcm2835)
dtparam=audio=on
#dtoverlay=w1-gpio
hdmi_cvt=640 480 60 1 0 0 0

# --- added by adafruit-pitft-helper Mon 17 Sep 20:14:02 UTC 2018 ---
dtparam=spi=on
dtparam=i2c1=on
dtparam=i2c_arm=on
dtoverlay=pitft28-capacitive,rotate=90,speed=64000000,fps=30
# --- end adafruit-pitft-helper Mon 17 Sep 20:14:02 UTC 2018 ---


credo che dtparam equivalga al citato device_tree_param=i2c1=on...
ho disabilitato i2s ma l'UU rimane
ma non è quello che mi preoccupa, magari centra, ma il problema è che l'I2C parla ma è sordo... riesco a scriverci ma non a leggerci, mentre so che è funzionante perchè il touch funziona e il driver del touch legge la posizione attraverso l'i2c...

nella vecchia versione che usavo questo non succedeva, ma non riesco più a tirare su il vecchio software perchè i riferimenti di tutto sono cmbiati in 5 anni

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Thu Sep 27, 2018 6:51 pm

in particolare non riesco a capire:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>


dov'è questo module? è come se non fosse definito l'input del bus...
me ne intendo di elettronica, ma di linux molto poco...

nicolap8
Posts: 241
Joined: Mon Mar 13, 2017 9:45 pm

Re: Problema con I2C

Thu Sep 27, 2018 9:02 pm

Credo che quel U significhi che un driver ha segnalato al sistema che quell'indirizzo lo gestisce lui.
Non conosco il tuo display, non è che si può configurare per usare indirizzi diversi?
Visto che di elettronica ne capisci, illustraci il tuo bus: alimentazione, device e resistori!
Nel pacchetto i2cutils che contiene i2cdetect trovi anche due programmi per leggere e scrivere direttamente, li hai provati? Li trovo più affidabili di tante librerie.
N

willy_pinguino
Posts: 592
Joined: Sun Jan 22, 2017 9:11 pm

Re: Problema con I2C

Fri Sep 28, 2018 9:23 am

se l'hardware è lo stesso, ma l'aggiornamento software ha cambiato le care in tavola, magari si tratta di reindirizzare i giusti pin alle giuste funzioni, o di abilitare/disabilitare certe modalità in config.txt o usando raspi-config...

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Fri Sep 28, 2018 9:16 pm

in realtà l'UU non è un problema... ho pensato anchio che il driver del display abbia in qualche modo bloccato in modo esclusivo quell'indirizzo... nella vecchia versione si riusciva a leggerlo, ma in fondo non importa...
devo usare il driver e non leggerlo io perchè è un vero e proprio puntatore del mouse, il mio softwre è un sito web e con il touch devo cliccare nel browser..

il problema è che non riesco a leggere il mio hardwre agli indirizzi 0x04 0x05 0x06 (3 schede fatte con arduino) che sono certo che funzionano perchè con il vecchio sistema riesco tuttora a leggerli

è come se l'I2C non funzionasse, ma funziona per forza perchè legge il touch del display, almeno finchè non collego il vecchio hardwre, dopo non funziona più.

All'inizio ho pensato che il driver avesse cambiato il clock (di default è a 100KHz, ma si può alzare a 400KHz... ma non è nemmeno quello

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Fri Sep 28, 2018 9:17 pm

Avevo già controllato con raspi-config ed è tutto a posto

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Fri Sep 28, 2018 9:31 pm

Il mio bus è formato da 3 fili (gnd, data e clock) collegati su raspberry a
03 GPIO02 SDA1 dato
05 GPIO03 SCL1 clock
09 GND

in parallelo vi sono 3 arduini uno (uno gestisce le temperature dell'acquario, uno il ph e l'immissione di CO2 e il terzo il sistema di illuminazione)

le connessioni su arduino sono
A4 (SDA)
A5 (SCL)

gli arduini sono programmati come slave, mentre il raspberry è un master,
mentre ogni singolo arduino svolge le sue funzioni in modo autonomo, scrive i dati misurati in alcune celle di memoria
il raspberry ogni 30 secondi interroga i singoli arduini per sapere le varie temperature, il ph e gli stati dell'hardwre memorizzandoli in un database mysql.
un'interfaccia webserver permette di visualizare gli ultimi dati o addirittura di vedere lo torico, inoltre tutti i dati possono essere presentati sul sinottico dell'impianto.
infine il raspberry può inviare dei dati agli arduini per eseguire dei comandi, come spegnere o accendere le luci, metterle in automatico, cambiare l'intensita o la curva oraria.

in questo momento riesco a inviare i dati sul bus, per cui controllo l'acquario, ma non riesco a leggere i dati per cui non ho più lo storico dei valori e i dati in tempo reale, che posso solo leggere dai display degli arduini

willy_pinguino
Posts: 592
Joined: Sun Jan 22, 2017 9:11 pm

Re: Problema con I2C

Sat Sep 29, 2018 11:35 am

ne capisco poco e nulla di I2C, ma se con la vecchia distro funziona e con la nuova no, e l'hardware è assolutamente lo stesso, i casi son 2...
o con la vecchia l'indirizzamento dei pin (in questo caso del pin in lettura) di default era diverso, o in quella nuova altro software prende il controllo di quel particolare pin.

so che ora nel config.txt si può cambiare l'indirizzamento d'uso dei pin (lo si fa per esempio nel raspi Zero per veicolare il bus I2S su pin che di default sono destinati ad altro).
Magari semplicemente ti serve di configurare correttamente i pin per l'uso che ne vuoi fare.

se invece nella nuova versione di raspbian hanno inserito software che resta in ascolto per quel particolare pin o se magari con la nuova versione il driver video dello schermo TFT impegna anche quel pin, dovresti chiedere nel forum inglese... probabilmente il numero maggiore di utenti ti aiuterebbe a trovare qualcuno che conosce la risposta al tuo problema

nicolap8
Posts: 241
Joined: Mon Mar 13, 2017 9:45 pm

Re: Problema con I2C

Sat Sep 29, 2018 5:55 pm

Nella documentazione di un mio progetto ho trovato questa nota:
- configurazione I2C
almeno una volta e poi
aggiungi in /etc/rc.local :
chmod 666 /sys/module/i2c_bcm2708/parameters/combined
echo -n 1 > /sys/module/i2c_bcm2708/parameters/combined

oppure aggiungi in /etc/modprobe.d/i2c.conf
options i2c-bcm2708 combined=1
Questo serviva per gestire le due differenti modalità di lettura di un byte (o più) che possono avere un restart in mezzo oppure no.

Hai provato ad usare questo comandi per un accesso diretto agli Arduini?

Code: Select all

i2cset -y 1 0x70 0x00 0x08

i2cget -y 1 0x4E 0x01 0X4E 

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Mon Oct 01, 2018 9:21 pm

provato ma niente....

in compenso ho fatto un po di esperimenti e ho scoperto alcune cose ancora più strane:

Se connetto la vecchia macchina senza display funziona tutto (leggo e scrivo sui 3 device arduino)

Se prendo la macchina nuova con il display e ci connetto un dispositivo I2c come l'ADS1015 texas instruments leggo senza problemi e il display funziona

Se prendo la macchina nuova e collego uno qualsiasi degli arduino in accensione il display non ha più il touch, riesco a scrivere sugli arduini ma non riesco più a leggere da nessun dispositivo

quindi collegando gli arduini smette di funzionare il bus in lettura ma non in scrittura, e non è un problema hardware perchè la vecchia versione del software lo fa girare... per cui deve essere qualcosa di diverso... stavo pensando a un problema di clock, (per esempio i dispositivi i2c si adattano, la libreria di arduino ha il clock fisso e il nuovo display ha cambiato questi parametri mandando tutto in tilt)

il problema è che non so dove cercare eventuali settaggi

nicolap8
Posts: 241
Joined: Mon Mar 13, 2017 9:45 pm

Re: Problema con I2C

Tue Oct 02, 2018 8:36 am

Controlla con un oscilloscopio i segnali.
I pullup sulle linee I2C come sono? Vedo molti ignorarli del tutto per poi lamentarsi che non funziona o va a singhiozzo.

willy_pinguino
Posts: 592
Joined: Sun Jan 22, 2017 9:11 pm

Re: Problema con I2C

Tue Oct 02, 2018 11:37 am

ah quindi è l'accoppiata schermo con il suo driver su macchina nuova che cambiano la situazione...


scusa la domanda scema, ma se stacchi lo schermo dalla macchina nuova e provi a far girare gli arduino, cosa succede?

e se aggiorni il software vecchio per farlo girare sulla macchina nuova, con e senza schermo?


giusto per capire se è una questione di hardware o di configurazione

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Tue Oct 02, 2018 11:32 pm

Con l'oscilloscopio i segnali sono a posto a livello di tensione... devo guardarmi le tempistiche ma per capirci qualcosa mi serve il digitale che ho lasciato in barca (dovevo controllare un bus dati) e finchè non passo a riprenderlo con l'analogico faccio fatica a capire cosa succede perchè l'impulso dura un'istante e o lo fotografo o non riesco a interpretarlo.

Il vecchio sistema, in quanto vecchio non riesco ad aggiornarlo... come cerco di installare il display non trova le librerie perchè obsolete... prima di decidere di rifare il sistema honprovato 3 giorni ad aggiornare il vecchio... ho dovuto cambiare il db, il php5 è obsoleto, quello nuovo ha i comandi deprecati e ho dovuto correggere molte pagine, le librerie di riferimento di adafruit richiedono cose che non esistono più...

supermonte
Posts: 10
Joined: Sun May 08, 2016 10:14 pm

Re: Problema con I2C

Tue Oct 02, 2018 11:33 pm

Comunque l'hardware è a posto, perchè come ho scritto inserendo l'sd vecchia nel raspberry nuovo non va il touch del display ma legge e scrive perfettamente sull i2c

Return to “Italiano”