Forum: Projekte & Code Basic im STM8S103


von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Im Rahmen eines Spaßwettbewerbes um den "billigsten BASIC-Computer"
aller Zeiten entstanden:

"Für die einen ist es ein Microcontroller, für die anderen der
wahrscheinlich billigste BASIC-Computer der Welt"

Mein Basiccomputer läuft in einem STM8S103 Minimumboard aus China (2
Stück für 1,53):

Ebay-Artikel Nr. 272151798778

und ist an eine CH340G USB2RS232 angebunden:

Ebay-Artikel Nr. 272258438888

Wenn man den "Mengenrabatt" aus China mitnimmt, kostet ein
"BASIC-Computer" 1,65@ (siehe README.TXT).

Das Projekt ist als reines Editor / Make Projekt unter Linux entstanden
und wird mit dem SDCC 3.50 übersetzt.

Im Zip-Archiv sind sämtliche Dateien enthalten, um die Firmware zu
erstellen.

Im Ordner basict das Makefile aufrufen mit:

make all

(Um die Firmware zu erstellen)

make flash

(Um die Firmware mittels eines ST-Link v2 zu übertragen).

Vllt. mache ich auch nur so aus Gag auch noch eine Miniplatine für
diesen Zwerg.

Einen Schaltplan habe ich "nur" im Ascii-Format erstellt (ist auch in
der readme.txt enthalten):
1
             +---------------------------------------+----------------+
2
             |                                       |                |
3
+--------+   |       +---------------------+         |     +----------------------+ 3,3V
4
| U  +5V | --+       |                     | +3,3V         |         5V           |---------
5
| S   D+ | ----------|  6               16 |---------------| 3,3V                 | SWIM
6
| B   D- | ----------|  5    CH340G        | TxD           |                      |---------
7
|    GND |           |                   2 |---------------| D6   STM8S103F3P6    | GND        ==> ST-Link v2
8
+--------+ --+   +---|  4                3 |---------------| D5     Board         |---------
9
             |   |   |    7       8        | RxD           |                      | NRST
10
             |  ===  +---------------------+         |     |         GND          |---------
11
             |   |100n    |       |    |             |     +----------------------+
12
            --- ---       +--|#|--+    |          +------+           |
13
                          |       |    |     100n |     +| 47uF      |
14
                          | 12MHz |    |         ===    ===          |
15
                         ===     ===   |          |      |           |
16
                          |       |    |          |      |           |
17
                         ---     ---  ---        ---    ---         ---

Außerdem vllt. ganz praktisch für manche: Es sind Libraries zur
Initialisierung des STM8 sowie für GPIO Behandlung und serielle
Schnittstelle im "Paket" enthalten.

Vielleicht hat ja jemand Spaß damit!

Gruß Ralph

PS: :-) die Anführungszeichen nicht übersehen, das ganze war ein
Spaßprojekt aber irgendwie wars lustig und nun versuche ich etwas in der
Art für einen STM32F103 zu machen (nur in etwas besser und mit mehr
Möglichkeiten)

von Ralph S. (jjflash)


Lesenswert?

Im Schaltplan ist mir leider ein Fehler unterlaufen, ich habe D+ und D- 
vertauscht.

Der hier ist richtig !
1
            +---------------------------------------+----------------+
2
             |                                       |                |
3
+--------+   |       +---------------------+         |     +----------------------+ 3,3V
4
| U  +5V | --+       |                     | +3,3V         |         5V           |---------
5
| S   D+ | ----------|  5               16 |---------------| 3,3V                 | SWIM
6
| B   D- | ----------|  6    CH340G        | TxD           |                      |---------
7
|    GND |           |                   2 |---------------| D6   STM8S103F3P6    | GND        ==> ST-Link v2
8
+--------+ --+   +---|  4                3 |---------------| D5     Board         |---------
9
             |   |   |    7       8        | RxD           |                      | NRST
10
             |  ===  +---------------------+         |     |         GND          |---------
11
             |   |100n    |       |    |             |     +----------------------+
12
            --- ---       +--|#|--+    |          +------+           |
13
                          |       |    |     100n |     +| 47uF      |
14
                          | 12MHz |    |         ===    ===          |
15
                         ===     ===   |          |      |           |
16
                          |       |    |          |      |           |
17
                         ---     ---  ---        ---    ---         ---

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Tolles Projekt!
Wenn jetzt noch der Funktionsumfang von Micromite [1] auf dem STM32 
erreicht wird, dann finden sich sicherlich auch einige ernsthafte 
Nutzer.

[1] http://geoffg.net/MicromiteMX170.html

von Ralph S. (jjflash)


Lesenswert?

Joe G. schrieb:
> Wenn jetzt noch der Funktionsumfang von Micromite [1] auf dem STM32
> erreicht wird

... den gibts schon für einen STM32F746

Allerdings ist mir dieser Controller dann für meinen Gebrauch eine 
Nummer zu groß, zur Verfügung hab ich hier nur

-F030 (16k)
-L050 (64k)
-F103 (mit 64k und 128k)
-F401
-F429

Ich versuch mich gerade am F030, aber der ist mit seinen 16k schon sehr 
dünn bestückt, mal sehen ob das mit dem L050 oder F103 was wird. Das 
soll ja ein Spaßprojekt sein und außerdem soll das noch von Hand auf 
eine Platine gelötet werden können, bei den Cortex M4 kann ich das nicht 
und bin immer auf Boards angewiesen (und deswegen mag ich sie im 
Normalgebrauch nicht, auch wenn das, was die Dinger können absolut irre 
ist)

von Axel S. (a-za-z0-9)


Lesenswert?

Moin,

nett!

Ralph S. schrieb:
> Im Zip-Archiv sind sämtliche Dateien enthalten, um die Firmware zu

Fast. st8readihx ist nur als 32-bit Linux-Binary enthalten. Das mag 
nicht auf meinem 64-bittigen Linux. Kannst du davon noch den Quelltext 
dazutun? Ich nehme an, das macht nicht viel.

Auch sonst hättest du IMHO die Binaries von picocom und stm8flash aus 
dem ZIP-Archiv weglassen können. Das sind ja Standard-Tools.

Ich spiele gerade mit einem STM32F103 Mini-Board herum. Das würde sich 
vermutlich auch gut für das BASIC eignen. Es hat mehr Pins und der µC 
kann direkt USB. Wenn ich mal ein bißchen Muße hab, gehe ich das 
vielleicht an :)

