Lcd Display

Hallo liebes Joycar Team.


 


Meine Idee war es, das Joycar um ein Lcd Display zu erweitern.


 


Das Display soll quasi als Seriell Ausgabe dienen.


Um zu sehen welcher Teil vom Programm momentan ausgeführt wird. 


 


Das funktioniert soweit auch.


Sobald das PWM Signal für die Motoren ausgeführt wird, wird das Display allerdings überschrieben (Siehe beigefügtes Bild).


 


Gibt es eine Möglichkeit das zu beheben?


 


Mit freundlichen Grüßen.


Benutzername

29.05.23 09:36

Hallo,


gerne versuche ich dir hier weiterzuhelfen. 🙂


Welches Display genau verwendest du denn?


Liebe Grüße
Jens

Jens

30.05.23 08:37

Hallo nochmal. 


Ich verwende das LCD 1602 + I2C HD44780


Da ich erst an eine Buskollision dachte, hab ich den Slave über die A0 Brücke in in 0x26 geändert. Leider ohne Erfolg. 


Adresse auch belegt?


Welche Adressen sind noch freie?


Adressbereich vom Controller 0x20 bis 0x27.


Danke schon mal. 


Mit freundlichen Grüßen. 

Benutzername

30.05.23 10:40

Hallo,


vom Joy-Car werden lediglich die I2C-Adressen 0x70 (PWM Controller) und 0x38 (IO-Expander) verwendet. An einer Kollision sollte es also nicht liegen.


Programmierst du dein Joy-Car über MakeCode oder MicroPython? Welche Bibliothek verwendest du für das Display? Hast du ggf. die Möglichkeit das Display (und die Erweiterung) isoliert vom Joy-Car zu testen?


Liebe Grüße
Jens

Jens

30.05.23 15:50

Den Code habe ich über MakeCode erstellt. 


Ich könnte das Display noch über einen Arduino testen.


Ich glaube aber eher, das es dann am Joycar oder an den eingeschränkten Möglichkeiten der Programmierung über MakeCode liegt. Denn das Display funktioniert (Siehe Youtube ).


Ich musste am Anfang ein Emoji über's Display legen, weil da Name und Nummernschild vom Auto zu sehen sind. 😅


https://youtu.be/4CyRNfbcKpo


Liebe Grüße. 

Benutzername

30.05.23 16:47

 Hier noch der Code aus MakeCode.


