Krumeltee

-> Elektronik, Mikrocontroller und Retro-Computing <-

Archive for the ‘ARM’ Category

Dual IR 1A Webradio

Posted by krumeltee - 14. Juni 2014

Dieser Artikel ist noch NICHT fertig!

Da er aber nun schon mehrere Wochen als Entwurf so da liegt, veröffentliche ich ihn jetzt unter Vorbehalt.

 

Seit einiger Zeit gibt es dieses Webradio relativ günstig zu kaufen. Es enthält ein MSE005 – Board mit einem Agic SOC (NUC930 ARMv5) von Magic Systech. Das Webradio kommt mit folgenden Merkmalen:

  • Zwei Audioausgänge, Kopfhörer und Line-Out
  • Zwei USB-Ports, einer intern mit aufgelötetem USB-WLAN-Stick, einer mit Buchse
  • RT3070 USB WLAN Stick, intern aufgelötet
  • IR-Empfänger
  • 128×64 STN Display (weiss/blau)

Fotos

Hier zwei Fotos vom Innenleben.

Foto 1 Foto 2

Zugang per Telnet

Ein Telnet-Server läuft auf Port 23 auf dem Board. Zugangsdaten sind root/password. Sobald das Board mit dem WLAN verbunden ist, reicht ein  $ telnet <ip/hostname>.

Display

Das verbaute Display trägt die Bezeichnung FGC12864A. Dazu konnte ich nichts genaues finden. Jedoch scheint es einige Übereinstimmungen mit anderen Displays zu geben. Der Controller ist ein ST7567. Das Display wird vom SOC per SPI angesprochen. Ein Kernel-Treiber „ST7567“ läuft auf dem Board. Hier ein paar Code-Beispiele:

Hier zwei paar Datenblätter:

Speicher

Das Board hat 16MB RAM und 128MB Flash Speicher. Der Flash Speicher ist per /dev/mtdblock0 mit jffs2 Dateisystem erreichbar.

IR-Empfänger

Der IR-Empfänger ist ein TL1838. Dieser ist baugleich mit diversen anderen xx1838-Typen. Hier zwei Datenblätter:

Betriebsspannung: 2,7V – 5,5V, Arbeitsfrequenz: 38kHz.

Fernbedienung

Auf dem Board läuft ein SC6122-Treiber. Dieser Chip ist ein IR-Sende-Controller. Wahrscheinlich steckt dann eben dieser oder ein kompatibler in der Fernbedienung. SC6122 Datenblatt.

WLAN-USB-Stick

Der verbaute WLAN-Stick ist ein BL-RT3070-7A. Hier z.B. zu kaufen. Einige Angaben des Herstellers:

  • IEEE 802.11B/G/N
  • USB1.1/USB2.0
  • 2,4GHZ
  • Infrastructure/AD-Hoc
  • Transferraten: 135/54/48//36/24/18/12/9/6/1Mbit/s
  • Reichweite: Indoor 100m / Outdoor 300m
  • 3,3V Versorgungsspannung

Der RT3070-Chip kann unter Linux anscheinend auch mit hostapd zum Access-Point gemacht werden.

Audio-Ausgänge

Das Radio hat zwei Ausgänge, einen Line-Out zum Anschluss an einen Verstärker/Aktiv-Boxen und einen Kopfhörer-Anschluss. Dieser wird von einem PT2308-Treiber versorgt. PT2308 Datenblatt.

Die beiden Ausgänge sind an der Soundkarte leider nur einer.

I2C-Bus

Auf dem Trägerboard sitzt ein PT2259 Chip, der die Lautstärkeregelung übernimmt. dieser wird per I2C angesteuert. Die Pins 4 und 5 sind SDA und SCL.

Sie Datenblatt zum PT2259.

Stromversorgung

Das komplette Radio an sich wird mit 6V/800mA versorgt. Auf dem Board befindet sich ein LM2940CT-5.0, dieser entspricht einem einfachen 7805, jedoch die „Low-Drop-Version“ davon. Bei 1A ist dieser bereits ausgereizt. Auf dem Radio-Board ist ausserdem kein Kühlkörper für den Regler montiert, dieser ist mit Schraube+Mutter an der Platine befestigt. Daher sollte man für weitere Hardware-Basteleien eine andere Stromversorgung vorsehen. Ein LM2596-Schaltregler mit einem maximalen Ausgangsstrom von 3A wäre dafür z.B. interessant.

USB

Das Board hat zwei USB-Anschlüsse. Der eine ist intern und mit einem USB-WLAN-Stick fest verlötet belegt. Der andere ist mit einer Buchse nach draussen geführt. Das gibt einige Möglichkeiten für Erweiterungen der Hardware:

  • USB-Hub
  • RS232-Wandler
  • WLAN-/Surf-Sticks, Netzwerkkarten 10/100 RJ45, …
  • DVB-T für Radio-Empfang, Streaming, …
  • USB-Speicher
  • …..

Weitere Radios mit dem selben Board

Advertisements

Posted in ARM, ARMv5, Embedded Linux, Linux | Leave a Comment »

Cross-Compiling für Android – Toolchain

Posted by krumeltee - 11. Februar 2014

Um Programme, wie wir sie von Linux oder anderen Betriebssystemen her kennen auf einem Android-Gerät laufen zu lassen, brauchen wir einen Cross-Compiler. Der Cross-Compiler compiliert auf dem PC Programme für die ARM-Architektur des jeweiligen Android-Gerätes.

Android gibt es auch noch für andere Plattformen als ARM, aber die sind recht selten und ich gehe daher nicht darauf ein. Das erstellen der Cross-Toolchain (Compiler, Binutils, …) ist für andere Archtitekturen teilweise sehr unterschiedlich, das Compilieren an sich, bis auf die anderen Target-Optionen nicht.

Neben einem Cross-Compiler benötigt man noch „adb“, die „Android Debug Bridge“. Dieses Programm lässt einen recht einfach seine Binaries und weitere Dateien auf das Handy schieben, ausführen und eine Shell öffnen. Zwinged ist dies nicht, man kann auch den Umweg über Massenspeicher, MTP, WLAN, … gehen und mit einem Terminal-Programm auf dem Handy arbeiten, mit der adb ist es aber um einiges komfortabler.

  • Der Cross-Compiler

Ich verwende die „Sourcery CodeBench Lite Edition„-Toolchain welche einen C/C++-Compiler, Assembler, Linker und Debugger enthält. Ebenso enthalten ist die Standard-C-Library inkl. der Header- und Development-Dateien.

Die Toolchain alleine braucht etwa 350MB Platz. Compiliert man aber z.B. den Kernel hat man schonmal 600MB-1000MB nur an Quelldateien + den Tarball oder die git/svn-Informationen, beim Compilieren für jede benutzte C-Datei noch eine Objekt-Datei…. Da sammelt sich schnell viel Datenmüll an. Man braucht zum sauber Arbeiten mindestens 5-8GB freien Speicher, ich empfehle aber mindestens 15-20GB.

Ich setze vorraus, dass man hierfür mit Linux arbeitet. Auf Windows gestaltet sich das ganze ein wenig anders, was aber hauptsächlich nur an anderen Verzeichnis-Namen und einer anderen Shell liegt. Theorethisch klappt es sowohl mit Linux als auch mit Windows mit dieser Toolchain. Getestet habe ich dies hier mit Gentoo und Debian, auf anderen (aktuellen) Distributionen sollte es genauso sein.

Ich verwende die „G++ Lite 2010.09-110“ Toolchain für Linux. Bei der Auswahl der Pakete wähle ich den Installer, nicht das blosse tar-Paket.

Installationziel der Toolchain wird /opt/arm-linux-gcc/ sein, daher braucht man root-Rechte beim Ausführen des Installers.

$ chmod +x apm-2010.09-110-powerpc-apm-linux-gnu.bin
$ su -c './apm-2010.09-110-powerpc-apm-linux-gnu.bin -i console'

oder für die, die sudo verwenden:

$ sudo ./apm-2010.09-110-powerpc-apm-linux-gnu.bin -i console

Nun wird man durch die Lizenzbedingungen geführt, die man mit „Y“ bestätigt und wählt „1“ für „Typical“, bestätigt.

