I²C-Testschaltungen und Beispiele

Modelle zum Nachbauen oder wo gibt es etwas interessantes oder Projekte?

Moderator: Moderatoren

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 18. Mär 2013 14:54

komisch,

die Assoziation mit den "Independence Day - Welcome Wagon" hatte ich auch ;-)

Übrigens: bei Interesse - ich hatte insg. acht solcher Prototypen-Platinen ätzen lassen. Fünf sind bereits für den Eigenbedarf verlötet - der Rest liegt hier und schaut nur gut aus. Wer auch lämpeln will einfach PN

Grüße
Bernhard

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5288
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I²C-Testschaltungen und Beispiele

Beitragvon HaWe » 18. Mär 2013 15:57

daddeln würde mich interessieren, nicht lämpeln...
:P
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5288
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I²C-Testschaltungen und Beispiele

Beitragvon HaWe » 18. Mär 2013 16:02

ps:
das Gerät hat ja wschl 2 Pullups (clock/data) - kann man die abschalten?
wär super, wenn man 2 verschiedene i2c-Platinen per Portsplitter an denselben Port hängen will!
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 18. Mär 2013 16:41

Du meinst sowas ?

Bild

Bild

Links ist die LED-Platine (Addr 0x40) und Rechts der TouchUmbau (Addr 0x42). Schalter/Taster hab ich grade keine zur Hand, aber Jumper ;-). So wie die Jumper rechts gesteckt sind (von oben)
10001010, so leuchten die LEDs (von links nach rechts).
Beide Platinen sind am Portsplitter von Mindsensors angeschlossen.

Für die Ungläubigen kann ich noch Video machen :|

Grüße
Bernhard

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5288
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I²C-Testschaltungen und Beispiele

Beitragvon HaWe » 18. Mär 2013 16:59

das glaube ich dir, auch wenn's mir spontan am Verständnis fehlt -
je 2x pullups dürfte doch eigtl gar nicht funktionieren - wschl wird aber ein bestimmter Toleranzbereich eben doch durchgehen.
Gut zu wissen jedenfalls, dass es hier tatsächlich klappt!

Könntest du das bitte vllt mal mit einem Ultraschallsensor am selben Portsplitter testen? (Also USS plus 8xTaster, ohne Welcome Waggon )
;)

ps
hast du 1x die pullups vllt 1x weggejumpert?
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 18. Mär 2013 18:11

ich habe an den Portsplitter einen US gehängt und in die Programmschleife noch eine Ausgabe von SensorUS(IN_1) gebaut.
Alle drei "Geräte" funktionieren wie es scheint fehlerfrei. Der US zeigt seine Entfernungen und die Jumper werden gezählt.

Grüße
Bernhard

ps- nix weggejumpert
Zuletzt geändert von Bernhard am 18. Mär 2013 18:21, insgesamt 1-mal geändert.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5288
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I²C-Testschaltungen und Beispiele

Beitragvon HaWe » 18. Mär 2013 18:16

nicht schlecht.
Das gibt ja ganz neue Perspektiven.
Ist der Umbau vom Welcome Waggon zum Daddler schwierig? Dann wäre ich an 1 sehr interessiert
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 18. Mär 2013 18:44

nicht sooo schwierig

eine Leiterbahn trennen und eine kleine Drahtbrücke setzen. Das geht im bestückten Zustand auch noch einfach.
I2C Adresse sollte man vor dem Bestücken festlegen, da der Zusammenschluss von A0,A1,A2 gegen GND auf der Bestückungsseite direkt an den PINS liegt. Die muss man auftrennen und wie gewünscht an VDD brücken.

die nächste Version des Boards ist komplett SMD und kann BEIDES pro Port, also entweder Lämpeln oder Schalten, Lötpads für i2c adresse. ... Wenn nur die Platinenfertigung nicht jedesmal so kostspielig wäre. Beim Programmieren muss man eh ein wenig findig sein, da beim Lämpeln die LEDs an sind, wenn der Port auf 0 steht. der andere Modus arbeitet normal, also 0 ist offen, 1 ist closed.

Bild

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5288
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I²C-Testschaltungen und Beispiele

Beitragvon HaWe » 25. Mär 2013 17:25

hast du - oder jemand anderes - eine Idee, wie ein i2c-Treiber dafür in NXC aussieht?
a) für die Lampen-Variante
b) für die Taster-Variante (v.a.!!)

:idee:


der Treiber müsste den Taster-Wert zurückliefern nach der Art