von David Sawatzke (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein kleiner unschöner Port auf den stm32f030f4.
load und save hab ich rauskommentiert und sonst einfach nur gpio und 
usart geändert. Scheint zu tun, hat aber noch viel optimierungspotential

von David Sawatzke (Gast)


Lesenswert?

Das Schöne ist, dadurch dass die stm32's einen integrierten Bootloader 
haben, kann man sich den ST-Link sparen.
Wenn man jetzt noch sich noch statt tssop16 breakout boards für den 
ch430g, tssop20 breakout boards für beide kaufen, beim ch430g einfach 
absägt, kann man jetzt 10 breakout boards und 10 stm32f030f4 kaufen und 
man hat 9 Basiccomputer für nahzu den selben Preis wie die zwei auf dem 
stm8 basierten.
Man hat leider eben nicht so ein schönes Board.

(Quarz wird auch nicht mehr benötigt)

von nach BASIC fängt das Leben an (Gast)


Lesenswert?

> "Für die einen ist es ein Microcontroller, für die anderen der
> wahrscheinlich billigste BASIC-Computer der Welt"
>
> Mein Basiccomputer läuft in einem STM8S103 Minimumboard aus China (2
> Stück für 1,53):


Nett und ich Gratuliere zum Erfolg!

Jedoch: genau so billig kam mir BASIC schon vor über 3X Jahre vor, das 
war am Anfang meiner Pubertät...

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Axel S. schrieb:
> Fast. st8readihx ist nur als 32-bit Linux-Binary enthalten. Das mag
> nicht auf meinem 64-bittigen Linux. Kannst du davon noch den Quelltext
> dazutun? Ich nehme an, das macht nicht viel.

... ist hier angehängt, aber das Programm hätte dennoch übersetzt werden 
können, nur die "Statusanzeige" wieviel Speicher im Flash belegt wird, 
wird dann durch eine "Fehlermeldung" ersetzt.

Übersetzen von st8readihx.c mit:
1
gcc st8readihx.c -Os -o st8readihx

Axel S. schrieb:
> Auch sonst hättest du IMHO die Binaries von picocom und stm8flash aus
> dem ZIP-Archiv weglassen können.

... dem PicoCom hab ich halt mein "Retrogrün" gegeben wie das bei 
uralten Terminals der Fall war... und eine Anzeige dafür mit welchen 
Parametern das gestartet ist.

Axel S. schrieb:
> Das mag
> nicht auf meinem 64-bittigen Linux.

Ich sollte es mir zur Gewohnheit machen, Dinge entweder nur als Source 
oder in beiden Varianten , 32 und 64 Bit, zugänglich zu machen.

David Sawatzke schrieb:
> Hier ein kleiner unschöner Port auf den stm32f030f4.

Schmunzeln muss, auf dem f030 hatte ich das schon und habe das für den 
STM8 abgespeckt.
Mir gefällt es grundsätzlich nicht so recht, weil ich etwas mit 
Stringvariablen und und Gleitkommazahlen haben mag.

Auf dem F030 hatte ich zuerst den Speicherbereich von 14k bis 16k 
reserviert und dann im eigenen Flash das Programm abgelegt. Aber erstens 
ist der Flash nicht sooooo oft beschreibbar (lt. Datenblatt nur 1000 
mal) und zweitens hab ich dann weitere SCALL Funktionen hinzugefügt 
gehabt. Dafür hab ich dem Dingelchen ein 24C128 EEProm, Anschluss für 
N5510 84x48 oder SSD1306 Display und einen PCF8574 I/O Baustein 
spendiert.

Und muss feststellen, ich hätte das ganze gerne besser in einem größeren 
STM32 (bin ich am Überlegen ob ich so viel Zeit opfern mag, das hier war 
ja ein kleiner Wettbewerb)

David Sawatzke schrieb:
> man hat 9 Basiccomputer für nahzu den selben Preis wie die zwei auf dem
> stm8 basierten.

... die Sachen hab ich ja nicht extra gekauft, die hab ich eh hier (STM8 
und STM32f030 auch als blanke Chips). Ich versuch mich mal just for fun 
an einer Platine (die über Toner-Transfer gemacht sein soll). Werde ich 
sehen ob das mit TSSOP20 noch machbar ist.

nach BASIC fängt das Leben an schrieb:
> Jedoch: genau so billig kam mir BASIC schon vor über 3X Jahre vor, das
> war am Anfang meiner Pubertät...

Ich auch ... aber nostalgische Dinge ohne wirklichen Nutzen sind 
manchmal einfach herrlich.

von icelon (Gast)


Lesenswert?

Ich würde gerne wissen, ob es notwendig ist, einen Bootloader zu 
installieren, obwohl ich denke, dass das Kompilieren nicht die Option 
-flto enthält, da es den glücklichen Fehler gibt ....

von Ralph S. (jjflash)


Lesenswert?

... ich verstehe die Frage nicht so wirklich! Ich habe zwar einen 
Bootloader für den STM8S103 geschrieben, aber das "Basic-Projekt" darf 
diesen explizit nicht installiert haben, da der Flash-Speicher extrem 
knapp ist.

Was man machen könnte wäre, einen I/O Pin beim Start abzufragen und je 
nach dem welcher Pegel dieser führt, das abgelegte Basic-Programm 
automatisch zu starten.

von icelon (Gast)


Lesenswert?

Verzeih mir mein Deutsch ist nicht gut :)

- Das Projekt stm8 und stm32 brauchen Loader?
- Muss Glas verwendet werden?
Vielen Dank im Voraus ist meine erste Inkunition in der Welt von STM, 
ich komme von Arduino und ich möchte diesen Code migrieren


https://github.com/monsonite/SIMPL/blob/master/SIMPLEX_2_MSP430FR2433_14.c

von Ralph S. (jjflash)


Lesenswert?

The linked project has nothing to do with the basic-interpreter here. If 
you want to migrate the linked project you should have to learn how to 
work with microcontrollers and how to flash the devices.

STM8 have nothing to do with STM32 (8-Bit vs. 32-Bit). For a short 
reading of the linked project, the sources would compile to STM32 MCU'S 
so you have to learn how to flash the device.

Perhaps you've get a STM32F103 Bluepill: search the internet how to 
flash it !

von Roberto C N. (robycamusso)


Lesenswert?

Hallo, könnten Sie eine Änderung vornehmen, um einen geerdeten 
Eingangspin für die Autorun-Funktion zu verwenden?
Könnte mir jemand helfen?
Danke schön!

von Ralph S. (jjflash)


Lesenswert?

Ach herjeh, nach 6 Jahren eine Anfrage. Grundsätzlich müßte das machbar 
sein, wenn man einen GPIO der mittels IN/OUT gesteuert wird vom 
Interpreter entfernt und diesen für einen Autorun-Pin verwendet.

Allerdings weiß ich noch, dass der Flashspeicherplatz extrem ausgereizt 
war und ich nicht weiß, ob das im Code noch unterbringbar ist.

Camusso N. schrieb:
> um einen geerdeten
> Eingangspin für die Autorun-Funktion zu verwenden

Hier ist wohl ein Eingangspin gemeint, der bei Anliegen eines 0 Signals 
(Pin auf Masse) das gespeicherte Programm starten soll, oder?

Soll der Chip mit dem Interpreter tatsächlich in einer Schaltung so 
eingesetzt werden ist vllt. grundsätzlich zu überlegen, ob ein anderer 
Chip hierfür nicht besser eingesetzt werden kann, da der STM8S103 wohl 
EOL ist.

von Roberto C N. (robycamusso)


Lesenswert?

Tut mir leid, aber ich habe Ihr Projekt erst jetzt gesehen, deshalb 
schreibe ich Ihnen jetzt. Wenn es möglich wäre, wäre das natürlich eine 
schöne Sache. Ich habe versucht, den Code ein wenig zu verstehen, aber 
ich habe nicht viel Erfahrung damit SDCC, also suche ich nach 
Möglichkeit Hilfe, ich würde mich für diese Schaltung interessieren, 
wenn sie machbar ist.
Danke .

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

... sodele, jetzt habe ich mich doch hingesetzt und den Interpreter 
überarbeitet und an die Gegebenheiten die ich in meinem Setup seither 
geändert habe angepasst.

Das ganze ist im Anhang verfügbar und ein Autostartpin ist mit PA1 
gegeben: Eine logische 0 (Verbindung zu GND) wird ein im EEProm 
gespeichertes Programm automatisch starten.

Die bisherige Funktion SCALL heißt jetzt FUNC und das ganze wurde so 
zusammengequetscht, dass es noch eine zweite Funktion bei FUNC gibt: 
Ausgabe eines gesamten Bytes auf den I/O Pins 0 bis 8.

Programme und Quellen sowie Dokumentation und einen Ascii-Schaltplan 
sind im Anhang.

---------------------------------------------

Sollte tatsächlich der Bedarf nach einem minimalistischen 
Basic-Interpreter bestehen, der dann noch preiswerter als STM8S103 ist 
(8€ für 10 Stck), kann ich die Funktionalität auch in einem STM32F030 im 
20 pol. TSSOP machen (der dann 6€ für 10 Stck. kostet) und zum einen 
schneller läuft, Erweiterungen noch möglich sind (weil größerer 
Flashspeicher) und auch für das Basicprogramm mehr Platz zur Verfügung 
hat...

Hrmpf, eigentlich wollte ich ja meine "Spielesammlung" in einem STM32F4 
weiter betreiben, aber man lässt sich ja so leicht ablenken (hat aber 
dennoch Spaß gemacht).

@Camusso: wenn Du das wirklich verwenden magst => viel Spaß damit !

von Roberto C N. (robycamusso)


Lesenswert?

HALLO! Was für eine Überraschung, dass Sie mir heute eine große Hilfe 
geleistet haben. Ich werde die Funktion des neuen Interpreters 
ausprobieren. Natürlich hätte ich auch gerne einen anderen Interpreter 
für ST32F4, noch günstiger, danke für Ihre Arbeit! Wenn ich etwas 
schulde, sagen Sie mir, dass ich einen Beitrag leisten werde.
Frohe Weihnachten!

von Roberto C N. (robycamusso)


Lesenswert?

Hallo, ich habe mir das ganze Projekt angesehen, aber leider habe ich 
die Datei tbasic.ihx zum Laden in den Mikrocontroller nicht gefunden, 
ich bin nicht sehr kompetent im Kompilieren, ich habe die 
Windows-Version und kenne die richtige nicht Kompilierungssyntax, wenn 
Sie mir helfen oder mir die .ihx-Datei senden können.
Tausend Dank!

