Basteleien

Projekt: STM8S105 6×8 Bits Output Teil 1a

Mein LED-Weihnachtsbaum hat schon lange eine neue Steuerung verdient. Der AT90S1200 war schon beim Bau aus der Mode:

LED-Weihnachtsbaum mit AT90S1200
LED-Weihnachtsbaum mit AT90S1200

Jetzt muss etwas neues her, am besten mit dem bei Pollin gekauften STM8S105S4T6C, siehe früheren Beitrag: STM8S105S4T6C bei Pollin

Die Platine soll möglichst universell sein, außerdem möchte ich nach Möglichkeit recyclte Bauteile wiederverwenden, hier schwebt mir der HC573 von diversen alten Festplattenplatinen vor. Den derzeit viel genutzten HC595 müßte ich erst neu kaufen.

STM32F030 eigenes breakout Board V

Nachdem ich einen ganzen Vormittag mit der Fehlersuche aufgrund eigener Dummheit verbracht habe, (der Chip sitzt auf der Unterseite, ist also bezüglich der Anschlüsse, von oben gesehen, gespiegelt – ein Nachteil meines Layouts, aber verschmerzbar, wenn man die Unterseite als Oberseite betrachtet und die DIL-Pins entsprechend einlötet) geht das Board nunmehr so wie geplant.

Board in Funktion
Board in Funktion
bestückte Oberseite
bestückte Oberseite

Beim fertigen Board fällt auf, dass noch viel Platz ist. Das soll zwar auch zum Teil so sein, denn es wird ja mit Hand bestückt. Aber hier ist noch Optimierungspotential und doch Platz für einen RESET-Taster und einen ST-Link-Stecker. Die Lötbrücken auf die Chip-Seite umlegen, der Quarz geht sowieso auf beiden Seiten einzulöten, die zusätzlichen Teile ebenfalls auf die Chipseite und dann oben und unten „tauschen“, so sollte es besser gehen.

bestückte Unterseite
bestückte Unterseite

Der fehlende Lack auf einem Leiterzug der Unterseite ist mein Fehler, bin mit dem Lötkolben abgerutscht – Weller WECP-20, siehe Foto als Größenvergleich:

Vergleich Lötkolben Chip (baugleicher STM8S103)

 

Es wird Zeit, sich eine „ernsthafte“ Anwendung zu überlegen. Hier zunächst das mit Coocox erstellte Test-Programm:

#include "stm32f0xx.h"
#include "stm32f0xx_gpio.h"
#include "stm32f0xx_rcc.h"

#include <stdio.h>

void init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

    // LED: Configure PA0 and PA1 in output pushpull mode
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void Delay(__IO uint32_t nCount)
{
    while(nCount--)
    {
    }
}

int main (void)
{
    init();

    while (1)
    {
        GPIOA->BSRR = GPIO_Pin_1 | GPIO_Pin_0;  // Set PA! HIGH = LED off
        Delay(500000L);
        GPIOA->BRR = GPIO_Pin_0;  // Set PA0 to GND (red LED on)
        Delay(500000L);
        GPIOA->BRR = GPIO_Pin_1;  // Set PA1 to GND (green LED on)
        Delay(500000L);
    }
}

Ach ja, mit Quarz läuft dasselbe blinky-Programm deutlich schneller als auf dem TSSOP28-Adapter-Board. (ca. 3..4 mal schneller?) Schaltet der Chip die Taktquellen selbstständig um (angeblich startet er immer mit HSI und man muss mittels Programm umschalten) oder ist das Umschalten im Startcode von Coocox zu suchen? Ok, hab also noch zu tun …

EDIT: Hier:

 

ist ein Video des Testprogrammes zu sehen. Die Lösung des Geschwindigkeitsproblems liegt wie vermutet im startup-Code von Coocox, der bei externem Takt die PLL einschaltet.

STM32F030 eigenes breakout Board IV

Heute habe ich die Boards erhalten.

Platinen
Platinen
Platine von oben
Platine von oben
Platine von unten
Platine von unten

Der fehlende Bestückungsaufdruck ist keine Absicht. 😐 Da hab ich wohl beim Gerbern geschlafen.

