INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Mega und Ethernet-Shield
30.10.2013, 16:37
Beitrag #1
Arduino Mega und Ethernet-Shield
Hallo,

ich lese über 5 analoge Eingänge des Mega eine 5x5 LDR-Matrix aus. Ohne Ethernet-Shield funktioniert alles einwandfrei.

Mit dem Ethernet-Shield, ohne die analogen-Eingänge, funktioniert alles prima. Webserver und auch ein eigenes USB-Projekt funktionieren.

Kombiniere ich jetzt beides, gehen immer die ersten zwei analog Eingänge nicht mehr (immer 1024 als Wert) und die drei anderen Eingänge zeigen unmögliche Werte an.
Dabei ist es ganz egal welche fünf analog Eingänge ich nehme. Spannungsversorgung habe ich auch schon auf ein festes Netzteil (7,5V mit 2A) geändert.

Beeinflusst das Ethernet Shield die analog Eingänge? In den Datenblätter und im Internet habe ich nichts gefunden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2013, 17:00
Beitrag #2
RE: Arduino Mega und Ethernet-Shield
Hallo skolks,

Zitat:eine 5x5 LDR-Matrix
Welche ? Ein Link zur Beschreibung ?
Zitat:Beeinflusst das Ethernet Shield die analog Eingänge?
Auch hier die Frage welches? Aber eher nein, kein Einfluß auf A0..
Und wie immer die Frage: Hätten wir denn mal ein wenig Code um reinzugucken?

Grüße Ricardo[/quote]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2013, 17:19
Beitrag #3
RE: Arduino Mega und Ethernet-Shield
Mh ok, stimmt schon etwas dürftig von den Informationen.

Schaltplan für die LDR-Matrix habe ich von hier:
http://tecnomelque.blogspot.com.br/2012/...atriz.html

Analog Eingänge werden in der Funktion scanforhit und initvalues verwendet.
Code:
#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <EthernetUdp.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
unsigned int localPort = 8888;
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char  ReplyBuffer[] = "acknowledged";       // a string to send back
// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

int inByte = 0;         // incoming serial byte

const int ldr[5] = {  A11, A12, A13, A14,A15};
const int vccPin[5] = {  30,34,38,42,46};
const int delaytime = 50;
const int limithit = 25;
int ldrValue;
int valuesold[5][5];
int valuesnew[5][5];
int hits[5][5];
int largestdelta;

boolean scanflag, resetflag, initflag, getflag, getvalues;

void setup()
{
    // start serial port at 9600 bps:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  establishContact();  // send a byte to establish contact until receiver responds
  Serial.println("Begin init");

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    //for(;;)
     // ;
  }else
  {
    // print your local IP address:
    Serial.print("My IP address: ");
    for (byte thisByte = 0; thisByte < 4; thisByte++) {
      // print the value of each byte of the IP address:
      Serial.print(Ethernet.localIP()[thisByte], DEC);
      Serial.print(".");
    }
    Serial.println();
    Udp.begin(localPort);
  }

  
  pinMode(vccPin[0], OUTPUT);  
  pinMode(vccPin[1], OUTPUT);  
  pinMode(vccPin[2], OUTPUT);  
  pinMode(vccPin[3], OUTPUT);  
  pinMode(vccPin[4], OUTPUT);  
}

