Show Posts
Pages: [1] 2 3 ... 25
1  International / Deutsch / Re: Arduino UNO <-> NANO, Software mit INT0 läuft nur auf UNO on: Today at 06:28:53 am
Hi,

an einen defekten Nano, oder ne kalte Lötstelle hab ich auch schon gedacht.

Aber manchmal ist man wie vernagelt. Ich hab auf dem Nano noch ein Ethernetshield drauf gesteckt : http://www.ebay.de/itm/Ethernet-Shield-for-Arduino-Nano-UNO-R3-work-as-ENC28J60-RJ45-Webserver-/111242798349?pt=Wissenschaftliche_Ger%C3%A4te&hash=item19e696650d. Auf dem UNO hatte ich ein anderes, das ich selber verdrahtet hatte.

War immer der Meinung, das nutzt nur die Ports D10/11/12/13.
Irgendwann so um 3:45 Uhr hab ich dann so weit rückwärts gebaut bis es funktionierte. Und siehe da. Das Shield war der Übeltäter. An und für sich ist das Shield eine super Sache, klein und direkt auf den nano steckbar. Allerdings hab ich dann ewig im Inet nach nem Schaltplan gesucht, und siehe da: Der Pin D2 wird auf dem Shield mit dem /INT des ENC28J60 verdröselt. Da das Shield auch ohne das Signal läuft, häng ich den jetzt am Shield einfach ab und hab wieder meine 2 Interrupt-Pins.

So long /hk007
2  International / Deutsch / Re: Arduino UNO <-> NANO, Software mit INT0 läuft nur auf UNO on: August 20, 2014, 04:12:07 pm
Polung passt. Bin ich mir sicher :-)

Edit:
Hab mal umgebaut auf D3 (Int 1) Da läuft es :-)
Da hats wohl jetzt was mit dem Pin D2.... Mal suchen
3  International / Deutsch / Arduino UNO <-> NANO, Software mit INT0 läuft nur auf UNO --> gelöst :-) on: August 20, 2014, 04:02:39 pm
Hi,

jetzt bin ich mit meinem Latein am Ende.
Habe auf einem UNO mit 328 DIL-Chip eine Software entwickelt, die auf PinD2 (= INT0) die Signale eines S0-Zählers aufnimmt und die Zeit zwischen 2 Signalen berechnet. Aufbau wie folgt: PinD2 mit 4k7 gegen 5V. dann PinD2 mit dem optokoppler des S0-Zählers gegen Masse. Klappt prima und bringt auch plausible Werte.

Nachdem die Softwareentwicklung abgeschlossen ist, wollte ich das Programm auf einem Nano (Platzproblem) portieren. Auf dem Nano ist ja auch ein 328er. Zwar eine andere Bauform, aber das sollte m.E. unkritisch sein.

Allerdings bekomme ich hier auf D2 keine stabilen Signale rein. Normal erwarte ich alle 10 Sekunden einen Impuls. Aber auf dem Nano flattert das Signal richtig. Ich hab die Schaltung jetzt schon 3 mal neu auf einem Breadboard aufgebaut, aber immer das selbe Ergebnis.

Hab ich irgendwas übersehen? Sind die beiden Chips doch nicht identisch?
Wäre um jede Hilfe dankbar. Aktuell hab ich keine Idee mehr

Gruß/hk007
4  International / Deutsch / Re: Druck/Unterdruck und Temperatur messen und speichern on: August 17, 2014, 03:28:21 am
DS18B20 können -55°C...+125°C

Würde gerade noch gehen. Allerdings unter -10° nicht mehr mit großer Genauigkeit.
5  International / Deutsch / Re: Interner Pullup <-> externe Beschaltung beim DHT22 o.ä. on: August 17, 2014, 03:25:09 am
OK,

aber dann macht es doch immer noch einen Unterschied, ob man den internen dazuschaltet oder nicht. Dann hab ich ja einmal eine Parallelschaltung von 2 Widerständen und ohne internen Pullup nur den externen. Ich hab nämich in noch keinem Datenblatt gelesen, ob man dem internen Pullup Beachtung schenken muss.

Na gut, hab mal schnell nachgerechnet: 20k(intern) || 5k(extern) -> 4k. Ist jetzt nicht so weit weg von 5k

Fazit: Ich hab ~10m Leitungslänge. Dann spendier ich meiner Schaltung die 5k.
6  International / Deutsch / Re: Interner Pullup <-> externe Beschaltung beim DHT22 o.ä. on: August 17, 2014, 02:17:11 am
Ach so, verstehe, bei "INPUT_PULLUP" brauch ich das "digitalwrite High" gar nicht mehr.  smiley-cool