Wie trenne ich jetzt die Einzelnutzen auf? Das Platinenmaterial ist FR4, der Staub soll gesundheitsgefährlich sein. Sägen mit der Dekupiersäge fällt aus, das wird krumm und schief, vom Sägestaub ganz zu schweigen. Sägen per Hand mit der Metallsäge dauert lange, ist aufwendig und staubt. Schneiden mit dem Seitenschneider (in Ermangelung einer Blechschere, die öfter empfohlen wird) erzeugt unvorhersehbare Brüche und Risse in der Platine.

Die Lösung, bis mir etwas besseres unterkommt: Ritzen auf beiden Seiten mit dem Teppichmesser mit dem (Metall-)Meßschieber als Anschlag und dann über die Tischkante einfach brechen. Das funktioniert erstaunlich gut. Danke an das Internet, wo ich auf mehreren Seiten diesen Tipp fand.

Was mache ich jetzt mit 60 Boards? 🙂

HT1621B breakout universelle Adapterplatine 1

Der HT1621B ist derzeit günstig (0,68 €/Stk. bei meiner Bestellung im Juni) bei Ebay zu bekommen. Hierbei handelt es sich um einen seriell ansteuerbaren LCD-Controller mit max. 4 Commons und max. 32 Segmenten.

Innenschaltung aus dem Datenblatt
Innenschaltung aus dem Datenblatt

Damit ist er ideal brauchbar für die LCD-Gläser aus dem LCD/LED-Sortiment von Pollin. Das Gehäuse ist etwas gewöhnungsbedürftig für einen Bastler, denn es ist ein SSOP48 mit 0,64 mm Pinabstand.

HT1621B pinout aus dem Datenblatt
HT1621B pinout aus dem Datenblatt
HT1621B
HT1621B

Leider gibt es bei Ebay dafür keine fertigen Adapter. Deshalb habe ich mir heute bei ITEAD eine selbstentworfene, universelle, auf der Applikationsschaltung aus dem Datenblatt

Applikationsschaltung aus dem Datenblatt
Applikationsschaltung aus dem Datenblatt

basierende Adapterplatine bestellt. Sämtliche Common-Anschlüsse und sämtliche Segmentanschlüsse wurden im DIL-Raster herausgeführt. Die serielle Schnittstelle zum Mikrocontroller wurde Arduino-like quer zur DIL-Reihe angeordnet. Damit ist die Platine auch Steckbrett-tauglich. Die Leitungsführung ist nahezu vollständig einseitig. Damit ist sie prinzipiell auch im Heimlabor herstellbar, wenn man die Chemie gut beherrscht. (Also nicht von mir. 😉 ) Um die Preisstufen von ITEAD auszulasten, wurden die Produktionsdaten als zweifacher Nutzen erstellt.

HT1621B breakout Layout
HT1621B breakout Layout

STM32F030 eigenes breakout-Board

Heute ist die Bestellung an ITEAD herausgegangen bezüglich des selbstentwickelten Boards.

Bestellung
Bestellung

Technisch ist es nicht optimal und nicht sehr gut, aber zumindest eine funktionierende Variante. Ich hatte keine Lust mehr, das noch zu verbessern. 😉 Wenn sich im Umgang damit weitere Anforderungen ergeben, werde ich das Design ohnehin noch mal ändern. Außerdem wollte ich unbedingt das mit dem „Nutzen-erstellen“ mal ausprobieren, es ist also ein 5 cm x 10 cm Board mit 6 Einzelstücken drauf. Jetzt bin ich gespannt auf das Ergebnis.

Schaltplan breakout board STM32F030
Schaltplan breakout board STM32F030
Das Layout mit mehreren Einzelplatinen
Das Layout mit mehreren Einzelplatinen

 

Meine Prämissen:

Die Platine sollte nicht größer als ein 20 poliger TSSOP-DIL-Adapter sein. (Ist sie jetzt doch aufgrund des für die Auftrennung notwendigen Platzes zwischen den einzelnen Platinen und der Umgehung der Pinreihe auf beiden Seiten mit je einem Signal sowie der links und rechts zu weit hinausgeschobenen Bauteile, siehe Layout – sicher noch optimierungsbedürftig)