def W_Blinker():
for index in range(5):
JoyCar.hazardlights(ToggleSwitch.ON)
basic.pause(500)
JoyCar.hazardlights(ToggleSwitch.ON)
basic.pause(500)
def Funktionstest():
global Durchlauf
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
basic.pause(1000)
makerbit.show_string_on_lcd1602("Licht",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
JoyCar.light(ToggleSwitch.ON)
basic.pause(5000)
JoyCar.light(ToggleSwitch.OFF)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Bremslicht",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
JoyCar.brakelight(ToggleSwitch.ON)
basic.pause(5000)
JoyCar.brakelight(ToggleSwitch.OFF)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Blinker #",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
Blinker_R()
JoyCar.indicator(ToggleSwitch.OFF, SensorLRSelection.RIGHT)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("# Blinker",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
Blinker_L()
JoyCar.indicator(ToggleSwitch.OFF, SensorLRSelection.LEFT)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("W Blinker",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
W_Blinker()
JoyCar.hazardlights(ToggleSwitch.OFF)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Rueckfahlicht",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
JoyCar.reversinglight(ToggleSwitch.ON)
basic.pause(5000)
JoyCar.reversinglight(ToggleSwitch.OFF)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Vor­wuarts",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
JoyCar.drive(FRDirection.FORWARD, 100)
basic.pause(5000)
JoyCar.stop(StopIntensity.SOFT)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Rückwuarts",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
JoyCar.drive(FRDirection.REVERSE, 100)
basic.pause(5000)
JoyCar.stop(StopIntensity.SOFT)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Servo",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
JoyCar.servo(1, 180)
basic.pause(2000)
JoyCar.servo(1, 0)
basic.pause(2000)
JoyCar.servo(1, 80)
basic.pause(1000)
makerbit.clear_lcd1602()
makerbit.show_string_on_lcd1602("Funktionstest",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Bremslicht",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
music.play_tone(988, music.beat(BeatFraction.WHOLE))
Durchlauf += 1
basic.show_number(Durchlauf)
basic.pause(4000)

def my_function():
I2C_LCD1602.backlight_on()
basic.pause(5000)
I2C_LCD1602.backlight_off()
buttonClicks.on_button_single_clicked(buttonClicks.AorB.A, my_function)

def Blinker_L():
for index2 in range(5):
JoyCar.indicator(ToggleSwitch.ON, SensorLRSelection.LEFT)
basic.pause(500)
JoyCar.indicator(ToggleSwitch.ON, SensorLRSelection.LEFT)
basic.pause(500)

def my_function2():
I2C_LCD1602.backlight_on()
buttonClicks.on_button_held(buttonClicks.AorB.A, my_function2)

def Blinker_R():
for index3 in range(5):
JoyCar.indicator(ToggleSwitch.ON, SensorLRSelection.RIGHT)
basic.pause(500)
JoyCar.indicator(ToggleSwitch.ON, SensorLRSelection.RIGHT)
basic.pause(500)
Durchlauf = 0
basic.show_number(Durchlauf)
strip = neopixel.create(DigitalPin.P0, 8, NeoPixelMode.RGB)
music.set_volume(0)
makerbit.connect_lcd(38)
I2C_LCD1602.backlight_on()
makerbit.show_string_on_lcd1602("10.000PS",
makerbit.position1602(LcdPosition1602.POS1),
16,
TextOption.ALIGN_CENTER)
makerbit.show_string_on_lcd1602("Koks Taxi",
makerbit.position1602(LcdPosition1602.POS17),
32,
TextOption.ALIGN_CENTER)
basic.pause(5000)

def on_forever():
Funktionstest()
basic.forever(on_forever)

Benutzername

30.05.23 17:00

Hallo,


verwendest du einen MicroBit V1 oder V2?


Das ist wirklich etwas seltsam. Prinzipiell funktioniert das Display ja problemlos, erst bei der Ansteuerung der Motoren treten die Probleme auf.


Du verwendest ja einige zusätzliche Bibliotheken (unter anderem auch 2 verschiedene Bibliotheken für das Display, warum nicht nur eine?). Eventuell würde ich hier noch einmal versuchen das Display isoliert mit dem JoyCar mit so wenig Bibliotheken wie möglich zu testen und ggf. auch einmal andere Bibliotheken zu testen.


Vielleicht lässt sich das Problem so ja noch weiter eingrenzen.


Liebe Grüße
Jens

Jens

31.05.23 10:00

Hallo nochmal,


ich habe das ganze gerade einmal nachgestellt mit einem JoyCar und einem unserer 16x2 Displays.


Ich habe dabei deinen Code auf die Standardadresse 0x27 angepasst und die folgende Funktion (an mehreren Stellen) angepasst, da das Display nur 16 Zeichen und keine 32 Zeichen pro Zeile darstellen kann:


makerbit.show_string_on_lcd1602("Koks Taxi",
makerbit.position1602(LcdPosition1602.POS17),
16,
TextOption.ALIGN_CENTER)

Danach hat das ganze ohne Probleme funktioniert. Kannst du dies, mit den Anpassungen, bei dir noch einmal gegenprüfen? 🙂


Liebe Grüße
Jens

Jens

31.05.23 10:31

Hallo Jens,


du schriebst "ich habe das ganze gerade einmal nachgestellt mit einem JoyCar und einem unserer 16x2 Displays"


Ich bin an diesem Display interessiert. Kannst man es bei euch erwerben?


Wie schließt man es an den JoyCar an?


Würdest du dann auch die passende Erweiterung dafür zur Verfügung stellen.


Danke und liebe Grüße


Thanh


 

Thanh

14.08.23 19:29

Hallo Thanh,


das Display, von dem ich gesprochen hatte, ist unser SBC-LCD16x2 Display und kann natürlich bei unseren Partnern erworben werden. 🙂


Das Joy-Car ist eigentlich nicht dafür vorgesehen gewesen noch zusätzlich mit einem derartigem Display ausgestattet zu werden. Es wäre hier also etwas Bastel-Eigenleistung nötig, um das Display am Joy-Car zu befestigen.


Für das Display haben wir gerade erst eine Bibliothek fertig entwickelt. Es wäre also kein Problem kurzfristig eine zusätzliche Displayerweiterung zu veröffentlichen. 🙂


Liebe Grüße
Jens

Jens

15.08.23 08:41

Deine Frage bezüglich des Anschlusses hatte ich noch übersehen.


Das Display könnte direkt an die 3,3 V, GND, SDA und SCL Anschlüsse auf dem Joy-Car Mainboard angeschlossen werden. 🙂


Liebe Grüße
Jens

Jens

15.08.23 08:43

Hallo Jens,


das Display habe ich gerade bestellt und möchte dich daher bitten zeitnah die erwähnte Displayerweiterung zu veröffentlichen.


Vielen Dank und liebe Grüße


Thanh

Thanh

15.08.23 16:26

Hallo Thanh,


kein Problem. 🙂


Ich habe soeben eine erste Version der Erweiterung erstellt. 


Es wird eine weile dauern, bis die Erweiterung von MakeCode überprüft und ich die Erweiterungssuche integriert wird. Bis dahin kannst du die Erweiterung aber problemlos über den GitHub-Link direkt hinzufügen.


Liebe Grüße
Jens

Jens

16.08.23 10:06

Hallo Jens,


habe diesen Link https://www.joy-it.net/products/SBC-LCD16x2 in der Erweiterung Suchmaske eingeben und diese Antwort "We couldn't find any extensions matching 'https://www.joy-it.net/products/SBC-LCD16x2 '" erhalten.


Was mache ich denn falsch? Bitte um Hilfe.


Danke und liebe Grüße


Thanh


 


 

Thanh

16.08.23 21:12

Hallo Thanh,


entschuldige das Missverständnis. Die Erweiterung ist dieser Link hier: https://github.com/joy-it/pxt-SBC-LCD16x2


Wenn du diesen in die Suchmaske eingibst, dann sollte er die Erweiterung korrekt hinzufügen. 🙂


Liebe Grüße
Jens

Jens

17.08.23 08:37

Hallo Jens,

es klappt jetzt mit der Portierung der Erweiterung.

 


Habe die Standardadresse 0x27 gleich gelassen oder muss ich auf eine andere Adresse umstellen ?

Habe nachgeprüft, Anschlüsse SCL und SDA sind korrekt.

Der Testcode scheint aber mit dieser Erweiterung nicht zu funktionieren.

Kein Text erscheint auf dem Display nach einem Reset...

 


SBCLCD16x2.lcd16x2_init()

SBCLCD16x2.lcd16x2_turn_on()

SBCLCD16x2.lcd16x2_backlight_on()

SBCLCD16x2.lcd16x2_show_text("hi", 0, 0)

SBCLCD16x2.lcd16x2_show_text("thanh", 0, 1)

basic.show_icon(IconNames.YES)

 

Bitte um Hilfe

 

Danke und liebe Grüße

 

Thanh

 

 

 

 

Thanh

19.08.23 17:02

Hallo Jens,


zur Info.


Habe das Display mit einem Arduino getestet.


Das Display hat die Adresse 0x27 und funktioniert einwandfrei mit dem Arduino.


Viele Grüße


Thanh

Thanh

22.08.23 11:43

Hallo Thanh,


du hast völlig Recht, hier scheinen wir die Erweiterung leider doch noch einmal überarbeiten zu müssen. Es tut mir wirklich sehr leid, dass ich dich hier erst einmal vertrösten muss, bis wir eine fertige Version anbieten können.


Liebe Grüße
Jens

Jens

22.08.23 13:37

Hallo Jens,


danke für die Rückmeldung.


Gib mir bitte Bescheid wenn eine getestete Version fertig ist.


Liebe Grüße


Thanh


 

Thanh

22.08.23 16:10

Hallo Jens,


möchte dir Bescheid geben, dass die Erweiterung makerbit-lcd1602 auch für die Ansteuerung dieses Displays geeignet ist und du dadurch die Arbeit sparen kannst.


Liebe Grüße


Thanh

Thanh

18.09.23 12:26

Hallo Thanh,


vielen Dank für den Hinweis, wir werden die von dir erwähnte Erweiterung auch noch einmal prüfen und ggf. in unsere Anleitungen aufnehmen. 🙂


Liebe Grüße
Jens

Jens

19.09.23 08:44

Achtung!

Ihr Webbrowser ist veraltet. Wechseln Sie jetzt zu einem aktuellen Browser für mehr Sicherheit, Geschwindigkeit und den besten Komfort auf dieser Seite.