Arduino Mega mit W5100 funktioniert nicht

Ist ein Modul und läuft am Mega genausogut wie am Uno. Hab ich auch im Einsatz

Hatte auch mal gelesen gehabt das es an Stromversorgung liegen kann.

Es lag auch bei mir daran, über einen Stabi und eigene Masse läuft er jetzt länger
und die Led´s sind heller (5V)

Hab da ne Frage wie kann ich in dem Sketch so konfigurieren, das jeder Ausgang
PWM im Float steuert? Ob hoch oder runter…

Quasi so:

    if (fade < ziel) {
      fade++;
      Serial.print("fade Pin1 ");
      Serial.println(fade);
    }
    if (fade > ziel) {
      fade--;
      Serial.print("fade Pin1 ");
      Serial.println(fade);
    }
    analogWrite(pinLEDt, fade);
  }
}

Und hier ist mein jetziges Programmchen:

#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
  
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
  pinMode(17, INPUT);
  pinMode(18, INPUT);
  pinMode(19, INPUT);
  pinMode(20, INPUT);
  pinMode(21, INPUT);
}

void loop()
{
  Mb.Run();
  

 
  //D2 Timer1A
  analogWrite(2, Mb.R[0]); 
  //D3 Timer0A
  analogWrite(3, Mb.R[1]); 
  //D4 Timer0B
  analogWrite(4, Mb.R[2]); 
  //D5 Timer2B
  analogWrite(5, Mb.R[3]); 
  //D6 Timer1A
  analogWrite(6, Mb.R[4]); 
  //D7 Timer0A
  analogWrite(7, Mb.R[5]); 
  //D8 Timer0B
  analogWrite(8, Mb.R[6]); 
  //D9 Timer2B
  analogWrite(9, Mb.R[7]);
  //D11 Timer1A
  analogWrite(11, Mb.R[8]); 
  //D12 Timer0A
  analogWrite(12, Mb.R[9]); 
  //D13 Timer0B
  analogWrite(13, Mb.R[10]); 
  
}

Kann man das als eine Zeile für alle Ausgänge definieren?
Oder jeden einzelnen Ausgang muss man hinweisen?
Das man die Schnelligkeit des Fadens einzustellen wäre schön.

gruß

Hab da ne Frage wie kann ich in dem Sketch so konfigurieren, das jeder Ausgang PWM im Float steuert? Ob hoch oder runter...

PWM (analogWrite) geht von 0 ... 255 (1 Byte). Was willst Du da mit float? Oder meinst Du etwas anderes?

Gruß Tommy

Möchte das die Werte langsam erreicht werden. Also von 0 bis 255 sagen wir mal in 1 Sekunde. Mag kein plötzliches einschalten.

Daher auch PWM nutze ich, damit ich auch mal sagen wir mal auf 100 stellen kann. Wenn ich aber 255 einstelle soll es dahin floaten.

Die verschiedenen helligkeiten gingen eben auch bei testen. Da sendete ich über Modbus saegen wir mal 100 zu dem 0 oder andere bis 11. Und das funktionierte.

Also möchte einfach keine ruckartige änderungen des Wertes.

Danke euch noch mal

Gruß

Vielleicht verwechsle ich gerade float mit fade.

Noch einen Hinweis dazu: Die Helligkeitsempfindung des Auges ist extrem nichtlinear, die Helligkeit der LED ist auch nicht linear. Das führt dazu, das Änderungen der Spannung im unteren Bereich wesentlich stärker wahrgenommen werden, als gleich große Änderungen im oberen Bereich.

Dazu gibt es hier einen Beitrag mit Wertetabellen.

Gruß Tommy

Danke für den Hinweis!

Das ist ja kein Problem, es werden später feste Werte vergeben. Die gewünschten werden eh durchs ausprobieren herausgefunden. Oder auch mehrere pro Einheit, dann werden diese unter einander gewechselt, nur sollte es über fade erfolgen.

Gruß

Hi

Das (fade) ist dann wiederum Dein Part. Was hindert Dich daran, dem µC mehrere Werte zu übermitteln? Zumindest, wenn ich Dich korrekt verstanden habe, ist Das 'Daten in den µC bekommen' nicht das Problem. Dann sende :gewünschte Helligkeit, Zeit bis zum Erreichen dieses Wertes Im µC schaust Du nach, welche Helligkeit gerade anliegt, welche Helligkeit gewünscht ist und wie lange Du zwischen den Einzelschritten warten musst. Dann wartest Du diese Zeit ab, Ausgangs-Helligkeit++, Endwert erreicht? Nein -> Warten, Ja -> schlafen, bis neuer Befehl kommt.

Wenn Du Da noch irgendwelche Kurven (aka nichtlineares Empfinden) rein zaubern willst, wird's mit den Wartezeiten wohl etwas aufwändiger, wenn man sich aber bereits so tief mit der Materie auseinander gesetzt hat, sollte auch dieser Schritt schaffbar sein.

MfG

Danke für den Tipp,