Code: Alles auswählen

bool DaddelMuxer(nxtport, daddelport) {}

oder

Code: Alles auswählen

bool DaddelMuxer(nxtport, daddelport, i2cAdresse) {} // i2cAdresse z.B. 0x42


wenn die Platine also am Port S1 angeschlossen ist, müsste man mit
char taste=DaddelMuxer(S1,0 [,0x42]) den Zustand vom 1. Taster und mit
char taste=DaddelMuxer(S1,7 [,0x42]) den Zustand vom 8. Taster auslesen können

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 25. Mär 2013 20:19

TouchMuxerlib.nxc

Code: Alles auswählen

int ReadPort(char PCF8574Port, byte PCF8574ID, char input);

int ReadPort(char PCF8574Port, byte PCF8574ID, char input)
{
    byte cnt = 0x02;
    byte I2CMsg[];
    byte inbuf[];
    byte Address = PCF8574ID;
    byte nByteReady = 0;
    int  result = -1;
    int loop;

    ArrayBuild(I2CMsg, Address);
    Wait(8);
    while (loop == STAT_COMM_PENDING)
    {
          loop = I2CStatus(PCF8574Port, nByteReady);
    }

    if (I2CBytes(PCF8574Port, I2CMsg, cnt, inbuf))
    {
        result = inbuf[1];
    }

    if( result == (result | (1<<input-1)) )
    {
       result = 0;
    }
    else
    {
       result = 1;
    }

    if(result==-1){
     TextOut(0, LCD_LINE1, "Error: Check the");
     TextOut(0, LCD_LINE2, "   connection!");
     Wait(500);
     ClearScreen();
    }
    return result;
}




Example:

Code: Alles auswählen

#define  TouchPort  S1 //the NXT Port
#define  TouchID  0x42           //the touch muxer i2c addr

#include "TouchMuxerlib.nxc"

task main()
{
   string msg;
   SetSensorLowspeed(TouchPort);
   while(true)
   {
     msg="Input:           ";
     msg = StrReplace(msg, 7, NumToStr((ReadPort(TouchPort, TouchID, 1))));
     msg = StrReplace(msg, 8, NumToStr((ReadPort(TouchPort, TouchID, 2))));
     msg = StrReplace(msg, 9, NumToStr((ReadPort(TouchPort, TouchID, 3))));
     msg = StrReplace(msg, 10, NumToStr((ReadPort(TouchPort, TouchID, 4))));
     msg = StrReplace(msg, 11, NumToStr((ReadPort(TouchPort, TouchID, 5))));
     msg = StrReplace(msg, 12, NumToStr((ReadPort(TouchPort, TouchID, 6))));
     msg = StrReplace(msg, 13, NumToStr((ReadPort(TouchPort, TouchID, 7))));
     msg = StrReplace(msg, 14, NumToStr((ReadPort(TouchPort, TouchID, 8))));
     TextOut(5, LCD_LINE1, msg, false);
   }
}

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 25. Mär 2013 21:13

so .. und das für die LEDs. Ich hoffe, dass ich grade keinen Fehler eingebaut habe. Funktioniert bei mir aber soweit

NXT-Lightlib.nxc

Code: Alles auswählen

void SetLights(char PCF8574Port, byte PCF8574ID, byte input);  //Writing a single port the input is the port number 1-8
void LightOn(char PCF8574Port, byte PCF8574ID, char input); //Deleting a single port the input is the port number 1-8
void LightOff(char PCF8574Port, byte PCF8574ID, char input); //Writing all ports with one byte

void LightOn(char PCF8574Port, byte PCF8574ID, char input){

    byte cnt = 0x02;
    byte I2CMsg[];
    byte inbuf[];
    byte Address = PCF8574ID;
    byte nByteReady = 0;
    int  result = -1;
    int loop;

    ArrayBuild(I2CMsg, Address);

    Wait(8);

    while (loop == STAT_COMM_PENDING) {

          loop = I2CStatus(PCF8574Port, nByteReady);

    }

    if (I2CBytes(PCF8574Port, I2CMsg, cnt, inbuf)) {

        result = inbuf[1];

    }

    byte Command = result ^ (1<<(input-1));


    ArrayBuild(I2CMsg, Address, Command);

    while (loop == STAT_COMM_PENDING) {
        loop = I2CStatus(PCF8574Port, nByteReady);
    }

    I2CWrite(PCF8574Port, 1, I2CMsg);

    while (loop == STAT_COMM_PENDING) {

        loop = I2CStatus(PCF8574Port, nByteReady);

    }
}

