Der AVR-/ARDUINO-Faden

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

jodurino
Beiträge: 2088
Registriert: So 17. Nov 2013, 20:43

Re: Der AVR-/ARDUINO-Faden

Beitrag von jodurino »

Hallo,
immer wenn ich denke das ich schon ganz schön gut mit der ArduinoKiste bin......
muss ich nur einen Beitrag von Fritzler lesen, daß sortiert mich dann gleich wieder weiter unten ein.

Aber kurz noch was anderes bin so beim Rumgooglen auf das hier gestossen:
https://www.robotfreak.de/blog/asuro-di ... %20Yeti%29.

Kann man sich nicht aus diese Not eine Tugend machen?
Also mal angenommen ich habe so einen Nano und der ist blöd verbaut bzw. ich habe schlecht Möglicheiten Steckverbindungen zu machen.
Dezent ein kleines Bohrloch und dann über IR Flashen?

Ist das möglich?

cu
jodurino
Benutzeravatar
sukram
Beiträge: 3063
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Seriell und Infrarot hatten wir in den 90ern schon mal am Handy, nannte sich IrDa. Dazu muss neben der Schnittstelle ein passender Bootloader drauf, dann sollte das schon gehen.
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

Habe gerade ein Problem mit einer eigentlich simplen Aufgabe.

Ein Schrittmotor mit DRV 8825 soll immer die selbe Anzahl Steps ausführen, dann eine Zeit
warten und wieder dann weiter drehen. Also quasi als endlos ablaufende Schleife.

Ich weiß aber nicht, wie man eine bestimmte Anzahl steps definiert und das dann laufen lässt.

Hat jemand da eine (einfache) Idee, wie das gehen kann?
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Moin,
ich versuche mich gerade an einer ds18B20 Geschichte:
Am Arduino hängen mehrere 18B20.
Die will ich mit Serialnummer auslesen, das Script tut das auch, soweit prima.

Aber ich kann die deviceAddress nicht weiter verarbeiten, da es sich um ein ?byte Array? handelt?

Mit "DeviceAddress deviceAddress" wird das zu einem byte[8] Array deklariert

Ich will aber die Seriennummer später in einem mqtt-Topic haben, dort ist ein char* gefordert.

Wenn ich

Code: Alles auswählen

for (uint8_t i = 0; i < 8; i++) {
    Serial.print(deviceAddress[i], HEX);
    }
mache, wird es in der Seriellen Konsole prima angezeigt

Wie bekomme ich "deviceAddress" in char* gepresst?

es soll so aussehen:

Code: Alles auswählen

sensors.requestTemperatures();

  for (int i = 0;  i < deviceCount;  i++) {
     sensors.getAddress(deviceAddress, i);
    String sensorID = deviceAddress;
        tempC = sensors.getTempCByIndex(i);
   
       hier brauche ich einen String aus Topic und sensorID :TOPIC= "Ardu1/"+sensorID+"/"
 
    client.publish(TOPIC, tempC);
  }  

Code: Alles auswählen

/*
 Basic MQTT example

 This sketch demonstrates the basic capabilities of the library.
 It connects to an MQTT server then:
  - publishes "hello world" to the topic "outTopic"
  - subscribes to the topic "inTopic", printing out any messages
    it receives. NB - it assumes the received payloads are strings not binary

 It will reconnect to the server if the connection is lost using a blocking
 reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to
 achieve the same result without blocking the main loop.
 
*/

#include <SPI.h>
#include <EthernetENC.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>


// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 4
// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);
// Pass the oneWire reference to DallasTemperature library:
DallasTemperature sensors(&oneWire);
// Create variables:
int deviceCount = 0; // variable to store the number of devices connected

DeviceAddress deviceAddress; // variable to store the device address
float tempC;

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 16);
IPAddress server(192, 168, 1, 200);
char* TOPIC = "ardu1";
char* MSG = "test";

int ledPin1=2;
int ledPin2=3;

int MielePin=14;
int WasserPin=15;
int KlimaPin=16;

void printAddress(DeviceAddress deviceAddress) {
  for (uint8_t i = 0; i < 8; i++) {
    Serial.print(deviceAddress[i], HEX);
    }
  }


void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