hindert tut mich da nicht. Aber wie er merkt habe ich nicht so die Erfahrung.

Der Mega soll nen Slave sein, IP Syscom soll dann bei bestimmten Ereignissen, zu einzelnen Pins die Helligkeitswerte senden. Und ein paar Sensoren ständig auslesen, z.B. Pir´s.

So in etwa war meine Vorstellung...

Das Fade werde ich mir mal anschauen.

Gruß

Hallo,

leider bekomme ich es doch nicht hin. Entweder blinkt die LED schnell (delay zeit) oder eben wird ignoriert. 255 z.B wird sofort ausgeführt.

Würde mich über ein paar Tipps freuen.

Danke schon mal.

Gruß

Hi

delay() wird aber nicht(mehr) benutzt, oder?

MfG

Hallo,

nicht? Doch denke nicht.

Hab folgendes probiert, bringt mich auch nicht weiter.
Bestimmt sehe ich den Wald vor lauter Bäume nicht:

void loop()

{
  Mb.Run();

  //D2 Timer Pin2
  analogWrite(2, Mb.R[2]);
    // fade in from min to max in increments of 5 points:
  for (int fadeValue = Mb.R[2] ; fadeValue <= Mb.R[2]; fadeValue += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(2, fadeValue);
  }

  // fade out from max to min in increments of 5 points:
  for (int fadeValue = Mb.R[2] ; fadeValue >= Mb.R[2]; fadeValue -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(2, fadeValue);
  }

Gruß

Wo ist die Verzögerung beim Faden?

Und dann ist das ganze sowieso schon im Ansatz falsch. Faden tut man in der loop mit blockierungsfreiem Gedöns, die for Schleife blockiert, wenn du da delay rein packst

Lass doch den ganzen Netzwerkteil erst mal weg und lasse ganz einfach eine LED jede Sekunde die Helligkeit um 1 Wert zunehmen und wenn 255 erreicht ist, wieder runter bis 0 und dann wieder hoch. Das nennt man faden. Am Anfang auch gern mit delay. Dann lernst Du erst mal die Grundlagen. Das delay kommt dann später raus. Wenn Du Dir das eine Weile anschaust, wirst Du den Sinn meines Postings #25 verstehen.

Du bist mit Deinem aktuellen Projekt derzeit eindeutig überfordert.

Gruß Tommy

Danke euch für die Tipps,

in der Tat weiß es nicht wie es weiter gehen soll. Ihr merkt es ja das ich da noch sehr wenig plan hab. Werde es dann mal weiter versuchen.

Ihr macht es bestimmt schon Jahre war?

Werde dann erst mal mit Fade arbeiten, am besten aber gleich richtig faden zu lernen oder? Aus dem Post 25 eben. Die einfachen Beispiele sind da net so gut?

Gruß

Mach doch erst mal das, was ich in #33 geschrieben habe. Dann lernst Du evtl. was fade eigentlich bedeutet. Du hast Dich an diesem Begriff festgebissen, ohne ihn zu verstehen. Ich habe Dir einen möglichen Weg zum Lernen aufgezeigt. Was Du daraus machst, ist Dir überlassen aber Du merkst selbst, dass Du weit daneben liegst.

Gruß Tommy

Das stimmt danke, danke auch dafür das Du direkt bist. Besser so als was falsches auf zu zeigen.

Stimmt auch, kenne keinen anderen Begriff fürs
helligkeit dimmen beim Arduino.

Bin vielleicht auch auf ganz falschem Wege,
leider kenne ich Alternativen Weg nicht.

Werde mir morgen #25 genauer anschauen.

Gruß

Nochmal und noch direkter: #25 ist frühestens der 2. Schritt, wenn Du #33 begriffen hast und bis dahin bin ich raus. Rede ich hier gegen eine Wand oder liest Du auch, was ich schreibe?

Gruß Tommy

Hi Tommy,

doch habs verstanden. 33 wird als ertes gemacht !

Gruß

Hallo,

versuche gerade das dimmen dem arduino bei zu bringen.
Leider funktioniert das nicht wie ich mir es vorstelle.

Eigentlich soll ja nur bei Wertänderung hin oder her dimmen.
Bekomme flackern hin oder ohne dimmen funktioniert es.

Hab Ihr vielleicht nen Tipp?

#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

int fadeAmount = 5;    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
  
  pinMode(2, OUTPUT);
  currentTime = millis();
  loopTime = currentTime;  
} 

void loop()  { 
  
    Mb.Run();
    
  currentTime = millis();
  int brightness = Mb.R[3];    // how bright the LED is
  if(currentTime >= (loopTime + 40)){  
    // set the brightness of pin 9:
    analogWrite(2, fadeAmount);    

    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;

    // reverse the direction of the fading at the ends of the fade: 
    if (brightness <= 0 || brightness >= 255) {
      fadeAmount = -fadeAmount ; 
    }     
    loopTime = currentTime;  // Updates loopTime
  }
  // Other processing can be done here
                           
}

Würde mich über eure Hilfe sehr freuen, danke schon mal dafür.

Gruß