Jetzt bleibt noch die Frage, ob ich bei dem Code in der Lib eigentlich noch extern beschalten muss?
Habe mir allerdings die DHT.cpp noch etwas weiter angeschaut. Der PIN wird ja als Ein- und Ausgang genutzt.
7  International / Deutsch / Interner Pullup <-> externe Beschaltung beim DHT22 o.ä. on: August 17, 2014, 01:55:08 am
Hi,

Ich hab an einem UNO einen DHT22 hängen. Den Data-Pin hab ich extern hoch mit einem 4k7 an 5V hochgezogen.
Läuft prima!

Jetzt hab ich aber wieder nachgedacht, und würde gern etwas mit euch diskutieren:

Der UNO kann ja auch einen als Input definierten PIN mit einem internen Pullup hochziehen. Könnte ich mir da nicht die externe Beschaltung sparen? Gut, der interne Pullup ist lt. Beschreibung zwischen 20k und 50k. Wäre ja m.E. auch noch in Ordnung.

Jetzt hab ich noch in der DHT22-Lib nachgeschaut:
Code:
void DHT::begin(void) {
  // set up the pins!
  pinMode(_pin, INPUT);
  digitalWrite(_pin, HIGH);
  _lastreadtime = 0;
}

Die setzen den Pin ja auf High, was IMHO das Zuschalten des Pullup bedeutet.
Allerdings steht noch folgendes in der Reference:
Code:
There are 20K pullup resistors built into the Atmega chip that can be accessed from software.
These built-in pullup resistors are accessed by setting the pinMode() as INPUT_PULLUP.
....
Prior to Arduino 1.0.1, it was possible to configure the internal pull-ups in the following manner:
pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors
.....
Ich hab atm IDE 1.0.5.
Was macht dann das " digitalWrite(_pin, HIGH)" überhaupt noch, wenn der pinMode nur als INPUT und nicht als INPUT_PULLUP definiert ist?

Was meint ihr dazu?
8  International / Deutsch / Re: CS-Pin in ethercard Bibliothek vom Programm ändern on: August 16, 2014, 12:25:19 pm
Sieht ja wohl ganz danach aus.

Code:
uint8_t ENC28J60::doBIST ( byte csPin) {
#define RANDOM_FILL        0b0000
#define ADDRESS_FILL    0b0100
#define PATTERN_SHIFT    0b1000
#define RANDOM_RACE        0b1100

// init
    if (bitRead(SPCR, SPE) == 0)
        initSPI();
    selectPin = csPin;
    pinMode(selectPin, OUTPUT);
    disableChip();
.....
......

Jep, sieht so aus...


Danke Jungs,
ihr habt mir wieder mal schnell und sehr kompetent geholfen.  smiley
9  International / Deutsch / Re: CS-Pin in ethercard Bibliothek vom Programm ändern on: August 16, 2014, 11:47:33 am
Hey Jurs,
Top Idee:
Hab nur den Aufruf der ether.begin gefunden. Die ruft wohl das initialize auf, wenn ich das richtig sehe...
Code:
uint8_t EtherCard::begin (const uint16_t size,
                          const uint8_t* macaddr,
                          uint8_t csPin) {
    using_dhcp = false;
    Stash::initMap(56);
    copyMac(mymac, macaddr);
    return initialize(size, mymac, csPin);
}[s]doBIST[/s]
Habs jetzt so gemacht:
Code:
 ether.begin(sizeof Ethernet::buffer, mymac, 10)

--> IP vom DHCP hat er schon mal bekommen.

Jetzt hab ich in der enc28j60.h noch einen zweiten Eintrag gefunden:
Code:
   /**   @brief  Reset and fully initialise ENC28J60
    *     @param  csPin Arduino pin used for chip select (enable SPI bus)
    *     @return <i>uint8_t</i> 0 on failure
    */
    static uint8_t doBIST(uint8_t csPin = 8);

Wird das auch in der ether.begin-Routine richtig gestellt?  Der Aufruf hängt ja noch so unmotiviert hinter der Klammer dran. So viel versteh ich von C nicht :-(

Vergesst das durchgestrichene. k.A. wie das doBIST da dran gekommen ist.... Bin wohl auf "paste" eingeschlafen
10  International / Deutsch / CS-Pin in ethercard Bibliothek vom Programm ändern on: August 16, 2014, 11:11:14 am
Hi,

ich habe mir einen Nano mit Huckepack EthernetShield (enc28j60) zugelegt. Der ist so schön klein, und kann schön an engen Ecken verbaut werden.
Allerdings ist bei dem Paket der CS-Pin auf Pin 10. Die Ethercard-Lib, die ich verwende hat den Pin aber fest auf PIN 8.
Hier der entsprechende Auszug aus der enc28j60.h
Code:
    /**   @brief  Initialise network interface
    *     @param  size Size of data buffer
    *     @param  macaddr Pointer to 6 byte hardware (MAC) address
    *     @param  csPin Arduino pin used for chip select (enable network interface SPI bus). Default = 8
    *     @return <i>uint8_t</i> ENC28J60 firmware version or zero on failure.
    */
    static uint8_t initialize (const uint16_t size, const uint8_t* macaddr,
                               uint8_t csPin = 8);

Sicher kann ich die Datei ändern. Befürchte aber, wenn ich da mal ein neues Release verwende, dann ist meine Änderung vergessen und ich suche mir nen Wolf.

Kann ich den Parameter irgendwie aus dem Arduino-Programm ändern? Dann könnte ich immer mit der Original-Lib arbeiten.

gruß/hk007
11  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 10, 2014, 11:43:06 am
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42
Quote
Conversion is done in the format "[-]d.ddd". The minimum field width of the output string (including the '.' and the possible sign for negative values) is given in width, and prec determines the number of digits after the decimal sign. width is signed value, negative for left adjustment.

Ha, genau so eine Info habe ich gesucht. Hab aber im Internet nix dazu gefunden. Na ja, wenn man auf der C++ Referenzseite sucht, und die Funktion ist nur für AVR, dann kann man es auch nicht finden.
Dann ist es ja nicht undokumentiert  smiley-cool

So, jetzt läuft meine Software, und ist auch für spätere IDEs kompatibel.
Noch mal einen großen Dank für deine Super-Hilfe.
12  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 10, 2014, 10:44:49 am
Hmm...

hab mal selber etwas rumgespielt.
 
Code:
dtostrf (DHTTemp_1, 1, 2, DHTTemp_1_str);
ergibt trotzdem "22.70" oder "2.20" oder "-22.80". Je nach Eingangsvariable.  So wie ich es brauche.
Hab ich da wieder eine undokumentierte Funktion gefunden?
Eigentlich sollte der 2 Parameter ja die Anzahl der Zeichen inkl. Dezimalpunkt sein. Und ich bekomm definitv mehr als 1 Zeichen
13  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 10, 2014, 10:12:34 am
Mann oh mann,
von dir kann man viel lernen :-)

Das readFlashString hab ich mir gleich eingebaut. Funzt super.

Allerdings hab ich jetzt noch ein Problem mit der dtostrf-Funktion.

Code:
dtostrf (DHTTemp_1,5,2,DHTTemp_1_str);

Bei 27,00 Grad bekomme ich "27.00" Gut so
Bei 5,00 Grad bekomme ich " 5.00" Also noch ein Leerzeichen davor. Und das nimmt mir der Empfänger übel.
Ist ja auch klar. Ich hab als Parameter auch die 5 vorgegeben.
Kann man den Parameter irgendwie dynamisch vorgeben?
14  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 10, 2014, 08:02:35 am
HI, sehr gut erklärt. Das hab sogar ich verstanden (Hoff ich)

Das geht nicht, da println() einen Zeiger ins RAM will:
Code:
Serial.println(startphp);
m geht das anscheinend nur in C und nicht in C++. Da bleibe ich lieber bei PROGMEM und aktiviere statt dessen C++11 smiley

Das heisst ich muss den String erst ins RAM bringen:
Code:
  char chartemp[100];
    snprintf (chartemp, sizeof(chartemp),"%S", startphp);
    Serial.print (chartemp);
--> Damit bekomme ich den String auf die Console.
Allerdings hab ich dann nichts gewonnen, da ich wieder RAM verschwendet habe.
Man müsste vllt. nur einen Puffer für ein Byte nehmen, und den dann in einer Schleife, x von 0-sizeof(), Byte für Byte ausgeben.
Ich hätte es mal naiv so versucht:
Code:
    chartemp[x] = startphp[x];

Aber das geht nicht.
15  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 09, 2014, 06:29:29 pm
Jo, 255 sind zu viel :-)

Jetzt beutelts mich aber noch wo anders:

Code:
  char startphp[] PROGMEM = "http://192.168.1.80/emoncms/input/bulk.json?data=";
  char apikey[] PROGMEM = "&apikey=5a0b7a9339e4e75895634654362";
  char phpstring[200];

    cx = snprintf_P (phpstring, sizeof(phpstring), PSTR("[[%d,%d,11.10,22.20,33.30,44.40,1234]]"), timeoffset1, node1);
    snprintf_P (phpstring+cx, sizeof(phpstring)-cx, apikey);

    Serial.println (startphp);
    Serial.println (phpstring);

    ether.browseUrl(startphp, phpstring, website, my_callback);

Auf der seriellen Console bekomme ich nur den "phpstring" angezeigt. "startphp" ist nur ne leere Zeile :-(
Why?? Ist doch dasselbe. Beides sind char-arrays

Pages: [1] 2 3 ... 25