Jetzt gibt man den Zielpfad an: „/opt/arm-linux-gcc“. Die Frage, ob Links (symlinks) angelegt werden sollen, beantwortet man mit „nein“, da man sich sonst das System damit „zumüllt“. Es reicht vollkommen aus, den Cross-Compiler später mit in den Pfad aufzunehmen.

Hat man nun den Cross Compiler installiert, muss man ihn in seinen Pfad mit aufnehmen. Will man dauerhaft Zugriff auf diesen ARM-Cross-Compiler haben, schreibt man in die ~/.bashrc folgendes:

export PATH=$PATH:/opt/arm-linux-gcc/bin/

Wenn man den Zugriff nicht dauerhaft haben will, sondern jedesmal, bevor man loslegt den Pfad von Hand angeben will, man man genau dieses auf der Konsole. Jetzt einmal die Shell neu öffnen oder kurz von Hand „export ….“ eingeben und der Cross-Compiler steht.

Posted in Android, ARM, C, Linux | Leave a Comment »

5V statt 3,3V I²C-Bus an mini2440, NGW100, STK1000, grasshopper, …

Posted by krumeltee - 22. August 2011

Da die meisten der bastlerfreundlichen DIP-I²C-Chips 5V Chips sind, stellt sich die Frage, wie man die an ein 3,3V Board bekommt.

Die Einfachste Lösung ist, nachzusehen ob die Datenleitungen des Prozessors 5V tolerant sind, wenn ja, dann den Bus 1:1 anschliessen, den Prozessor mit 3,3V versorgen, den Chip mit 5V.

Wenn dem nicht so ist, dann kann man einen Widerstand in die SDA Leitung packen oder einen Pegelwandler verwenden.

Ich habe an NGW100, Grasshopper und mini2440 einfach nur einen 51 Ohm Widerstand in die SDA Leitung gepackt und versorge die Chips mit 5V, gibt keine Probleme.

Ein passender Pegelwandler dafür wäre der PCA9515 von NXP.

Posted in ARM, AVR32, Dil NET PC 486, Hardware Hacks, I2C, mini2440, Parallax Propeller | Leave a Comment »

SAA1064 I²C 7-Segment Treiber (4 Digits) am AVR32

Posted by krumeltee - 22. August 2011

Heute habe ich einen alten „Humax“ Receiver geschlachtet und gesehen, dass der Chip, welcher die 7 Segment Anzeigen im Bedienteil ansteuert ein SAA1064 ist.

Der SAA1064 kann bis zu vier  7-Segment Anzeigen mit bis zu 21mA pro Segment treiben, dazu sind nur zwei Transistoren, zwei Widerstände und zwei Kondensatoren extern nötig.

Der Chip ist zwar auch schon etwas älter, aber es gibt ihn in DIP und SMD noch bei Reichelt und anderen für ca. 2 Euro zu kaufen. Also hab ich mich kurz rangesetzt und ein bisschen Code für das Grasshopper Board und den Chip geschrieben. Sollte natürlich genauso auf dem NGW100, STK1000 usw. laufen.

Auf diesem Bild kommt die Zahl vom Grasshopper Board 🙂

Der Code ist relativ einfach und sollte anhand der Aufrufe der SAA1064-Funktionen in der main() selbsterklärend sein, hier findet ihr ihn.

Posted in ARM, AVR32, C, Dil NET PC 486, Embedded Linux, Hardware Hacks, I2C, mini2440, MIPS | Leave a Comment »

LM75 am AVR32 unter Linux

Posted by krumeltee - 15. August 2011

Hier eine kleine C-Lib, welche einen LM75 unter Linux auf dem AVR32 auslies.

Hier findet ihr die Quellcodes.

Der Code sollte auch mit meinem „RAM-I2C-Interface“ an jedem PC laufen.

Posted in ARM, AVR32, C, Dil NET PC 486, Embedded Linux, I2C, mini2440 | Leave a Comment »

PCF8574 am AVR32 unter Linux

Posted by krumeltee - 15. August 2011

Hier eine kleine C-Lib, welche einen MAX127 unter Linux auf dem AVR32 auslies.

Hier findet ihr die Quellcodes.

Der Code sollte auch mit meinem „RAM-I2C-Interface“ an jedem PC laufen.

Posted in ARM, AVR32, C, Dil NET PC 486, Embedded Linux, I2C, mini2440, MIPS | Leave a Comment »