EthernetClient ethClient;
PubSubClient client(ethClient);

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
     digitalWrite(ledPin1,LOW);
     digitalWrite(ledPin2,HIGH);
      Serial.print("Attempting MQTT connection...");
      
    // Attempt to connect
    if (client.connect("arduinoClient")) {
        digitalWrite(ledPin1,HIGH);
        digitalWrite(ledPin2,LOW);
        Serial.println("connected");
     
     // Once connected, publish an announcement...
        client.publish(TOPIC, "Restart");
     // ... and resubscribe
       //#client.subscribe("inTopic");
      } 
    else {
        digitalWrite(ledPin1,LOW);
        digitalWrite(ledPin2,HIGH);
      
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      
      delay(1000);
      
    }
  }
}

void setup()
{
    sensors.begin();

  
  pinMode(ledPin1,OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(MielePin,INPUT);
  pinMode(WasserPin,INPUT);
  pinMode(KlimaPin,OUTPUT);
  
  
  digitalWrite(ledPin1,LOW);
  digitalWrite(ledPin2,HIGH);
  digitalWrite(MielePin,HIGH);
  digitalWrite(WasserPin,HIGH);
  digitalWrite(KlimaPin,LOW);
  
  Serial.begin(19200);

  client.setServer(server, 1883);
  client.setCallback(callback);

  Ethernet.begin(mac, ip);
  // Allow the hardware to sort itself out
  delay(1500);
    // Locate the devices on the bus:
  Serial.println("Locating devices...");
  Serial.print("Found ");
  deviceCount = sensors.getDeviceCount();
  Serial.print(deviceCount);
  Serial.println(" devices");
  Serial.println("Printing addresses...");

  
  for (int i = 0;  i < deviceCount;  i++) {
    Serial.print("Sensor ");
    Serial.print(i + 1);
    Serial.print(" : ");
    sensors.getAddress(deviceAddress, i);
    printAddress(deviceAddress[i]);
    Serial.println();
   }
}





void loop()
{
 
 
sensors.requestTemperatures();

  for (int i = 0;  i < deviceCount;  i++) {
    Serial.print("Sensor ");
    sensors.getAddress(deviceAddress, i);
    
    
    String sensorID = deviceAddress;
    Serial.print(sensorID);
    Serial.print(" : ");
    tempC = sensors.getTempCByIndex(i);
    Serial.print(tempC);
    Serial.print(" \xC2\xB0"); // shows degree symbol
    Serial.print("C  |  ");
    Serial.println();
   
  }  

  
 
  
//client.subscribe("power/Leistung");  
  digitalWrite(ledPin1, HIGH);
  
  if (digitalRead(MielePin)==LOW){
    client.publish(TOPIC, "Miele_Fertig");
    delay(500);
  }
 
  if (digitalRead(WasserPin)==LOW){
    client.publish(TOPIC, "Wasser_Alarm");
    delay(500);
  }
 

  
  if (!client.connected()) {
    //digitalWrite(ledPin1, LOW);
    reconnect();
  }
  
  client.loop();

}
Benutzeravatar
sukram
Beiträge: 3063
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Wahrscheinlich die eleganteste Variante wäre "sprintf()" zu verwenden. Weil du dort auch die Hex-Werte gleich in Buchstaben umwandeln kannst. Ich habe das in einem Codebeispiel auf uC.net gesehen, da ging es auch um die 1W Adressen: https://www.mikrocontroller.net/topic/14792
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

snprintf!
https://www.cplusplus.com/reference/cstdio/snprintf/

Wer sprintf nutzt hat Hiebe mit der Lankabelpeitsche verdient :twisted:
Benutzeravatar
sukram
Beiträge: 3063
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Natürlich, wenn, dann richtig (und sicher). Ich geh dann mal in meinen Folterkeller :lol:
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich will ja nicht den Kram auf der Seriellen Schnittstelle ausgeben das geht ja.
Benutzeravatar
sukram
Beiträge: 3063
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Mit den s(n)printf baust du in erster Linie einen String zusammen. Den kannst du dann wieder nach belieben weiterverwursten...
j.o.e
Beiträge: 541
Registriert: Fr 29. Nov 2019, 01:15

Re: Der AVR-/ARDUINO-Faden

Beitrag von j.o.e »

Fritzler hat geschrieben: Di 6. Apr 2021, 08:51 snprintf!
https://www.cplusplus.com/reference/cstdio/snprintf/

Wer sprintf nutzt hat Hiebe mit der Lankabelpeitsche verdient :twisted:
Wer gaaaaaanz genau weiss, was er tut, kann natürlich sprintf() benutzen. Abertausende von C-Programmier haben das tagtäglich gemacht.
Viele sind dabei nicht auf die Nase gefallen - einige aber doch...

Will man z.B. einen 8-bit-Wert als Dezimalwert ausdrucken, kann das Ergebnis maximal 3-stellig werden. Plus das terminierende '/0' reicht dann ganz sicher ein char[4]. Aber Gnade Gott, jemand schraubt am Programm und versucht sich mit einen 16-bit-Wert ...

Mit snprintf() ist man auf der sicheren Seite und kann zumindest mal einen Bufferüberlauf vermeiden - sofern man das 'n' und den char[]-Buffer richtig aufeinander abstimmt.
Genau genommen muss man aber den Rückgabewert von snprintf() prüfen, um Situationen abzufangen, wenn der Buffer doch mal zu klein gewählt war.
So oder so muss man sich also im Klaren sein, wie groß man den Buffer dimensioniert. Das nimmt einem auch snprintf() nicht ab.

Allgemein sollte man alle str-Funktionen (auch schon in C) vermeiden. Besser man benutzt die strn-Funktionen, also z.B. strncpy() statt strcpy() .

Anm.: In alten C-Libraries (vor C99 ?) gibt es noch kein snprintf().
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Das ist alles ganz schön hässlich:

Die Temperatur kommt als float und muss in ein char*
Die Adresse kommt als byte[8] Array und muss auch in ein char* und ich muss da noch Konstanten Text String rein drücken und noch ein paar „/„ einfügen.
j.o.e
Beiträge: 541
Registriert: Fr 29. Nov 2019, 01:15

Re: Der AVR-/ARDUINO-Faden

Beitrag von j.o.e »

Hightech hat geschrieben: Di 6. Apr 2021, 11:43 Das ist alles ganz schön hässlich:

Die Temperatur kommt als float und muss in ein char*
Die Adresse kommt als byte[8] Array und muss auch in ein char* und ich muss da noch Konstanten Text String rein drücken und noch ein paar „/„ einfügen.
Kuck dir mal den Format-String der printf()-Familie, also auch snprintf() an.
Kannst mal einen Hexdump der Adresse und der Temp schicken?

Edith meint ich soll ein Beispiel anhängen ....

Muss bei dir nicht passen, aber für den Fall du wolltest eine IP-Adresse drucken. Die 4 Bytes stehen im Array byte adr[] = { 0xc0, 0xa6, 0x37, 0x11 };

Ein printf("%d:%d:%d:%d\n", adr[0], adr[1], adr[2], adr[3]); spuckt dann 192:168:55:17 aus.
Schreibst statt %d etwa %03d wirft er 192:168:055:017 aus.
Willst du's in hex, dann ersetzt du das %d durch %x.

Statt "%d:%d:%d:%d\n" geht aus sowas: "Adresse ist %d/%d/%d/%d - sieht gut aus, oder?\n"
schmeißt raus: Adresse ist 192/168/55/17 - sieht gut aus, oder?

Siehe auch "printf" auf Wikipedia.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Finger »

Habt ihr schon die 2.0 IDE benutzt? OK, ist n Beta,aber die Compilermeldungen sind plötzlich extrem unbrauchbar und kaum geeignet, Fehler zu finden. Man wird zugespammt mit Informationen und unten drunter steht der lapidare Satz : "Compilation error: Error: 2 UNKNOWN: exit status 1". Das zum Beispiel eine Bibliothek fehlt muss ich mir aus 2k Text rauspopeln mit der Information (ohne Zeilennummer!):

ResolveLibrary(wurst.h)
-> candidates: []

Schalte ich "Verbose" ab, kommt noch nicht einmal mehr diese Meldung, sondern nur noch "Compilation error: Error: 2 UNKNOWN: exit status 1"

Was ich ehr bizarr finde: das scheint da draussen im Gewebe keinen zu stören. Was meint ihr dazu?
Benutzeravatar
Sven
Beiträge: 4421
Registriert: Fr 28. Jun 2013, 12:52
Wohnort: Sechsundzwanzigdreisechzehn

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sven »

Es gibt einen Bug Report dafür:
https://github.com/arduino/arduino-ide/issues/249

ähnlich gelagert:
https://github.com/arduino/arduino-ide/issues/215

Man arbeitet dran. Ist ja ne Beta.
Benutzeravatar
Zabex
Beiträge: 632
Registriert: Di 2. Jul 2013, 08:45
Wohnort: Aldenhoven
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Zabex »

Cubicany hat geschrieben: Mo 5. Apr 2021, 12:29 Ein Schrittmotor mit DRV 8825 soll immer die selbe Anzahl Steps ausführen, dann eine Zeit
warten und wieder dann weiter drehen. Also quasi als endlos ablaufende Schleife.

Ich weiß aber nicht, wie man eine bestimmte Anzahl steps definiert und das dann laufen lässt.
Wenn der Motor sehr langsam laufen soll geht das recht einfach. Für höhere Geschwindigkeiten braucht man aber eine Beschleunigungs- und Bremsrampe, sonst verliert der Motor Schritte.

Nachfolgend ein Programm, das deinen Stepper 100 Schritte mit 10 Schritten pro Sekunde drehen läßt, 2s Pause macht und dann wieder 100 Schritte dreht.

Code: Alles auswählen

#define Schrittzahl 100
#define pausenzeit_ms 2000 //Wartezeit
#define schrittzeit_ms 50   //  500/Schritte-pro-Sekunde. Hier: 10 Steps/s
#define DO_STEP 2    //Digital Out "STEP" an Pin 2

void setup() {
  pinMode(DO_STEP, OUTPUT);  
}
void loop() {
  for (int i=0; i < Schrittzahl; i++) {
    digitalWrite(DO_STEP, HIGH);
    delay(schrittzeit_ms);
    digitalWrite(DO_STEP, LOW);
    delay(schrittzeit_ms);
  } 
  delay(pausenzeit_ms);
}
Der Code ist nur runtergeschrieben und nicht ausprobiert!

Gruß,
Zabex
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

Habe mir die MobaTools (hat man mir in der Arduino Community empfohlen)runter geladen und mit etwas Hilfe schon geschafft, über einen Taster
die immer gleiche Zahl steps mit Anfahr und Bremsverhalten zu realisieren.

So:

Code: Alles auswählen

#include <MobaTools.h>

const byte stepPin = 3;
const byte dirPin  = 2;
const byte tasterPin = 4;      // Taster zwischen Pin und Gnd anschließen
const byte tasterPin2 = 5;

const int stepsProUmdr = 800;   // Steps pro Umdrehung ( mit 1/4 microsteps )
int stepsProTaster = 800;       // Schritte um die sich der Motor pro Tastendruck dreht.
                                // Bei Dauerdruck dreht er sich ständig weiter
MoToStepper myStepper ( stepsProUmdr, STEPDIR );

void setup() {
    myStepper.attach( stepPin, dirPin );
    myStepper.setSpeed( 1000 );  // 60 Umdrehungen/Min
    myStepper.setRampLen( 100 );
    pinMode( tasterPin, INPUT_PULLUP );
}

void loop() 
{ 

    if ( digitalRead(tasterPin) == LOW && not myStepper.moving() ) {
        myStepper.doSteps( stepsProTaster );
    }
     
   
}
Jetzt will ich noch über einen Wahlschalter entscheiden ob links oder recht rum gedreht wird.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Der Arduino printf("%d:%d:%d:%d\n", adr[0], adr[1], adr[2], adr[3]); kann anscheinend kein float.

wenn ich

float zahl=12.23;
char buffer[5];
snprintf(text, 5,"%2.2f", zahl);
Serial.print(text);

mache kommen nur " ?" egal was ich da an Formatierungen mache

Das hingegen klappt:
dtostrf(zahl,3,2, text); //Variable von float zu char* umwandeln
j.o.e
Beiträge: 541
Registriert: Fr 29. Nov 2019, 01:15

Re: Der AVR-/ARDUINO-Faden

Beitrag von j.o.e »

Man könnte das float wohl in der Lib freischalten. Hab ich aber noch nie gemacht.
Ich hab mir mit Division und Modulo die Vor- und Nachkommastellen hingebastelt und die 2 Teile dann mit %d.02d gedruckt
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

herrje, ein Kumpel möchte uC zeug anfangen. Programmierer bzw. Informatiker isser.
Hat sich ein Mega Starter Set bestellt.
Ziel ist ein Schach Computer.
Da läuft dann eine Schach engine auf einem PI,
der AVR treibt "nur" das Schachbrett.
dabei soll er die Züge erfassen, also das Brett als Interface dienen. Figuren sollen gesteckt werden, also unten einen PIN haben.

1: der mega hat 54 io Pins. mit 2-3 8fach multiplexern zusätzlich, könnte man jedes Feld einzeln erfassen :?
(64 (Um)Schalter)

2: mit 2 8fach multiplexern könnte man eine Matrix erfassen. :?
(128 taster; 64 LEDs)

3: Tastatur zerlegen/missbrauchen (ohne AVR), tät ich wohl machen, er möchte ja aber ControllerZeugs anfangen, was sehr löblich ist.

wie macht man's am elegantesten?
beim drüber nachdenken gruselt's mich schon, gut das ich den Kolben da nicht schwingen muss :lol:
Benutzeravatar
video6
Beiträge: 6794
Registriert: Mi 23. Sep 2015, 09:18
Wohnort: Laage bei Rostock

Re: Der AVR-/ARDUINO-Faden

Beitrag von video6 »

Für Schachcomputer würde ich eine Hallmatrix nehmen.
Dann ist die Erkennung der Figur automatisch.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

äh, sowas hier?
https://www.stochastik-in-der-schule.de ... Eisenh.pdf
kann ich mir jetzt gar nichts drunter vorstellen, aber der Proband ist ja auch mathe-fuchs, ein bisschen.
j.o.e
Beiträge: 541
Registriert: Fr 29. Nov 2019, 01:15

Re: Der AVR-/ARDUINO-Faden

Beitrag von j.o.e »

ch_ris hat geschrieben: Mi 14. Apr 2021, 06:55 Ziel ist ein Schach Computer.
AVR treibt "nur" das Schachbrett.
dabei soll er die Züge erfassen, also das Brett als Interface dienen ...
Bitte nicht schon wieder das Schnapsglas-Problem ...
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Du meinst eine Wäägezelle unter jedes Feld und jede Figur hat ein definiertes, sich von den anderen unterscheidendes Gewicht?


Dienstlich hatte ich mal einen "OneWire-Button".
Sah aus wie eine Knopfzelle am Plastestiel und musste zur Türöffnung an das Lesegerät gedrückt werden.
Wenn man jede Schachfigur mit so einem "Button" ausstattet...

Induktiv könnte auch funktionieren. Analog als auch Digital.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

näh, hör uff.
das schachding weis ja wer wo steht.
muss ja nur, Figur entnommen und figur wieder gesetzt, erkennen.
an die regeln muss man sich schon selbst halten, is ja kein saufspiel.
der mega hat ja 16 adc kanäle, hab ihm empfohlen da 4fach widerstands Kaskaden dranzuhängen.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Wer es noch nicht kennt:
http://eleccelerator.com/fusecalc/fusec ... atmega2560

FuseCalculator für die Avrs mit avrdude CLI Ausgabe
zB:
AVRDUDE -U lfuse:w:0xFF:m -U hfuse:w:0xD8:m -U efuse:w:0xFD:m -U lock:w:0xFF:m
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich hänge gerade fest:
Ich hab ein W5100 Ethernet-Shield per SPI am Arduino nano. Da wird er erkannt.

Am Arduino Mega 2560 bekomme ich das nicht zum laufen, ich hab schon 3 Arduino Mega 2560 probiert.
Wo kann das denn hängen? Das shield wird schlicht nicht erkannt. Ich hab auch schon die Initialisierung verzögert....
Benutzeravatar
Später Gast
Beiträge: 1680
Registriert: Di 5. Apr 2016, 22:03
Wohnort: Karlsruhe
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Später Gast »

andere SPI-Pins, Chip select? Auch im Code angepasst?
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Später Gast hat geschrieben: Do 15. Apr 2021, 19:38 andere SPI-Pins, Chip select? Auch im Code angepasst?
Die SPI-Pins habe ich verglichen und auch mit dem Multimeter sicherheitshalber nochmal verlichen.
Chip-select habe ich auch geprüft.
Im Code muss ich das nicht anpassen, das macht der Arduino-Compiler, der weiss ja welche CPU ich da habe.
Oder sollte ich da in der SPI.h in der Fußpilzebene suchen?
Benutzeravatar
sukram
Beiträge: 3063
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Hast du in den Fuses das JTAG ausgeschaltet? Und SPI eingeschaltet?
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

sukram hat geschrieben: Do 15. Apr 2021, 19:47 Hast du in den Fuses das JTAG ausgeschaltet? Und SPI eingeschaltet?
Ja, hab ich.
Aber ich habe Hinweise gefunden, das man wohl den SS Pin , (Pin53 bei Mega2560, Pin10 bei Nano) auf Output schalten soll.
Grundsätzlich bei SPI-Master Betrieb.
Teste ich mal.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Man kann das nur wahnsinnig werden!!!!
Also überall steht am 2560 wird der SS Pin an Pin53 angeschlossen. Im Pinout des Arduino Mega2560 steht auch am Pin53 dran SS.
Aber das Ethernet Shield W5100 funktioniert nicht.
Nada.
Nun hab ich einfach mal den Port D10 Pin10 benutzt. Das ist PB04, nix SS.
Jetzt klappt das.
Es scheint die spi.h nicht auf den 2560 angepasst zu sein.

Man man man.
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Habe gerade einen Mega2560 v3 dienstlich hier liegen :roll:
Da soll eine SD-Karte dran.
Den SS-Pin kannst du hinlegen, wo du willst. Musst du in der Software aber auch zuordnen.
Spätestens wenn du mehrere SPI-Geräte hast, brauchst du ja auch mehrere SS-Pins.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Frag mich mal wo ich den SS Pin definiere bei der Ethernet.h.
Die nimmt bei Nanos den Pin 10 und beim Mega eigentlich 53.
Nur warum klappt das nicht?
Pin 4 ist für die SD Card in der Sd Lib drin.
https://www.arduino.cc/en/reference/ethernet
Benutzeravatar
Später Gast
Beiträge: 1680
Registriert: Di 5. Apr 2016, 22:03
Wohnort: Karlsruhe
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Später Gast »

da stehts doch:
On both boards, pin 10 is used as SS. On the Mega, the hardware SS pin, 53, is not used to select the Ethernet controller chip, but it must be kept as an output or the SPI interface won't work.
sysconsol
Beiträge: 4059
Registriert: Fr 8. Jul 2016, 17:22

Re: Der AVR-/ARDUINO-Faden

Beitrag von sysconsol »

Das sagt aber nur, dass ich den Pin 53 nicht anderweitig verwenden darf.
Benutze ich ihn nicht, muss ich ihn freilassen.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ja, genau.
Es funktioniert aber nicht ohne den SS beim Mega, es steht da nicht klar das man Pin 10 nehmen muss auch beim Mega.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

schachcomputer:
ich möchte nochmal Rat einholen bevor ich Rat erteile.
als sensor sind jetzt Reed kontakte gesetzt.
es braucht ja aber auch ein Feedback(1 led pro feld), da bietet sich ja ein MAX7221 an, gibt's ja schon fertig und günstig auf Platine.
jetzt war meine Idee, einen weiteren MAX7221 ebenso für die Reedkontakte zu benutzen,
und dann per reed Relais an der vcc des MAX die Stromaufnahme (schalter on/off) zu messen.
gut oder nicht gut?

edit. die könnte man ja kaskadieren und damit evtl. auf einen Nano zurückgreifen weil nur ein SPI nötig.
j.o.e
Beiträge: 541
Registriert: Fr 29. Nov 2019, 01:15

Re: Der AVR-/ARDUINO-Faden

Beitrag von j.o.e »

ch_ris hat geschrieben: Sa 17. Apr 2021, 08:33 schachcomputer:
ich möchte nochmal Rat einholen bevor ich Rat erteile.
als sensor sind jetzt Reed kontakte gesetzt.
es braucht ja aber auch ein Feedback(1 led pro feld), da bietet sich ja ein MAX7221 an, gibt's ja schon fertig und günstig auf Platine.
jetzt war meine Idee, einen weiteren MAX7221 ebenso für die Reedkontakte zu benutzen,
und dann per reed Relais an der vcc des MAX die Stromaufnahme (schalter on/off) zu messen.
gut oder nicht gut?

edit. die könnte man ja kaskadieren und damit evtl. auf einen Nano zurückgreifen weil nur ein SPI nötig.
Du willst die Reedkontakte auch elektrisch in einer Matrix anordnen? Bedenke dabei, dass bis zu 32 der Kontakte geschlossen sind. Muss man entkoppeln, z.B. über Dioden, sonst wird das nichts. Es gibt auch Hallgeber mit 2 o.C. Ausgängen. Die sind extra für sowas gemacht.

Dir ist schon klar, dass der MAX7221 die LED-Matrix mit ca. 800 Hz scant. Welche Aussage denkst du aus "der Strommessung an Vcc" zu gewinnen? Hast dir wenigstens mal ansatzweise die Signale am MAX angeschaut? Wenn man das SEHR verfeinert, könnte es hinhauen - könnte...

https://www-user.tu-chemnitz.de/~heha/M ... matrix.htm ist aber sicher zielführender.

Was man machen kann: Die Spaltentreiber gemeinsam für Anzeige und Kontakte verwenden. Für die LEDs brauchts dann einen Zeilentreiber, für die Reeds einen Zeilenleser. MAX7221 ist dann aber außen vor.

Edit: Vergleiche hierzu #6 im von mir genannten Link.
Benutzeravatar
sukram
Beiträge: 3063
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Der AVR-/ARDUINO-Faden

Beitrag von sukram »

Die geschickteste Variante wäre IMHO zwei 74HC164 als Spalten und Zeilentreiber, sowie ein 74HC165 zum Lesen der Kontakte. Das ganze über SPI beschrieben.
ch_ris
Beiträge: 3029
Registriert: Mo 30. Nov 2015, 10:08

Re: Der AVR-/ARDUINO-Faden

Beitrag von ch_ris »

danke, guck ich mir morgen am pc mal genauer an.
joe meinst du angeschaut im dabla oder in echt? (weder das eine noch das andere.)
ich bin da auch nicht wirklich involviert, denke nur theoretisch drüber nach.
die, meine, naive? idee ist, jeweils nur einen Schalter software mäßig anschalten, die Stromaufnahme steigt über die schaltschwelle vom reedrelais=reed schalter ist betätigt.
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

sysconsol hat geschrieben: Fr 16. Apr 2021, 13:07 Das sagt aber nur, dass ich den Pin 53 nicht anderweitig verwenden darf.
Benutze ich ihn nicht, muss ich ihn freilassen.
Du hast weiter oben den Link https://www.arduino.cc/en/reference/ethernet gepostet. Auch wirklich gelesen, die darin enthaltenen Details verfolgt?

https://www.arduino.cc/en/Reference/EthernetInit

void setup() {
Ethernet.init(53); // use pin 53 for Ethernet CS
Ethernet.begin(mac, ip);
}


Das gilt auch für die SD.h, die ich allerdings nur am Nano benutze:
const int chipSelect = 10;
SD.begin(chipSelect);


Ich weiß nicht genau, wer mir beim Nano in die Suppe spuckt, sobald ich die SPI.h eingebunden habe, kann ich den D10 nicht mehr anderweitig verwenden. Ist eigentlich egal, dann nehme ich den halt als CS - aber das klingt ähnlich wie Dein 53 am 2560.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich könnte schwören, das ich das Ethernet.init(53);
getestet habe und dann eine Compilerwarung bekommen habe mit irgendwas mit
"Nenene das geth nicht!, Pfui!"
Nun frisst der Compiler das, der Verräter.
Ich teste den Sketch morgen mal mit Ethernet.init(53):

Vielleicht hab ich auch Ethernet.ini(53); versucht......
Profipruckel hat geschrieben: Sa 17. Apr 2021, 19:47
Du hast weiter oben den Link https://www.arduino.cc/en/reference/ethernet gepostet. Auch wirklich gelesen, die darin enthaltenen Details verfolgt?

https://www.arduino.cc/en/Reference/EthernetInit

void setup() {
Ethernet.init(53); // use pin 53 for Ethernet CS
Ethernet.begin(mac, ip);
}
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ja, jetzt geht der.

Also es scheint wie folgt:
Nach langem Suchen und Fluchen hatte ich den Passus mit dem Ethernet.init(53) auch gefunden und mich gefreut, das ich es wahrscheinlich gefunden habe und das Problem aus der Welt ist.
Vorher hatte ich auch Ethernet.begin(mac, ip, 53) versucht.
Da bekam ich das

Code: Alles auswählen

ArduNodeMqtt2-DS18B20:182:29: error: call of overloaded 'begin(byte [6], IPAddress&, int)' is ambiguous
So hab ich dann irgendwann das mit dem Ethernet.init(53) gefunden und getestet:

Code: Alles auswählen

class EthernetClass' has no member named 'ini'; did you mean 'init'
Ich hab das schlicht nicht verstanden was DA STEHT
did you mean 'init

In der Regel kommt vom Compiler immer gemecker, das man wieder mal ein char* nicht mit einem int verrechnen kann, oder so Zeug.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Der GCC bekommt immer bessere Fehlermeldungen.
Die Funktionsvorschläge bei vertippern sind schon nett.

Der GCC haut dir auch Warnings um die Ohren wenn er meint, dass der Buffer beim snprintf nicht groß genug sei für den übergebenen Formatstring ;)
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

Hightech hat geschrieben: So 18. Apr 2021, 08:55 Ja, jetzt geht der.

Also es scheint wie folgt:
Nach langem Suchen und Fluchen hatte ich den Passus mit dem Ethernet.init(53) auch gefunden und mich gefreut, das ich es wahrscheinlich gefunden habe und das Problem aus der Welt ist.
Vorher hatte ich auch Ethernet.begin(mac, ip, 53) versucht.
Freut mich, dass es geholfen hat :D

Mich würde noch interessieren, ob Du am Mega2560 beliebige andere PINs verwenden kannst, z.B. D10.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Profipruckel hat geschrieben: So 18. Apr 2021, 17:14
Hightech hat geschrieben: So 18. Apr 2021, 08:55 Ja, jetzt geht der.

Also es scheint wie folgt:
Nach langem Suchen und Fluchen hatte ich den Passus mit dem Ethernet.init(53) auch gefunden und mich gefreut, das ich es wahrscheinlich gefunden habe und das Problem aus der Welt ist.
Vorher hatte ich auch Ethernet.begin(mac, ip, 53) versucht.
Freut mich, dass es geholfen hat :D

Mich würde noch interessieren, ob Du am Mega2560 beliebige andere PINs verwenden kannst, z.B. D10.
Für andere Anwendungen meinst du, das die wieder frei sind?
Den D10 hatte ich ja als Notlösung dran am Ethernetshield.

Was wohl nicht geht, ist zB. D9 oder andere Pins zu nutzen UND Pin53 für Input. Dann schaltet der wohl hart auf SPI-Slave.
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

Ich hatte vor, mit einem Nano und Schieberegister 74HC595 eine Segmentanzeige zum leuchten zu bringen.

Der Haken: Die hat 3 LEDs pro Segment (selbst gebaut) Also so etwa 60 Ma pro Ausgang vom Register.

Kann man das wie eine normale Anzeige anschließen oder ist der Strom zu viel?

Wenn der Strom das Problem ist, wie könnte ich es lösen?
Tobi
Beiträge: 821
Registriert: So 11. Aug 2013, 16:52
Wohnort: Eschweiler

Re: Der AVR-/ARDUINO-Faden

Beitrag von Tobi »

Schau halt im Datenblatt nach wieviel Strom dein Schieberegister liefern kann.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Finger »

Ansonsten sowas wie.n ULN2003 oder so als Treiber
Benutzeravatar
Cubicany
Beiträge: 3543
Registriert: Sa 15. Feb 2020, 17:48
Wohnort: Soest

Re: Der AVR-/ARDUINO-Faden

Beitrag von Cubicany »

Also ich komme mit dem Datenblatt irgendwie nicht zurecht.

Da stehen X Angaben zu VCC und ESD Schutz, aber ich kann nicht so wirklich herauslesen, wie viel mA die Ausgänge können.
Antworten