Wie kompiliert man MicroPython vom Quellcode selbst?

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Okay Dankeschön.

Ich bin da sehr leichtsinnig hingegangen, ich dachte das Schwerste für mich wird der Schaltplan sein. An einen Regler hatte ich nicht mal im Ansatz gedacht.

Naja jetzt schaue ich mal was ich für eine Gewichtung mit dem geänderten Zeitinterval bekomme und wie sich der Regler damit verhält.

Viele Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend (ja könnte man schon fast so sagen),

heute habe ich die Positionen mit den verschiedenen Zeitintervallen im open loop aufgenommen:
Position und die Zeit bei 0,02s
Position und die Zeit bis 0,04s

Dann habe ich mal mit den Regler bei unterschiedlichen Intervallen versucht und verglichen. Mal als Beispiel die unterschiedlichen Diagramme, bei gleicher Regeleinstellung mit unterschiedlichen Diagrammen:
Intervall 0,01s
Intervall 0,02s
Intervall 0,02s

Das beste Ergebnis das ich heute erzielen konnte war mit folgenden Daten:

Code: Alles auswählen

Kp = 0.8
Ki = 0,00000000000000000002
Kd = 0,000000000000000001

Beschleunigung = 45
Konstant = 360
Bremsen = 45

Intervall= 0,04
Das Ergebnis

Durchweg habe ich immer das Problem, dass der Ist-Wert Richtung "Ende" immer stärker mit schwingen anfängt. In den Anleitungen steht, man soll ein gleichmäßiges ozillieren einstellen, dass dann mit Ki reduzieren und das Überschschiessen dass dabei entsteht mit Kd in den Griff kriegen. Wenn ich Ki vergrößere bekomme ich zwar das Problem mit der Beschleunigung hin, aber der Motor dreht dann wie verrückt vor und zurück. Und Kp kann ich dafür nicht vergrößern, sonst past das oszillieren gar nicht mehr.
Ich kann jetzt schlecht einschätzen ob dass an der geringen Auflösung, dem dadurch zu großen Messintervall oder obs an mir liegt.

Auf dem Diagramm der bisher besten Regeleinstellung sieht man eine kurze Zeit nach der Beschleunigung nur eine geringe Abweichung von Soll- und Ist, wenn ich mir aber die drehende Abtriebswelle des Getriebemotors anschaue, dann sehe ich ohne große Anstrengung einen sehr unrunden Lauf.

Viele Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nach meinem Verständnis sollte Kd ja auch negativ sein. Es soll ja dämpfen.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Das negative Vorzeichen habe ich im Code eingebaut, hier der Auszug daraus:

Code: Alles auswählen

class WeldingControl:
    def __init__(self):
        encoder = PCNT(0, Pin(ENCODER_PINS[1]), Pin(ENCODER_PINS[0]))
        encoder.filter(100)
        self.count_angle = LargeCounter(encoder)
        self.welding_axis = MCPWM(0)
        self.welding_axis.bind(Pin(PWM_PINS[0][0]), Pin(PWM_PINS[0][1]))
        self.welding_axis.duty(0)
        self.path = PathPlanner(45, 180, 45, 0.1)
        self.pid = PID(KP, KI, -KD)
       ...
Nach dem du mir das letzte mal gesagt hattest, dass der Wert negativ sein, habe ich gedacht, das baue ich fest ein und vermeide dadurch das ich es vergesse und mich über falsche Ergebnisse wundere.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gute Idee. Was die eigentliche Frage angeht: ich habe da keine abschließende Antwort drauf. Ich denke ich liege richtig mit meiner Vermutung, dass du zu wenig Schritte hast. Und die zeitliche Auflösung zu verringern, kostet. Irgendwann kann man nicht mehr schnell genug reagieren. Meine Renn-Kopter regeln 4000 mal pro Sekunde.

Wenn es für dich darstellbar ist ( du willst ja eh untersetzen), kannst du mal probieren den Encoder an eine Übersetzung zu montieren.

Und dann würde ich mal auf konstante Geschwindigkeit regeln, und schauen, wie gut das geht. Auch wenn man den Motor mal einbremst, mit der Hand.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

danke für deine Antwort.

Dann lohnt es sich auch mal zu überlegen, ob man anstatt der Energie und dem Geld das man in eine Übersetzung steckt, vielleicht nicht lieber gleich einen passenden Encoder kaufen sollte.
Ich denke ich habe jetzt auch genügend Daten und gebe das mal so weiter. Ich kann leider nicht entscheiden, was noch gekauft wird, ich kann nur bestmöglich überzeugen :D
Bis mechanisch mal alles steht und ich eventuell Versuche mit der Übersetzung oder einem anderen Encoder machen kann, kümmere ich mich weiter um das Hauptprogramm, dass nachher alles ansteuert und die Bedieneingaben entgegen nimmt.


Vielen lieben Dank nochmal! Das war wirklich sehr lehrreich und auch echt interessant bis hier her.

Viele Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich dachte halt die Untersetzung ist ja eh geplant, also kannst du auch die Komponenten kurz zweckentfremden, ohne extra Kosten. Aber klar, du kannst auch einfach einen besseren Encoder kaufen. Oder ein Schneckengetriebe mit einem Motor, der encoder-faehig ist, oder den schon hat.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Ja das wäre zum testen eventuell eine Möglichkeit.

Egal in welche Richtung es weiter geht, du wirst auf jeden Fall Bescheid kriegen. 🙂


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen zusammen,

ich nutze diesen Thread mal weiter, weil mein Problem einigermaßen gut zur Überschrift passt.
Ich habe einen ESP8266 und ein Display mit ST7789 Controller hier. Auf Github habe ich eine Bibliothek für das Display gefunden, die allerdings in C geschrieben ist. Also muss ich laut Anleitung MicroPython wieder kompilieren und dabei die Bibliothek einbinden.

Mein erster Versuch MicroPython ohne die Bibliothek zu kompilieren war erfolgreich. Ich habe mich an die Anleitung gehalten und habe unter Fedora Docker genutzt (Docker wird ja empfohlen).

Bei meinem Versuch die Bibliothek für das Display einzubinden habe ich alle Schritte wiederholt und habe den make-Befehl wie folgt abgeändert:

Code: Alles auswählen

docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -j BOARD=GENERIC USER_C_MODULES=/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/ all
Jetzt kommt leider eine lange Liste an Fehlermeldungen, die mir nicht viel sagen und ich hoffe ihr könnt mir weiter helfen.

Code: Alles auswählen

[dennis@dennis esp8266]$ sudo docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -j BOARD=GENERIC USER_C_MODULES=/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/ all
[sudo] Passwort für dennis: 
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
Including User C Module from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy//st7789
mkdir -p build-GENERIC/st7789/
CC /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:495:19: error: 'MP_QSTR_blit_buffer' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_blit_buffer), MP_ROM_PTR(&st7789_ST7789_blit_buffer_obj) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:495:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_blit_buffer), MP_ROM_PTR(&st7789_ST7789_blit_buffer_obj) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:509:13: error: 'MP_QSTR_ST7789' undeclared here (not in a function)
     .name = MP_QSTR_ST7789,
             ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:509:5: error: initializer element is not constant
     .name = MP_QSTR_ST7789,
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:509:5: error: (near initialization for 'st7789_ST7789_type.name')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c: In function 'st7789_ST7789_make_new':
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:524:11: error: 'MP_QSTR_spi' undeclared (first use in this function)
         { MP_QSTR_spi, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_OBJ_NULL} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:524:11: note: each undeclared identifier is reported only once for each function it appears in
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:524:9: error: initializer element is not constant
         { MP_QSTR_spi, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_OBJ_NULL} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:524:9: error: (near initialization for 'allowed_args[0].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:525:11: error: 'MP_QSTR_width' undeclared (first use in this function)
         { MP_QSTR_width, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 0} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:525:9: error: initializer element is not constant
         { MP_QSTR_width, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 0} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:525:9: error: (near initialization for 'allowed_args[1].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:526:11: error: 'MP_QSTR_height' undeclared (first use in this function)
         { MP_QSTR_height, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 0} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:526:9: error: initializer element is not constant
         { MP_QSTR_height, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 0} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:526:9: error: (near initialization for 'allowed_args[2].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:528:11: error: 'MP_QSTR_dc' undeclared (first use in this function)
         { MP_QSTR_dc, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:528:9: error: initializer element is not constant
         { MP_QSTR_dc, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:528:9: error: (near initialization for 'allowed_args[4].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:529:11: error: 'MP_QSTR_cs' undeclared (first use in this function)
         { MP_QSTR_cs, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:529:9: error: initializer element is not constant
         { MP_QSTR_cs, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:529:9: error: (near initialization for 'allowed_args[5].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:530:11: error: 'MP_QSTR_backlight' undeclared (first use in this function)
         { MP_QSTR_backlight, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:530:9: error: initializer element is not constant
         { MP_QSTR_backlight, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:530:9: error: (near initialization for 'allowed_args[6].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:531:11: error: 'MP_QSTR_xstart' undeclared (first use in this function)
         { MP_QSTR_xstart, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:531:9: error: initializer element is not constant
         { MP_QSTR_xstart, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:531:9: error: (near initialization for 'allowed_args[7].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:532:11: error: 'MP_QSTR_ystart' undeclared (first use in this function)
         { MP_QSTR_ystart, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:532:9: error: initializer element is not constant
         { MP_QSTR_ystart, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:532:9: error: (near initialization for 'allowed_args[8].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c: In function 'st7789_map_bitarray_to_rgb565':
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:620:11: error: 'MP_QSTR_bitarray' undeclared (first use in this function)
         { MP_QSTR_bitarray, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_OBJ_NULL} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:620:9: error: initializer element is not constant
         { MP_QSTR_bitarray, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_OBJ_NULL} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:620:9: error: (near initialization for 'allowed_args[0].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:622:11: error: 'MP_QSTR_width' undeclared (first use in this function)
         { MP_QSTR_width, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = -1} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:622:9: error: initializer element is not constant
         { MP_QSTR_width, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = -1} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:622:9: error: (near initialization for 'allowed_args[2].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:623:11: error: 'MP_QSTR_color' undeclared (first use in this function)
         { MP_QSTR_color, MP_ARG_INT, {.u_int = WHITE} },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:623:9: error: initializer element is not constant
         { MP_QSTR_color, MP_ARG_INT, {.u_int = WHITE} },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:623:9: error: (near initialization for 'allowed_args[3].qst')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:624:11: error: 'MP_QSTR_bg_color' undeclared (first use in this function)
         { MP_QSTR_bg_color, MP_ARG_INT, {.u_int = BLACK } },
           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:624:9: error: initializer element is not constant
         { MP_QSTR_bg_color, MP_ARG_INT, {.u_int = BLACK } },
         ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:624:9: error: (near initialization for 'allowed_args[4].qst')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c: At top level:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:645:54: error: 'MP_QSTR_st7789' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_st7789) },
                                                      ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:645:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_st7789) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:645:5: error: (near initialization for 'st7789_module_globals_table[0].value')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:646:19: error: 'MP_QSTR_color565' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_color565), (mp_obj_t)&st7789_color565_obj },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:646:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_color565), (mp_obj_t)&st7789_color565_obj },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:646:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_color565), (mp_obj_t)&st7789_color565_obj },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:646:5: error: (near initialization for 'st7789_module_globals_table[1].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:647:19: error: 'MP_QSTR_map_bitarray_to_rgb565' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_map_bitarray_to_rgb565), (mp_obj_t)&st7789_map_bitarray_to_rgb565_obj },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:647:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_map_bitarray_to_rgb565), (mp_obj_t)&st7789_map_bitarray_to_rgb565_obj },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:647:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_map_bitarray_to_rgb565), (mp_obj_t)&st7789_map_bitarray_to_rgb565_obj },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:647:5: error: (near initialization for 'st7789_module_globals_table[2].key')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:648:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_ST7789), (mp_obj_t)&st7789_ST7789_type },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:648:5: error: (near initialization for 'st7789_module_globals_table[3].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:649:19: error: 'MP_QSTR_BLACK' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_BLACK), MP_ROM_INT(BLACK) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:649:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_BLACK), MP_ROM_INT(BLACK) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:649:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_BLACK), MP_ROM_INT(BLACK) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:649:5: error: (near initialization for 'st7789_module_globals_table[4].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:650:19: error: 'MP_QSTR_BLUE' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_BLUE), MP_ROM_INT(BLUE) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:650:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_BLUE), MP_ROM_INT(BLUE) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:650:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_BLUE), MP_ROM_INT(BLUE) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:650:5: error: (near initialization for 'st7789_module_globals_table[5].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:651:19: error: 'MP_QSTR_RED' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_RED), MP_ROM_INT(RED) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:651:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_RED), MP_ROM_INT(RED) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:651:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_RED), MP_ROM_INT(RED) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:651:5: error: (near initialization for 'st7789_module_globals_table[6].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:652:19: error: 'MP_QSTR_GREEN' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_GREEN), MP_ROM_INT(GREEN) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:652:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_GREEN), MP_ROM_INT(GREEN) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:652:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_GREEN), MP_ROM_INT(GREEN) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:652:5: error: (near initialization for 'st7789_module_globals_table[7].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:653:19: error: 'MP_QSTR_CYAN' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_CYAN), MP_ROM_INT(CYAN) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:653:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_CYAN), MP_ROM_INT(CYAN) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:653:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_CYAN), MP_ROM_INT(CYAN) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:653:5: error: (near initialization for 'st7789_module_globals_table[8].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:654:19: error: 'MP_QSTR_MAGENTA' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_MAGENTA), MP_ROM_INT(MAGENTA) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:654:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_MAGENTA), MP_ROM_INT(MAGENTA) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:654:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_MAGENTA), MP_ROM_INT(MAGENTA) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:654:5: error: (near initialization for 'st7789_module_globals_table[9].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:655:19: error: 'MP_QSTR_YELLOW' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_YELLOW), MP_ROM_INT(YELLOW) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:655:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_YELLOW), MP_ROM_INT(YELLOW) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:655:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_YELLOW), MP_ROM_INT(YELLOW) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:655:5: error: (near initialization for 'st7789_module_globals_table[10].key')
In file included from /home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:27:0:
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:656:19: error: 'MP_QSTR_WHITE' undeclared here (not in a function)
     { MP_ROM_QSTR(MP_QSTR_WHITE), MP_ROM_INT(WHITE) },
                   ^
../../py/obj.h:214:56: note: in definition of macro 'MP_OBJ_NEW_QSTR'
 #define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 4) | 0x00000006))
                                                        ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:656:7: note: in expansion of macro 'MP_ROM_QSTR'
     { MP_ROM_QSTR(MP_QSTR_WHITE), MP_ROM_INT(WHITE) },
       ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:656:5: error: initializer element is not constant
     { MP_ROM_QSTR(MP_QSTR_WHITE), MP_ROM_INT(WHITE) },
     ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:656:5: error: (near initialization for 'st7789_module_globals_table[11].key')
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:666:75: error: macro "MP_REGISTER_MODULE" passed 3 arguments, but takes just 2
 MP_REGISTER_MODULE(MP_QSTR_st7789, mp_module_st7789, MODULE_ST7789_ENABLED);
                                                                           ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:666:1: error: data definition has no type or storage class [-Werror]
 MP_REGISTER_MODULE(MP_QSTR_st7789, mp_module_st7789, MODULE_ST7789_ENABLED);
 ^
/home/dennis/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/st7789.c:666:1: error: type defaults to 'int' in declaration of 'MP_REGISTER_MODULE' [-Werror]
cc1: all warnings being treated as errors
make: *** [../../py/mkrules.mk:80: build-GENERIC/st7789/st7789.o] Error 1
make: *** Waiting for unfinished jobs....
[dennis@dennis esp8266]$ 
Kann es sein das mit der C-Datei was nicht stimmt?In der Fehlermeldung steht was "undeklariert". Das GitHub ist zwei Jahre alt und viele Issues sind auch nicht vorhanden, da bin ich davon ausgegangen dass das bestimmt funktioniert. (und der Fehler vermulich wieder vor dem PC sitzt)

Vielen Dank schon ein mal vorab.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ich habe nochmals von vorne begonnen und auch den make-Aufruf etwas abgeändert:

Code: Alles auswählen

sudo docker run --rm -v $HOME:$HOME -u $UID -w $PWD larsks/esp-open-sdk make -j USER_C_MODULES=$HOME/Dokumente/MicroPython_ST7789/st7789_mpy/st7789/micropython.cmake all V=1
Die FIrmeware wurde gebaut, lässt sich auf den ESP8622 flashen, aber wie soll es auch anders sein:

Code: Alles auswählen

import st7789
ergibt

Code: Alles auswählen

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: no module named 'st7789'
Das Problem wurde in GitHub auch schon veröffentlicht, aber ohne Lösung.
mit 'help('modules') finde ich es auch nicht.

Kann ich da irgendwie danach suchen? Vielleicht steckt das in 'esp' oder so drin. Habe 'esp', 'machine' und 'micropython' schon manuell probiert, leider ohne Erfolg.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das wird nicht irgendwo einsortiert. Das hat dann leider irgendwie nicht geklappt. Bist du sicher, dass du den Pfad zum cmake file angeben musst? Nicht nur das Verzeichnis?

Ich würde ansonsten die Moduldateien in den esp Port reinkopieren, und da dann in das makefile dazu packen. So, wie das mit dem PCNT auch passiert ist.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

danke für deine Antwort.

In

Code: Alles auswählen

$HOME/st7789_mpy/st7789
liegt micropython.cmake, micropython.mk, st7789.c und st7789.h
Wenn ich diesen Pfad angebe, dann ist das Ergebnis das Gleiche wie wenn ich direkt die makefile angeben. Also zumindest wird MicroPython erstellt, aber st7789 ist nicht dabei.
Wenn ich eine Struktur höher gehe und diesen Pfad angeben

Code: Alles auswählen

$HOME/st7789_mpy
dann wird der "Bau" gestartet ich sehe auch im Terminal dass Verzeichnisse mit st7789 erstellt werden, dann bricht das aber leider mit einer Fehlermeldung ab:

Code: Alles auswählen

ERROR: Call to MP_REGISTER_MODULE(MP_QSTR_st7789, mp_module_st7789, 1) should be MP_REGISTER_MODULE(MP_QSTR_st7789, mp_module_st7789)

make: *** [../../py/py.mk:219: build-GENERIC/genhdr/moduledefs.h] Error 1
make: *** [Deleting file 'build-GENERIC/genhdr/moduledefs.h'
make: *** Waiting for unfinished jobs....
Moduldateien sind dann 'st7789.c' und 'st7789.h'?
Das versuche ich jetzt gleich mal.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja, das sind die Moduldateien. Was die Fehlermeldungen angeht: die sind sehr spezifisch für MP, dieser QSTR-Mechanismus ist eine Build System Magie, um da effiziente Bezeichner zu bekommen. Kann auch gut sein, dass es eine bestimme Version von MP braucht.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Okay ich habe die Dateien in '.../ports/esp8266' kopiert und in der Makefile habe ich in dem Abschnitt

Code: Alles auswählen

SRC_C = \
...
st7789.c \
hinzugefügt.

So habe ich das bei dir mit 'esp32_pcnt.c' abgeschaut. Dann habe ich den make-Befehl verwendet, mit dem ich das Standard MicroPython problemlos bauen konnte. Der Vorgang endet wieder im gleichen Fehler.

Es müsste ja sicherlich irgendwo noch den Quellcode einer alten MicroPython version geben? Danach mache ich mich jetzt mal auf die Suche.

Wegen der Angabe zu cmake-File, darauf bin ich durch diese Kommentare gestoßen:
https://github.com/devbis/st7789_mpy/issues/21

Grüße und Danke
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Bezog sich aber auf einen fork, in dem diese Datei existiert.

Statt micropython zu ändern, würde ich eher den Code Portieren. Also anschauen, was die da anders machen als im PCNT Modul. Oder einfach unter Angabe aller Informationen einen Bug filen. Allerdings scheinen die nicht mehr sonderlich aktiv.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jetzt wo ich nicht mehr am iPhone sitze: die Fehlermeldung sagt ja eigentlich, was du probieren sollst. Hast du das mal gemacht?
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Jetzt habe ich deine erste Nachricht zu spät gesehen, hatte versucht MicroPython v1.13 zu bauen, das hat nicht geklappt. Darauf will ich auch nicht weiters eingehen, dein Vorschlag hört sich sinnvoller an.
Damit ich dich richtig verstehe, ich soll st7789.c mit deiner esp32_pcnt.c vergleichen?

Ich hatte das bis gerade noch nicht gemacht, ich dachte nicht, dass die Zeile tatsächlich so in st7789.c steht. Ich habe sie geändert, also die 1 weggelassen und bekomme leider wieder Fehlermeldungen.
Aktuelle MicroPython Version, egal ob ich die Moduldateien direkt in den esp8266 Ordner kopiere und die Makefile anpasse oder ob ich die Dateien in einem anderen Ordner lasse und auf das Verzeichnis verweise, ich erhalte diese Meldung:

Code: Alles auswählen

xtensa-lx106-elf-ld: build-GENERIC/firmware.elf section `.text' will not fit in region `iram1_0_seg'
xtensa-lx106-elf-ld: region `iram1_0_seg' overflowed by 1304 bytes
make: *** [Makefile:221: build-GENERIC/firmware.elf] Error 1
Irgendwas läuft wohl voll, habe ich jetzt ein Speicherplatzproblem?

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das klingt so, als ob da zu viel code produziert wird. Ggf. kannst du https://forum.micropython.org/viewtopic.php?t=6261 folgen. Und auch einmal das PCNT-Modul aus dem Makefile nehmen, um zu schauen, ob du nur das Display zum laufen bekommst.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Ich schaue mir den Link heute Mittag an und melde mich wieder. Bin jetzt kurz weg vom PC.

Aber noch kurz, das PCNT Modul ist ja für den esp32. Ich versuche das Display auf einem esp8266 zum laufen zu bekommen. Die MicroPython Version ist auch nicht aus deinem Git sondern aus dem offiziellen.

Vielen Dank und bis später
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist natuerlich etwas aergerlich, weil es befuerchten laesst, dass man einfach die Menge an Code, die der vertraegt, ueberschritten hat. Ggf musst du andere Module, die nicht wichtig sind, deaktivieren. Oder versuchen, das Linker-Script zu tunen. Welche exakte MP version benutzt du?
Antworten