HOWTO Setup QTCreator für ARM Embedded

 Olimex  Kommentare deaktiviert für HOWTO Setup QTCreator für ARM Embedded
Jan 202015
 

Aktuelle Version des QtCreator herunterladen: http://www.qt.io/download-open-source/

Das Paket nach /opt  installieren:

chmod 755 qt-creator-opensource-linux-x86_64-3.3.0.run
sudo ./qt-creator-opensource-linux-x86_64-3.3.0.run

Bevor wir mit dem QTCreator arbeiten, müssen wir noch das Image unseres Embedded Rechners lokal auf dem Entwicklungsrechner mounten.
Das Image wird unter /mnt/a20/ mit der Root-Partition eingehangen und später dem QTCreator als SysRoot des Zielsystems bekannt gemacht.

Herausfinden ab welchem Block die Root Partition beginnt:

sudo fdisk -lu A20_OLinuxino_Micro_debian_34_90_release_10.img

Der Startsektor der 2. Partition 34816 wird mit der Sektorgröße 512 Bytes multipliziert –> 17825792

Dann wird der Mountpunkt erstellt

sudo mkdir /mnt/a20

Danach wird die 2. Partition mit dem errechneten Offset nach /mnt/a20 gemountet:

sudo mount -o loop,offset=17825792 A20-Micro-3490-wapi-ladeterminal-2015-01-08.img /mnt/a20/

Mit einem Wechsel in den Mountpunkt „cd /mnt/a20“ kann man mit einem „ls“ prüfen ob  die bekannten Verzeichnisse des Images da sind.
(bin,boot,Desktop,dev,etc,home,lib,media,mnt,opt,proc,………)

 

Ein Shortcut findet man nun im Menü –> Programm starten.

qt1

 

Nachdem ein neues Projekt erstellt wurde kann man unter „Projekte“ –> „Kits verwalten“ die Einstellungen für das Zielsystem vornehmen.

qt2

 

 

 

 

 

 

 

 

 

Unter „Einstellung und Ausführung“ wird im Reiter „Kit“ mit „Hinzufügen“ ein neues benutzerdefiniertes Kit angelegt.
Hier als Beispiel das Kit „wapi-a20-1“.

qt3

 

 

 

 

 

 

 

 

 

 

 

 

Die für ARM compilierte QT Version wird angelegt:

qt4

 

 

 

 

 

 

 

 

 

 

 

 

Der ARM Compiler wird konfiguriert:

qt5

 

 

 

 

 

 

 

 

 

 

 

 

Der ARM Debugger wird konfiguriert:

qt6

 

 

 

 

 

 

 

 

 

 

 

 

Das Zielsystem, unser Embedded Linux, wird unter dem Menüpunkt „Geräte“ konfiguriert:

qt7

 

 

 

 

 

 

 

 

 

 

 

 

Nach dem Compilieren und Kopieren des Projektes können wir nun noch die Ausführung einstellen:

qt8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hier in diesem Beispiel wird das Programm „ladeterminal“ aufgerufen mit einem zusätzlichem Parameter „-plugin Tslib“
für ein Touchdisplay. Vor dem Ausführen wird das Zielsystem auf genügend Speicherplatz geprüft und alte „ladeterminal“
Prozesse werden mit einem „kill“ Befehl beendet bevor die neue Version per sftp hochgeladen wird.

HOWTO Cross-compile QT5 auf einem Olimex A20

 Olimex  Kommentare deaktiviert für HOWTO Cross-compile QT5 auf einem Olimex A20
Jan 102015
 

Vorbereiten des „target“ Boards Olimex A20 Micro

Standard Olimex Debian Image auf die Micro SD Karte kopieren:
dd bs=4M if=A20_OLinuxino_Micro_debian_34_90_release_10.img of=/home/sdx

Beim ersten Start von der Mirco SD Karte muss ein Monitor über HDMI angeschlossen sein.
Über das Menü der LXDE Oberfläche kann ein LXterminal geöffnet werden.

Einstellen der Ausgabe auf das LCD Display:
cd /root
./change_display_olimex_A20.sh
Grafische Oberfläche abschalten:

In der Datei /etc/X11/default-display-manager folgendes ändern

# /usr/bin/slim
/usr/bin/true
Netzwerk manuell aktivieren:
dhclient eth0
Netzwerk dauerhaft automatisch per DHCP einschalten:

In der Datei /etc/network/interfaces die Zeile ändern

iface eth0 inet static

in

iface eth0 inet dhcp
Zeitzone einstellen:
dpkg-reconfigure tzdata
Sprache auf Deutsch stellen:
dpkg-reconfigure locales

In der Datei /etc/environment folgende Variable abändern:

LC_ALL="de_DE.utf8"
Partition 2 erweitern um die ganze Micro SD Karte zu nutzen:
cd /root
./resize_sd.sh /dev/mmcblk0 2
Hostnamen ändern:

In de Datei /etc/hostname den Hostnamen in der ersten Zeile eintragen -> reboot

Update der Debian Installation:
apt-get update
apt-get upgrade
Wichtige Paket Anhängigkeiten für QT installieren:
apt-get install libfontconfig1-dev libdbus-1-dev libfreetype6-dev libudev-dev libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad libicu-dev libsqlite3-dev libxslt1-dev libssl-dev gdbserver
Mali Grafikchipsatz Treiber neu bauen um unter QT eglfs nutzen zu können:
cd /opt
git clone https://github.com/linux-sunxi/sunxi-mali.git
cd sunxi-mali
git submodule init
git submodule update
make config ABI=armhf VERSION=r3p0 EGL_TYPE=framebuffer
make install

Module laden:

modprobe mali
modprobe drm
modprobe mali_drm

Um die richtige Version des Kernel Treibers zu ermitteln gibt es ein kleines Script:

cd /opt/sunxi-mali/version
make
./version

In dem Verzeichnis /opt/sunxi-mail/test liegt ein Test:

cd /opt/sunxi-mali/test
make
./test
Blinkenden Cursor auf der Konsole ausschalten:

In de Datei /root/.bashrc folgende Zeile hinzufügen.

echo 0 > /sys/class/graphics/fbcon/cursor_blink
Bildschirmschoner der Konsole ausschalten:

In der Datei /root/.bashrc folgende Zeile hinzufügen.

setterm -blank 0
Autologin Benutzer:

In der Datei /etc/inittab

#1:2345:respawn:/sbin/getty 38400 tty1
1:2345:respawn:/bin/login -f root </dev/tty1 >/dev/tty1 2>&1
#T0:2345:respawn:/sbin/getty -L -a root ttyS0 115200 linux
Automastischer Programmstart (Beispiel):

In der Datei /root/.bashrc folgende Zeile hinzufügen.

/root/ladeterminal/ladeterminal -plugin Tslib

Das Plugin Tslib ist für die Funktion des LCD Touch.

Touch LCD Display calibrieren:
ts_calibrate
Environment ergänzen:

Unter /etc/environment zwei Zeilen hinzufügen

LD_LIBRARY_PATH=/usr/local/qt5a20/lib
QT_QPA_EGLFS_DISABLE_INPUT=1

Vorbereiten des „cross-compile“ Rechners.

 Auf einem 64Bit System wird die 32 Bit Laufzeitumgebung benötigt:

Unter Debian:

dpkg --add-architecture i386
apt-get install ia32-libs
Mount des „target“ Dateisystems an den Cross-Compile Rechner:
sudo sshfs -o allow_other root@192.168.0.100:/ /mnt/a20/
Linaro Toolchain herunterladen und entpacken:
cd /opt
wget https://releases.linaro.org/14.01/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.01_linux.tar.bz2
tar xvfj gcc-linaro-arm-linux-gnueabihf-4.8-2014.01_linux.tar.bz2
mv gcc-linaro-arm-linux-gnueabihf-4.8-2014.01_linux toolchain
Cross-Compile-Tools herunterladen und installieren:
cd /opt
git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
cd cross-compile-tools
./fixQualifiedLibraryPaths /mnt/a20 /opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-gcc
QT Everywhere herunterladen und entpacken:
cd /opt
wget http://download.qt.io/official_releases/qt/5.5/5.5.1/single/qt-everywhere-opensource-src-5.5.1.tar.gz
tar -xvzf qt-everywhere-opensource-src-5.5.1.tar.gz
mv qt-everywhere-opensource-src-5.5.1 qt5
Eine Device Datei für den Olimex A20 anlegen:
cd /opt/qt5/qtbase/mkspecs/devices
cp -r linux-beagleboard-g++ linux-a20olimex-g++
cd linux-a20olimex-g++

Die Datei qmake.conf mit diesem Inhalt füllen:

#
# qmake configuration for the A20_OlinuxinO boards
# http://www.olimex.com/

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental gdb_dwarf_index
QMAKE_INCREMENTAL_STYLE = sublib

include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)

load(device_config)

QT_QPA_DEFAULT_PLATFORM = eglfs
#EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_a20.cpp
# modifications to g++.conf
QMAKE_CC                = $${CROSS_COMPILE}gcc
QMAKE_CXX               = $${CROSS_COMPILE}g++
QMAKE_LINK              = $${QMAKE_CXX}
QMAKE_LINK_SHLIB        = $${QMAKE_CXX}

# modifications to linux.conf
QMAKE_AR                = $${CROSS_COMPILE}ar cqs
QMAKE_OBJCOPY           = $${CROSS_COMPILE}objcopy
QMAKE_NM                = $${CROSS_COMPILE}nm -P
QMAKE_STRIP             = $${CROSS_COMPILE}strip

COMPILER_FLAGS          = -march=armv7-a -mtune=cortex-a7 -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -mfloat-abi=hard

#modifications to gcc-base.conf
QMAKE_CFLAGS           += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS         += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS_RELEASE += -O3

QMAKE_LIBS             += -lrt -lpthread -ldl

# Extra stuff (OpenGL, DirectFB, ...)
QMAKE_INCDIR_EGL        = /mnt/a20/usr/include/EGL
QMAKE_LIBDIR_EGL        = /mnt/a20/usr/lib
QMAKE_INCDIR_OPENGL_ES2 = /mnt/a20/usr/include/GLES2
QMAKE_LIBDIR_OPENGL_ES2 = /mnt/a20/usr/lib
#QMAKE_INCDIR_OPENVG     = $${QMAKE_INCDIR_EGL}
#QMAKE_LIBDIR_OPENVG     = $${QMAKE_LIBDIR_EGL}

QMAKE_LIBS_EGL          = -lEGL
QMAKE_LIBS_OPENGL_ES2   = -lGLESv2 $${QMAKE_LIBS_EGL}
#QMAKE_LIBS_OPENVG       = -lOpenVG $${QMAKE_LIBS_EGL}

# Sanity check
deviceSanityCheckCompiler()

load(qt_config)
Pfade für dbus und glib setzen:
cd /opt/qt5/qtbase

Die Datei configure bearbeiten:

# flags for libdbus-1
QT_CFLAGS_DBUS="-I/mnt/a20/usr/include/dbus-1.0/ -I/mnt/a20/usr/lib/arm-linux-gnueabihf/dbus-1.0/include/"
QT_LIBS_DBUS=-ldbus-1
# flags for Glib (X11 only)
QT_CFLAGS_GLIB="-I/mnt/a20/usr/include/glib-2.0/ -I/mnt/a20/usr/lib/arm-linux-gnueabihf/glib-2.0/include/"
QT_LIBS_GLIB=-lglib-2.0
Ein Patch für den Mali Grafiktreiber:
cd /opt/qt5/qtbase/src/plugins/platforms/eglfs

Folgenden Abschnitt in der Datei qeglfsdeviceintegration.cpp (QT 5.5.1) ersetzen / ändern:


EGLNativeWindowType QEGLDeviceIntegration::createNativeWindow(QPlatformWindow *platformWindow,
                                                    const QSize &size,
                                                    const QSurfaceFormat &format)
{
    Q_UNUSED(platformWindow);
    Q_UNUSED(size);
    Q_UNUSED(format);
    // return 0;
    static struct mali_native_window native_window = {
        .width = (short unsigned int)size.width(),
        .height = (short unsigned int)size.height(),
    };
    return &native_window;
}
 Compile, make, make install:
./configure -opengl es2 -device linux-a20olimex-g++ -device-option CROSS_COMPILE=/opt/toolchain/bin/arm-linux-gnueabihf- -sysroot /mnt/a20/ -opensource -confirm-license -optimized-qmake -release -make libs -prefix /usr/local/qt5a20 -tslib -no-pch -nomake examples -nomake tests -no-xcb -eglfs -v
make
make install

 

 

Balancer 12 Zellen

 Lipo Ladeterminal  Kommentare deaktiviert für Balancer 12 Zellen
Okt 262014
 

Auf Basis des LTC 6802-1 von Linear Technology ist der 12s Balancer realisiert. Der Chip „Multicell Battery Stack Monitor“ wird über das SPI Interface mit 1MHz angesprochen.

  • 12 Zellen
  • Genaue Zellenspannungen können gelesen werden.
  • Ein Ausgang zur Steuerung eines Mosfets pro Zelle steht zur Verfügung.  Über den Mosfet wird eine Entladung über zwei parallele 27 Ohm  Widerstände realisiert. So kann jede Zelle mit >300mAh entladen werden.
  • Max und Min Begrenzungen können programmiert werden.

Balancer12s

Datenblätter

 Datenblätter  Kommentare deaktiviert für Datenblätter
Aug 092014
 

Atmel_SAM3X8E_Cortex-M3 Microcontroller

MBR1645 Schottky Diode

IRF4905 P-Kanal Power  Mosfet

IRL3705N N-Kanal Hexfet Logiclevel

RDM630 125Khz RFID Empfänger

IRLML5103 P-Kanal Mosfet smd

LTC6802-1 Multicell Battery Stack Monitor

ACS758-50B Stromsensor

ADS1115 16-Bit Analog/Digital Wandler mit interner Referenz

Inductor-2300HT 22µH

ADUM_14XX Digital-Isolator

DS18B20 Temperaturfühler

Steuerteil

 Lipo Ladeterminal  Kommentare deaktiviert für Steuerteil
Mai 182014
 

Ein Arduino „Due“ kommt zum Einsatz um die Echtzeitanforderungen des Ladeterminal zu erfüllen.
Ladeprogramme für Lithium-Polymer und Nickel-Metallhybrid Akkus sind die Aufgaben.

ArduinoDue_Front32-Bit Microcontroller Board von Arduino.

Due-pinout-WEBPin-Out Plan des Arduino Due.

 

Leistungsteil

 Lipo Ladeterminal  Kommentare deaktiviert für Leistungsteil
Mai 182014
 

Der Leistungsteil des Ladeterminal kann bis max. 10A Ladestrom liefern und kann 6 Zellen Lipo und 21 Zellen NiMh aufladen.

Mein Schaltplan in der Version 2 sieht so aus:
image

Mein EAGLE Layout Version 2 sieht so aus:
image
Die Anschlüsse:
Akku+ +Akku
Akku- GND
Input+ +27V
Input- GND
X1-1 +5V
X1-2 GND
X1-3 PWM Signal vom Aduino
X1-4 SCL I2C Clock Signal vom Arduino
X1-5 SDA I2C Daten vom und zum Arduino