Hallo,
ich versuche schon längere Zeit einen MCP23017 an einen Raspberry 2 unter Codesys 3.5.8 anzuschließen.
Das Problem ist, das der Bus nicht anfängt zu laufen. Ich habe dabei den Verdacht, daß alle hier im Forum zur Verfügung stehenden Libraries und Device-Definitionen nicht mit dem Pi 2 funktionieren. Ich habe das Beispiel raspi_i2c.project , die Beschreibung MCP23017.devdesc.xml und die Library I2C_MCP23017.library benutzt. Alles läßt sich einbinden und übersetzen, ja sogar downloaden. Nach dem Start des Codesys-Programmes kommt die Info, das der I2C-Bus nicht läuft.
Es kommt zu den seltsamsten Reaktionen, wenn man die Geräte aktualisiert.
Zu meiner Schande muss ich auch sagen, daß die Adressierung mir Probleme bereitet, sie ist nirgends für mich verständlich beschrieben.
Hat jemand ein Beispiel unter 3.5.8 mit funktionierender Bibliothek usw. auf das man aufsetzen kann ?
Viele Grüße
Thomas
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Edwin,
nach Deinen Hinweisen funktioniert es schon mal etwas!!
Danke!!
Aber dieses Problem habe ich immer noch: Der MCP23017 startet noch nicht selbständig. Wie sollte ich denn MCP23017.REINIT programmieren (eine Flanke lang auf TRUE oder grundsätzlich auf TRUE - habe beides probiert). Nach einem reboot muss ich immer mal kurz die Masse abziehen. .
In den vielen direkten Beispielen im Internet (c-Programme) gibt es immer eine "Init"-Prozedur. Muss ich im Codesys sowas nicht auch auslösen ??
Nebenbei:
Warum die Adresse 16#20 für A0..A2=0 sein muss, finde ich auch nirgends - ein kleiner Hinweis wäre sehr informativ.
PROGRAM PLC_PRG
VAR
I2C:USINT := 16#20; ( Adresse des ertsen Bausteines , der 2. wäre 16#21 )
blinker: blink;
a,b: BOOL;
programmstart: BOOL:=TRUE;
programmstart_zyklen: BYTE:=20;
programmstart_zaehler: BYTE:=0;
d:int;
END_VAR
----------------PLC_PRG:--------------------
IF programmstart_zaehler<programmstart_zyklen THEN
programmstart_zaehler:=programmstart_zaehler+1;
ELSE
programmstart:=FALSE;
END_IF
mcp23017.usiAddress:=I2C; ( Adressen müssen hardwareseitig über A0..A2 eingesetllt werden )
MCP23017.IO_B := 16#00; ( setzt Bank B auf "Ausgabe" Gegenstück MCP23017.IO_B := 16#FF setzt Bank B auf Eingabe )
MCP23017.IO_A := 16#00;
IF a THEN
mcp23017.OUT_A:=16#FF; ( setzt die einzelnen Bits der Ausgabe )
mcp23017.OUT_B:=16#FF;
ELSE
mcp23017.OUT_A:=16#00; ( Blinken tut es )
mcp23017.OUT_B:=16#00;
END_IF
IF programmstart THEN
MCP23017.REINIT:=TRUE; ( KEINE WIRKUNG , nach download o.ä. startet nichts, obwohl Bus läuft )
ELSE
MCP23017.REINIT:=FALSE;
END_IF
b:=MCP23017.STATE ; ( holt den Status TRUE=läuft)
Viele Grüße
Thomas
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
MCP23017.IO_B := 16#00; ( setzt Bank B auf "Ausgabe" )
IF blinker.OUT AND MCP23017.STATE THEN
mcp23017.OUT_B:=16#FF; ( setzt die einzelnen Bits der Ausgabe, alles blinkt)
ELSE
mcp23017.OUT_B:=16#00;
END_IF
Kommt mir trotz allem spanisch vor. Aber nur mit dem Adresswechsel zu Beginn (2 Zyklen Programmstart, dann normaler Zyklus) startet das Geblinke.
Vielleicht klärt mich doch noch ein schlauer Kopf auf.
Viele Grüße
Thomas
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2016-02-25
Originally created by: e60newbie
Hallo Leute,
wollte auch den MCP23017 über den Bus ansteuern, nur bekomme ich die Bibliothek gar nicht eingebunden. Gibt es irgendwo ein tolle Guide wo das beschrieben ist?
Habe diese Installiert, kann sie auch einfügen, nur wenn ich im Gerätebaum möchte den MCP anhängen gibt es den dort nicht...
hat jemand Rat?
Grüße Andy
Hat sich erledigt! Irgendwie wurde die Device nicht richtig installiert.... habe diese nochmals Hinzugefügt und siehe da, dann klappts...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich versuche schon längere Zeit einen MCP23017 an einen Raspberry 2 unter Codesys 3.5.8 anzuschließen.
Das Problem ist, das der Bus nicht anfängt zu laufen. Ich habe dabei den Verdacht, daß alle hier im Forum zur Verfügung stehenden Libraries und Device-Definitionen nicht mit dem Pi 2 funktionieren. Ich habe das Beispiel raspi_i2c.project , die Beschreibung MCP23017.devdesc.xml und die Library I2C_MCP23017.library benutzt. Alles läßt sich einbinden und übersetzen, ja sogar downloaden. Nach dem Start des Codesys-Programmes kommt die Info, das der I2C-Bus nicht läuft.
Es kommt zu den seltsamsten Reaktionen, wenn man die Geräte aktualisiert.
Zu meiner Schande muss ich auch sagen, daß die Adressierung mir Probleme bereitet, sie ist nirgends für mich verständlich beschrieben.
Hat jemand ein Beispiel unter 3.5.8 mit funktionierender Bibliothek usw. auf das man aufsetzen kann ?
Viele Grüße
Thomas
Hi,
sudo raspi-config
enable and load the kernelmodules:
1. Devicetree
2. I2C
3. SPI
- reboot
then it works, if not check the I2C by i2c-tools
apt-get install i2c-tools
i2cdetect -y 1
pi@raspberrypi:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 69 6a 6b -- -- -- --
70: -- -- -- -- -- -- -- --
BR
Edwin
Hallo Edwin,
nach Deinen Hinweisen funktioniert es schon mal etwas!!
Danke!!
Aber dieses Problem habe ich immer noch: Der MCP23017 startet noch nicht selbständig. Wie sollte ich denn MCP23017.REINIT programmieren (eine Flanke lang auf TRUE oder grundsätzlich auf TRUE - habe beides probiert). Nach einem reboot muss ich immer mal kurz die Masse abziehen. .
In den vielen direkten Beispielen im Internet (c-Programme) gibt es immer eine "Init"-Prozedur. Muss ich im Codesys sowas nicht auch auslösen ??
Nebenbei:
Warum die Adresse 16#20 für A0..A2=0 sein muss, finde ich auch nirgends - ein kleiner Hinweis wäre sehr informativ.
root@raspberrypi_2:~# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@raspberrypi_2:~#
PROGRAM PLC_PRG
VAR
I2C:USINT := 16#20; ( Adresse des ertsen Bausteines , der 2. wäre 16#21 )
blinker: blink;
a,b: BOOL;
programmstart: BOOL:=TRUE;
programmstart_zyklen: BYTE:=20;
programmstart_zaehler: BYTE:=0;
d:int;
END_VAR
----------------PLC_PRG:--------------------
IF programmstart_zaehler<programmstart_zyklen THEN
programmstart_zaehler:=programmstart_zaehler+1;
ELSE
programmstart:=FALSE;
END_IF
blinker(enable:=TRUE,timelow:=T#500MS,timehigh:=T#500MS);
a:=blinker.OUT;
mcp23017.usiAddress:=I2C; ( Adressen müssen hardwareseitig über A0..A2 eingesetllt werden )
MCP23017.IO_B := 16#00; ( setzt Bank B auf "Ausgabe" Gegenstück MCP23017.IO_B := 16#FF setzt Bank B auf Eingabe )
MCP23017.IO_A := 16#00;
IF a THEN
mcp23017.OUT_A:=16#FF; ( setzt die einzelnen Bits der Ausgabe )
mcp23017.OUT_B:=16#FF;
ELSE
mcp23017.OUT_A:=16#00; ( Blinken tut es )
mcp23017.OUT_B:=16#00;
END_IF
IF programmstart THEN
MCP23017.REINIT:=TRUE; ( KEINE WIRKUNG , nach download o.ä. startet nichts, obwohl Bus läuft )
ELSE
MCP23017.REINIT:=FALSE;
END_IF
b:=MCP23017.STATE ; ( holt den Status TRUE=läuft)
Viele Grüße
Thomas
Habe nach langem Suchen und eher zufällig gefunden, das MCP23017.REINIT gar nicht gesetzt werden muss.
Mit diesen Programmschritten funktioniert es:
IF programmstart THEN mcp23017.usiAddress:=0; ELSE mcp23017.usiAddress:=I2C; END_IF
blinker(enable:=TRUE,timelow:=T#500MS,timehigh:=T#1500MS);
MCP23017.IO_B := 16#00; ( setzt Bank B auf "Ausgabe" )
IF blinker.OUT AND MCP23017.STATE THEN
mcp23017.OUT_B:=16#FF; ( setzt die einzelnen Bits der Ausgabe, alles blinkt )
ELSE
mcp23017.OUT_B:=16#00;
END_IF
Kommt mir trotz allem spanisch vor. Aber nur mit dem Adresswechsel zu Beginn (2 Zyklen Programmstart, dann normaler Zyklus) startet das Geblinke.
Vielleicht klärt mich doch noch ein schlauer Kopf auf.
Viele Grüße
Thomas
Originally created by: e60newbie
Hallo Leute,
wollte auch den MCP23017 über den Bus ansteuern, nur bekomme ich die Bibliothek gar nicht eingebunden. Gibt es irgendwo ein tolle Guide wo das beschrieben ist?
Habe diese Installiert, kann sie auch einfügen, nur wenn ich im Gerätebaum möchte den MCP anhängen gibt es den dort nicht...
hat jemand Rat?
Grüße Andy
Hat sich erledigt! Irgendwie wurde die Device nicht richtig installiert.... habe diese nochmals Hinzugefügt und siehe da, dann klappts...