von Roberto C N. (robycamusso)


Lesenswert?

I use this syntax on sddc for windows :

sdcc -mstm8 tbasic.c , but generated error and not finalize file .ihx

von Roberto C N. (robycamusso)


Angehängte Dateien:

Lesenswert?

I send for you picture fro demostration error compiling..
Thank you for your help !!!!

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Camusso N. schrieb:
> ich habe die
> Windows-Version und kenne die richtige nicht Kompilierungssyntax, wenn
> Sie mir helfen oder mir die .ihx-Datei senden können.

Das Projekt besteht aus mehr als nur der Datei tbasic.c. Deshalb ist das 
ganze ein der Verzeichnisstruktur gemacht, wie es gemacht ist. tbasic.c 
benötigt noch andere Dateien, die übersetzt und dann zu einem Programm 
zusammen gelinkt wird.

Die gesamten Abläufe, wie das kompiliert und gelinkt wird sind in einem 
sogenannten Makefile zusammengefasst. Das Makefile wird von einem 
Programm namens "make" aufgerufen. Standardmäßig ist dieses jedoch bei 
Windows nicht installiert.

Sobald Programme einen gewissen Umfang über ein einfaches Blinkprogramm 
hinaus geht, ist es normal, dass ein Gesamtprojekt aus mehreren 
Quelldateien besteht.

Hier sind es die Dateien:
1
          include --------- stm8s.h
2
                            stm8_init.h
3
                            stm8_gpio.h
4
                            stm8_systimer.h
5
6
          src ------------- stm8_systimer.c
7
                            stm8_init

Ein Compilergang für eine einzelne Datei reicht hier natürlich nicht 
aus. Du solltest Dich von daher bei C  (oder auch C++) mit grundlegenden 
Dingen wie Compiler, Linker und Präprozessor auseinandersetzen (so Du 
denn in C / C++ programmieren magst).

Wie dem auch sei, hänge ich hier die compilierte tbasic.ihx mit an.

Ich hoffe, dass Du unter Windwos eine serielle Verbindung zum 
Interpreter hinbekommst, das Protokoll der Verbindung ist:

19200 bd
1 Startbit
8 Datenbits
1 Stopbit
keine Parität

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Sollte tatsächlich der Bedarf nach einem minimalistischen
> Basic-Interpreter bestehen, der dann noch preiswerter als STM8S103 ist
> (8€ für 10 Stck)

Du könntest Dir den CH32V003 ansehen. Das ist ein RISC-V-Controller, der 
mit 2 kiB RAM und 16 kiB Flash daherkommt und mit bis zu 48 MHz Takt 
betrieben werden kann. Den gibts im 20poligen Gehäuse (TSSOP und QFN), 
aber auch im 16- oder nur 8-poligen Gehäuse (SO-16 & SO-8), was für 
viele einfacher zu löten ist.

Die Peripherie ist sehr nah an der Peripherie der kleinen ARMe von STM 
orentiert. Praktisch ist, daß man den CH32V003 auch mit 5V betreiben 
kann, was viele Probleme mit Pegelwandlern & Co. vermeiden hilft.

Programmierung erfolgt über eine einzelne Leitung.

Und den CH32V003 gibt es im 50er-Pack für 13.70 EUR incl. Versand.

https://www.aliexpress.com/item/1005005036714708.html

(hier "Color: 50Pcs CH32V003F4P6" auswählen)

Das ist ein vom Hersteller WCH höchstselbst betriebener Shop auf 
aliexpress.

Dort gibt es auch das nötige Programmierinterface und auch eine 
Demoplatine:

https://www.aliexpress.com/item/1005004895791296.html

von Roberto C N. (robycamusso)


Lesenswert?

Nochmals vielen Dank, dass Sie mir die kompilierte Datei geschickt 
haben. Ich bin neugierig auf diesen neuen CH32V003. Er ist wirklich 
günstig. Es wäre sehr schön, auch einen speziellen Basisinterpreter 
dafür zu haben, um eine Alternative für einen kleinen Minimalcomputer 
mit der Basisversion zu haben.
Vielen Dank, ich werde die Entwicklung des Projekts mit großem Interesse 
verfolgen.

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Und den CH32V003 gibt es im 50er-Pack für 13.70 EUR incl. Versand.
>
> https://www.aliexpress.com/item/1005005036714708.html
>
> (hier "Color: 50Pcs CH32V003F4P6" auswählen)
>
> Das ist ein vom Hersteller WCH höchstselbst betriebener Shop auf
> aliexpress.
>
> Dort gibt es auch das nötige Programmierinterface und auch eine
> Demoplatine:
>
> https://www.aliexpress.com/item/1005004895791296.html

Von diesem Controller habe ich schon gelesen, aber ich werde da wohl 
nicht darauf einsteigen. Zum einen habe ich schon wirklich genügend 
Plattformen für Mikrocontroller, zum anderen habe ich schon satt 
gekämpft mit dem Bootloader des CH552 von WCH bis das funktioniert hat 
(ohne das zu benötigen, MCS-51 werde ich wohl nur bei wiederaufleben 
noch historischer Projekte verwenden) und zum anderen braucht es dann 
wieder eben das notwendige Programmierinterface. Außerdem kaufe ich bei 
Aliexpress nichts, weil dort immer eine Kreditkarte verlangt wird und 
ich mich bis in mein hohes Alter hinein bis heute erfolgreich gegen eine 
Kreditkarte gewehrt habe.

:-) aber danke für den Link

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> zum anderen habe ich schon satt
> gekämpft mit dem Bootloader des CH552 von WCH bis das funktioniert hat

Was hat das jetzt mit einem RISC-V-µC zu tun?

Bootloader gibts für den übrigens auch, denn es gibt schon eine 
Integration in die "Arduino"-Welt.

Ralph S. schrieb:
> Außerdem kaufe ich bei
> Aliexpress nichts, weil dort immer eine Kreditkarte verlangt wird und
> ich mich bis in mein hohes Alter hinein bis heute erfolgreich gegen eine
> Kreditkarte gewehrt habe.

Ach? Die nehmen auch PayPal. Funktioniert. Ohne Kreditkarte.
Auch muss man die Teile nicht über Aliexpress kaufen, die gibts 
natürlich auch bei LCSC.

von Harald K. (kirnbichler)


Lesenswert?

Wenn man übrigens das Pinout des CH32V003F4P6 mit dem des STM8S103F3P6 
vergleicht, so stellt man eine frappierende Ähnlichkeit fest ...
1
##################################################################
2
                      STM8S103F3P6 Pinout
3
##################################################################
4
5
                            ------------
6
UART1_CK / TIM2_CH1 / PD4  |  1     20  |  PD3 / AIN4 / TIM2_CH2 / ADC_ETR
7
    UART1_TX / AIN5 / PD5  |  2     19  |  PD2 / AIN3
8
    UART1_RX / AIN6 / PD6  |  3     18  |  PD1 / SWIM
9
                     NRST  |  4     17  |  PC7 / SPI_MISO
10
              OSCIN / PA1  |  5     16  |  PC6 / SPI_MOSI
11
             OSCOUT / PA2  |  6     15  |  PC5 / SPI_CLK
12
                Vss (GND)  |  7     14  |  PC4 / TIM1_CH4 / CLK_CCO / AIN2
13
                VCAP (*1)  |  8     13  |  PC3 / TIM1_CH3 /
14
                Vdd (+Ub)  |  9     12  |  PB4 / I2C_SCL
15
           TIM2_CH3 / PA3  | 10     11  |  PB5 / I2C_SDA
16
                            -----------

(Quelle "pinmapping.txt" aus Anhang im ersten Post)
1
                                    CH32V003F4P6
2
                                    ------------
3
PD4/A7/UCK/T2CH1ETR/OPO/T1CH4ETR_  |  1     20  |  PD3/A4/T2CH2/AETR/UCTS/T1CH4_
4
PD5/A5/UTX/T2CH4_/URX_             |  2     19  |  PD2/A3/T1CH1/T2CH3_/T1CH2N_
5
PD6/A6/URX/T2CH3_/UTX_             |  3     18  |  PD1/SWIO/AETR2/T1CH3N/SCL_/URX_
6
PD7/NRST/T2CH4/OPP1/UCK_           |  4     17  |  PC7/MISO/T1CH2_/T2CH2_/URTS_
7
PA1/OSCI/A1/T1CH2/OPN0             |  5     16  |  PC6/MOSI/T1CH1CH3N_/UCTS_/SDA_
8
PA2/OSCO/A0/T1CH2N/OPP0/AETR2_     |  6     15  |  PPC5/SCK/T1ETR/T2CH1ETR_/SCL_/UCK_/T1CH3_
9
VSS (GND)                          |  7     14  |  PC4/A2/T1CH4/MCO/T1CH1CH2N_
10
PD0/T1CH1N/OPN1/SDA_/UTX_          |  8     13  |  PC3/T1CH3/T1CH1N_/UCTS_
11
VDD                                |  9     12  |  PC2/SCL/URTS/T1BKIN/AETR_/T2CH2_/T1ETR_
12
PC0/T2CH3/UTX_/NSS_/T1CH3          | 10     11  |  PC1/SDA/NSS/T2CH4_/T2CH1ETR_/T1BKIN_/URX_
13
                                    ------------
(Quelle: Datenblatt)

Ich glaube nicht, daß das ein Zufall ist.

von Uwe G. (scd)


Lesenswert?

Ralph S. schrieb:
> Von diesem Controller habe ich schon gelesen, aber ich werde da wohl
> nicht darauf einsteigen. Zum einen habe ich schon wirklich genügend
> Plattformen für Mikrocontroller, zum anderen habe ich schon satt
> gekämpft mit dem Bootloader des CH552 von WCH bis das funktioniert hat
> (ohne das zu benötigen, MCS-51 werde ich wohl nur bei wiederaufleben
> noch historischer Projekte verwenden) und zum anderen braucht es dann
> wieder eben das notwendige Programmierinterface. Außerdem kaufe ich bei
> Aliexpress nichts, weil dort immer eine Kreditkarte verlangt wird und
> ich mich bis in mein hohes Alter hinein bis heute erfolgreich gegen eine
> Kreditkarte gewehrt habe.

Wenn Dich der Controller interessiert, besorge ich Dir gern die 
empfohlene Ausstattung. Meld Dich einfach per PM bei mir.

Info:
https://stepp-ke.de/2023/07/23/wch-ch32v003f4p6-ch32v203c8t6-und-wch-linke/

Der CH32V003F4P6 ist als direkter Ersatz für den STM8Sx03F3P6 gedacht. 
Hab ich auch schon erfolgreich ausprobiert.

von Roberto C N. (robycamusso)


Lesenswert?

Hallo, ich habe mehrmals bei Aliexpress gekauft, zum Beispiel das in 
diesem Projekt verwendete stm8s103, 100 Stück für nur 77 Euro, ich würde 
sagen, ein sehr vorteilhafter Preis...

von Harald K. (kirnbichler)


Lesenswert?

Camusso N. schrieb:
> 100 Stück für nur 77 Euro, ich würde
> sagen, ein sehr vorteilhafter Preis...

Da sind 13.70 Euro (incl. Versand und Einfuhrumsatzsteuer) für 50 Stück 
des CH32V003 irgendwie nicht weniger vorteilhaft.

Doppelt so viel RAM, doppelt so viel Flash, dreifache Taktfrequenz ...

Wobei man das sicher nicht direkt vergleichen kann; ein 8-Bit-µC 
verwendet recht sicher kompakteren Code als ein 32-Bit-RISC-µC, auch 
wenn der mit 16-Bit-Instruktionen ("gepackt", also analog zu ARM-Thumb) 
arbeitet.

Und da die Peripherie sich gar nicht so irrwitzig von der des STM8S103 
zu unterscheiden scheint, ist eine Portierung des Projektes vermutlich 
gar nicht so ein großer Aufriss - denn das ist ja wohl in C geschrieben.

Hmm. Was für lange Winterabende?

von Roberto C N. (robycamusso)


Lesenswert?

Ja, tatsächlich ist es draußen kalt und ich nutze diese Gelegenheit, um 
mit neuen Basisinterpretern auf Mikrocontrollern zu experimentieren, 
auch mit Hilfe Ihrer Gruppe, die mir gute Ratschläge gibt, vielen Dank!

von Ralph S. (jjflash)


Lesenswert?

Uwe G. schrieb:
> Wenn Dich der Controller interessiert, besorge ich Dir gern die
> empfohlene Ausstattung. Meld Dich einfach per PM bei mir.
>
> Info:
> https://stepp-ke.de/2023/07/23/wch-ch32v003f4p6-ch32v203c8t6-und-wch-linke/
>
> Der CH32V003F4P6 ist als direkter Ersatz für den STM8Sx03F3P6 gedacht.
> Hab ich auch schon erfolgreich ausprobiert.

Ganz lieben Dank!
Ich habe mir gestern den Chip per Datenblatt und Internetrechereche 
angesehen und für mich entschieden, dass ich den nicht machen werde. Ich 
werkle unter Linux und hätte einen sehr großen Aufwand, dass an meine 
bevorzugte Arbeitsweise (alle Projekte mittels Makefile und als Editor 
Geany oder Konsoleneditor) einzurichten.

Ich verzettele mich immer viel zu sehr (auch gerade wieder, weil ich den 
Interpreter jetzt auch für den STM32F030 "komplett" gemacht habe). 
Momentan wollte ich ja meine Spielesammlung für F401 bearbeiten und habe 
nun 3 Tage lang am Interpreter gewerkelt, einfach weil das Spaß gemacht 
hat.

Deswegen werde ich diesen Chip vorerst einmal nicht anfassen, aber 
vielen Dank noch einmal.

Gruß
Ralph

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

So, hier jetzt auch die überarbeitete Version für einen STM32F030. Ich 
hatte kurz überlegt, hierfür einen neuen Thread aufzumachen, weil das ja 
ein ganz anderer Chip als der im Eröffnungsthread von vor 6 Jahren 
beschrieben ist, aber der Kern des Interpreters ist der selbe von daher.

Die Schaltung ist dafür ausgelegt, die Firmware des Chips mittels des 
integrierten Bootloaders des F030 zu flashen. Da das ganze 
minimalistisch bleiben sollte, wird der Bootloader mittels zweier Tasten 
(Boot0 und Reset) aktiviert (genauso, wie das die BlackPill und die 
BluePill - hier mittels 2 Jumper - auch machen).

Der Interpreter belegt mit dem von mir verwendeten Compiler eine Größe 
von 13896 Bytes. Ich hoffe dass die Dateigröße mit neueren als den von 
mir verwendeten arm-none-eabi-gcc Version 6 nicht beim compilieren 
zunimmt. Größer als 14336 Bytes darf es nicht sein, da sonst der 
Flashbereich beschrieben wird, der im Flash zum Speichern eines 
Basicprogramms dient (ab Adresse 0x80003800).

Im Vergleich zu der Version mit dem STM8 kann dieser Interpreter nun:

- für ein Basicprogramm 2048 tokenisierte Bytes (anstelle von 512) 
speichern
- DELAY Funktion
- ADC Funktion zum Einlesen eines analogen Wertes
- BYTEOUT zum Ausgeben eines kompletten 8-Bit Wertes auf 8 Pins I/O 0 
bis 7
- 11 I/O Pins von denen einer als analoger Eingang dienen kann.

Wie zuvor hat auch der Interpreter einen Autorunanschluß mit dem ein 
gespeichertes Programm sofort nach anlegen der Betriebsspannung 
gestartet werden kann, so dieser auf GND gelegt ist.

Wer das brauchen kann: Viel Spaß damit, :-) ich habe glaube ich damit 
genug gespielt. Ich wollte noch eine Funktion integrieren, mit der man 
ein 74HC595 Schieberegister als Porterweiterung hätte bedienen können, 
aber ich habe das nicht mehr hineingequetscht bekommen.

So nebenbei braucht diese Variante des Interpreters auch keinen 
zusätzlichen Programmer um ihn zu flashen, ein USB zu (TTL)RS232 Adapter 
wie im Schaltplan genügt um damit werkeln zu können.

Viele Grüße und schöne Weihnachten,

Ralph

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Ich
> werkle unter Linux und hätte einen sehr großen Aufwand, dass an meine
> bevorzugte Arbeitsweise (alle Projekte mittels Makefile und als Editor
> Geany oder Konsoleneditor) einzurichten.

Hmm. Man muss nicht "mounriver" verwenden; hast Du das hier nicht 
gesehen?

https://github.com/cnlohr/ch32v003fun

von Roberto C N. (robycamusso)


Lesenswert?

Hallo, ich bin mit all Ihrer Arbeit sehr zufrieden, vielen Dank. Frohe 
Weihnachten !

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Hmm. Man muss nicht "mounriver" verwenden; hast Du das hier nicht
> gesehen?
> https://github.com/cnlohr/ch32v003fun

Hab ich gesehen...

von Roberto C N. (robycamusso)


Lesenswert?

HALLO ,
Das neue TinyBasic für STM32F030F4P6 funktioniert gut! Ich habe die 
Firmware mit STM32CUBE und STLINK geladen, dann habe ich die serielle 
Schnittstelle mit TERATERM verbunden und alles funktioniert 
einwandfrei!! . Danke für dieses neue TinyBasic!
Gerne verfolge ich die Entwicklung weiterer Neuigkeiten.
Fröhliche Weihnachten an alle!

von Roberto C N. (robycamusso)


Lesenswert?

Hallo zusammen,
Kann mir jemand helfen, das Programm flashstm8.exe für Windows zu 
finden? Ich kenne mich mit Linux nicht aus.
Danke !

von NGC 5. (ngc5907)


Lesenswert?


von Ralph S. (jjflash)


Lesenswert?

Camusso N. schrieb:
> Gerne verfolge ich die Entwicklung weiterer Neuigkeiten.

Ich glaube nicht, dass ich daran noch weiter etwas entwickeln werde, 
zumindest nicht auf der Basis dieses TinyBasic. Es ist einfach zu 
rudimentär, ist sehr eingeschränkt, keine freie Wahl der Variablennamen, 
kein DIM und vor allem keine Gleitkommazahlen.

Sollte ich mich noch einmal an ein Basic machen (SOLLTE), wird das eher 
was ganz anderes werden !

von Roberto C N. (robycamusso)


Lesenswert?

Ja, aber für kleine Automatisierungen ist es ideal :), aber wenn Sie 
eines Tages etwas Fortgeschritteneres entwickeln, wird es noch besser 
sein, trotzdem vielen Dank für Ihre Unterstützung und ein frohes neues 
Jahr!

von Philipp Klaus K. (pkk)


Lesenswert?

Ralph S. schrieb:
> Ach herjeh, nach 6 Jahren eine Anfrage. Grundsätzlich müßte das machbar
> sein, wenn man einen GPIO der mittels IN/OUT gesteuert wird vom
> Interpreter entfernt und diesen für einen Autorun-Pin verwendet.
>
> Allerdings weiß ich noch, dass der Flashspeicherplatz extrem ausgereizt
> war und ich nicht weiß, ob das im Code noch unterbringbar ist.

In den 6 Jahren gab es aber auch Fortschritte bei SDCC, so dass das, bei 
dem, was einst "Flashspeicherplatz extrem ausgereizt", nun noch Luft 
sein könnte.

von Ralph S. (jjflash)


Lesenswert?

Philipp Klaus K. schrieb:
> In den 6 Jahren gab es aber auch Fortschritte bei SDCC, so dass das, bei
> dem, was einst "Flashspeicherplatz extrem ausgereizt", nun noch Luft
> sein könnte.

:-) mittlerweile habe sogar ich (und ich brauche lange bis ich neue 
Versionen verwende) einen neueren SDCC installiert. Wirklich "Luft" was 
den Speicherplatz angeht hat das nicht gebracht.

Für Camusso's "Autorun-Pin" nach anlegen der Spannung hats allerdings 
noch gereicht gehabt. Grundsätzlich hätte ich da noch ein paar Ideen 
gehabt, was mit der "func(Funktionsnr, Value)" noch hätte anstellen 
können. Als erstes wäre mir hier ein Portexpander mit 74HC595 
eingefallen. Dafür hat es dann allerdings nicht gereicht.

Außerdem werde ich für den STM8 nicht mehr wirklich etwas machen, weil 
mir vor ca. einem halben Jahr jemand angezeigt hat, dass ST die 
STM8-Serie auf NRND (not recommended for new designs) gesetzt hat und 
die Serie wohl irgendwann auslaufen wird. Zudem war der STM8 vor der 
Pandemie ein absolut billiges Spielzeug auf dem Niveau eines ATmega (aus 
meiner Sicht der Dinge). Da hatte der irgendwas zwischen 20 und 25 ct 
gekostet.

Jetzt ist mein billiges Spielzeug für den SDCC noch die PDK Familie von 
Padauk. Hier an dieser Stelle ein herzliches Dankeschön an Philipp (und 
das Team rund um den SDCC) dass ihr da immer wieder etwas daran werkelt 
(auch wenn ich bei der Version 4.3 wirkliche Probleme hatte den in 
meiner selbstgestrickten Live-Linux-Version rund um Porteus / Slackware 
an's Laufen zu bekommen).

Also: :-) Dankeschön, dass es den SDCC gibt ! (genauso gemeint)

von Philipp Klaus K. (pkk)


Lesenswert?

Ralph S. schrieb:
> Philipp Klaus K. schrieb:
>> In den 6 Jahren gab es aber auch Fortschritte bei SDCC, so dass das, bei
>> dem, was einst "Flashspeicherplatz extrem ausgereizt", nun noch Luft
>> sein könnte.
>
> :-) mittlerweile habe sogar ich (und ich brauche lange bis ich neue
> Versionen verwende) einen neueren SDCC installiert. Wirklich "Luft" was
> den Speicherplatz angeht hat das nicht gebracht.

Dann bliebe noch:

--opt-code-size verwenden (falls da nicht eh schon geschieht

--max-allocs-per-node N (bei größerem N wird stärker optimiert, aber das 
Kompilieren dauert länger und verwendet mehr RAM, aber wenn du in den 6 
Jahren Zugang zu einem schnelleren Rechner mit mehr RAM erhalten hast, 
sollte das gehen).

von Andreas (andreas7)


Lesenswert?

Hallo,

mir gefällt das Projekt, auch wenn es kaum praktische Anwendungen geben 
dürfte.
Aber das Problem möglichst viel in so einen kleinen STM8 rein zu 
bekommen
hat mir keine Ruhe glassen.
Ich habe den Code etwas geändert und bin aktuell bei einer Auslastung 
von ca. 93%.
Habe aber auch einige neue Funktionen eingebaut:
AND, OR, XOR, ADC, DELAY, BYTEOUT, PEEK, POKE, EEPROM, <>

Die größten Änderungen um Platz zu sparen:
- doppelten Code in separate Funktionen packen
- Function Pointer Arrays statt der großen switch Anweisungen

Leider ist mein STM8 Board noch nicht da,
ich kann noch nicht testen.

Andreas

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Andrea,
Ich bin sehr an Ihrer Modifikation interessiert, ich würde sie gerne 
ausprobieren, wenn Sie mir die .ihx-Datei schicken könnten, wenn Sie 
möchten, schicke ich Ihnen ein STM8-Board, ich habe viele.
Lass es mich wissen .
Danke schön!

von Ralph S. (jjflash)


Lesenswert?

Andreas schrieb:
> Ich habe den Code etwas geändert und bin aktuell bei einer Auslastung
> von ca. 93%.
> Habe aber auch einige neue Funktionen eingebaut:
> AND, OR, XOR, ADC, DELAY, BYTEOUT, PEEK, POKE, EEPROM, <>

... freu ich mich, wenn andere solche Basteleien auch mögen (auch dann 
wenn es wohl kaum Anwendungen gitbt).
DELAY, BYTEOUT und ADC hab ich ja in meiner STM32F Version implementiert 
gehabt (im STM8 nicht). Die letzte Compilierung mit STM8 ergab:
1
Device   : stm8s103f3 / Flashsize: 8192 bytes
2
Program  : at address 0x8000 7421 Bytes (90.6% full)

Hätte ich jetzt wahrscheinlich auch noch etwas Platz zum Basteln. 
Allerdings muss ich sagen, dass ich mit meinem Bootloader aus

Beitrag "Re: Serial Bootloader für STM8S103F3P6 (Linux)"

verwende und der benötigt in sich auch Speicherplatz, so dass bei mir 
für das Anwenderprogramm dann 7744 anstelle von 8192 Bytes zur Verfügung 
stehen.
Außerdem denke ich, dass wenn ich an dem Basic vor lauter Lust und 
Dollerei noch einmal etwas mache, wird es die STM32F Variante sein.

Ich finds aber klasse wenn du dich damit beschäftigst und bin gepsannt 
darauf, wie deine erweiterte Version ausschaut.

Gruß, Ralph

von Roberto C N. (robycamusso)


Angehängte Dateien:

Lesenswert?

Hallo zusammen, ich verfolge gespannt die Lösung, neue Anweisungen zum 
stm8s103f3p6 hinzuzufügen. Ich habe auch eine neue Idee. Ich hoffe, dass 
Sie, die mehr Experten als ich sind, mir helfen können. Ich habe ein 
Foto eingefügt, damit Sie das verstehen, indem ich ein externes Bild 
einfüge 24lc64 EEPROM, Sie könnten 8 KB für das Programm haben!
und nutzen Sie die internen 512 Byte als Datenspeicher.
Es kann getan werden?
Danke !

von Andreas (andreas7)


Angehängte Dateien:

Lesenswert?

Hallo,

@Camusso N
ich poste die .ihx Datei sobald ich mein Board habe und alles testen 
kann.
Danke! Aber das Board allein nützt mir nichts, ich hat auch den 
Programmer
und das seriell Interface bestellt.
Mein Board soll bis zum 12.1. ankommen.

@Ralph S
Danke für das schöne Projekt!
Ich hänge einfach mal meinen aktuellen Stand an.
Ich habe das aber bisher nur auf Windows und einen ESP32 laufen lassen.
Alles was ADC, EEPROM, PEEK, POKE, usw. betrifft ist noch völlig 
ungetestet.

Das makefile habe ich für Windows erweitert.
Ich benutze den SDCC 4.3.0.

Grüße
Andreas

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Andreas,
Vielen Dank, dass Sie einen Teil der Dateien bereits veröffentlicht 
haben. Ich werde versuchen, sie zu studieren, um mehr zu erfahren. Wenn 
Sie dann die Hex-Datei haben, wird es noch besser.
Hat Ihnen meine Idee gefallen, den Speicher mit einem externen Eeprom zu 
verwalten?
Auf Wiedersehen!

Roberto.

von Ralph S. (jjflash)


Lesenswert?

Camusso N. schrieb:
> Hallo Andreas,
> Vielen Dank, dass Sie einen Teil der Dateien bereits veröffentlicht
> haben. Ich werde versuchen, sie zu studieren, um mehr zu erfahren. Wenn
> Sie dann die Hex-Datei haben, wird es noch besser.
> Hat Ihnen meine Idee gefallen, den Speicher mit einem externen Eeprom zu
> verwalten?
> Auf Wiedersehen!
>
> Roberto.

Na ja, ein EEPROM als externen Speicher zu verwenden ist nicht wirklich 
eine IDEE, sondern die Norm. Die Idee war eher, genau den internen und 
nicht einen externen EEProm zu verwenden.  Es hat eben eine 
Ein-Chiplösung sein sollen. Wenn schon ein externes EEProm, dann eher 
doch ein 24LC256, der ist 4 mal so groß und zumindest bei LCSC.COM 
deutlich preiswerter.

Hmmmmmmmmmm, eigentlich (und nicht nur eigentlich) muß man nur die 
Funktionen:

- eeprom_unlock
- eeprom_read
- eeprom_write

gegen Funktionen austauschen, die dann eben ein EEProm ansprechen. 
@Roberto, kann es sein, dass du nicht so wirklich viel Ahnung von C (und 
nicht nur vom STM8 nicht) hast ?

Für den I2C Bus des EEProms würde ich zumindest in Verbindung mit dem 
STM8 eher 2,2kOhm verwenden (das hatte bisher bei mir problemlos 
geklappt gehabt).

Andreas schrieb:
> Alles was ADC, EEPROM, PEEK, POKE, usw. betrifft ist noch völlig
> ungetestet.

:-) das ist dann aber irgendwie noch keine Version für STM8! Auf einem 
STM32 konnte ich auch deutlich mehr, hatte auch ByteOut, ADC auch. Bei 
Peek und Poke hängts ja davon ab, was du hinter den anzusprechenden 
Adressen verstecken magst. Ich hatte das lieber über "func" gelöst. Bei 
dem STM32 kannst du dich dann absolut austoben. Ich weiß, dass das sogar 
auf einem F4 läuft, aber das ist dann irgendwie doch zu arg einen 
schönen M4 Controller mit einem sehr kastrierten Basic zu betreiben, 
allerdings: gehen würde es.

Wenn du mit dem Basic hier gerne weiter machen magst, :-) gerne! 
Grundsätzlich ist es dann halt aber so, dass das nicht zweigleisig 
geschehen sollte (bspw. umd die Wünsche von Roberto zu erfüllen und das 
um ein EEProm zu erweitern und dann den frei werdenden Flashspeicher zu 
nutzen). Hier kann es dann sogar reichen, eine kleine Verwaltung zum 
EEPromspeicher zu machen, um dann mehr als nur ein Programm speichern zu 
können, ein 24LC256 hätte immerhin 32kByte Speicher.

Aber wie gesagt, so etwas würde ich dann lieber auf einem anderen 
Controller machen. Abgesehen davon ist die (hier dann wirklich bessere) 
Scriptsprache doch tatsächlich Python. Mikropython läuft auf einem 
STM32F4xxx recht gut. Deswegen stellt sich ehrlicherweise die Frage nach 
dem Sinn von Basic.

Als "Spielzeug" war das witzig. Wie gesagt, du kannst dir das hier gerne 
zu eigen machen! Grundsätzlich, egal was du machst (wenn ich mir hier 
die vielen negativen Bewertungen ansehe) wünsche ich dir viel Spaß 
dabei.

Gruß, Ralph

von Andreas (andreas7)


Lesenswert?

Hallo Ralph S,

> Aber wie gesagt, so etwas würde ich dann lieber auf einem anderen
> Controller machen. Abgesehen davon ist die (hier dann wirklich bessere)
> Scriptsprache doch tatsächlich Python. Mikropython läuft auf einem
> STM32F4xxx recht gut. Deswegen stellt sich ehrlicherweise die Frage nach
> dem Sinn von Basic.
ich glaub da hast Du Recht, BASIC auf dem STM8 macht wirklich nicht viel 
Sinn.

> Wie gesagt, du kannst dir das hier gerne
> zu eigen machen!
Entschuldigung, das war nicht meine Absicht.

Grüße
Andreas

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Ralph und Andreas, vielen Dank, denn ihr berät mich immer gut, ihr 
seid Experten in C und stm8, leider habe ich immer nur Pic und 8051 
verwendet, daher habe ich insbesondere im Programmieren in C keine 
Erfahrung, weshalb ich euch gefragt habe für die Dateien .ihx, wenn Sie 
mir helfen könnten, weil ich tagelang versucht habe, die Dateien mit 
einem Ubuntu-PC zu kompilieren, aber es gelingt mir nicht, insbesondere 
mit dem Befehl „make“. Ich bin sehr unerfahren und verwende fast nur 
Basic- und MPASM-Mikrochips.

von Ralph S. (jjflash)


Lesenswert?

Andreas schrieb:
> Entschuldigung, das war nicht meine Absicht.
>
> Grüße
> Andreas

:-) eigentlich schon schade, wenn das jemand (du) fortgeführt hätte !

von Ralph S. (jjflash)


Lesenswert?

Camusso N. schrieb:
> weil ich tagelang versucht habe, die Dateien mit
> einem Ubuntu-PC zu kompilieren, aber es gelingt mir nicht, insbesondere
> mit dem Befehl „make“.

Das... verstehe ich nun allerdings überhaupt nicht! Wenn du das Zipfile 
in einen Ordner deiner Wahl entpackt hast, in der Konsole in dieses 
Verzeichnis wechselst und dort eingibst:

make

Dann hätte bei einem installierten SDCC das allerdings kompilieren 
müssen !

von Roberto C N. (robycamusso)


Angehängte Dateien:

Lesenswert?

HALLO ! Ich habe es endlich geschafft, die tbasic-Datei zu verstehen und 
zu kompilieren, aber die letzte, die Sie gepostet haben, weist einen 
Fehler auf. Ich füge ein Foto von der Datei bei, die mir mein SDCC gibt.
Tausend Dank!

von Harald K. (kirnbichler)


Lesenswert?

Dann sieh Dir mal Zeile 1581 an.

Übrigens kann man den Text, der in dem Konsolenfenster da steht, auch 
markieren und in die Zwischenablage kopieren, und somit hier auch als 
Text einfügen, dazu muss man keine Kamera in die Hand nehmen und ein 
Photo vom Monitor anfertigen.

von Roberto C N. (robycamusso)


Lesenswert?

Hallo, Sie haben versucht, den Code in Zeile 1581 zu analysieren, der 
Fehler in zu vielen Parametern, ich habe versucht, ihn zu ändern, aber 
ich verstehe es nicht, leider interessiere ich mich seit kurzem für C 
und bin sehr schlecht vorbereitet ... ...
Ich akzeptiere jedoch Ihren wertvollen Rat und werde weiterhin C lernen. 
Ich wünsche Ihnen einen schönen Sonntag

von Harald K. (kirnbichler)


Lesenswert?

Das ist dieser Codeabschnitt hier:
1
1577:void i_delay(void)
2
1578:{
3
1579:  int16_t value = iexp();
4
1580:  if (err) return;
5
1581:  delay(value);
6
1582:}

Wo ist die Funktion /delay()/ deklariert?

Das wirst Du wohl Andreas fragen müssen.

von Ralph S. (jjflash)


Lesenswert?

Der letzte Post war von Andreas. Wäre sein Setup fehlerfrei, hätte er 
auch eine *.ihx Datei erzeugen müssen. Hmmmm, ich werde mir das von 
Anfreas morgen mal genauer ansehen, aber eigentlich ist es ungeschickt, 
wenn es 2 Weiterentwicklungen gibt, zudem noch unter Linux und Windows. 
Hier wäre es geschickter, eine Version zu haben, die unter Linux und 
Windows korrekt compiliert. Der Fehler mit unterschiedlicher 
Parameteranzahl sollte aber auffindbar sein. Schwieriger wird es, wenn 
man auf eine nicht vorhandene Hardware zugreift. Hier ist man dann nicht 
sicher, ob bspw. der ADC richtig funktioniert.

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

@Camusso:

So, den Code von Andreas habe ich mir nicht angesehen (weil ich bei 
meinem eigenen bleiben möchte).

Aaaaber ich habe da mal etwas (zum Lernen) vorbereitet und der Anhang 
hier ist ziemlich groß (nicht ganz 8 MByte).

Sollte das zu groß sein, so mag mir ein Admin auf die Finger klopfen und 
ich werde das dann nicht wieder tun.

Im Anhang ist ein komplettes Setup für den STM8 des SDCC-Compilers für 
ein 64-Bit Linux enthalten (allerdings "nur" SDCC v4.1.0). Damit der 
Anhang nicht zu groß ist, wurden alle nicht STM8 Sachen des Compilers 
weggelassen (hier gibt es dann die Frage an Philipp Klaus K. ob man das 
überhaupt darf, den SDCC zu "kastrieren").

Das Setup ist irgendwie "Arduino-Style", das heißt: alle vom Compiler 
benötigten Dateien (inkl. stm8.lib) sind über relative 
Verzeichnisangaben gemacht und die im Setup enthaltenen 
Beispielsverzeichnisse bedienen sich hieraus. Das heißt, dass der 
Compiler und Linker auch nur aus diesem Verzeichnis "stm8" erreichbar 
ist.

In allen Beispielsverzeichnissen können die Beispiele mit einem 
einfachen Aufruf "make" übersetzt werden.

Um mit dem Setup "spielen" zu können sind im Stammverzeichnis stm8 2 
TUI-Mode-Programme enthalten:

   - genmakef
   - cide

Mit den beiden Programmen sollte fürs erste ein Einstieg und Arbeiten 
mit C und STM8 auf der Konsole möglich sein.

genmakef im Stammverzeichnis stm8 mittels:

./genmakef

starten. Hier kann nun ein Projektverzeichnis und eine Projektdatei 
angelegt werden, die dann auch die main-Funktion beinhaltet.

Mit "select path to STM8 projects" im aufgehenden Dialogordner das 
Verzeichnis stm8 wählen. Mit "Makefile generator" kann hier ein Makefile 
zusammengeklickt werden. Es sind Angaben zu Projektordner und 
Projektname zu machen. Es muß der STM8 gewählt werden, für den ein 
Programm geschrieben werden soll (Auswahl hier nur STM8S003, STM8S103F3, 
STM8S105K4 und STM8S105K6). Der Programmer sollte als ST-Link SWIM 
gewählt werden, da der Bootloader eine Eigenkreation von mir ist und auf 
Deinem System nicht verfügbar ist).

Die wichtigste Eigenschaft ist "Additional source file to link". Hier 
wird ausgesucht, welche Softwarebibliothek mit eingebunden werden soll 
und mindestens ./src/stm8_init.c ist auszuwählen (dieses erscheint dann 
im blauen Fenster als:
SRCS = ../src/stm8_init.rel

Die Endung .rel gibt es deshalb, weil Objektdateien des SDCC so 
bezeichnet werden, d.h. aus stm8_init.c wird der Compiler stm8_init.rel 
erzeugen und dieses dann dem späteren Gesamtprogramm hinzufügen.

Wenn die Auswahl getroffen ist, kannst du dir das Verzeichnis mit der 
C-Projektdatei  und das Verzeichnis generieren lassen.

Beende genmakef und wechsle in das von gerade erstellte Verzeichnis mit:

cd ./meinverzeichnis

Hier sollten jetzt 2 Dateien liegen: Die C-Projektdatei und das 
dazugehörende Makefile.

Um nun damit etwas anfangen zu können, mußt du dein Programm schreiben 
können. Hierzu startest du die Konsole-IDE cide mittels:

../cide

und öffnest deine C-Datei.

Jetzt kannst du loslegen mit dem Programmieren!

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Ralph, danke für deinen Vorschlag. Jetzt werde ich versuchen, 
deine Software zu installieren, um zu sehen, ob ich es besser verstehen 
kann. Ich habe es geschafft, mit dem Befehl „make“ zu kompilieren, aber 
der Compiler generiert die .ihx-Datei, aber wenn ich sie auf den stm8 
lade, geschieht dies Es funktioniert nicht, also denke ich, dass da 
immer noch ein Fehler meinerseits vorliegt....

von Ralph S. (jjflash)


Lesenswert?

Welchen STM8  Programmer hast du und welche USB2UART Bridge verwendest 
du?

von Roberto C. (roberto_c263)


Lesenswert?

Ich verwende STLINK mit dem SWING-Signal und zum Testen eines seriellen 
USB-Adapters. Mit Ihrer Version funktioniert es gut, aber mit dieser neu 
kompilierten Version funktioniert es nicht ...

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Ralph, vielen Dank, dass du mir den stm8-Ordner mit den 
Einstellungen geschickt hast. Mit diesem Ordner kann ich die von dir 
gepostete Datei tbasic.c korrekt kompilieren, während beim Kompilieren 
der Datei mit den neuen Verzögerungs-ADC-Funktionen usw. Probleme 
auftreten.
Ich versuche den Fehler zu finden...

von Roberto C N. (robycamusso)


Angehängte Dateien:

Lesenswert?

Dies ist der Fehler, den ich beheben möchte ...

von Harald K. (kirnbichler)


Lesenswert?

Das ist doch exakt der gleiche Fehler, um den es schon vor einer Woche 
ging.

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Harald, kommst du zu uns, um den Fehler zu beheben?

von Roberto C N. (robycamusso)


Lesenswert?

Mit etwas Mühe gelang es mir, diese Schlüsselwörter zusammenzustellen 
und auszuprobieren:

 Delay ok!
10 PRINT "Ciao!"
20 DELAY(1000)
30 PRINT "Mondo!"
40 DELAY (1000)
50 GOTO 10
Have fun!

Adc Ok!

10 B=ADC()
20 PRINT B
30 GOTO 10

Have fun!
Ich habe einen 10-kb-Trimmer an den ADC-Pin angeschlossen und konnte den 
Variablenwert lesen!


Byteout , peek , poke , eeprom(32)
Ich kenne die Syntax nichtViel Spaß!
Ich habe einen 10-kb-Trimmer an den ADC-Pin angeschlossen und konnte den 
Wert der Variablen lesen!
Byteout, Peek, Poke, EEPROM(32)
Ich kenne die Syntax nicht. Haben Sie Vorschläge?

von Harald K. (kirnbichler)


Lesenswert?

Roberto C N. schrieb:
> Hallo Harald, kommst du zu uns, um den Fehler zu beheben?

Danke für die Einladung nach Italien, aber meine diesjährige 
Urlaubsplanung sieht doch anders aus.

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Das ist doch exakt der gleiche Fehler, um den es schon vor einer Woche
> ging.

Das ist exakt der gleiche Fehler !!!

Und der Fehler von Roberto ist, dass er unterschiedliche Versionen 
untereinander mischt (unter Garantie).

In meinem Sourcecode steht in Zeile 1582 kein "delay" und auch kein 
"delay_ms". Scheinbar jedoch versucht er, die andere (und absolut 
ungetestete) Version von Andreas mit meinem Makefile zu übersetzen (was 
dann nicht funktioniert).

In meiner Version gibt es kein Peek, Poke und Byteout!!! Peek und Poke 
habe ich nie implementiert und Byteout gibt es im STM32F030!

Solange also Roberto grundsätzlich versucht die Datei von Andreas zu 
übersetzen wird das scheitern oder er muß im C-Source den Fehler von 
Andreas suchen!

Roberto C N. schrieb:
> Hallo Ralph, vielen Dank, dass du mir den stm8-Ordner mit den
> Einstellungen geschickt hast. Mit diesem Ordner kann ich die von dir
> gepostete Datei tbasic.c korrekt kompilieren, während beim Kompilieren
> der Datei mit den neuen Verzögerungs-ADC-Funktionen usw. Probleme
> auftreten.
> Ich versuche den Fehler zu finden...

Wie gesagt: das ist nicht von mir!

von Ralph S. (jjflash)


Lesenswert?

So, jetzt habe ich heute Nacht doch wieder mit dem Interpreter 
zugebracht und habe mir die Version von Andreas angesehen.

Er hat doch einige Änderungen vorgenommen, allen vorweg hat er etwas an 
der Struktur geändert: er verwendet einen Funktionspointer anstelle der 
switch-case Anordnung.

Hierbei muß ihm ein Fehler unterlaufen sein, denn sein <byteout> 
produziert beim Aufruf einen Fehler.

Ich habe meiner Version ein <byteout> hinzugefügt, ebenso ein <delay> 
und ein <adc>.

Doppelten Code wie von ihm beschrieben habe ich nicht bei mir gefunden, 
die Warnmeldungen habe ich ebenfalls eliminiert und ich habe seine 
Methode die IO-Pins anzusprechen übernommen. Danach war es 3 Uhr morgens 
und ich wollte das nicht mehr für hier aufarbeiten.

Die größe Codeeinsparung wurde dadurch erreicht, dass die 
Initialisierung der seriellen Schnittstelle geändert wurde. Hier kann 
nicht mehr aus dem laufenden C-Programm heraus die Baudrate geändert 
werden (wurde nicht genutzt) und ist jetzt fest auf 19200 Baud 
eingestellt.

Dadurch habe ich erreicht, dass der Code unterhalb von 7744 Byte 
geblieben ist (um genau 5 Bytes) und ich meinen Bootloader für den STM8 
verwenden kann (anstelle eines STLINKv2).

@Roberto: Nachdem ich heute abend dann das hier eingestellt habe, werde 
ich definitiv nichts mehr an dem Interpreter machen wollen !

von Wf88 (wf88)


Lesenswert?

Ralph S. schrieb:
> Außerdem werde ich für den STM8 nicht mehr wirklich etwas machen, weil
> mir vor ca. einem halben Jahr jemand angezeigt hat, dass ST die
> STM8-Serie auf NRND (not recommended for new designs) gesetzt hat und
> die Serie wohl irgendwann auslaufen wird.

Ja, sehr schade. Sauberes Design, super Datenblätter und Manuals, 
günstig. Beim ersten Versuch, so einen STM8 in Betrieb zu nehmen ging 
das auf anhieb gut, das komplette Teil war echt einfach zu verstehen, 
wenn man schon andere Controller kennt.

Ich hab noch einige hier liegen, die werden noch "verbraten" und dann 
ist wohl Schluss...

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Ralph, okay, danke, denn du hast mir sehr geholfen und ich fange 
langsam an, etwas Neues zu lernen!
Vielen Dank auch für die neuesten Änderungen, die Sie veröffentlichen 
werden.

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

... so, hier nun meine "finale" Version des TBasic für den STM8. Ich 
denke nicht, dass ich den noch einmal wirklich anfassen werde, da der 
Speicherbedarf jetzt bei 7730 Bytes liegt. Ich verwende gerne meinen 
eigenen Bootloader beim STM8 und hier darf dann - da der Bootloader 
ebenfalls Speicherplatz benötigt - eine Dateigröße von 7744 Bytes nicht 
überschritten werden. Von daher ist nun wirklich kein Platz mehr für 
Erweiterungen.

@Andreas: Solltest du hier noch einmal lesen: Ein Dankeschön für deine 
Version des TBASIC. Auch wenn ich deine (schicken) Funktionspointer 
nicht übernommen habe, so hat mir die Lösung des Ansprechens der 
Portpins über struct und typedef gefallen (auf diese naheliegende Idee 
bin ich vor 6 Jahren nicht gekommen) und habe diese übernommen.

@Roberto: Die Syntax des Interpreters ist nun etwas ausführlicher 
geworden und nun in einem (halbwegs) saubereren PDF-File untergebracht. 
Wenn du dich an die Anleitungen darin hälst, solltest du zum einen keine 
Probleme mehr haben, so dein SDCC komplett installiert ist, den 
Interpreter zu übersetzen (wobei das gar nicht notwendig ist, da die 
.ihx Datei enthalten ist).

Implementierte Programmbefehle sind jetzt:

- ABS - ADC - BYTEOUT - DELAY - FOR  NEXT - FUNC - GOSUB  RETURN – IN 
- IF - INPUT – OUT - PRINT - RND

Kommandobefehle im Terminalmodus:

- LIST - LOAD - NEW - SAVE - SIZE - RUN

Und last but not least: Die Autoloadfunktion beim anlegen der 
Betriebsspannung an den Controller

Viel Spaß damit und see you here again in six years ! :-)

Ralph

von Philipp Klaus K. (pkk)


Lesenswert?

Ralph S. schrieb:
> ... so, hier nun meine "finale" Version des TBasic für den STM8. Ich
> denke nicht, dass ich den noch einmal wirklich anfassen werde, da der
> Speicherbedarf jetzt bei 7730 Bytes liegt.

Ich habe die .zip entpackt, dann per "make -j 8" in basict kompiliert. 
Auf einem Debian GNU/Linux, mit aktuellem sdcc aus svn trunk (entspricht 
etwa SDCC 4.4.0 RC2):

~~~~
 ------ Programm build sucessfull -----

Device   : stm8s103f3 / Flashsize: 8192 bytes
Program  : at address 0x8000 7236 Bytes (88.3% full)
~~~~

Wenn ich in makefile.mk noch ein "--max-allocs-per-node 100000" einfüge, 
um stärker zu optimieren, erhalte ich (bei deutlich längerer 
Kompilierzeit):

~~~~
 ------ Programm build sucessfull -----

Device   : stm8s103f3 / Flashsize: 8192 bytes
Program  : at address 0x8000 7100 Bytes (86.7% full)
~~~~

von Ralph S. (jjflash)


Lesenswert?

Philipp Klaus K. schrieb:
> ------ Programm build sucessfull -----
>
> Device   : stm8s103f3 / Flashsize: 8192 bytes
> Program  : at address 0x8000 7236 Bytes (88.3% full)
> ~~~~
>
> Wenn ich in makefile.mk noch ein "--max-allocs-per-node 100000" einfüge,
> um stärker zu optimieren, erhalte ich (bei deutlich längerer
> Kompilierzeit):
>
> ~~~~
>  ------ Programm build sucessfull -----
>
> Device   : stm8s103f3 / Flashsize: 8192 bytes
> Program  : at address 0x8000 7100 Bytes (86.7% full)
> ~~~~

:-) und führe mich nicht in Versuchung, denn dein ist der Code und die 
Codegröße und das Programm... und gib mir mehr Speicher so auch ich dir 
dann mehr Programm gebe!

Oder so ähnlich. Der Speicherplatzgewinn ist dann doch signifikant, so 
dass dann evtl. eben doch noch einige Funktionen implementiert werden 
könnten.

von Roberto C N. (robycamusso)


Lesenswert?

Hallo Ralph, vielen Dank für die großartige Arbeit, die Sie an diesem 
Dolmetscher geleistet haben, ein wahrer Profi! Ich bin Hobbybastler, 
mein Beruf ist Elektriker und es wäre wirklich schwierig für mich 
gewesen, einen solchen Job gut zu machen!
1999 hatte ich einen Interpreter für PIC16c54 namens LASI54 entwickelt, 
der einen seriellen Speicher verwendet, um den Interpretercode mit 10 
Anweisungen und 8 Operanden zu speichern, ein schönes Projekt, das ich 
in meinen Schalttafeln angewendet habe, ich möchte es für Sie zur 
Analyse veröffentlichen , es ist ganz einfach von einem Elektriker 
gemacht! :) :)
Danke bis bald!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.