Posts by elmicha


    Ich denke man könnte solche individuellen Parameter in das EEPROM schreiben, nur brauche ich dazu eine Möglichkeit eine Kommunikation zwischen dem Raspi und dem TX Node zu etablieren. UART scheidet aus, der Treiber passt einfach nicht in den Speicher. Bleiben I2C oder HF (over the air).

    Könntest Du die Parameter nicht per avrdude ins EEPROM schreiben? Oder muss es im laufenden Betrieb gehen?


    Mich würde es wie schon erwähnt auch brennend interessieren wie das Flashen mit einen USBasp direkt per PC von statten geht ohne den Umweg über Pi .
    Dies ist doch bestimmt möglich. Oder?

    Eine Google-Suche nach "USBasp ATtiny" oder "USBasp ATtiny84" hast Du sicher schon gemacht, oder?

    Kurz: MISO, MOSI, SCK, RESET, VCC und GND vom ATtiny mit den entsprechenden Pins Deines Programmers verbinden. In der Arduino-IDE "ATtiny84 @ 8 MHz (internal oscillator)", Deinen Programmer und den richtigen Port auswählen, und dann "Bootloader brennen" auswählen. Das flasht beim Tiny nicht wirklich einen Bootloader, sondern stellt nur die Fuses richtig ein (das braucht man nur beim ersten Mal machen). Anschliessend den Sketch flashen, z.B. "Blink" aus den Beispielen in der IDE.

    Mit diesem RFM69_f funktioniert's bei mir nach einigen Anpassungen (bitte selber an die passenden Stellen verteilen):

    Das setRFM12compatibility() stellt die Frequenz so ein, dass sie zu diesem RFM12B von aanon4 mit RF69_COMPAT passt. Wenn Du nur lauter RFM69 hast, brauchst Du das nicht (schadet aber auch nicht).

    Bei mir hat nur der Empfänger einen RFM69CW, alle Sender sind RFM12B mit RF69_COMPAT. Ich habe nur jetzt testweise einen ATtiny84, einen RFM69CW und einen DHT22 auf einem Breadboard zusammengestöpselt.

    Nachteile vom RFM69CW:

    • Verschlüsselung klappt wohl nur, wenn man nur RFM69 hat, nicht zu RFM12B.
    • Maximale Länge einer Sendung ist 61 (?) Bytes.
    • Der RFM69 möchte gern mit 3.3V betrieben werden, mit 3 AA-Zellen wird das wohl nix.
    • Mit dem Olimex AVR ISP MKII bekomme ich den Tiny nicht geflasht, während der RFM69CW auch angeschlossen ist. Mit dem RFM12B klappt das einwandfrei.


    Vorteile vom RFM69CW:

    • Der Empfänger kann die Signalstärke ausgeben.
    • Die Sender könnten wohl ihre Signalstärke automatisch anpassen, wenn man das RFM69_ATC benutzen würde. Da habe ich noch nicht getestet, ob das zu dem RFM69_f passt.


    Arduino Uno als Programmer

    Code
    Arduino: 1.6.5 (Windows 7), Platine: "ATtiny84 @ 8 MHz"


    Du musst zuerst den Sketch ArduinoISP auf den Uno flashen. Dabei als Board nicht den ATtiny auswählen, sondern den Uno!


    Anschliessend dient der Uno als Programmer für den Tiny. Da musst Du dann den Tiny als Board auswählen, und den ArduinoISP als Programmer (und natürlich einen Sketch für den Tiny).

    Das ist nur am Anfang ein bisschen verwirrend.


    Die Fehlermeldung hättest Du ja schon kopieren können.

    Code
    .../hardware/arduino/avr/cores/arduino/WString.h:143:16: error:   initializing argument 1 of 'unsigned char String::operator==(const char*) const' [-fpermissive]
      unsigned char operator == (const char *cstr) const {return equals(cstr);}
                    ^
    invalid conversion from 'char' to 'const char*' [-fpermissive]

    Meine C++-Kenntnisse sind ziemlich eingerostet, aber so könnte es passen:

    Code
    if (inputString.substring(i, i+1) == String(':')) {

    Oder so:

    Code
    if (inputString.charAt(i) == ':') {


    Hallo, hat hier jemand schon mal einen Jeelink V3 als Empänger benutzt??
    Wenn ich die RF12demo ausprobiere empfängt dieser nichts vom Sender...

    Die JeeLib- und LowPowerLabs-Bibliotheken können nicht miteinander sprechen, soweit ich das bisher rausbekommen habe. Wenn Dein JeeLink den RFM12B hat, solltest Du einen LowPowerLabs-Empfänger-Sketch verwenden können, und der kann dann auch mit Deinen LowPowerLabs-Sendern sprechen.

    Wenn Dein JeeLink den RFM69CW hat, kannst Du vermutlich die [url=https://lowpowerlab.com/forum/index.php/topic,209.msg1081.html#msg1081]hier[/url] erwähnten RFM12B- und RFM69-Bibliotheken benutzen - oder aber JeeLib bei Sender und Empfänger.

    JeeLib hätte wohl den Vorteil, dass man auch einen RFM12B oder RFM69CW direkt an den RPi hängen könnte.


    Die "Candidates" die er da aufzählt finde ich so nicht in meiner Print.h

    In meiner Print.h gibt's diese beiden, die void liefern:

    Code
    virtual void write(const char *str);
        virtual void write(const uint8_t *buffer, size_t size);

    Ich verwende den (älteren?) Core von Google Code.
    In https://github.com/arduino/Arduin…arduino/Print.h und https://github.com/arduino/Arduin…duino/Print.cpp liefert Print::write jeweils size_t.

    Irgendwie scheinen die beiden bei Dir gemischt worden zu sein.


    Was mir vorschwebt, ist die Möglichkeit, am Pi sowohl Temperaturen von den Sensoren zu empfangen, als auch Steckdosen vom Pi aus zu schalten. Geht das mittlerweile?

    Der RFM12B macht normalerweise nur FSK; ASK/OOK kann er nur mit Mühe. Ein ASK/OOK-Transmitter kostet nur ein paar Euro, dazu evtl. noch ein Booster auf 12V und gut. Die Ansteuerung übernimmt entweder der Pi selbst, oder man benutzt den 328 (z.B. Pro Mini), der gleichzeitig auch den RFM12B-Empfänger ausliest.

    In der nackten Arduino-IDE (auch 1.6.5) gibt es keinen ATtiny. Vermutlich hast Du den damellis-Core nachinstalliert, z.B. wie in http://highlowtech.org/?p=1695 beschrieben.

    In der pins_arduino.* vom damellis-Core sind die Pin-Zuordnungen so gezeichnet:


    [font="Courier New"]// ATMEL ATTINY84 / ARDUINO
    //[/font]
    [font="Courier New"]// +-\/-+[/font]
    [font="Courier New"]// VCC 1| |14 GND[/font]
    [font="Courier New"]// (D 10) PB0 2| |13 AREF (D 0)[/font]
    [font="Courier New"]// (D 9) PB1 3| |12 PA1 (D 1)[/font]
    [font="Courier New"]// PB3 4| |11 PA2 (D 2)[/font]
    [font="Courier New"]// PWM INT0 (D 8) PB2 5| |10 PA3 (D 3)[/font]
    [font="Courier New"]// PWM (D 7) PA7 6| |9 PA4 (D 4)[/font]
    [font="Courier New"]// PWM (D 6) PA6 7| |8 PA5 (D 5) PWM[/font]
    [font="Courier New"]// +----+[/font]


    Im arduino-tiny-Core (http://arduino-tiny.googlecode.com) sind sie hingegen so zugeordnet:

    [font="Courier New"]// ATMEL ATTINY84 / ARDUINO[/font]
    [font="Courier New"]//[/font]
    [font="Courier New"]// +-\/-+[/font]
    [font="Courier New"]// VCC 1| |14 GND[/font]
    [font="Courier New"]// (D 0) PB0 2| |13 AREF (D 10)[/font]
    [font="Courier New"]// (D 1) PB1 3| |12 PA1 (D 9)[/font]
    [font="Courier New"]// PB3 4| |11 PA2 (D 8)[/font]
    [font="Courier New"]// PWM INT0 (D 2) PB2 5| |10 PA3 (D 7)[/font]
    [font="Courier New"]// PWM (D 3) PA7 6| |9 PA4 (D 6)[/font]
    [font="Courier New"]// PWM (D 4) PA6 7| |8 PA5 (D 5) PWM[/font]
    [font="Courier New"]// +----+

    [font="Arial"][font="Sans-serif"]Warum es diese Unterschiede gibt, welche zuerst da war usw., weiss ich nicht.[/font][/font][font="Sans-serif"]
    Eigentlich finde ich die damellis-Zuordnung besser, aber hier im Thread und bei Nathan Chantrell wird offenbar immer die arduino-tiny-Zuordnung benutzt.[/font]

    [/font]


    Stimmt womöglich was mit diesen mysteriösen Fuses nicht? Bspw. könnte der interne Oszillator mit zu geringem Takt laufen, doch ab Werk soll er auf 1MHz eingestellt sein.

    Die mysteriösen Fuses muss man mit dem Menüpunkt "Bootloader brennen" in der Arduino-IDE setzen (vorher natürlich ATtiny84 @ 8 MHz auswählen). Das dauert ziemlich lang, ohne dass irgendetwas angezeigt wird, also Geduld.

    Da man das nur einmal bei einem neuen Tiny machen muss, vergisst man das schnell - ich hab's jedenfalls auch vergessen, als ich die TinyTX4 zum ersten Mal ausprobiert habe.

    Viele Grüsse...
    Michael

    Ich hab nur einen BMP085 direkt am RPi, aber ich kann ja mal drauf los raten:

    Hast Du vielleicht die angegebenen Pullup-Widerstände vergessen? Oder hast Du (wie ich neulich) vergessen, bei den neuen Tinys den "Bootloader" (die Fuses) zu flashen?

    Im Datenblatt vom BMP180 steht 1.8 bis 3.6V Versorgungsspannung (max. 4.25V). Passt das bei Dir?

    Wie ist denn das Fehlerbild? Sendet er gar nichts oder sendet er falsche Werte? Blinkt eine LED, wenn Du sie testweise (über einen Vorwiderstand) anschliesst?

    Für den BMP085 und BMP180 gibt's ein Kernelmodul bmp085_i2c, das leider nicht im Raspbian-Kernel enthalten ist (aber falls man eh einen eigenen Kernel baut, kann man das ja mit dazu nehmen).

    Man muss nur die Adresse bekanntgeben:

    Code
    echo bmp085 0x77 > /sys/bus/i2c/devices/i2c-1/new_device

    und schon kann man in /sys/bus/i2c/devices/1-0077/pressure0_input und /sys/bus/i2c/devices/1-0077/temp0_input die Werte auslesen.

    inData ist nur ein "dummer" char*, kein String. An so einen char* kann man nicht mit += Zeichen anhängen, das geht nur bei String-Objekten.

    Du kannst inData als char-Array definieren und dann z.B. mit strlcpy() Daten hineinkopieren:

    [code=php]char inData[RF12_MAXDATA];

    strlcpy(inData, radio.Data, sizeof inData);
    [/php]

    Oder eben mit einer Schleife:

    [code=php]
    char inData[RF12_MAXDATA];

    int i;
    for (byte i = 0; i < *radio.DataLen; i++) //can also use radio.GetDataLen() if you don't like pointers
    inData[i] = radio.Data[i];
    [/php]