ferdinandkeil.com

Archive for the ‘Allgemein’ Category

Setting up CUPS with LPR on Raspbian

without comments

With CUPS you can easily set up a Raspberry Pi as print-server. Out of the box client can connect to CUPS over IPP (Wiki – Internet Printing Protocol). However, on Windows machines this have unwanted side-effects whenever the server is turned off: everytime I opened a document in LibreOffice the program froze for more than a minute. This is due to the Windows Spooler searching for the print-server until a time-out occurs. This behavior can be avoided by using the LPR protocol (Wiki – Line Printer Daemon protocol). In the following I will describe the necessary steps for this setup.

I tried this on a Raspberry Pi 1 running Raspbian Jessie Lite (2016-11-25).

Step 1

First you’ll have to install CUPS. For LPR to work you’ll also need xinetd. And I also needed splix as it contains the driver for my printer (Samsung ML-2010PR).

sudo apt-get install -y splix cups xinetd
sudo cupsctl --share-printers --remote-admin
sudo usermod -a -G lpadmin pi

The second commands enables printer-sharing and the CUPS web-interface. The last command allows the user pi to change the settings for CUPS.

Step 2

To enable LPR you’ll have to configure xinetd. Create a new config file named cups-lpd in /etc/xinetd.d:

sudo nano /etc/xinetd.d/cups-lpd

Paste the following configuration into the file:

service printer
{
        socket_type = stream
        protocol = tcp
        wait = no
        user = lp
        server = /usr/lib/cups/daemon/cups-lpd
        server_args = -o document-format=application/octet-stream -o job-sheets=none,none
        disable = no
}

Then restart xinetd:

sudo /etc/init.d/xinetd restart

Step 3 and Finish

Now add your printer through the CUPS web-interface. It can by found at https://YOUR-IP:631/admin and use the credentials for the standard user pi. Make sure you enable network sharing. Then you can add the printer on the clients. For Windows you have to add a Generic Network Interface. Make sure to set the queue name to the one you chose in the web-interface. Also, you have to enable LPR Byte Counting or it will not work!

Written by Ferdinand

Januar 15th, 2017 at 15:56

AVR Dragon mit avrdude nutzen

without comments

cmd_avrdude

Um den günstigen AVR Dragon Programmieradapter von Atmel mit dem verbreiteten, quelloffenen Tool avrdude nutzen zu können wird der libusb-win32 Treiber benötigt. Dieser lässt sich aufgrund der erforderlichen Signatur nicht ohne weiteres auf modernen Windows Systemen installieren. Abhilfe schafft hier das Tool Zadig. Einfach herunterladen, als Treiber libusb-win32 (v…) auswählen und auf Install Driver klicken. Fertig.

zadig_dialog

Written by Ferdinand

Juni 4th, 2015 at 23:34

Posted in Allgemein

Tagged with , , , , ,

Ändern der I2C Adresse eines HYT-131 Sensors

with 4 comments

Auf der Suche nach genauen und günstigen Sensoren für meine Humidor Steuerung bin ich auf den HYT-131 von B+B Sensors aufmerksam geworden. Für knapp 20 Euro inkl. MwSt. bekommt man einen maximal ±2,0%relF genauen, kombinierten Temperatur- und Feuchtigkeitssensor. Das ist deutlich günstiger als der Sensirion SHT15 mit vergleichbaren Werten. Ein weiterer Vorteil des Sensors ist, dass er über ein Standard I²C-Interface kommuniziert.
Der I²C-Bus unterstützt bis zu 112 Geräte, vorausgesetzt diese haben unterschiedliche Adressen. Das Datenblatt des HYT-131 erwähnt zwar die Möglichkeit die voreingestellte Adresse zu ändern, erläutert aber nicht wie. Über einen Beitrag im Raspberry Pi Forum wurde ich dann darauf aufmerksam, dass der HYT-131 genauso wie der HYT-221 und HYT-271 auf einem IC von ZMDI basieren. Der IC heißt ZSSC3122, das Datenblatt habe ich angehängt. Im Datenblatt zu diesem IC finden sich allerhand Informationen, darunter wie die I²C-Adresse geändert werden kann. Der Ablauf ist wie folgt:

  1. Sobald der Sensor mit der Versorgungsspannung verbunden wurde muss innerhalb von 3-10 ms (abhängig von der internen Konfiguration) ein Befehl gesendet werden um in den Command Mode zu gelangen.
  2. In diesem Modus kann der interne EEPROM beschrieben werden, wobei die I²C-Adresse im Register Cust_Config hinterlegt ist.

Um diesen Vorgang automatisch und zuverlässig durchführen zu können habe ich eine Arduino Sketch geschrieben. Die bisherige (default 0x28) und neue Adresse werden über defines angegeben. Der Sensor wird mit dem Arduino verbunden und dieser mit der Sketch programmiert. Dann muss nur noch der Serielle Monitor gestartet und ein beliebiges Zeichen gesendet werden um den Prozess zu starten.
Bei den Sensoren die mir von B+B Sensors geliefert worden sind war das Comm_lock Flag im Register ZMDI_Config nicht gesetzt. Dadurch antwortet der Sensor auf allen I²C-Adressen. Die Sketch setzt dieses Flag, da sonst nicht getestet werden kann ob die Änderung der Adresse erfolgreich war. Mit der enthaltenen Funktion changeCommLock(...) kann diese Änderung aber auch wieder rückgängig gemacht werden.

Hinweis: Falls ein Fehler auftritt ist der Sensor unter Umständen weder unter seiner alten noch unter der neuen Adresse ansprechbar. In diesem Fall hilft es den gesamten I²C-Adressraum zu durchlaufen und auf Geräte zu prüfen.

page_white_acrobat ZSSC3122_cLite_Data_Sheet_rev_1_30

Download Icon hyt131_i2c_addr_change_release

Written by Ferdinand

April 1st, 2013 at 12:23