Go Down

Topic: Arduino Mega mit W5100 funktioniert nicht (Read 4350 times) previous topic - next topic

postmaster-ino

Hi

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

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

power-dodge

Hallo,

nicht? Doch denke nicht.

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

Code: [Select]
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ß

ElEspanol

#32
Dec 26, 2017, 09:59 pm Last Edit: Dec 26, 2017, 10:00 pm by ElEspanol
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

Tommy56

#33
Dec 26, 2017, 10:03 pm Last Edit: Dec 26, 2017, 10:04 pm by Tommy56
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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

power-dodge

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ß

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

power-dodge

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ß

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

power-dodge

Hi Tommy,

doch habs verstanden.  33 wird als ertes gemacht !

Gruß

power-dodge

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?

Code: [Select]
#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ß

agmue

Code: [Select]
int fadeAmount = 5;    // how many points to fade the LED by
...
    analogWrite(2, fadeAmount);   
...               

Du solltest den Helligkeitswert ausgeben und nicht die konstante Veränderung.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

power-dodge

Hallo,

ach ja das ist einer meiner blöden Versuche gewesen.
Sonnst steht da "brightness".

Funktionierte alles nicht so wie ich es sollte.

Fade wird dann da einfach ignoriert.

Gruß

power-dodge

Hallo,

jop eben ausprobiert. Über das Netzwerk wird die LED verändert
aber leider ohne fade. Was übersehe ich den da?

Irgendwie blicke ich das da nicht durch...

So sieht der Code gerade aus:

Code: [Select]
#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, brightness);   

    // 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
                           
}


Modbus läuft wohl, teste es über "ModBusView TCP",
gewollt ist eigentlich das Arduino faden übernimmt.

Sind vielleicht die Operatoren falsch gesetzt?

Danke euch schon mal für die Tipps.

Gruß

Alex

Tommy56

Du überschreibst den Wert immer wieder. Der hat überhaupt keine Gelegenheit zu faden.


Code: [Select]
  currentTime = millis();
  int brightness = Mb.R[3];    // <--- Wert einlesen
  if(currentTime >= (loopTime + 40)){ 
    // set the brightness of pin 9:
    analogWrite(2, brightness);    // <-- ausgeben des gelesenen Wertes

    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;  // <-- der Wert kommt nie zum Zug



Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

power-dodge

Vielen Dank Tommy für Deine Antwort,

ja stimmt wo Du drauf hinweist. Sehe ich es grad.
Wie bringe ich den da durch zu laufen.

Hab es so ausprobiert aber ist shon klar, dann schreibt
er mir die 5 gleich von dem FadeAmount rein.

Code: [Select]
currentTime = millis();
  int modbus2 = Mb.R[2];    // how bright the LED is
  int brightness = modbus2 + fadeAmount;
  if(currentTime >= (loopTime + 40)){     
   
  analogWrite(2, brightness);
 
    // reverse the direction of the fading at the ends of the fade:
    if (brightness <= 0 || brightness >= 255) {
      fadeAmount = -fadeAmount ; 
    }     
    loopTime = currentTime;  // Updates loopTime
  }


Sorry wegen so einfachen Fragen.

Gruß

Alex

Go Up