void LightOff(char PCF8574Port, byte PCF8574ID, char input){

    byte cnt = 0x02;
    byte I2CMsg[];
    byte inbuf[];
    byte Address = PCF8574ID;
    byte nByteReady = 0;
    int  result = -1;
    int loop;

    ArrayBuild(I2CMsg, Address);

    Wait(8);

    while (loop == STAT_COMM_PENDING) {

          loop = I2CStatus(PCF8574Port, nByteReady);

    }

    if (I2CBytes(PCF8574Port, I2CMsg, cnt, inbuf)) {

        result = inbuf[1];

    }

    byte Command = result | (1<<(input-1));

    ArrayBuild(I2CMsg, Address, Command);

    while (loop == STAT_COMM_PENDING) {

        loop = I2CStatus(PCF8574Port, nByteReady);

    }

    I2CWrite(PCF8574Port, 1, I2CMsg);

    while (loop == STAT_COMM_PENDING) {

        loop = I2CStatus(PCF8574Port, nByteReady);

    }

}

void SetLights(char PCF8574Port, byte PCF8574ID, byte input){

    byte I2CMsg[];
    byte Address = PCF8574ID;
    byte Command = ~input;
    byte nByteReady = 0;
    int loop;

    ArrayBuild(I2CMsg, Address, Command);

    while (loop == STAT_COMM_PENDING) {

        loop = I2CStatus(PCF8574Port, nByteReady);

    }

    I2CWrite(PCF8574Port, 1, I2CMsg);

    while (loop == STAT_COMM_PENDING) {

        loop = I2CStatus(PCF8574Port, nByteReady);

    }
}



Example

Code: Alles auswählen

#define  LEDPort  S1
#define  LEDID  0x40
#include "NXT-Lightlib.nxc"



task main()
{
  string msg;
  SetSensorLowspeed(LEDPort);
  SetLights(LEDPort, LEDID, 0x00); //set all lights off

  while(true)
  {
    for(int i=1;i<9;i++)
    {
      LightOn(LEDPort, LEDID, i);
      if(i>1)LightOff(LEDPort, LEDID, i-1);
      Wait(200);
      msg="Light :           ";
      TextOut(6, LCD_LINE3, NumToStr(i), false);
    }
    SetLights(LEDPort, LEDID, 0x00);
 }
}

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 26. Mär 2013 17:41

beide libs und Programme sind so ausgelegt, dass die zustände 0 und 1 korrekt sind

TouchBoard:
0 = offen
1 = geschlossen

LightBoard
0 = aus
1 = an

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5288
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I²C-Testschaltungen und Beispiele

Beitragvon HaWe » 28. Mär 2013 12:44

getestet: alles bestens! :prima:
große Klasse! super klein und super "handy"! danke nochmal!

jetzt kann's los gehen mit der Großserie!
8-)

Bernhard
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 6. Feb 2013 17:19

Re: I²C-Testschaltungen und Beispiele

Beitragvon Bernhard » 28. Mär 2013 13:58

wenn der Bedarf besteht, lasse ich mich gerne dazu breitschlagen. vielleicht nochmal ein paar Platten zu bauen.

Grüße
Bernhard

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5288
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: I²C-Testschaltungen und Beispiele

Beitragvon HaWe » 28. Mär 2013 23:46

hab mir eine zweckentfremdete Fischertechnik-Kontaktplatte für Bananenstecker ans Flachbandkabel geschraubt und an deinen Muxer drangesteckt.

Gibt's bei Knobloch oder fischerfriendswoman allein oder auch schon fertig mit Kabel und heißt dort "Steckerbuchsengehäuse" oder "Buchsenplatte":
http://knobloch-gmbh.de/wbc.php?sid=152469265acd&tpl=pr6010suche.html&q=Steckerbuchsengeh%E4use
http://fischerfriendswoman.de/index.php?p=7&sp=9

Bild
Jetzt kann ich meine Fischertechnik-Taster super-elegant an E1-E8 anschließen und ein paar durchgeschnittene RCX-Technic-Kabel mit Bananensteckern für meine RCX-Taster ebenfalls.

Tipp: :idea:
wenn du vorhast, eine kleine Serie davon neu aufzulegen, dann mach doch einfach dazu einen neuen Thread auf! :ok:
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E


Zurück zu „Projekte, Showcase, Bauanleitungen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss