Forum: Projekte & Code MMBasic auf dem STM32F746 Discovery


von Uwe B. (derexponent)


Angehängte Dateien:

Lesenswert?

Hi,

wollte hier nur eine Info hinterlassen,
für all diejenige, die Spass an Basic Interpretern/Editoren haben.

ich (und Fabrice) sind gerade dabei den MMBasic-Interpreter
von Geoff Graham auf dem STM32F746 zu portieren.

Am Ende soll alles komplett autark auf dem Board laufen,
mit USB-Tastatur und Fullscreen-Editor.

Im Moment ist es noch eine Alpha die per VCP
über ein Terminal bedient werden muss
aber alle Basic-Grundbefehle funktionieren
und die Grafik-Befehle (Line,Circle,Ellipse,Triangle usw)
werden auf dem 4,3Zoll LCD angezeigt.

Als Speichermedium kann eine uSD-Karte oder ein USB-Stick
benutzt werden (wobei der USB-Stick bei mir noch etwas buggy ist)

Zur Eingabe kann auch eine USB-Tastatur angeschlossen werden.

Hier der Link zur Projektseite (Alpha Tester werden noch gesucht :-)
http://mikrocontroller.bplaced.net/wordpress/?page_id=5487

Gruss Uwe

: Bearbeitet durch User
von Uwe B. (derexponent)


Lesenswert?

auch wenn die Resonanz=0 ist :-)

hier ein 15sek "kurzes" Grafik-Demo
zum aktuellen Stand nach einem Monat :

https://youtu.be/5g3-ztufoNM

und das Basic-Programm dazu :

1
Option usb off
2
3
nbsprite = 20
4
Dim sprx(nbsprite)
5
Dim spry(nbsprite)
6
Dim sprdir(nbsprite)
7
Dim actspr(nbsprite)
8
dirLstart = 0
9
dirLstop = 13
10
dirRstart = 14
11
dirRstop = 27
12
cnt = 0
13
x = 0
14
y = 0
15
r = 150
16
17
raddeg = 3.14159 / 180
18
19
For a = 1 To nbsprite
20
  sprx(a) = (IntRnd Mod 400) + 20
21
  spry(a) = (IntRnd Mod 200) + 20
22
  If (IntRnd Mod 40) > 20 Then
23
    sprdir(a) = 1
24
    actspr(a) = dirRstart
25
  Else
26
    sprdir(a) = 0
27
    actspr(a) = dirLstart
28
  EndIf
29
Next a
30
31
SetLayer 0
32
Cls 0
33
SetLayer 1
34
Cls 0
35
SetLayer 0
36
ShowLayer 0
37
ActL = 0
38
Drive "b:"
39
Sprite Load "turri.bin"
40
Map Load "sunny.map"
41
42
Do
43
44
For a = 1 To nbsprite
45
 If sprdir(a) = 1 Then
46
  sprx(a) = sprx(a) + 2
47
  If sprx(a) >= MM.HRes Then
48
    sprdir(a) = 0
49
    actspr(a) = dirLstart
50
  Else
51
    actspr(a) = actspr(a) + 1
52
    If actspr(a) > dirRstop Then
53
      actspr(a) = dirRstart
54
    EndIf
55
  EndIf
56
 Else
57
  sprx(a) = sprx(a) - 2
58
  If sprx(a) <= 0 Then
59
    sprdir(a) = 1
60
    actspr(a) = dirRstart
61
  Else
62
    actspr(a) = actspr(a) + 1
63
    If actspr(a) > dirLstop Then
64
      actspr(a) = dirLstart
65
    EndIf
66
  EndIf
67
 EndIf
68
 Sprite set actspr(a),a
69
Next a
70
71
x = Int(Cos(cnt * raddeg) * r) - 150
72
y = Int(Sin(cnt * raddeg) * r) - 150
73
74
If ActL = 0 Then
75
 SetLayer 1
76
 Cls 0
77
 Map On 0,0,800,600,x,y,0,0
78
 For a = 1 To nbsprite
79
   Sprite on a,sprx(a),spry(a)
80
 Next a
81
 ShowLayer 1
82
 ActL = 1
83
Else
84
 SetLayer 0
85
 Cls 0
86
 Map On 0,0,800,600,x,y,0,0
87
 For a = 1 To nbsprite
88
   Sprite on a,sprx(a),spry(a)
89
 Next a
90
 ShowLayer 0
91
 ActL = 0
92
EndIf
93
94
cnt = cnt + 2
95
If cnt > 359 Then
96
 cnt = 0
97
EndIf
98
99
100
key=KeyDown
101
102
Loop

von Walter T. (nicolas)


Lesenswert?

Uwe B. schrieb:
> auch wenn die Resonanz=0 ist :-)

Basic auf dem µC hat vermutlich eine eher kleine Gemeinde. Von der jedes 
Mitglied auch noch einen eigenen Basic-Interpreter auf seinen µC 
gebracht hat. Also quasi eine Gemeinde, in der jeder predigt und keiner 
zuhört.

Aber die Grafik-Funktionen sehen gut gelungen aus. Hut ab!

Uwe B. schrieb:
> Sprite Load "turri.bin"

Ich hab's geahnt :-)

von m.n. (Gast)


Lesenswert?

Walter T. schrieb:
> Uwe B. schrieb:
>> auch wenn die Resonanz=0 ist :-)
>
> Basic auf dem µC hat vermutlich eine eher kleine Gemeinde.

Bei mir wäre ja Resonanz vorhanden, zumal ich die Grundfunktionen schon 
auf einen ..F407 portiert hatte. Es sollte eine kleine, feine 
Ein-Chip-Lösung werden, die wie das Original (Colour Maximite) ein 
4,3"-TFT mit einfacher Farbdarstellung und vielen Schnittstellen bietet. 
Für einen stand-alone-Rechner für eigene Anwendungen, dessen Programm im 
Zielsystem programmiert werden kann und trotz BASIC noch recht schnell 
arbeitet, konnte ich mir eine Zielgruppe vorstellen. Die Resonanz lag 
auch bei <= 0 ;-)

ABER: für meine Begriffe ist das ..F746-Discovery-Board nicht dafür 
geeignet, MMBASIC sinnvoll zu implementieren. Es fehlen die vielen 
IO-Pins und fertigen Schnittstellen (angefangen bei RS232), die es 
universell verwendbar machen würden. Irgendwelche Grafikspielereien oder 
bunte Bilder bekommt man man einem RPi sicherlich noch besser gebacken.

Ich denke, daß Du erst dann Resonanz bekommen wirst, wenn Du eine 
angepaßte, gebrauchstfertige Hardware anbietest. Dabei darf diese aber 
nicht mehr als € 20 kosten (inkl. TFT natürlich ;-). So sind die Leute 
leider gepolt!

von Uwe B. (derexponent)


Lesenswert?

Walter T. schrieb:
>
> Aber die Grafik-Funktionen sehen gut gelungen aus. Hut ab!
>

bedank dich bei Fabrice (ab und zu im Forum unterwegs)
der kümmert sich um die Grafik, ich um den Rest.

m.n. schrieb:
> Es fehlen die vielen
> IO-Pins und fertigen Schnittstellen (angefangen bei RS232), die es
> universell verwendbar machen würden.

das F746-Disco Board hat 22 freie IO-Pins auf 2,54mm Steckverbinder
(im Arduino Format) das sollte reichen.

Da liegen auch RS232, I2C, SPI und Analoge Pins drauf

Digital-IO funktioinert auch schon aber das MMBasic
vom Maximite ist sehr umfangreich und es dauert
bis ich das alles umgestrickt habe.

Und 50 EUR für das Board ist ein TOP Preis, den man
durch selberbauen niemals erreichen kann.

Aber schön das es doch ein paar Leute gibt die das Thema verfolgen.

Gruss Uwe

von e-d (Gast)


Lesenswert?

Eine OT-Frage an UWE:
- das Discovery F407 stellte bei >3 DMA(FSMC;SDIO;DCMI) weitere Zugriffe 
darauf ein.
Ist das jetzt, beim F746 Discovery, gelöst?

von Uwe B. (derexponent)


Lesenswert?

e-d schrieb:
> Eine OT-Frage an UWE:
> - das Discovery F407 stellte bei >3 DMA(FSMC;SDIO;DCMI) weitere Zugriffe
> darauf ein.
> Ist das jetzt, beim F746 Discovery, gelöst?

uhhh, keine Ahnung...hab ich noch nicht ausprobiert
und auch nichts im Errata-Sheet darüber gelesen.

aber für das Display ist jetzt ein TFT-Controller
mit unabhängigem DMA vorhanden, das entspannt einige Dinge.

von e-d (Gast)


Lesenswert?

Ja, wäre aber interessant! Dann würde ich auch weitermachen dort, wo ich 
damals frustriert aufgeben musste:
'Ein sainsmart 3,4" Display zeigt Vorschaubild von OV??? - Kamera und 
speichert bei Interupt(verkürztes SPI auf Touch-IC) durch "Touch" das 
Bild auf SD-Card ab.'
Irgentwie lies sich DCMI nicht stoppen.
Ist schon seeehr lange her ..

von m.n. (Gast)


Lesenswert?

Uwe B. schrieb:
> m.n. schrieb:
>> Es fehlen die vielen
>> IO-Pins und fertigen Schnittstellen (angefangen bei RS232), die es
>> universell verwendbar machen würden.
>
> das F746-Disco Board hat 22 freie IO-Pins auf 2,54mm Steckverbinder
> (im Arduino Format) das sollte reichen

Das sehe ich anders. 22 Pins klingt viel, bezogen auf diesen µC und 
dessen Leistungsfähigkeit sind das aber nur irgendwelche Port-Krümel. 
Der eigentliche Kuchen ist ganz woanders gegessen worden.
Ich würde zumindest die Pins eines Timers 1 oder 8 erwarten, oder ein 
paar zusammenhängende Pins eines Ports, wie es beim ursprünglichen 
Arduino 328 der Fall ist.
Wer zum Beispiel 'nur' einen BLDC-Motor ansteuern möchte, hat schon 
Tränen in den Augen. Batteriepufferung von RTC und internem RAM? 
Fehlanzeige.
Das paßt Alles nicht zusammen!

Oder ich frage einfach einmal: Was soll man denn mit sowenig µC-Pins 
überhaupt anstellen? Eindraht Temperatursensor auslesen und bunt 
umrandet anzeigen? Das kann es doch nicht sein.

von Uwe B. (derexponent)


Lesenswert?

m.n. schrieb:
> Wer zum Beispiel 'nur' einen BLDC-Motor ansteuern möchte, hat schon
> Tränen in den Augen. Batteriepufferung von RTC und internem RAM?
> Fehlanzeige.
> Das paßt Alles nicht zusammen!

du schreibst das so, wie wenn es ein System gäbe das alle
möglichen Hardware Komponenten zu 100% ohne Software-/Hardwareaufwand
unterstützen würde

so ein System gibt es leider nicht und ich habe auch
nicht vor eines zu bauen

aber es bleibt dir unbenommen eines für deine Zwecke
zu entwerfen

Ich benutze das was ich als Hardware zur Verfügung habe
und komme bis jetzt sehr gut damit aus.

Und ich habe zwar nicht danach gesucht, könnte aber wetten
das es ein BLDC-Shield für den Arduino gibt.

Damit liegt es nur noch an der Softwareumsetzung für den F7
und wer dabei Tränen in die Augen bekommt, kauft sich halt
einen Arduino :-)

von m.n. (Gast)


Lesenswert?

Uwe B. schrieb:
> du schreibst das so, wie wenn es ein System gäbe das alle
> möglichen Hardware Komponenten zu 100% ohne Software-/Hardwareaufwand
> unterstützen würde

Das schreibe ich nicht!
Ich finde es nur schade, daß die viele Arbeit, die Du Dir machst, von 
der Hardware nicht adäquat unterstützt wird.

Es reicht eben nicht, irgendein Board auf den Arduino Steckplatz zu 
setzen und mit peek() und poke() anzusprechen. Und wenn man eine 
passende Funktion MMBASIC intern implementieren möchte, müßte man den 
PIC32-Quellcode erneut auf eigene Faust anpassen. Oder veröffentlichst 
Du die Quellen dazu? Darfst Du das überhaupt?

Und egal, welches Zusatzboard gesteckt wird, RTC und internes RAM werden 
nach wie vor nicht batteriegepuffert.

Uwe B. schrieb:
> Ich benutze das was ich als Hardware zur Verfügung habe
> und komme bis jetzt sehr gut damit aus.

Dann nenn doch bitte Beispiele, die die Leistung des µC und des Boards 
auch nur zu einem zweistelligen Prozentteil ausnutzen. Vielleicht finden 
sich dann mehr Interessenten für das Projekt.

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.