VDDA sollte wahlweise vom DIL-Pin oder aus VDD kommen. Deshalb ist hierfür eine Lötbrücke vorgesehen. Die Gewinnung aus VDD ist nicht datenblattkonform, denn dieses fordert, dass VDDA vorher da ist und stets höher oder gleich VDD sein soll.

Eine weitere Lötbrücke ist gedacht für die Auswahl des Bootmodus. (boot0 high or low) Über den notwendigen Wert der Widerstände bin ich mir noch unsicher. Reicht ein „weak Pullup/Pulldown“ oder müssen sie „strong“ (= mehr Stromverbrauch) sein?

Einen separaten SWD-Stecker habe ich aus Platzgründen bewusst nicht vorgesehen, da diese Signale problemlos über die DIL-Reihe abgreifbar sind.

Auf einen RESET-Taster habe ich aus Platzgründen verzichtet.  Mal sehen, ob ich das bereue. 🙂

Auf groundplanes (Eagle: Polygon) habe ich bewusst verzichtet, weil mit maximal 8 MHz keine wirklich problematischen Signale auf der Platine laufen. (obwohl ich mir gerade nicht mehr so sicher bin, ob das Weglassen klug ist)

Ich habe 1mm Platinendicke gewählt, weil so der Nutzen besser trennbar ist. (Hoffe ich zumindest)

Auf das Onlinestellen der Eagle-Dateien verzichte ich mal, da das Design noch lange nicht ausgereift ist.

breakout board STM32F030F4P6

Dieses Teil ist teilweise für unter 50 Cent pro Stück bei Ebay, Amazon oder Aliexpress zu erhalten. Interessant ist der Baustein vor allem deshalb, weil er im Gegensatz zu seinen größeren Brüdern in einem überschaubaren und bastlerfreundlichen Gehäuse verbaut ist. „Bastlerfreundlich“ ist allerdings ein Euphemismus für ein TSSOP20-Gehäuse, siehe Fotos: (auf den Fotos ist es ein STM8S103F3P6 im TSSOP20-Gehäuse)

STM32F030F4
Größenvergleich
Größenvergleich
Größenvergleich (ATTiny in DIL mit STM8S103F3P6 in TSSOP20)
Größenvergleich
Größenvergleich

Ein erster Versuch startete mit einem (zu großen) TSSOP28-Universaladapter und einem kleinen Breadboard:

STM32F030F4P6 verlötet
STM32F030F4P6 verlötet
Aufbau auf einem breadboard
Aufbau auf einem breadboard

Schlaumeier werden sehen, dass die Kondensatoren nicht der Empfehlung des Datenblatts entsprechen. 😉 Ich hatte aber gerade nur 22nF als steckbares Bauelement zur Hand und es funktioniert. Der Schaltplan dürfte erkennbar sein. Links oben geht es zum ST-LinkV2, daneben die Versorgungsspannung, links unten wird mit einem Widerstand 510 Ohm boot0 auf Masse gezogen. Laut Datenblatt (absolute maximum ratings: always VDDA >= VDD) darf man nicht vergessen, VDDA anzuschließen. Das habe ich im Internet schon anders gesehen. An PA0 und PA1 (direkt neben VDDA) sind jeweils eine LED mit Vorwiderstand angeschlossen. Reset hat einen internen Pullup-Widerstand.

Pinout aus dem Datenblatt von ST
Pinout aus dem Datenblatt von ST
Spannungsversorgung
Spannungsversorgung

Als software wurde mit Coocox ein einfaches blink mit delay zusammengetippt und mit dem ST-Link V2 aufgespielt. Die Schaltung lief auf Anhieb.

Nächstes Ziel wird ein eigenes breakout-Board sein.

Es gibt andere Entwürfe im Internet, die mir aber aus diversen Gründen nicht zusagen:

STM32F030F4P6 breakout

STM32F030F4P6 breakout (erster Treffer)

hackaday.io stm32f030f4p6-breakout-board siehe auch: oshpark.com/shared_projects STM32F030 breakout

digital-controller-for-incubator-release-version

STM32F030F4P6 mit OLED (russisch)

STM32F030F4P6-Projekt (türkisch)

sowie (mindestens) zwei fertige boards aus China:

thanksbuyer.com stm32f030-arm-cortex-m0-development-board-usb-tp-serial-support-isp-download

elecrow.com stm32f030f4p6-minimum-system-boardcortexm0