///////////////////////////////77
void loop()
{
  // if there's data available, read a packet
  int packetSize ;//= Udp.parsePacket();
  if(packetSize)
  {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From ");
    IPAddress remote = Udp.remoteIP();
    for (int i =0; i < 4; i++)
    {
      Serial.print(remote[i], DEC);
      if (i < 3)
      {
        Serial.print(".");
      }
    }
    Serial.print(", port ");
    Serial.println(Udp.remotePort());

    // read the packet into packetBufffer
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    Serial.println(packetBuffer);

    char inChar = (char)packetBuffer[0];
    // add it to the inputString:
    //inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == 's')
    {
      scanflag = true;
    }
    if (inChar == 'r')
    {
      resetflag = true;
    }
    if (inChar == 'i')
    {
      initflag = true;
    }
    if (inChar == 'g')
    {
      getflag = true;
    }


    // send a reply, to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }
  
  if(scanflag == true)
  {
    scanforhit();
    scanflag = false;
    getvalues = true;  
  }

  if(resetflag == true)
  {
    Serial.println("Reset");
    for(int x = 0; x < 5; x++)  
    {
      for(int y = 0; y < 5; y++)  
      {  
        hits[x][y]=0;
      }
    }
    resetflag = false;
  }

  if(initflag == true)
  {
    initvalues();
    initflag = false;
    getvalues = true;
  }

  //Ausgabe
  if(getvalues == true)
  {
    Serial.println("Getvalues");
    Serial.println("   x0,x1,x2,x3,x4");
    for(int y = 0; y < 5; y++)  
    {
      Serial.print("y");
      Serial.print(y);
      Serial.print(":");
      for(int x = 0; x < 5; x++)  
      {  
        Serial.print(valuesold[x][y]);
        Serial.print(",");
      }
      Serial.println("");
    }      
    Serial.println("---");
    getvalues = false;
  }

  if(getflag == true)
  {
    Serial.println("Gethits");
    Serial.println(" x0,x1,x2,x3,x4");
    for(int y = 0; y < 5; y++)  
    {
      
      Serial.print("y");
      Serial.print(y);
      Serial.print(":");
      for(int x = 0; x < 5; x++)  
      {  
        Serial.print(hits[x][y]);
        Serial.print(",");
      }
      Serial.println("");
    }    
    Serial.println("---");
    getflag = false;
  }
}

void establishContact() {
  while (Serial.available() <= 0) {
    Serial.print('a');   // send a capital A
    delay(300);
  }
}

void initvalues()
{
    Serial.println("Init");
    for(int y = 0; y < 5; y++)  
    {
      digitalWrite( vccPin[y],HIGH);  
      for(int x = 0; x < 5; x++)  
      {
        //if( x>1)
        {
      
        ldrValue = analogRead(x)/4;
        valuesold[x][y]=ldrValue;
        delay(delaytime);
        }
      }  
      digitalWrite( vccPin[y],LOW);  
    }  
}

void scanforhit()
{
  int hx=-1;
  int hy=-1;
  int temp=0;

  Serial.println("Scan");
  for(int y = 0; y < 5; y++)  
  {  
    digitalWrite( vccPin[y],HIGH);  
    for(int x = 0; x < 5; x++)  
    {  
      //if( x>1)
      {
          
      ldrValue = analogRead(x)/4;
      delay(delaytime);

      if( ((ldrValue-valuesold[x][y]) > temp) && ((ldrValue-valuesold[x][y]) > limithit))
      {
        temp = (ldrValue-valuesold[x][y]);
        hx = x-2;
        hy = y;
      }
      valuesold[x][y] = ldrValue;
      }
    }  
    digitalWrite( vccPin[y],LOW);  
  }    
  Serial.println("---");
  if(hx>-1 && hy>-1)
  {
    hits[hx][hy]+=1;
    Serial.print("x: ");
    Serial.println(hx);
    Serial.print("y: ");
    Serial.println(hy);
    Serial.print("feld: ");
    Serial.println(hy*5+hx);
  }
  else
  {
    Serial.println("kein treffer gefunden");
  }
  Serial.println("---");
}


void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    
    if (inChar == 's')
    {
      scanflag = true;
    }
    if (inChar == 'r')
    {
      resetflag = true;
    }
    if (inChar == 'i')
    {
      initflag = true;
    }
    if (inChar == 'g')
    {
      getflag = true;
    }
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2013, 18:03
Beitrag #4
RE: Arduino Mega und Ethernet-Shield
Hm,

der Code sieht erst mal okay aus.
Du kannst aber
Zitat:const int ldr[5] = {A11, A12, A13, A14,A15};
int valuesnew[5][5];
int largestdelta;
rausschmeißen, werden nie benutzt.
Was auffällt: der Originalschaltplan geht ja auf eine 4 x 3 Matrix hin. Hast du die Schaltung auch inklusive Dioden und Widerstand erweitert?
Für mich sieht das nämlich wie ein Schaltungsfehler aus.
Da du analogRead in for-Schleifen abarbeitest müssten entweder alle, oder kein Wert richtig sein.


Grüße Ricardo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2013, 18:33 (Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2013 18:45 von skolks.)
Beitrag #5
RE: Arduino Mega und Ethernet-Shield
(30.10.2013 18:03)rkuehle schrieb:  Hm,

der Code sieht erst mal okay aus.
Du kannst aber
Zitat:const int ldr[5] = {A11, A12, A13, A14,A15};
int valuesnew[5][5];
int largestdelta;
rausschmeißen, werden nie benutzt.
Was auffällt: der Originalschaltplan geht ja auf eine 4 x 3 Matrix hin. Hast du die Schaltung auch inklusive Dioden und Widerstand erweitert?
Für mich sieht das nämlich wie ein Schaltungsfehler aus.
Da du analogRead in for-Schleifen abarbeitest müssten entweder alle, oder kein Wert richtig sein.


Grüße Ricardo
Ja, der Code kann noch einigen Testmüll enthalten. Habe irgendeinen Stand genommen der sich kompilieren ließ.

Die Schaltung habe ich soweit erweitert, wenn ich den Ethernet Shield weglasse funktionieren auch alle 25 LDRs, habe alle einzeln mit verdunkeln/beleuchten getestet.
Habe das ganze mittlerweile auch zwei mal neu verdrahtet...

Wenn ich den Shield aufstecke funktionieren die ersten zwei spalten gar nicht, alle Zeilen haben immer(!) den Wert 1024. Bei den drei anderen haben alle Zeilen einen sehr ähnlichen hohen Wert (z.B. 920 oder so) und die Änderung bei verdunkeln/beleuchten ist minimal im Gegensatz zur Schaltung ohne Shield (+/-5 im Gegensatz zu +/-350).
Dabei ist es egal welche 5 analog Eingänge ich nehme und welche 5 digitale I/Os.

Glaube mittlerweile das der Shield kaputt ist und der mir irgendeine Spannung versaut...

Habe den Fehler gefunden...

Habe auf dem Shield und dem Arduino mal die Ground-Pins nachgelötet und jetzt klappt es Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2013, 18:51
Beitrag #6
RE: Arduino Mega und Ethernet-Shield
Hm,

guck mal bitte ob die analogen Pins auf dem Ethernet-Shield irgendwie gebrückt sind (Lötzinn oder ähnliches). Das Shield selbst benutzt die ja nicht, der Arduino könnte aber dadurch wirr werden.

Grüße Ricardo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2013, 19:08
Beitrag #7
RE: Arduino Mega und Ethernet-Shield
(30.10.2013 18:51)rkuehle schrieb:  Hm,

guck mal bitte ob die analogen Pins auf dem Ethernet-Shield irgendwie gebrückt sind (Lötzinn oder ähnliches). Das Shield selbst benutzt die ja nicht, der Arduino könnte aber dadurch wirr werden.

Grüße Ricardo
Habe die Lösung schon gefunden... gucke mal ganz unten meinen letzten Beitrag...

Aber danke für die Hilfe Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2013, 20:02
Beitrag #8
RE: Arduino Mega und Ethernet-Shield
Na also, geht doch!
Da war ich ja gar nicht soweit wegSmile
Das Leben ist manchmal doch kompliziert Huh

Grüße Ricardo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  CP2102 und USB Host Shield ?? DL1AKP 0 51 01.12.2016 08:55
Letzter Beitrag: DL1AKP
  Arduino UNO und Ethernet Shield 2 POE und Fritzbox 3272 tr3 2 162 19.11.2016 10:46
Letzter Beitrag: tr3
  Datenübertragung vom Arduino Mega 2560 zu Hterm Datatom 1 99 13.11.2016 23:08
Letzter Beitrag: hotsystems
  Arduino Mega 2560 läuft nicht Wolfgang50 6 185 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Arduino Mega 2560 Manfred1981 4 196 11.11.2016 18:07
Letzter Beitrag: hotsystems
  Kommunikation über das WiFi-Shield Flap 3 235 07.11.2016 20:20
Letzter Beitrag: hotsystems
  Attiny45 Bootloader brennen mit Funduino Mega toto1975 63 2.218 23.10.2016 17:08
Letzter Beitrag: hotsystems
Question Mega 2560 defekt? triode 11 366 29.09.2016 07:21
Letzter Beitrag: hotsystems
  Ethernet Modul Enc28j60 Pin13 LED Schalten BennIY 16 519 27.09.2016 20:30
Letzter Beitrag: BennIY
  Arduino Lan Shield - Visual Basic ZackiE 6 218 20.09.2016 19:26
Letzter Beitrag: ZackiE

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste