ich arbeite aktuell an einem Ethernet Tool. Es werden CDP Pakete empfangen, aufgelöst und auf einem LCD Display lesbar und kompakt dargestellt. Die empfangenen Informationen möchte ich zudem auf einer SD-Karte speichern. Der Arduino Ethernet trägt den Leser bereits mit sich. Dieser verwendet PIN 2, genau so wie das RGB 16x2 LCD Shield von Adafruit. Ich bin noch Amateure und weiß nicht ob das von der Hardwareseite bestimmt ist oder ob ich das bei der LCD oder SD Bibliothek anpassen kann. Ich bitte also um Rat, ist es möglich den SD Kartenleser und das LCD Display zu verwenden oder benötige ich andere Hardware?
also falls das PoE nicht zusätzliche pins braucht (sehe ich nicht bei dem link), braucht der arduino für ethernet und SD die pins 10, 11, 12, 13 und als SS 4 (SD) und 10 (ethernet). keinen pin2. woher hast Du die info?
Das LCD Shield verwendet nur 2 Pins !!!
Und weder D2 noch D4, Sondern A4 und A5
Denn es nutzt I2C.
Im Text steht:
This shield will not fit easily on top of an Arduino Ethernet because of the Ethernet jack height. You can use a set of stacking headers to give the shield more 'lift' above the jack.
also falls das PoE nicht zusätzliche pins braucht (sehe ich nicht bei dem link), braucht der arduino für ethernet und SD die pins 10, 11, 12, 13 und als SS 4 (SD) und 10 (ethernet). keinen pin2. woher hast Du die info?
gruß stefan
PoE braucht keinerlei Pins, ist auf dem Shield nur mit 5V und GND verbunden.
Das Problem mit der Höhe habe ich mit weiteren Steckverbindungen gelöst. In der LIB von Adafruit für das RGB Display werden für die Taster PIN 0-4 belegt. Sofern ich das richtig verstanden habe. Vlt verstehe ich da auch etwas falsch?
ubuntuser:
Das Problem mit der Höhe habe ich mit weiteren Steckverbindungen gelöst. In der LIB von Adafruit für das RGB Display werden für die Taster PIN 0-4 belegt. Sofern ich das richtig verstanden habe. Vlt verstehe ich da auch etwas falsch?
Ja, da verstehst du was falsch!
i2c Port Expander Chip
There is one of these MCP23017 i2c (16 input/output) port expander chips in the kit. This is how we are able to only use 2 Arduino pins to run the entire LCD and buttons.
Dann liegt mein Problem woanders, ich bin von einer Doppelbelegung ausgegangen. Bisher habe ich ein Code welcher mir die CDP Informationen auf dem LCD anzeigt, sobald ich die SD.h hinzufüge blinkt das Display und ich bekomme auch keine Seriellen outputs mehr. Den Code für die CDP Operation habe ich von einer Website. Hier der GitHub Link. Ich habe lediglich ein paar Zeilen für mich geändert.
ubuntuser:
Dann liegt mein Problem woanders, ich bin von einer Doppelbelegung ausgegangen. Bisher habe ich ein Code welcher mir die CDP Informationen auf dem LCD anzeigt, sobald ich die SD.h hinzufüge blinkt das Display und ich bekomme auch keine Seriellen outputs mehr. Den Code für die CDP Operation habe ich von einer Website. Hier der GitHub Link. Ich habe lediglich ein paar Zeilen für mich geändert.
Kann es sein das dein Arduino sich ständig resettet? Sind evtl irgendwelche Variabeln doppelt belegt? Reicht die Stromversorung für alle Komponenten aus?
Es scheint wirklich das sich der Arduino einfach die ganze Zeit selbst resettet. Den Grund finde ich aber nicht. Die Stromversorgung reicht aus, es sind keine weiteren Elemente am Arduino angeschlossen außer das Display. Wen eine Variable doppelt wäre müsste mir das doch auch die IDE beim kompilieren melden oder nicht?
Die Datei wird nicht verwendet einfach bei den Includes raus schreiben. Und in der Datei cdp_listener.cpp muss rbuf auf 600 erhöht werden sonst sind die Pakete zulange bzw der Puffer zu klein und die Pakete werde immer verworfen. Ich habe jetzt ein Anderen Code geschrieben und getestet. Dieser Funktioniert mit allen LIB's. Der Code ist einfach zusammen gewürfelt damit von allem etwas drin ist.
/*********************
Example code for the Adafruit RGB Character LCD Shield and Library
This code displays text on the shield, and also reads the buttons on the keypad.
When a button is pressed, the backlight changes color.
**********************/
// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
#include <SPI.h>
#include <Ethernet.h>
// The shield uses the I2C SCL and SDA pins. On classic Arduinos
// this is Analog 4 and 5 so you can't use those for analogRead() anymore
// However, you can connect other I2C sensors to the I2C bus and share
// the I2C bus.
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
byte mac[] = {
0x90, 0xA2, 0xDA, 0x0F, 0x39, 0x42 };
// These #defines make it easy to set the backlight color
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7
EthernetClient client;
void setup() {
// Debugging output
Serial.begin(9600);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD. We track how long it takes since
// this library has been optimized a bit and we're proud of it :)
if(Ethernet.begin(mac) ==0) {
lcd.print("Failed to configure Ethernet using DHCP");
for (;;)
;
}
lcd.print("My IP address: ");
lcd.setCursor(0,1);
for (byte thisByte = 0; thisByte < 4; thisByte++) {
lcd.print(Ethernet.localIP()[thisByte], DEC);
lcd.print(".");
}
}
uint8_t i=0;
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
// print the number of seconds since reset:
uint8_t buttons = lcd.readButtons();
if (buttons) {
if (buttons & BUTTON_UP) {
lcd.setBacklight(RED);
}
if (buttons & BUTTON_DOWN) {
lcd.setBacklight(YELLOW);
}
if (buttons & BUTTON_LEFT) {
lcd.setBacklight(GREEN);
}
if (buttons & BUTTON_RIGHT) {
lcd.setBacklight(TEAL);
}
if (buttons & BUTTON_SELECT) {
lcd.setBacklight(VIOLET);
}
}
}
Ich denke das könnte mir helfen oder?
Wenn ich euch bzw die Situation richtig verstanden habe geht es um den SRAM.
Aber ich verstehe nicht warum der dann überläuft sobald ich die SD Lib mit rein nehme.
Die SD Library hat eine 512 Byte Puffer zum Schreiben. Das ist 1/4 des RAMs auf dem UNO
Das F() Makro zu verwenden ist ein muss. Auch die anderen Tips sind gut. Sehr viele Leute verschwenden Speicher weil sie falsche Variablen-Typen verwenden, unnötige globale Variablen haben oder Konstanten nicht als const deklarieren.
OKey danke, ich kenne ja nun das Problem und versuche einfach den Code zu optimieren bzw weniger SRAM zu verbrauchen. Dafür gibt es genug Tut's in Google.