Forum: Offtopic Fumot Tornado 25000 mit LCD -Teardown


von Kilo S. (kilo_s)


Lesenswert?

Neues vom "E-Zigaretten Recycling".

Fürs erste nur kurz eine minimale Beschreibung, weiter bin ich gerade 
nicht.

Hardware:
P25Q128HA - Nor Flash.
PY32F030K28 - MCU

Display - Noch nicht genau ergründet, hat aber einen beschrifteten 
connector. I2C Bus steht schon mal fest!
Touch - Muss ich noch schauen, vermutlich morgen genaueres.

Unter dem flex vom LCD liegt RST, RX,TX und Boot.

Schön einsammeln Freunde! Gratis Displays!
Bilder mach ich morgen welche bei gutem Licht!

Ich schau mal was die Möhre auf der seriellen quatscht.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

...und das scheint ja sowas wie ein 160x240 Pixel Farbdisplay zu sein 
(!)
Die haben doch einen an der Waffel. Versteh mich nicht falsch, für 
Bastler super - aber als Wegwerfware ist das doch Verschwendung pur.
 Aber mit LiIon Akku, Ladeschaltung und noch einer Leistungsendstufe und 
ein paar Knöpfchen fast schon fertige Hardware fü alles mögliche.
Widerstandsheizung oder Induktion?

von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Widerstandsheizung oder Induktion?

Widerstand.

Naja, Stiller Zeitgenosse. Auf der seriellen ist nix.

Ich würde halt fast wetten die haben (laut übersetztem DB) RDP/WRP für 
den internen Speicher des MCU gesetzt. Somit dürfte das erneute 
verwenden des Cortex M0+ der da werkelt vermutlich eher nicht möglich 
sein.
(oder kennt jemand einen Trick?)

Morgen geht's weiter. Irgendwie hab ich einen R an Boot0 in Verdacht der 
verhindert das ich in den Bootloader komme.

Selbst wenn ich nur den Touch (Separates PCB, Ttp223! Sicher sogar, sind 
0,08€ teure Sensormodule) LCD und den Flash benutzen kann. Das Zeug 
liegt GRATIS auf der Straße!

Das sind alleine die LCD wert aufgesammelt zu werden und ausnahmsweise 
haben sie es ja einfach gemacht: Beschriftung auf dem PCB.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Ach kommt, zwei schnelle snappschüsse. ;-)

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Und das LCD, ich sollte um die Zeit wohl keinen Kaffee mehr Trinken... 
:-D

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Halt, will ja nix vorenthalten.

;-)

von Harald K. (kirnbichler)


Lesenswert?

Das ist Elektronik aus so einem Suchtnuckel, aber das ist ja wohl einer 
zum Nachfüllen, denn wozu sonst sollte der eine USB-C-Buchse haben, mit 
der man den Akku wieder aufladen kann?

Insofern werden diese Drecksdinger nicht in der gleichen Menge in die 
Pampa geworfen wie die Einweg-Suchtnuckel.

Diese Menschen sind krank. Schwer krank.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Harald K. schrieb:
> wie die Einweg-Suchtnuckel

Die soll es bald nicht mehr geben, weil das ja noch mehr elende 
Verschwendung ist. Wimre wird die EU Einwegdampfer verbieten.

von ●Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

aber Hauptsache man hat sich auf USB-C geeinigt,
wofür man sich ja ganz toll beweihräuchert.

von Kilo S. (kilo_s)


Lesenswert?

Harald K. schrieb:
> Das ist Elektronik aus so einem Suchtnuckel, aber das ist ja wohl einer
> zum Nachfüllen,

Nein, ist er nicht!

Typ und Marke im Titel, das sind ALLES Einweg, der einzige Grund warum 
die Teile USB-C haben und den Akku laden können ist weil das Ding 25.000 
Züge beherbergt. Das schafft ein so kleiner Akku natürlich nicht ohne 
nachgeladen zu werden.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Hier ist das Gehäuse mit Tank zu sehen. Ein mal Vorderseite und 
Rückseite.

Theoretisch (pinker Deckel, an der Rückseite entfernen und der Tank 
liegt frei) könnte man den nachfüllen. Aber auch wenn der Trend dazu 
Grad online die Runde macht, das ist ekelhaft!
Wie lange die Watte in den Heitzelementen unverkohlt bleibt ect. Und die 
Heitzwendeln lassen sich nicht tauschen ohne riesen Sauerei.

von Rene K. (xdraconix)


Lesenswert?

Kilo S. schrieb:
> Wie lange die Watte in den Heitzelementen unverkohlt bleibt ect

So lange wie genügend Liquid enthalten ist - garnicht.

Ich dampfe mit einem Voopoo Drag M100S Smart - also ein Mehrwegdampfer 
mit einem UFORCE Kopf. Der Drag erkennt die Coils anhand ihres 
Widerstandes automatisch und stellt sich darauf ein. Im Grunde, wie 
schon gesagt, braucht der Coil - solange er nicht trocken betätigt wird 
- garnicht gewechselt werden. Ich wechsle dennoch alle 50k Züge.

Und man muss mal sagen, ich dampfe relativ viel, den Drag habe ich jetzt 
ein Jahr und genau 97.727 Züge gemacht. Aber 25.000 Züge von diesem 
Fumot sind schon extrem viel für ein Einwegdampfer. Das Ding hält dicke 
5-6 Monate - so oft wird man den mit Sicherheit nicht finden.



Harald K. schrieb:
> Suchtnuckel

Lass mich raten: du rauchst nicht, du trinkst kein Alkohol und Zucker 
ist dir auch völlig fremd?! ;-)


Btw.: ich bin durch einen Schlaganfall von 2 Schachteln Zigaretten am 
Tag auf das Dampfen (natürlich ohne Nikotin) umgestiegen.

von Torsten B. (butterbrotstern)


Lesenswert?

Auch die hochkapazitiven (25000 Puffs = Züge) Einweg-Dinger haben USB-C, 
weil dann können die Akkus kleiner (=billiger) sein. Und bei Fumot 
heißen die Typ-C-Anschluss und Typ-C-Schnellladung, vermutlich weil sie 
sich dadurch Lizenz-Gebühren sparen.

Folgende 2-Milliliter-Regelung habe ich nicht verstanden, dadurch erhöht 
sich doch der Einweg-Müll:
Zitat https://www.randmvape-shop.net/blogs/news/tornado-vape-kaufen
Warum sind Tornado-Vapes in Deutschland verboten?

Der Tornado Vape ist in Deutschland nicht generell verboten, allerdings 
gibt es strenge Vorschriften, die das Gerät in seiner aktuellen Form auf 
dem deutschen Markt einschränken. Ein Grund dafür sind die in 
Deutschland geltenden Regelungen zur E-Zigaretten-Nutzung. Die maximale 
Liquid-Menge in einem Einweg-Vape darf hier 2 ml nicht überschreiten. 
Der Tornado Vape, der bis zu 12.000 Züge bietet, enthält deutlich mehr 
als diese Menge und verstößt damit gegen die deutsche 
E-Zigaretten-Richtlinie.

Zudem gibt es Vorschriften bezüglich der Nikotinmengen, die in 
Vaping-Produkten erlaubt sind. Diese strengen Gesetze sollen den 
Verbraucherschutz stärken, insbesondere in Bezug auf minderjährige 
Nutzer. Deshalb sind viele Einweggeräte, die in anderen Ländern 
problemlos verkauft werden, in Deutschland nicht zugelassen.
Zitatende

Man kann sie dennoch kaufen. Bestellen oder "unter der Hand".

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Rene K. schrieb:
> Das Ding hält dicke 5-6 Monate - so oft wird man den mit Sicherheit
> nicht finden.

Der Kollege der mir den gab, hatte ihn ca. Ne Woche.
Glaub mir die Teile gehen hier an den Kiosken Rum, an Jugendliche 
verkauft, ohne Skrupel. Die halten nicht lange, da nuckeln dann 1000 
Leute dran:"Probier mal".

Und je nach dem wie schnell und lange da wer dran zieht. Ich hör öfter 
mal:"Schmeckt verbrannt". Ich bekomm die ja regelmäßig für die Akkus von 
Freunden und Bekannten.

Rene K. schrieb:
> Voopoo Drag M100S Smart

Smog Mag GRIP 225TC, Kopf weiß ich Grad nicht auswendig, einfaches 
Modell mit Dual Coil.

Benutze ich aber kaum, dampfen ist schön und gut, da hau ich mir aber 
immer zu viel Nikotin rein. Irgendwie bin ich da einer "dem fehlt da 
was". Schwer zu erklären.

Torsten B. schrieb:
> Man kann sie dennoch kaufen. Bestellen oder "unter der Hand".

Leider ja, das schlimmste ist das Gilt sogar für harmlos aussehende aber 
gar nicht so harmlose HHC Vapes. Ich hab die Dinger hier an einem Kiosk 
gesehen und mich gefragt:"HHC?"... Googelt mal, krass was sich so 
mancher da freiwillig in die Synapsen zwiebelt.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

So, jetzt schau ich erst mal was sich an Boot0 noch so verbirgt.

Über 1k an VCC verbunden.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Hm, Boot0 auf GND bringt nix.

Das Teil spielt stur sein Programm ab.
Tipps wie ich den internen Schutz umgehen kann sind immer noch 
willkommen.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Display, natürlich hab ich den originalen connector irgendwo auf dem 
Tisch mit dem Ärmel mitgerissen und finde ihn nicht.

So hab ich mir was "Zusammengefummelt".

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Kilo S. schrieb:
> laut übersetztem DB

Datenblatt auf englisch gibts hier:
https://download.py32.org/Datasheet/en/PY32F030_Datasheet_V1.8.pdf

von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Datenblatt auf englisch gibts hier

Vielen Dank!

Also, wo ich mir Recht sicher bin, ich hab gerade mit dem Diamantkopf 
die GND plane weggenommen, der Hersteller weiß zu verwirren!

Das wird doch SPI sein, I2C geht an den USB-C Port.

1.) GND

2.) LED-K

3.) LED-A

4.) GND

5.) RST

6.) ? (LCD-DCN = MOSI?)

7.) ? (MISO?)

8.) CLK

9+10.) VCC (3,3V)

11.) CS

12.) GND


Wenn ich nach der Auflösung suche lande ich bei einem Modul mit GC9A01 
Controller, das kommt dem sehr nahe.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Das Problem beim PY32 scheinen die Option Bytes zu sein. Man hat einen 
Weg zu finden, an die ranzukommen.

von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Das Problem beim PY32 scheinen die Option Bytes zu sein. Man hat einen
> Weg zu finden, an die ranzukommen.

Jepp, der war aber sowieso nicht der Grund für mein Interesse.

Verdammt, das Display ist ganz schön "Zickig".

Ich hab's jetzt mal versucht wie beim ST7735/89, immerhin, es wechselt 
zu "Grau" anstelle weiß.

Irgendwas hab ich noch nicht ganz richtig glaub ich.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Kilo S. schrieb:
> Verdammt, das Display ist ganz schön "Zickig".

Kannst du nicht die Verbindungen vom LCD an den MC durchpiepsen?

von M. G. (looking)


Lesenswert?

Kilo S. schrieb:
> Schön einsammeln Freunde! Gratis Displays!

Solch ein Exemplar würde ich gern auch mal finden! Leider habe ich hier 
auf dem Land aber bisher kaum E-Vapes in der Pampa gefunden, und wenn, 
dann die einfachen 0815-Teile ohne LED- oder gar LCD-Anzeige.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Kannst du nicht die Verbindungen vom LCD an den MC durchpiepsen?

Hab ich. Ich hab sogar mit dem proxon die oberste Schicht abgetragen und 
so gut es eben ging durchleuchtet ect.

Daher kam ich ja zur Vermutung das es in Richtung ST77XX geht, DCN an 
SCL und Data an MOSI.
Scheint aber kein ST77XX zu sein ODER ich hab noch nicht die richtige 
Variante ausprobiert.

Ich scheine jedenfalls dem Rätsel auf der Spur zu sein. Ohne Ansteuerung 
bleibt es einfach Weiß, mit wird es zumindest schon mal Grau und 
flackert leicht. Es versucht also was zu tun.

Da bin ich zuversichtlich das auch noch Platinen von dem Modell 
Reinflattern, bis dahin muss ich mir noch einen LA besorgen.

Gleich löte ich erst mal den Flash um, reinschauen was da so drin ist.

: Bearbeitet durch User
von M. G. (looking)


Lesenswert?

Matthias S. schrieb:
> Kilo S. schrieb:
>> laut übersetztem DB
>
> Datenblatt auf englisch gibts hier:
> https://download.py32.org/Datasheet/en/PY32F030_Datasheet_V1.8.pdf

Das Reference Manual liegt hier:
https://download.py32.org/ReferenceManual/en/PY32F030%20Reference%20manual%20v1.3_EN.pdf

In Kapitel 4.6.2 steht was zur Flash Read Protection. M.E. sollte es 
möglich sein, die Protection wieder rückgängig zu machen, wobei 
natürlich dadurch das on-chip Flash gelöscht wird. Aber der Chip müsste 
prinzipiell neu programmierbar sein.

: Bearbeitet durch User
von M. G. (looking)


Lesenswert?

Kilo S. schrieb:
> Hm, Boot0 auf GND bringt nix.
>
> Das Teil spielt stur sein Programm ab.
> Tipps wie ich den internen Schutz umgehen kann sind immer noch
> willkommen.

Um in den Bootloader zu kommen, müsste BOOT0 auf HIGH gesetzt werden.
(Kap. 3.5. in 
https://download.py32.org/ReferenceManual/en/PY32F030%20Reference%20manual%20v1.3_EN.pdf)

Ebenfalls wichtig:
Es sind mehrere USART-Boot-Interfaces möglich. Die RX-Pins der nicht 
benutzten USARTs dürfen nicht floaten.
siehe Kap. 1 von UM1503:
https://download.py32.org/Tool/en/PY32_IspTool_V1.0.0/UM1503_PY32IspTool_User%20Manual%20V1.0_EN.pdf

ISP-Tool:
https://py32.org/tool/PY32_ISP.html

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

M. G. schrieb:
> In Kapitel 4.6.2 steht was zur Flash Read Protection. M.E. sollte es
> möglich sein, die Protection wieder rückgängig zu machen, wobei
> natürlich dadurch das on-chip Flash gelöscht wird. Aber der Chip müsste
> prinzipiell neu programmierbar sein.

Sehr cool! Danke.

Nu, is ja wurscht ob der inhalt danach weg ist!
Mein weg mit den MCU wäre so oder so der uber den Arduino kram:
https://github.com/py32duino/Arduino-PY32

Der inhalt des Flash, 16MB für eine verdammte E-Zigarette! Pffff!
Irgendwie geil für uns bastler, vor allem weil das OTP register komplett 
leer ist usw. Bis auf den inhalt ist der komplett jungfräulich!

von Kilo S. (kilo_s)


Lesenswert?

M. G. schrieb:
> Um in den Bootloader zu kommen, müsste BOOT0 auf HIGH gesetzt werden.

OK, also wie es ursprünglich war. (1k an 3,3V)

M. G. schrieb:
> Ebenfalls wichtig:
> Es sind mehrere USART-Boot-Interfaces möglich. Die RX-Pins der nicht
> benutzten USARTs dürfen nicht floaten.

Das überprüfe ich bei der nächsten Platine.

Im allerschlimmsten notfall kauf ich (wenn bis dahin nicht eine 
reinflattert) mir einfach eine!

von M. G. (looking)


Lesenswert?

Kilo S. schrieb:

> Im allerschlimmsten notfall kauf ich (wenn bis dahin nicht eine
> reinflattert) mir einfach eine!

Günstig sind die aber nicht ... ;-)

von Kilo S. (kilo_s)


Lesenswert?

M. G. schrieb:
> Günstig sind die aber nicht ... ;-)

In etwa so viel wie ein Display Breakout auch. ~20€ wenn ich noch 
handeln kann eventuell auch weniger.

Hab bald Geburtstag, daher wird's von dem geld bezahlt.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Übrigens lohnt es sich auch die anderen Modelle zu Sammeln.

Wer die in Rund oder flach mit 12.000/15.000/20.000 Zügen und 
Charlyplexing für die Siebensegmentanzeige aufsammelt, da sitzen 
(SOP16/TSOP20) PY32F002 drauf.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Kilo S. schrieb:
> M. G. schrieb:
>> Um in den Bootloader zu kommen, müsste BOOT0 auf HIGH gesetzt werden.
>
> OK, also wie es ursprünglich war. (1k an 3,3V)

Allerdings muss dazu das BOOT1n Bit in den Option Bytes auch auf 1 
stehen, Und das scheint auf 0 programmiert zu sein.

von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Allerdings muss dazu das BOOT1n Bit in den Option Bytes auch auf 1
> stehen, Und das scheint auf 0 programmiert zu sein.

Wenn ich nen passendes Breakout organisiert bekomme, versuch ich es nach 
DB mit dem ISP Tool. Aktuell hab ich nix passendes und "Dead Bug" hab 
ich grad echt keine lust zu. 0,5mm pitch is mir grad zu fummelig.

Ein Komplettes Löschen würde ja schon reichen, das würde den anteil von 
"Müll" von den teilen regelrecht auf Gehäuse, Platine und Verdampfer 
reduzieren.
Es gehen sogar die stehenden USB-C Buchsen gut runter.

Ich hab grad die meisten der platinen (platz!) abgeerntet, geht echt 
gut!

: Bearbeitet durch User
von M. G. (looking)


Lesenswert?

Matthias S. schrieb:
> Kilo S. schrieb:
>> M. G. schrieb:
>>> Um in den Bootloader zu kommen, müsste BOOT0 auf HIGH gesetzt werden.
>>
>> OK, also wie es ursprünglich war. (1k an 3,3V)

Ist BOOT0 auf dem Board über 1k an 3V3 gelegt? Das wäre seltsam, dann 
müsste ja immer der Bootloader gestartet werden?

> Allerdings muss dazu das BOOT1n Bit in den Option Bytes auch auf 1
> stehen, Und das scheint auf 0 programmiert zu sein.

BOOT1n=0 würde bedeuten, dass versucht wird, Code aus dem SRAM zu 
starten. Nach dem PowerOn dürfte da nichts vernünftiges drin stehen.

Vielleicht wäre SWD eine Möglichkeit?

von Kilo S. (kilo_s)


Lesenswert?

M. G. schrieb:
> Vielleicht wäre SWD eine Möglichkeit?

Geduld, einen J-Link hab ich hier. Mein hauptaugenmerk gilt dem Display, 
denn das ist halbwegs "Bastlerfreundlich" mit connector versehen. Das 
passende Breakout dafür wird es bestimmt auch irgendwo geben.

Die aktuelle platine ist zu nix mehr zu gebrauchen weil ich mir die 
layer angesehen hab. ;)
Der MCU liegt aber hier, bisschen angeschliffen bei der aktion, sollte 
aber noch funktionieren.

von Kilo S. (kilo_s)


Lesenswert?

Oh, noch was interessantes dazu:

"Der Beitrag scheint Spam zu enthalten: "x-cigarette"", bitte beim 
zweiten link X gegen e ersetzen!

https://hackaday.com/2024/04/25/reverse-engineering-a-fancy-disposable-vape/
https://hackaday.com/tag/X-cigarette-hack/
https://ripitapart.com/2024/04/20/dispo-adventures-episode-1-reverse-engineering-and-running-windows-95-on-a-disposable-vape-with-a-colour-lcd-screen/
https://github.com/ginbot86/ColorLCDVape-RE

Spätestens übernächste woche hab ich ne neue davon hier!
Die infos sind doch erstaunlich ähnlich dessen was ich vermute, 
ähnliches modell.

Genau wie bei denen die hier sind, SWD geht an den USB-C....

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

OK!

https://ripitapart.com/2024/04/20/dispo-adventures-episode-1-reverse-engineering-and-running-windows-95-on-a-disposable-vape-with-a-colour-lcd-screen/

Zitat:"During my initial teardown, I noticed that the microcontroller’s 
SWD (Serial Wire Debug) programming lines were brought out to the USB-C 
port, but in an unusual way. The CC1/CC2 lines were not only used as 
regular 5.1k pulldowns to enable USB-C chargers to recognize the vape, 
but also as a programming connector"

Er hat recht, das ist bei diesen Fumot ebenfalls so.
Ich komm allerdings damit gerade nicht wirklich weiter.
Mein J-Link Clon will anscheinend nicht bzw. alles deutet auf 
fehlerhafte verbindungen hin, Pulldown drauf oder entfernt, spielt keine 
rolle.

Auf der einen ist DAT/CLK sogar herausgeführt als testpad, die hab ich 
gerade in der mangel und bekomme einfach keine verbindung.

P.S
Joa, mein fehler!
Einstellungen!

Erst mal reset/boot0 anfrickeln.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Hm, mit den "kleinen" hab ich kein glück. (Modelle unter 20.000 Züge, 
mit den Charlyplexing Displays)

Mögen einfach nicht mit mir reden!

Dabei hatte ich gehofft wie er einfach so an die firmware zu kommen ect.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Die tools aus dem link funktionieren auch, hier mal ein ergebniss nur 
mit einem "Schnellen test".
Ist natürlich nicht "Richtig" aber das format scheint zumindest mal zu 
stimmen. ;)

http://www.rinkydinkelectronics.com/t_render_rgb565.php

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Grr... Das ewige hin und her mit unpassenden connectoren.

Jetzt muss ich erst mal einen neuen suchen.

von ●Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

langsam sieht das aus als hätte jemand zuviel Zeit.

von Kilo S. (kilo_s)


Lesenswert?

●Des|ntegrator ●. schrieb:
> langsam sieht das aus als hätte jemand zuviel Zeit.

Nö, haben nicht, die Nehm ich mir aber einfach, es pisst mich mega an 
das die Dinger nix können als ausgenuckelt werden und danach irgendwo im 
Müll oder Gebüsch zu Landen.

Da ich die Teile grundsätzlich (seh ich auch ein wenig als Jugendschutz) 
einsammel und entsorge sofern Defekt oder die Akkus nach Prüfung selbst 
verwende/entsorge und die Dinger mittlerweile immer bessere Hardware 
haben, dachte ich mir das man neben den "Alten" (Drucksensor + IC ) als 
kleine notladegeräte doch bestimmt auch aus den neueren was machen 
könnte.

Die sch.. Dinger haben aber teils Custom Marking, außerdem verschiedene 
Pinout im gleichen Gehäuse ect. Daher kam mir tatsächlich die Idee nicht 
früher. Ich hielt es bis zur 25000 mit Display für Custom IC.

Und die mit TFT (ich hab aktuell auch ganz stark ein ST7735/S/P ect. 
oder sowas in Verdacht, hab einfach 1,77 Zoll Displays verglichen.) war 
jetzt die "Zündende" Hardware.

Ich fände das schon geil die PY32 nach dem zerlegen der kippen auf ein 
breakout zu löten und neben den Akkus so auch noch "on mass" gratis 
"Arduinos" für mich zum basteln und lernen zu haben.

Oder stell dir vor das ganze Forum macht mit und die gesammelten IC 
gehen als "Anfängergeschenke" an die Jugend von Freunden und Bekannten 
oder an sonst jemanden der damit "Gefördert" werden kann.
Kostet uns dann doch nur ein breakout und pinheader! (<=1€)

Das sind die Gedanken die mich dabei antreiben, vor allem jetzt wo die 
Modelle mit richtigem Display einfach total verlockend sind.

Immerhin, ich versuchs öffentlich zu machen damit mehr Leute darauf 
aufmerksam werden. Vielleicht können wir so dafür sorgen daß die Dinger 
nicht mehr nur weggeworfen werden.

: Bearbeitet durch User
von ●Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Kilo S. schrieb:
> Da ich die Teile grundsätzlich (seh ich auch ein wenig als Jugendschutz)
> einsammel

Und Du meinst dass Jugendliche an herumliegenden Vapes rumnuckeln?

von Kilo S. (kilo_s)


Lesenswert?

●Des|ntegrator ●. schrieb:
> Und Du meinst dass Jugendliche an herumliegenden Vapes rumnuckeln?

Ich meine nicht, ich hab schon gesehen wie KINDER und nicht jugendliche 
die Dinger auf dem Spielplatz sammeln und dran Rum nuckeln.

Der Kiosk der die verkauft ist keine 30m weit weg von dort, abends 
sitzen die Jugendlichen da am Spielplatz und feuern die "leeren" in die 
Büsche...

Mag ja sein das du aus einer schöneren Gegend kommst, hier ist das 
leider Alltag das man sowas sieht!

von Cyblord -. (cyblord)


Lesenswert?

Kilo S. schrieb:
> Ich meine nicht, ich hab schon gesehen wie KINDER und nicht jugendliche
> die Dinger auf dem Spielplatz sammeln und dran Rum nuckeln.

Treibst du dich öfter in der Nähe von Spielplätzen rum?

von Kilo S. (kilo_s)


Lesenswert?

Cyblord -. schrieb:
> Treibst du dich öfter in der Nähe von Spielplätzen rum?

Natürlich, meine kleine Tochter will ja auch irgendwie beschäftigt 
werden und andere Kinder um sich haben zum Spielen!

Deine dummen Bemerkungen kannst du dir sparen!

von ●Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> Treibst du dich öfter in der Nähe von Spielplätzen rum?

Kommt zumindest vor wenn man selbst Kinder hat.
Also unterstelle hier nichts falsches bitte

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Das gute ist, meine Tochter sieht was Papa macht, findet sie welche beim 
Spielen (nein sie nuckelt nicht daran, auch nicht an sonstigem was sie 
findet!) BRINGT sie mir die:"Papa musst du reparieren!"

Sie ist oft bei mir wenn ich hier was mache. Das ich die Akkus zb. Für 
Lampen benutze ect. kennt sie. Daher das "reparieren".

von Rene K. (xdraconix)


Lesenswert?

Kilo S. schrieb:
> Deine dummen Bemerkungen kannst du dir sparen!

Du musst verstehen das das durchschnittliche Alter hier im Forum so um 
die 60 Jahre liegt - da haben die wenigsten noch Kinder. ;-)

von Kilo S. (kilo_s)


Lesenswert?

Rene K. schrieb:
> - da haben die wenigsten noch Kinder. ;-)

Aber vielleicht Enkel oder Urenkel, sowas ist schon knapp an der Grenze!

Meine beste Freundin (R.I.P) hätte jetzt gesagt:"Karma wegen dem dummen 
Spruch. Das Universum gibt dafür was zurück!".

Eine wird eventuell heute Abend, spätestens morgen wenn sie leer ist, 
die andere eventuell am Montag Reinflattern.

Zwei Zusagen für neue hab ich bereits.
Für die 25000 mit LCD.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Kilo S. schrieb:

> Meine beste Freundin (R.I.P) hätte jetzt gesagt:"Karma wegen dem dummen
> Spruch. Das Universum gibt dafür was zurück!".

Klar, die Sterne regeln das. Wenn du doch ein bisschen an Kristallsalz 
reibst und Räucherstäbchen anzündest, knallts noch mehr.

Hast du keine Voodoo-Puppe?

von Kilo S. (kilo_s)


Lesenswert?

Ich bezeichne das als "Networking". Bei dem Thema waren die Eule und ich 
uns nie einig, aber ihre Kenntnisse über viele andere Dinge habe ich 
trotzdem sehr geschätzt.

Höflich fragen kann man immer! Und wer fragt hat auch häufig Erfolg.

Aber schön das du auch noch was sinnvolles beizutragen hast außer über 
Erinnerungen an Tote Freunde Rundumeckern?
Oder ist das weil ich etwas "sozialverträglicher" bin und daher 
erfolgreich und kurzfristig Nachschub bekommen kann?


Fragen über Fragen warum du so "blöd" antworten musst.

von Cyblord -. (cyblord)


Lesenswert?

Kilo S. schrieb:
> Ich bezeichne das als "Networking". Bei dem Thema waren die Eule und ich
> uns nie einig, aber ihre Kenntnisse über viele andere Dinge habe ich
> trotzdem sehr geschätzt.

Habe ehrlich keinen Schimmer wovon du redest.

> Höflich fragen kann man immer! Und wer fragt hat auch häufig Erfolg.

Siehe oben. Wen fragen? Nach was?

> Aber schön das du auch noch was sinnvolles beizutragen hast außer über
> Erinnerungen an Tote Freunde Rundumeckern?
> Oder ist das weil ich etwas "sozialverträglicher" bin und daher
> erfolgreich und kurzfristig Nachschub bekommen kann?

Immer noch keine Ahnung. Nachschub an was? Toten Freunden?

Meine letzte Antwort bezog sich allein auf deine Aussage zum Karma. Was 
man auch am Zitat sehen kann. Eine Funktion die dir unbekannt sein 
dürfte.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Cyblord -. schrieb:
> Immer noch keine Ahnung.

Weshalb du den sonst eigentlich konstruktiven Beitrag störst.

Egal, viel Spaß noch.


Ignorieren wir ihn einfach, ich schau in der Zeit ob ich nicht irgendwo 
noch einen LA kurzfristig auftreiben kann.

Bzw. Ich flashe schon mal den ESP8266 dafür...

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Und auf ein neues!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Die innereien lassen sich komplett zerstörungsfrei entnehmen!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Ahhhh!

Endlich, es tut sich was!

Beitrag #7832720 wurde vom Autor gelöscht.
Beitrag #7832726 wurde vom Autor gelöscht.
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Heut is nicht mein tag irgendwie ... also zum dritten mal!
SWD für die Fumot 2500:
Boot0 auf VCC, SWDO auf SDA, SCKL ist SWDCKL.

Reset auf GND, Debugging Starten und reset loslassen.

von Kilo S. (kilo_s)


Lesenswert?

Reset übrigens doch auf GND halten, sonst bekommt man die CPU nicht in 
halt.

So, Feierabend für heute.

Ich such mir zwar eigentlich noch nen Wolf wie genau ich das ISP 
Programm von Puya dazu bekommen kann mit meinem CH340/Jlink zusammen zu 
Arbeiten, alternativ wie ich das alles mit Jlink hin bekomme. (Flashdump 
ect..) Aber immerhin!

Jetzt wo die Kommunikation passt ist es aktuell allein nur mein 
fehlendes wissen, das lässt sich nachholen.

Morgen noch das Display mit dem LA beobachten.

Den Arduino Core hab ich auch bereits, ich muss also eigentlich (da ich 
noch mal die gleiche CPU habe eigentlich auch nicht!) nur noch den 
(vollständigen) flashdump hinbekommen damit das alles hier so weit 
komplett wird.
So können Leute die daran interessiert sind was damit machen.

von Kilo S. (kilo_s)


Lesenswert?

Wie ich es auch mache, ich bekomme mit dem ISPtool keine Verbindung.

Es gibt den Hinweis das USART1 bei denen nicht will, jetzt Brauch ich 
aber erst mal mehr Kaffee bevor ich da was anfädel.

LA möchte auch noch nicht, zumindest die erste ausprobierte Variante 
nicht.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sieht doch schon mal gut aus. +1

von Dieter S. (ds1)


Angehängte Dateien:

Lesenswert?

Im externen Flash sind 302 RGB565 Images mit jeweils 128x160 Pixel, die 
konvertierten Images sind als BMP Dateien im angehängten Archiv 
("test000.bmp" bis "test301.bmp"). Einige der Dateien ergeben 
Animationen (u.a. das Würfelspiel und die Umschaltung der Heizleistung).

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Dieter S. schrieb:
> Im externen Flash sind 302 RGB565 Images mit jeweils 128x160 Pixel, die
> konvertierten Images sind als BMP Dateien im angehängten Archiv
> ("test000.bmp" bis "test301.bmp"). Einige der Dateien ergeben
> Animationen (u.a. das Würfelspiel und die Umschaltung der Heizleistung).

Vielen Dank für die Hilfe!

Ich bin dabei den zweiten "Käfer" zum Leben zu erwecken.
Fleißarbeit seit heute morgen, mit Unterbrechungen, mit der Ausrüstung 
geht das ganz schön auf die Augen!

von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Sieht doch schon mal gut aus.

Danke, vom Arduino Zeugs ist man echt verwöhnt. Daher gibt's da noch 
viel was ich lernen muss.

von Dieter S. (ds1)


Lesenswert?

Der Flash läßt sich vom J-Link Commander z.B. so auslesen (64 kByte):

1
savebin flash_dump.bin, 0x08000000, 0x10000
Voraussetzung: RDP ist nicht gesetzt und das Lesen des Flash ist 
erlaubt.

von Kilo S. (kilo_s)


Lesenswert?

Dieter S. schrieb:
> Der Flash läßt sich vom J-Link Commander z.B. so auslesen (64 kByte):
>
> savebin flash_dump.bin, 0x08000000, 0x10000
>
> Voraussetzung: RDP ist nicht gesetzt und das Lesen des Flash ist
> erlaubt.

Perfekt! Genau bei den Adressen hapert es noch, das war der Hinweis den 
ich bräuchte.

Flashdump kommt sofort!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Anfangs leicht "Hakelig" (CPU lies sich nicht gleich anhalten) aber hat 
geklappt!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

So, der Käfer ist so weit!

Durch das umdrehen stimmen die Pin Nummern auch wieder.

von Kilo S. (kilo_s)


Lesenswert?

Und der "Deadbug" reagiert auf SWD!

Jetzt muss ich noch die Verbindung mit dem ISPtool zum laufen kriegen!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

PA2/PA3 (8,9) und USART2 ist "Floating".

Klappt trotzdem!

von Kilo S. (kilo_s)


Lesenswert?

Und der Deadbug blinkt erfolgreich mit dem ersten Test Scetch, 
programmiert mit der Arduino IDE.

Coole Sache! Ich such schon mal passende Breakout Boards.

Und nun noch das LCD.

Die E kippe liefert einem mal eben ein komplettes Devboard mit Display, 
zwei LL-Fets, Li-Lader, Akku und Touchsensor!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

OK, das spielen mit dem "originalen" PCB hat erst mal einen MCU gekillt.

Wurscht, der zweite liegt nun angepiekst in der Testvorrichtung (Pin 
6/PA0 als wackelpin für ne LED, RX/TX, VCC, GND) und gibt mir über die 
serielle jedes Mal den Text von Setup und der Loop aus. (?)

Was zum Geier geht da ab?

Normal erwarten würde ich 0, 1, 1, 1...

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Kilo S. schrieb:
> Was zum Geier geht da ab?

Der wird wohl immer wieder einen Reset ausführen.

von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Der wird wohl immer wieder einen Reset ausführen.

Aber weshalb, den hatte ich vorher (Deadbug) umgedreht auf dem PCB, da 
hat er das nicht gemacht. Ohne pullup an Reset o.ä, ohne C Zwischen VCC 
und GND.

Ich zieh Reset gleich mal mit 1k auf VCC, schauen ob das was verändert. 
Muss nur die LED kurz entfernen.

von Kilo S. (kilo_s)


Lesenswert?

Kleinen Moment Geduld, Familie geht vor.

von Kilo S. (kilo_s)


Lesenswert?

gibts nicht....
1
//int P = PA0;
2
3
void setup() {
4
Serial.begin(9600);
5
//pinMode(P, OUTPUT);
6
Serial.println("ON0");
7
}
8
9
void loop() {
10
  //digitalWrite(P, HIGH);
11
  for(int i;i<10;i++){
12
  Serial.println(i);
13
  }
14
  //delay(300);
15
  //digitalWrite(P, LOW);
16
}
Ausgabe:
1
ON⸮ON0
2
22:23:09.499 -> 536871984
3
22:23:09.499 -> 536871985
4
22:23:09.499 -> 536871986
5
22:23:09.532 -> 536871987
6
22:23:09.532 -> 536871988
7
22:23:09.532 -> 536871989
8
22:23:09.566 -> 536871990
9
22:23:09.566 -> 536871991
10
22:23:09.566 -> 536871992
11
22:23:09.599 -> 536871993
12
22:23:09.599 -> 536871994
13
22:23:09.599 -> 536871995
14
22:23:09.632 -> 536871996
15
22:23:09.632 -> 536871997
16
22:23:09.632 -> 53687199O
Da scheint die RTC was auszugeben?

Was ist da los mensch... was mach ich falsch?

von Kilo S. (kilo_s)


Lesenswert?

Und ende!....

Zusammenfassung: erneuter versuch zu flashen ergab das er stirbt.

VCC:3,3V daran kann es also auch nicht gelegen haben.

Ich hab den eindruck das liegt am Arduino Core, denn mein einfaches 
serial kann soas nicht anrichten.

von Thomas S. (thommi)


Lesenswert?

Schade. Deine Geduld ist zu bewundern. Ist aber auch eine interessante 
Sache.

von Kilo S. (kilo_s)


Lesenswert?

OK, drei dinge:

1.) Nach dem ansprechen mit dem ISP Tool (Klappte auf anhieb) "lebt" er 
wieder.

2.) Variablen innerhalb der schleifenbedingungen müssen mit 0 
initialisiert werden, sonst zählt der müll.

3.) Beachtet man 2 nicht hilft nur ansprechen 1 und ein erase!

Gibts einen grund weshalb ein ESP8266 sowas verzeiht?

Also kann das echt am core liegen?

von Kilo S. (kilo_s)


Lesenswert?

Thomas S. schrieb:
> Schade. Deine Geduld ist zu bewundern. Ist aber auch eine interessante
> Sache.

;-)

Ich glaub nicht dran das beide IC hin sind... Wenn ich den zweiten auch 
Reanimiert bekomme melde ich das hier.

Irgendwann im laufe der nächsten woche gehts auch mit (der dritten, 
vierte ist auf dem weg!) mit dem display weiter!

Ich besorg mir so einen Salea Clon und fuchs mich auch da ein.

Abgesehen vom Arduino kram ist das mein erster "Echter" ritt mit 
"Blanken" IC.

Aber ich bleib dran!

von Cyblord -. (cyblord)


Lesenswert?

Thomas S. schrieb:
> Schade. Deine Geduld ist zu bewundern. Ist aber auch eine interessante
> Sache.

Ich hab schon wieder vergessen was er eigentlich tun will...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Kilo S. schrieb:
> 536871984

Wenn ich das in Hex umrechne, kommt da 0x20000430 raus, was zufällig 
(oder absichtlich) eine Adresse im RAM des PY32 ist.
Weiterhin ist natürlich verwunderlich, das die Abbruchbedingung in
1
for(int i;i<10;i++){
ignoriert wird. Als oller C-Programmerer würde ich vermutlich mal auf 
das Arduino Zeugs verzichten und ein simples C Programm einnageln. Wenn 
es eine Startup.S oder so gibt, solltest du dir die mal angucken.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Cyblord -. schrieb:
> Ich hab schon wieder vergessen was er eigentlich tun will...

Schlaf weiter, wir wecken dich wenn's nötig wird.
Aber zusammengefasst nochmals für dich:
Ziel (Neben der Identifikation des Display und der Nutzbarmachung 
selbigen) war es die PY32F030 mit der Arduino IDE programmierbar zu 
machen.

Ist erledigt, Grundsätzlich geht's.

Oder anders gesagt eines von zwei Zielen erreicht.

Matthias S. schrieb:
> Wenn ich das in Hex umrechne, kommt da 0x20000430 raus, was zufällig
> (oder absichtlich) eine Adresse im RAM des PY32 ist.
> Weiterhin ist natürlich verwunderlich, das die Abbruchbedingung in
>
> for(int i;i<10;i++){
>
> ignoriert wird. Als oller C-Programmerer würde ich vermutlich mal auf
> das Arduino Zeugs verzichten und ein simples C Programm einnageln. Wenn
> es eine Startup.S oder so gibt, solltest du dir die mal angucken.

Danke für den Hinweis.

Was sagt man dazu, mit folgendem Syntax funktioniert es einwandfrei, 
Setup nur ein mal ausgeführt (wie es soll) und der Zähler läuft sauber 
durch.
1
for(int i=0;i<10;i++){
2
...
3
}
"Normales" C kommt noch für mich.

Jetzt ist nur die Frage, wieso ignoriert der Compiler die zuweisung in 
der Schleife?
Für mich ist int i; eqivalent zu int i=0; Das muss aber irgendwo 
zwischen zählen und Ausgabe verändert Werden, nur wo und wieso?

Ich will ja wissen wie gut sich die Dinger eben für Arduino eignen.
Ich hab hier einige an der Hand die das nutzen, daher liegt der Fokus 
darauf.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Matthias S. schrieb:
> Wenn
> es eine Startup.S oder so gibt, solltest du dir die mal angucken.

Bin grad dabei.

Da passiert nicht viel, muss gleich noch zwei dateien finden dann weiß 
ich mehr...

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Erst ein mal den "Zombiebug" um ein paar weitere Testnadeln erweitern.

von Cyblord -. (cyblord)


Lesenswert?

Kilo S. schrieb:
> "Normales" C kommt noch für mich.

Was ist "Normales" C und mit was arbeitest du aktuell?

von Kilo S. (kilo_s)


Lesenswert?

Cyblord -. schrieb:
> Was ist "Normales" C und mit was arbeitest du aktuell?

Aktuell Arduino, da nimmt einem die IDE einfach viel ab.
Unter "Normalem" C verstehe ich eher sich die sachen per hand zusammen 
zu stricken anstelle eines fertigen core der so sachen wie compiler ect. 
für einen bedient.

von Kilo S. (kilo_s)


Lesenswert?

Aktuell habe ich diesen code laufen.
1
void ser_contr(){
2
  int i = Serial.parseInt();
3
  int x = 0;
4
  switch(i){
5
  case 1:
6
      Serial.println("A");    
7
    break;
8
  case 2:
9
    Serial.println("b"); 
10
    break;
11
  case 3:
12
    Serial.println("C"); 
13
    break;
14
  default:
15
    Serial.println("Loop:");
16
    } 
17
}
18
19
void setup() {
20
Serial.begin(9600);
21
Serial.println("ON0");
22
}
23
24
void loop() {
25
 ser_contr();
26
}
Ich glaube einfach das war ein Syntaxfehler, irgendwas mochte bei der 
ubersetzung nicht so wie ich mir das einfach dachte.

Alles andere geht tadellos!

von Cyblord -. (cyblord)


Lesenswert?

Kilo S. schrieb:
> Cyblord -. schrieb:
>> Was ist "Normales" C und mit was arbeitest du aktuell?
>
> Aktuell Arduino, da nimmt einem die IDE einfach viel ab.
> Unter "Normalem" C verstehe ich eher sich die sachen per hand zusammen
> zu stricken anstelle eines fertigen core der so sachen wie compiler ect.
> für einen bedient.

Das ist eine Abstruse Ansicht. C ist C auch bei Arduino (oder C++ 
stellvertretend gemeint).

Weder hängt das davon ab, ob du ein Million fertiger Funktionen aufrufst 
oder ob die IDE dir die Einrichtung der Toolchain abnimmt. Es ist und 
bleibt C.

Ein Beispiel wo C nicht mehr C (oder C++) ist, wäre z.B. QT, wo man das 
native C++ mit Makros so lange vergewaltigt hat bis man de facto neue 
Sprachelemente reingepfuscht hat. Das könnte man durchaus als nicht mehr 
echtes C++ bezeichnen.

Arduino macht das aber nicht.

Korrekte Terminologie steht am Anfang.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Seis drum...

Nächste woche organisier ich mir den LA, muss noch schauen welchen jetzt 
genau.

Breakouts für 0,5mm pitch sind auch auf der liste.
12 PIN FPC breakouts mit 0,5mm pitch auch, für das Display.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Ich wusste es!

Beide MCU Leben noch.

Der Schluckauf den ich da verursacht habe muss wohl irgendwas seltsames 
getriggert haben.

Jetzt ist er leer, kann also erneut beginnen ihn zu nutzen.

von Kilo S. (kilo_s)


Lesenswert?

OK, Jetzt ist es seltsam!

Der erste "Deadbug" (erkenne ich an der angeschliffenen kante) kann den 
gleichen code wie der neue NICHT fehlerfrei ausführen!

Scheint ein loop zu sein, setup-reset-setup-reset.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Aufbau ist der selbe wie vorher.

von Soul E. (soul_eye)


Lesenswert?

Kilo S. schrieb:
> Aufbau ist der selbe wie vorher.

Dann versuch doch mal, da irgendwie ein paar Abblockkondensatoren in die 
Nähe zu bringen. Ein 8031 läuft auch ohne alles an der Motorradbatterie, 
aber diese neumodischen Controller mit internen Corespannungen verstehen 
da relativ wenig Spass.

von Cyblord -. (cyblord)


Lesenswert?

Kann es nicht einfach an der abenteuerlichen "Deadbug" Kontaktierung mit 
viel zu dicken Anschlussleitungen liegen?

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Soul E. schrieb:
> Dann versuch doch mal, da irgendwie ein paar Abblockkondensatoren in die
> Nähe zu bringen.

Jo, wenn ich weiter mach. Muss morgen erst mal kurzfristig weg.
Ich geh allerdings nicht davon aus das die was helfen.

Cyblord -. schrieb:
> Kann es nicht einfach an der abenteuerlichen "Deadbug" Kontaktierung mit
> viel zu dicken Anschlussleitungen liegen?

Ne, das vermute ich weniger.

Das sind P50-01 nadeln die sauber auf den kontakten aufliegen.
Das gleiche verhalten zeigt er mit kurzen stücken draht einer 
relaisspule auf einem stück platine.


Erstmal werkzeug einpacken....

: Bearbeitet durch User
von M. G. (looking)


Lesenswert?

Kilo S. schrieb:
> Was sagt man dazu, mit folgendem Syntax funktioniert es einwandfrei,
> Setup nur ein mal ausgeführt (wie es soll) und der Zähler läuft sauber
> durch.
> for(int i=0;i<10;i++){
> ...
> }
>
> "Normales" C kommt noch für mich.
>
> Jetzt ist nur die Frage, wieso ignoriert der Compiler die zuweisung in
> der Schleife?
> Für mich ist int i; eqivalent zu int i=0; Das muss aber irgendwo
> zwischen zählen und Ausgabe verändert Werden, nur wo und wieso?

Wenn du nur
int i;
schreibst, wird die Variable i nicht initialisiert, der Wert ist also 
undefiniert, entsprechend dem Wert, der an dem verwendeten Register oder 
im entsprechenden Stackbereich steht.

von Kilo S. (kilo_s)


Lesenswert?

M. G. schrieb:
> Wenn du nur
> int i;
> schreibst, wird die Variable i nicht initialisiert, der Wert ist also
> undefiniert, entsprechend dem Wert, der an dem verwendeten Register oder
> im entsprechenden Stackbereich steht.

OK, danke für den Hinweis. Ich dachte das wäre das gleiche. Wenn ich den 
gleichen Code auf einem Mega oder ESP8255 benutze passiert das 
lustigerweise nicht.
(muss ich bei einem Projekt tatsächlich noch ändern bevor das mal zu 
Problemen führt!)

Interessant was man so alles finden kann, schaut aus wie die nicht 
initialisierte RTC (die letzten vier stellen in der Ausgabe der 
seriellen sehen halt wie ein Datum aus) die ich auf diesem weg 
ausgegeben habe.

Bleibt Frage Nummer zwei, weshalb verhält sich der erste PY32 nicht wie 
der zweite.

Der eine wurde nach dem erfolgreichen schreiben des "serial" 
Testprogramm und ausführen des selbigen einfach unter der 
Testvorrichtung "heraus geschoben" und der andere in Position gebracht, 
erfolgreich programmiertund getestet.

Wo der erste ausgibt:
ON0
Loop:
Loop:

Macht der zweite:
ON0
ON0
ON0

In der Zwischenzeit wurde nur der Chip getauscht, sonst gab's keine 
Änderungen.

von ●Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

löppt dat nu!

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

●Des|ntegrator ●. schrieb:
> löppt dat nu!

Geduld, Familie Besuchen. Bin 200Km vom PY32 weg.

Hab dafür anderes zu tun.
Verdammte Noframe Displays, Patienten mit Provisorium beschwert auf der 
mobilen Arbeitsmatte.
;-)

Wenn das falsche Ersatzteil Arbeitszeit kostet.

von Kilo S. (kilo_s)


Lesenswert?

Heute noch mal mit den Kids zum Umzug, dann geht's langsam weiter.

Kurzer "Status":
Patient "ON ON ON" ist bereits auf einem breakout, Display breakout ist 
fertig, ein einfacher 8 Kanal LA+SW läuft.

Ich muss schauen ob ich selbst noch eine Vape besorge oder warte bis der 
Kollege zurück ist und seine leer hat.

Pinout habe ich ja, ich könnte also mit den breakout Boards das 
notwendige (Flash + Display) verbinden und das originale flashdump 
verwenden.

Mal schauen, ich hab für den Fall der Fälle ein 12pin FPC Kabel das 
passt und als Erweiterung an der originalen Platine dienen kann.

Ich hab jetzt X mal hin und her, das liegt nicht am "Deadbug" Design 
oder den Drähten ect. Beim Aufbau.

Ich erinnere mich das ich beim ISPTool beim einen IC eine andere 
Einstellung (Full Erase) nutzen musste um ihn erneut mit der IDE flashen 
zu können.
Beim anderen reichte ein Flash Erase.
Ich lese mich bezüglich der Register noch ein, vermutlich kann es aber 
auch daran liegen.

Geduld, das Display zu identifizieren steht aktuell mit ganz oben auf 
der Liste!
Geschenkidee für meine Frau.
Ich hab hier so ne schöne Glaskuppel die so toll auf einen Messingsockel 
passt, das wäre mit dem kleinen Display ein echt schöner "Mini Digital 
Fotorahmen".

;-)

von Michael (Gast)


Lesenswert?

Rene K. schrieb:
> Btw.: ich bin durch einen Schlaganfall von 2 Schachteln Zigaretten am
> Tag auf das Dampfen (natürlich ohne Nikotin) umgestiegen.

https://www.aerzteblatt.de/news/studie-e-zigaretten-loesen-potenziell-schaedliche-immunreaktionen-in-der-lunge-aus-6f2ebfe3-8623-40e9-be5a-93a43ca34078

Schön.
Den Teufel mit dem Belzebub austreiben.

Bevor Du fragst:
Ich habe 30J geraucht und habe vor dem Schlaganfall aufgehört.
Das dicke Ende kommt aber vielleicht noch.
Der Körper vergisst 30J Schindluder nicht.
Du wirst doch wohl die innere Stärke finden mit einer Gewohnheit 
aufzuhören?

Kilo S. schrieb:
> Geschenkidee für meine Frau.
'Schatz, ich habe Dir was aus Müll gebaut' käme bei meiner nicht so gut 
an.

Geh lieber Flaschen sammeln.
In der Zeit in der Du jetzt ekelhafte, verkeimte, vollgespeichelte und 
versiffte E-Zigaretten auseinanderbaust, hättest Du da mehr Kohle über 
und könntes Dir die Bauteile kaufen die Du brauchst.

von Kilo S. (kilo_s)


Lesenswert?

Michael schrieb:
> 'Schatz, ich habe Dir was aus Müll gebaut' käme bei meiner nicht so gut
> an.

1.) Die Dinger kommen aus dem Bekanntenkreis, "verkeimt" ist da nicht 
viel schlimmer als der normale Kontakt den man sonst so pflegt. Deren 
Kaffeetasse muss ich auch wegräumen wenn die gehen.

2.) Meine Frau findet das (sie ist selbst handwerklich begabt) viel 
besser als gekauft. Kaufen kann jeder!

3.) Sind die Teile nur theoretisch "Müll". Aktuell kostet mich so ein 
"PY32Duino" 96 Cent. (breakout Platine)
Für das Display 86 Cent.

Michael schrieb:
> Geh lieber Flaschen sammeln.

Ich kann mir meine Zeit gut selbst einteilen und entscheiden was ich 
mache!
Es geht nicht um Geld, es geht darum das die Dinger für jeden GRATIS 
rumliegen und so eben nicht die Umwelt mit Nikotin (schau mal was das 
mit dem Grundwasser macht) Plastik und sonstigem was mit der Zeit 
verottet, wenn die Leute alles damit zu Müllen, belastet und eventuell 
noch einer sinnvollen Verwendung zugeführt werden können.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Meine Frau ist totaler Fan von "Die schöne und das Biest".

Daher ist die selbstgemachte "Rosenkuppel" mit einem "Schrottdisplay" 
als Fotorahmen in Handarbeit nicht nur schöner als gekauft, es ist 
wirklich persönlich!

Die Optik passt auch schön zum Film, sieht halt aus wie aus dieser Zeit.

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Kilo S. schrieb:
> für jeden GRATIS
> rumliegen

Ich hätte Hundekacke in großen Mengen abzugeben.
GRATIS für jeden!
Einzeln verpackt in bunten Plastiktüten, die für sich alleine ja schon 
einen Wert darstellen.

Was man alles tolles damit machen kann:
- Kompost
- Gesichtsmasken
- Handschmeichler

Immerhin kostet 1m² Kompost locker 30€
Was man da alles sparen kann!

Darüber hinaus biete ich Tetrapacks, Wurstpelle und Hundefutterdosen in 
rauen Mengen.
Rasenschnitt und Laub, Holzasche und nur einmal benutztes Klopapier.

Greift alle zu. Ist genug für alle da!

von Andreas M. (amesser)


Lesenswert?

Kilo S. schrieb:
> Erst ein mal den "Zombiebug" um ein paar weitere Testnadeln erweitern.

Sehr geil, so was brauch ich auch :-)

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Andreas M. schrieb:
> Sehr geil, so was brauch ich auch :-)

Bedarf aber einigem an Verbesserungen bezüglich des "Arbeitskomfort".

Das positionieren der spitzen ist etwas fummelig.

Variante 2, kugelgelagerter drahtarm mit fixierschraube im Messing 
klemmblock ist bereits (Prototyp) in Arbeit. Ich muss nur mehr der 
Messing klemmblöcke besorgen oder eben Stangenmaterial zum selber 
herstellen. ;-)

Ich empfehle stark (wenn jemand nachbauen möchte) Variante 2 
nachzubauen! Das aufdrücken der Pogopins geht damit viel besser.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

So, unverhofft kommt oft.

Bisschen Geduld noch, komme vermutlich heute Abend dazu weiter zu 
machen.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Breakout für den LA ist vorbereitet, jetzt lüftet sich bald das 
Geheimnis um das Display!

Und dazu noch frischer Kaffee und Apfel Zimt Kuchen, Lecker!

: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

Kilo S. schrieb:
> Breakout für den LA ist vorbereitet, jetzt lüftet sich bald das
> Geheimnis um das Display!

Im Firmware Dump vom weiter oben sieht man sehr schnell wie das Display 
initialisiert wird. Allerdings scheint es keiner der verbreiteten 
Display Controller zu sein, auch wenn man einige der verwendeten 
Kommandos bei anderen Display Controllern findet.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Ich hänge mal die session vom analyzer an.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Die Vermehren sich heimlich...

Die nächste Reingeflattert!

von Kilo S. (kilo_s)


Lesenswert?

Dieter S. schrieb:
> Allerdings scheint es keiner der verbreiteten Display Controller zu
> sein,

Hast du irgendeinen Hinweis was eventuell "nahe dran" sein könnte?

Ich trau mir viel zu, für das LCD alles selbst zu schreiben ist aber 
aktuell noch nicht darunter.

Da muss ich erst noch ne ganze Menge lesen und ausprobieren.

von Dieter S. (ds1)


Lesenswert?

Kilo S. schrieb:
>
> Hast du irgendeinen Hinweis was eventuell "nahe dran" sein könnte?

Das Problem ist dass die Kommandos zum Schreiben von Daten in den 
Display Speicher (das benutzt die Firmware) bei vielen Display 
Controller (auch von unterschiedlichen Herstellern) fast gleich sind, 
daher ist eine Zuordnung kaum möglich.

Und da ich ich kein so ein Teil zum Testen habe kann ich es auch nicht 
ausprobieren (Nein, hier in der Gegend liegt so was nicht rum und mir 
ist auch niemand bekannt der diese Teile benutzt).

von Kilo S. (kilo_s)


Lesenswert?

Wenn du magst schicke ich dir eine. PN mit einer Mail-Adresse, dann ist 
die Kommunikation weniger "zäh" als per PN.

Den Verdampfer hab ich vorher raus geholt, ich geh noch mal mit iso 
drüber und dann sollte das gehen mit dem Versand.

Bzw. Von mir aus auch nur PCB+LCD, wie du magst.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Zu lange auf eine sache konzentrieren kann einen manchmal den blick auf 
"Wesentliches" kosten.

Tipp zu den "Digital Box" (12.000/15.000, Eckig) und "Randm Tornado" 
(12/15/20.000, Rund) achtet beim zerlegen auf das Marking "XWH-" auf der 
platine.

Auf denen sitzen auch Puya, mehr wird noch nicht verraten. ;-)

von Kilo S. (kilo_s)


Lesenswert?

Jetzt geht's erst richtig los.

Ich hab Grad im örtlichen Supermarkt mein Netzwerk erweitert!

Nachschub ist sicher Leute!

von Kilo S. (kilo_s)


Lesenswert?

Uff, viel zu lernen.
Dank Ghidra und dem svd bin ich jetzt jedenfalls schon mal 
zuversichtlich das ich in absehbarer Zeit Fortschritte mache.

Die Initialisierung des Displays scheint in mehrere Funktionen 
aufgeteilt. Außerdem verknüpft mit einem Timer?(Dazu eine Antwort wäre 
sehr nett,
Ja/Nein reicht, dient nur der Selbstkontrolle. Den Rest will ich selbst 
herausfinden.)

Jedenfalls zerlege ich aktuell die Funktion die das Interface über das 
AFL Register konfiguriert. Oder sagen wir so, ich Versuche es so gut es 
geht.

von Dieter S. (ds1)


Angehängte Dateien:

Lesenswert?

Hier ist ein "Proof of Concept" um das Display zu initialisieren.

Es handelt sich um ein Code-Fragment dass das Prinzip zeigt, man muss es 
allerdings erst in eine Display Library einbinden um es sinnvoll nutzen 
zu können.

Gezeigt wird welche Pins der PY32F030 zur Ansteuerung des Displays 
verwendet, wie der Display Controller initialisiert wird und noch ein 
kleiner Test der ein paar Farbbalken anzeigt (siehe das nicht besonders 
gute Bild im Anhang).

Einen bestimmten Display Controller konnte ich nicht identifizieren, ein 
paar der Kommandos findet man aber z.B. im Datenblatt des GC9A01A, 
vermutlich gibt es aber auch noch andere mit änlichen Kommandos.

Das Ganze ist "Bare Metal" und die seriellen Daten werden per 
Bit-Banging zum Display übertragen. Die entsprechenden Funktionen lassen 
sich aber leicht durch etwas anderes ersetzen (z.B. SPI per Hardware 
mit/ohne DMA).

Mein Testcode läuft direkt im RAM des PY32F030, daher war es zum Testen 
nicht nötig die Firmware im Flash zu überschreiben.

Was man unabhängig davon beachten sollte: Die Firmware verwendet IWDG 
als Hardware Watchdog, das wird im Konfigurationsbereich des Flash 
festgelegt. Daher startet der IWDG unmittelbar nach dem Reset. Das 
sollte man beachten bzw. die Konfiguration entsprechende ändern sonst 
bekommt man periodisch einen Reset wenn man den IWDG nicht regelmäßig 
triggert.

von Kilo S. (kilo_s)


Lesenswert?

Dieter S. schrieb:
> Die Firmware verwendet IWDG als Hardware Watchdog, das wird im
> Konfigurationsbereich des Flash festgelegt. Daher startet der IWDG
> unmittelbar nach dem Reset. Das sollte man beachten bzw. die
> Konfiguration entsprechende ändern sonst bekommt man periodisch einen
> Reset wenn man den IWDG nicht regelmäßig triggert.

Mal doof gefragt, wie machst du das?
Über USB-C scheitert es schon am "Halt" (kann nicht angehalten werden?!) 
geschweige denn am lesen oder schreiben von Registern.

DBGMCU_APB1_FZ zb. Ist für mich überhaupt nicht erreichbar. Also selbst 
wenn ich Versuche an Adresse 0x40015808 zu schreiben (so macht es Ozone 
so weit ich gelesen habe) bekomme ich das nicht hin.

Irgendwie mach ich gerade was grundlegend falsch, ich komm nur nicht 
drauf was es ist.

von Dieter S. (ds1)


Lesenswert?

Wenn der Watchdog aktiv ist und man eigenen Code im RAM laufen lassen 
will baut man das Triggern des Watchdog in den eigenen Code so ein dass 
es regelmäßig passiert. Außerdem sperrt man die Interrupts damit einem 
die Firmware nicht in die Quere kommt (z.B. die Timer Interrupts der 
Firmware). Das Ganze ist zum schnellen Testen kleiner Code-Teile 
gedacht, nicht für umfangreiche Software (dafür ist der RAM des PY32F030 
zu klein).

Den Code kann man vom J-Link Commander aus mit "loadbin" in den RAM 
laden und danach den PC auf den eigenen Code setzen, das geht schnell 
genug (man kann auch mehrere Kommandos per "Paste" hintereinander 
ausführen).

von Kilo S. (kilo_s)


Lesenswert?

Dieter S. schrieb:
> Den Code kann man vom J-Link Commander aus mit "loadbin" in den RAM
> laden und danach den PC auf den eigenen Code setzen, das geht schnell
> genug (man kann auch mehrere Kommandos per "Paste" hintereinander
> ausführen).

Genau das Versuche ich.

Aktuell Versuche ich folgendes:
1
Halt
2
Loadfile fumot.bin, 0x20000000
3
Setpc 0x20000000
4
Go
Noch bevor ich bei "Go" bin, kommt der Reset.

Natürlich hab ich bisher noch nicht herausgefunden wie ich den watchdog 
abgeschaltet bekomme.
Je mehr ich lese um so undurchsichtiger wird es aktuell.

von Dieter S. (ds1)


Lesenswert?

Der Watchdog ist im PY32F030 Reference Manual beschrieben ("22. 
Independent watchdog (IWDG)"). Abschalten kann man ihn nicht mehr wenn 
er mal gestartet wurde und wenn er als Hardware Watchdog konfiguriert 
ist (siehe "4.4. Flash option byte") startet er nach dem Reset. In 
diesem Fall muss man den Watchdog also regelmäßig triggern (0xAAAA ins 
IWDG_KR Register schreiben).

Im RAM stehen ab 0x20000000 die Interrupt Vektoren (die Firmware kopiert 
sie dort hin). Am einfachsten schreibt man eigenen Code in den RAM ab 
0x20000C20, der Bereich von dort bis zum RAM Ende (0x20001FFF bei 8 
kByte SRAM) wird von der Firmware nicht verwendet.

Und die vier Kommandos kann man auf einmal per "Paste" an den J-Link 
Commander schicken, dann werden sie ohne Unterbrechung hintereinander 
ausgeführt.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Dieter S. schrieb:
> Und die vier Kommandos kann man auf einmal per "Paste" an den J-Link
> Commander schicken, dann werden sie ohne Unterbrechung hintereinander
> ausgeführt

Ja, das klappt an und für sich schon.

Da müsste dann doch wenigstens bis der Watchdog am ende des counter 
angelangt ist ein mal das "Streifenbild" wenigstens aufblitzen?

Was jedenfalls schon mal sicher ist, das schreiben selbst funktioniert.
Ich hab den RAM danach ausgelesen, das programm ist da.

Hm.

Magst du mal schauen ob das bin das ich erzeugt hab auch funktioniert? 
(anhang)

Erzeugt hab ich es so:(display_init wurde in main.c umbenannt)
1
arm-none-eabi-gcc -o fumot.elf main.c  -mcpu=cortex-m0 -mthumb -Wall -Wextra -Os  -specs=nano.specs -nostartfiles
2
3
arm-none-eabi-objcopy fumot.elf -O binary fumot.bin

: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

Ich habe oben bereits geschrieben dass man die Interrupts sperren muss 
und der Watchdog periodisch getriggert werden muss wenn man Code im RAM 
laufen lassen will, beides sehe ich nicht in "fumot_kilo.bin".

Außerdem liegt das Hauptprogramm an Offset 0x4FC in der Datei 
"fumot_kilo.bin", man muss also den PC auf diese Stelle setzen.

von Kilo S. (kilo_s)


Lesenswert?

Wollte nicht so Recht, egal was ich da versucht habe.

Gut, das Projekt "Run Code in RAM" Werd ich später noch mal aufgreifen. 
Ich glaub da fehlt es noch bisschen mehr an Grundlage bis das klappt.

von Kilo S. (kilo_s)


Lesenswert?

Ich glaub ich hab es endlich geschafft.
Zumindest scheint es erst mal zu funktionieren.
1
#include <Arduino.h>  // Standard Arduino header
2
3
void setup() {
4
  // Enable the LSI (Low-Speed Internal) oscillator used by the IWDG
5
  RCC->CSR |= RCC_CSR_LSION;  // Enable LSI oscillator
6
  // Wait for the LSI to become ready
7
  while (!(RCC->CSR & RCC_CSR_LSIRDY)) {
8
    // Wait here until LSI is stable
9
  }
10
  // Unlock the IWDG registers
11
  IWDG->KR = 0x5555;  // Writing 0x5555 unlocks the control registers of IWDG
12
  // Set the prescaler (divides the LSI clock to determine the watchdog timeout)
13
  IWDG->PR = 0x03;  // Set prescaler to divide by 64 (prescaler values range from 0-7)
14
  // Set the reload value (this sets the timeout period)
15
  IWDG->RLR = 0x0FFF;  // Maximum reload value for the longest timeout
16
  // Start the watchdog timer
17
  IWDG->KR = 0xCCCC;  // Writing 0xCCCC starts the IWDG
18
  // Initialize serial communication for debugging purposes
19
  Serial.begin(115200);
20
  Serial.println("IWDG Initialized.");
21
22
}
23
24
void loop() {
25
  // The main loop where we periodically refresh the watchdog
26
  refreshIWDG();
27
  // Do some work here and simulate task delays
28
  Serial.println("Running tasks...");
29
  // Add some delay to allow tasks to run and avoid over-refreshing the watchdog
30
  delay(500);  // Example delay (this can be adjusted based on your requirements)
31
}
32
33
// Function to refresh the Independent Watchdog (IWDG)
34
void refreshIWDG() {
35
  // Unlock the IWDG registers
36
  IWDG->KR = 0x5555;  // Writing 0x5555 unlocks the control registers of IWDG
37
  // Write 0xAAAA to the KR (Key Register) to refresh the IWDG counter
38
  IWDG->KR = 0xAAAA;  // Writing 0xAAAA resets the watchdog timer counter
39
  Serial.println("IWDG Refreshed.");
40
}
Die dazu gesetzten Option Bytes:(PuyaISP!)
IWDG_SW=0
WWDG_SW=1
1
Getting option bytes successfully!
2
AA 8E 55 71 FF 00 00 FF FF FF FF FF FF FF 00 00

Init, refresh, task:
1
IWDG Initialized.
2
11:55:38.887 -> IWDG Refreshed.
3
11:55:38.887 -> Running tasks...
4
11:55:39.420 -> IWDG Refreshed.
5
11:55:39.420 -> Running tasks...

von Kilo S. (kilo_s)


Lesenswert?

Mal schauen ob ich (ist gar nicht so leicht) den pin finde der scheinbar 
"Hauptschalter" spielt.

Dann versuch ich diese version des code:
1
#include <Arduino.h> 
2
#include <SPI.h>
3
4
// Pin definitions for the LCD
5
#define LCD_PIN_RESET    4    // PB4: LCD Reset
6
#define LCD_PIN_CLOCK    3    // PB3: LCD Clock
7
#define LCD_PIN_DATA     5    // PB5: LCD Data
8
#define LCD_PIN_SELECT   8    // PA8: LCD Select
9
#define LCD_PIN_CMD_DATA 12   // PA12: LCD Command or Data
10
#define LCD_PIN_BACKLIGHT 11  // PA11: LCD Backlight
11
12
#define LCD_WIDTH   128
13
#define LCD_HEIGHT  160
14
15
// Some RGB565 colors
16
#define LCD_RGB565_BLACK    0x0000
17
#define LCD_RGB565_WHITE    0xFFFF
18
#define LCD_RGB565_RED      0xF800
19
#define LCD_RGB565_GREEN    0x07E0
20
#define LCD_RGB565_BLUE     0x001F
21
22
// Initialize SPI communication and GPIO
23
void setup() {
24
  // Enable the LSI (Low-Speed Internal) oscillator used by the IWDG
25
  RCC->CSR |= RCC_CSR_LSION;  // Enable LSI oscillator
26
27
  // Wait for the LSI to become ready
28
  while (!(RCC->CSR & RCC_CSR_LSIRDY)) {
29
    // Wait here until LSI is stable
30
  }
31
32
  // Unlock the IWDG registers
33
  IWDG->KR = 0x5555;  // Writing 0x5555 unlocks the control registers of IWDG
34
35
  // Set the prescaler (divides the LSI clock to determine the watchdog timeout)
36
  IWDG->PR = 0x03;  // Set prescaler to divide by 64 (prescaler values range from 0-7)
37
38
  // Set the reload value (this sets the timeout period)
39
  IWDG->RLR = 0x0FFF;  // Maximum reload value for the longest timeout
40
41
  // Start the watchdog timer
42
  IWDG->KR = 0xCCCC;  // Writing 0xCCCC starts the IWDG
43
44
  
45
  // Set up pin modes for control pins
46
  pinMode(LCD_PIN_RESET, OUTPUT);
47
  pinMode(LCD_PIN_CLOCK, OUTPUT);
48
  pinMode(LCD_PIN_DATA, OUTPUT);
49
  pinMode(LCD_PIN_SELECT, OUTPUT);
50
  pinMode(LCD_PIN_CMD_DATA, OUTPUT);
51
  pinMode(LCD_PIN_BACKLIGHT, OUTPUT);
52
53
  // Start SPI communication (SPI pins are pre-defined in Arduino)
54
  SPI.begin();
55
  SPI.setBitOrder(MSBFIRST);  // Set bit order to MSB first
56
  SPI.setDataMode(SPI_MODE0); // Set SPI mode to 0 (CPOL=0, CPHA=0)
57
  SPI.setClockDivider(SPI_CLOCK_DIV2); // SPI speed setting
58
59
  // Initialize the LCD
60
  LCD_GPIO_config();
61
  LCD_init();
62
  LCD_transfer_test();
63
}
64
65
// Main loop
66
void loop() {
67
  // Normally, you can add additional functionality here if needed.
68
  refreshIWDG();
69
}
70
71
// Set GPIO pins to control LCD functions
72
void LCD_GPIO_config() {
73
  digitalWrite(LCD_PIN_RESET, LOW);
74
  digitalWrite(LCD_PIN_CLOCK, LOW);
75
  digitalWrite(LCD_PIN_DATA, LOW);
76
  digitalWrite(LCD_PIN_SELECT, HIGH);  // Deselect
77
  digitalWrite(LCD_PIN_CMD_DATA, LOW); // Command mode initially
78
  digitalWrite(LCD_PIN_BACKLIGHT, HIGH); // Turn on backlight
79
}
80
81
// Reset the LCD
82
void LCD_Reset(int iReset) {
83
  if (iReset)
84
    digitalWrite(LCD_PIN_RESET, LOW); // Reset
85
  else
86
    digitalWrite(LCD_PIN_RESET, HIGH); // No reset
87
}
88
89
// Clock pulse for SPI
90
void LCD_Clock(int iClockLevel) {
91
  if (iClockLevel)
92
    digitalWrite(LCD_PIN_CLOCK, HIGH);
93
  else
94
    digitalWrite(LCD_PIN_CLOCK, LOW);
95
}
96
97
// Set LCD select pin (active low)
98
void LCD_Select(int iSelect) {
99
  if (iSelect)
100
    digitalWrite(LCD_PIN_SELECT, LOW);  // Select the display
101
  else
102
    digitalWrite(LCD_PIN_SELECT, HIGH); // Deselect the display
103
}
104
105
// Command mode (send command byte)
106
void LCD_Command(int iCommand) {
107
  if (iCommand)
108
    digitalWrite(LCD_PIN_CMD_DATA, LOW); // Command mode
109
  else
110
    digitalWrite(LCD_PIN_CMD_DATA, HIGH); // Data mode
111
}
112
113
// Send data byte through SPI
114
void LCD_send_SPI(uint8_t u8_byte) {
115
  SPI.transfer(u8_byte);
116
}
117
118
// Delay loop (adjust as necessary)
119
void delay_loop(int iDelay) {
120
  delay(iDelay);
121
}
122
123
// LCD initialization function
124
void LCD_init() {
125
  LCD_Select(1); // Select the LCD
126
  LCD_Command(1); // Command mode
127
128
  // Reset sequence
129
  LCD_Reset(0); 
130
  delay_loop(500);
131
  LCD_Reset(1);
132
  delay_loop(5000);
133
  LCD_Reset(0);
134
  delay_loop(12000);
135
}
136
137
// Send command byte
138
void LCD_send_CMD_byte(uint8_t u8_byte) {
139
  LCD_Select(1);
140
  LCD_Command(1); // Command mode
141
  LCD_send_SPI(u8_byte);
142
  LCD_Select(0); // Deselect the LCD
143
}
144
145
// Send data byte
146
void LCD_send_DATA_byte(uint8_t u8_byte) {
147
  LCD_Select(1);
148
  LCD_Command(0); // Data mode
149
  LCD_send_SPI(u8_byte);
150
  LCD_Select(0); // Deselect the LCD
151
}
152
153
// Send RGB565 data
154
void LCD_send_RGB565(uint16_t u16_rgb565) {
155
  LCD_send_DATA_byte((uint8_t)(u16_rgb565 >> 8));  // High byte
156
  LCD_send_DATA_byte((uint8_t)(u16_rgb565 & 0xFF)); // Low byte
157
}
158
159
// Test pattern (fill screen with different colors)
160
void LCD_transfer_test() {
161
  uint8_t u8_col_start = 0;
162
  uint8_t u8_col_end = LCD_WIDTH - 1;
163
  uint8_t u8_row_start = 0;
164
  uint8_t u8_row_end = LCD_HEIGHT - 1;
165
166
  LCD_send_CMD_byte(0x29);  // Display ON
167
168
  // Column and Row Address Set (2A, 2B)
169
  LCD_send_CMD_byte(0x2A);
170
  LCD_send_DATA_byte(0x00); // Start high
171
  LCD_send_DATA_byte(u8_col_start); // Start low
172
  LCD_send_DATA_byte(0x00); // End high
173
  LCD_send_DATA_byte(u8_col_end); // End low
174
175
  LCD_send_CMD_byte(0x2B);
176
  LCD_send_DATA_byte(0x00); // Start high
177
  LCD_send_DATA_byte(u8_row_start); // Start low
178
  LCD_send_DATA_byte(0x00); // End high
179
  LCD_send_DATA_byte(u8_row_end); // End low
180
181
  // Memory Write (2C)
182
  LCD_send_CMD_byte(0x2C); 
183
184
  // Loop to fill screen with colors
185
  for (int row = u8_row_start; row <= u8_row_end; row++) {
186
    uint16_t color;
187
188
    int which_color = (row - u8_row_start) / ((u8_row_end + 1 - u8_row_start) / 8);
189
190
    if (which_color == 0)
191
      color = LCD_RGB565_WHITE;
192
    else if (which_color == 1)
193
      color = LCD_RGB565_RED;
194
    else if (which_color == 2)
195
      color = LCD_RGB565_GREEN;
196
    else if (which_color == 3)
197
      color = LCD_RGB565_BLUE;
198
    else if (which_color == 4)
199
      color = LCD_RGB565_BLACK;
200
    else if (which_color == 5)
201
      color = LCD_RGB565_RED | LCD_RGB565_GREEN;
202
    else if (which_color == 6)
203
      color = LCD_RGB565_RED | LCD_RGB565_BLUE;
204
    else
205
      color = LCD_RGB565_BLUE | LCD_RGB565_GREEN;
206
207
    for (int col = u8_col_start; col <= u8_col_end; col++) {
208
      LCD_send_RGB565(color);
209
    }
210
  }
211
}
212
213
// Function to refresh the Independent Watchdog (IWDG)
214
void refreshIWDG() {
215
  // Write 0xAAAA to the KR (Key Register) to refresh the IWDG counter
216
  IWDG->KR = 0xAAAA;  // Writing 0xAAAA resets the watchdog timer counter
217
218
  Serial.println("IWDG Refreshed.");
219
}

von Kilo S. (kilo_s)


Lesenswert?

Da fress ich nen besen... ich find den pin nicht!

PA5/PA6 sind auf dem E Kippen PCB die zwei Pins für die verdampfer.
Da blinken grad zwei LED.
1
#include <Arduino.h>  // Standard Arduino header
2
3
void setup() {
4
5
  // Enable the LSI (Low-Speed Internal) oscillator used by the IWDG
6
7
  RCC->CSR |= RCC_CSR_LSION;  // Enable LSI oscillator
8
9
  // Wait for the LSI to become ready
10
11
  while (!(RCC->CSR & RCC_CSR_LSIRDY)) {
12
13
    // Wait here until LSI is stable
14
15
  }
16
17
  // Unlock the IWDG registers
18
19
  IWDG->KR = 0x5555;  // Writing 0x5555 unlocks the control registers of IWDG
20
21
  // Set the prescaler (divides the LSI clock to determine the watchdog timeout)
22
23
  IWDG->PR = 0x03;  // Set prescaler to divide by 64 (prescaler values range from 0-7)
24
25
  // Set the reload value (this sets the timeout period)
26
27
  IWDG->RLR = 0x0FFF;  // Maximum reload value for the longest timeout
28
29
  // Start the watchdog timer
30
31
  IWDG->KR = 0xCCCC;  // Writing 0xCCCC starts the IWDG
32
33
  // Initialize serial communication for debugging purposes
34
35
  Serial.begin(115200);
36
37
  Serial.println("IWDG Initialized.");
38
  pinMode(PA5, OUTPUT);
39
  pinMode(PA6, OUTPUT);
40
  pinMode(PA11, OUTPUT);
41
  digitalWrite(PA11, HIGH);
42
}
43
44
void loop() {
45
46
  // The main loop where we periodically refresh the watchdog
47
48
  refreshIWDG();
49
50
  // Do some work here and simulate task delays
51
52
  Serial.println("Running tasks...");
53
  digitalWrite(PA5, HIGH);
54
  Serial.println("PA5 HIGH");
55
  delay(1000);
56
  digitalWrite(PA5, LOW);
57
  Serial.println("PA5 LOW");
58
  refreshIWDG();
59
  delay(1000);
60
  digitalWrite(PA6, HIGH);
61
  Serial.println("PA6 HIGH");
62
  delay(1000);
63
  digitalWrite(PA6, LOW);
64
  Serial.println("PA6 LOW");
65
  refreshIWDG();
66
67
  // Add some delay to allow tasks to run and avoid over-refreshing the watchdog
68
69
  delay(500);  // Example delay (this can be adjusted based on your requirements)
70
71
}
72
73
// Function to refresh the Independent Watchdog (IWDG)
74
75
void refreshIWDG() {
76
  // Write 0xAAAA to the KR (Key Register) to refresh the IWDG counter
77
78
  IWDG->KR = 0xAAAA;  // Writing 0xAAAA resets the watchdog timer counter
79
80
  Serial.println("IWDG Refreshed.");
81
82
}

von Kilo S. (kilo_s)


Lesenswert?

TH (Touch_High, Touchsensor) liegt auf Pin 8/PA2/USART1_TX/ISP
Den man auch anzapfen muss um mit der Arduino IDE zu Flashen! Ist eine 
leiterbahn, Pin9 PA3/USART1_RX/ISP ist eine VIA, nur ganz knapp am MCU 
angebunden, die rupft man auch leicht ab. (Grrr, bitte lass das nicht 
den schalter für POWER sein der auch die hintergrundbeleuchtung mit 
aktiviert, das geflicke....)

"M" (Unterdrucksensor) liegt auf Pin 25/PA15.

So weit bisher...

Code gibt es da grad keinen zu, hab die mit dem Multimeter so weit es 
ging  durchgeklingelt.

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Kleiner Hinweis:
Solche längeren Programmschnipsel sollten als Anlagedatei hochgeladen 
werden.

von Kilo S. (kilo_s)


Lesenswert?

Dieter D. schrieb:
> Kleiner Hinweis:
> Solche längeren Programmschnipsel sollten als Anlagedatei hochgeladen
> werden.

Werde ich berücksichtigen.
Ich selbst mag es eigentlich lieber "Direkt" lesen zu können.


Pin6/PA0 ist der ADC der über einen teiler an B+ geht.

10K (in der schaltung!) von PA0 nach GND, 10K in reihe PA0 zu B+.
Und ein C Parallel, keine ahnung wie groß.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Pin 5  PF_3, über 2K an einen der "Schalter" (VDD!)


Ich glaub da hab ich ihn!

Oder nur einen von mehreren? klingt nach VCC_DIGITAL_DATA
also nach der versorgung für den controller?

Dieter (ds1), kannst du da licht ins dunkle bringen?

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Uuups, Verrutscht.

Der ADC ist Pin 7 /PA1.

von Kilo S. (kilo_s)


Lesenswert?

Ah... mieses gefummel.

BEIDE Pin 6 und 7 sind ADC.
Pin 7 /PA1 ist für die 5V in, 33k, 33k.
pin 6 /PA0 ist für B+ mit 10k, 10k.

von Dieter S. (ds1)


Lesenswert?

Zu den GPIO Pins im Zusammenhang mit Run/Sleep:

1
PF3: 0 -> Run   1 -> Sleep
2
PA9: 1 -> Run   0 -> Sleep
Und noch ein paar weitere GPIO Pins:

1
SPI Flash:
2
  PA3 Select
3
  PB6 SPI2_MISO
4
  PB7 SPI2_MOSI
5
  PB8 SPI2_SCK

von Kilo S. (kilo_s)


Lesenswert?

Herzlichsten Dank.

Als nachstes werd ich mir die SPI initialisierung des MCU vornehmen.
Da passt was noch nicht.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Watchdog, GPIO (ADC, Backlight..) und flash hab ich schon mal so weit.

Nur das Display das will noch nicht so recht!

Der code oben erzeugt (auf der zweiten seriellen unter dem Display FPC!) 
diese ausgabe:
1
IWDG Initialized.
2
16:57:39.169 -> Manufacturer ID: 0x85
3
16:57:39.169 -> Memory Type: 0x20
4
16:57:39.169 -> Capacity: 0x18
5
16:57:39.169 -> 0.00
6
16:57:39.169 -> 2.00
7
16:57:39.169 -> IWDG Refreshed.
8
16:57:39.666 -> IWDG Refreshed.
9
16:57:40.162 -> IWDG Refreshed.
10
16:57:40.659 -> IWDG Refreshed.
Bild kommt auch gleich noch eins. ;)

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Der CH340 ist ISP (Pin 1, CS vom Flash, TH, Touch_High)
Der CH341 die serielle.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

So bald ich LCD_transfer_test ausführe endet es im Reset Loop.

Mensch, ich seh den fehler nicht!

von Dieter S. (ds1)


Lesenswert?

SPI für das Display und externen Flash sind unterschiedliche GPIO Pins 
(das Display ist SPI1, der Flash SPI2), die SPI Transfers im Code gehen 
also wohl alle zum externen Flash.

Außerdem sollte PA9 auf High gesetzt sein (siehe wieter oben im Bezug 
auf Run/Sleep in der Firmware).

von Kilo S. (kilo_s)


Lesenswert?

Dieter S. schrieb:
> Außerdem sollte PA9 auf High gesetzt sein (siehe wieter oben im Bezug
> auf Run/Sleep in der Firmware).

Lustige Sache, mit denen hatte ich vorher testweise gewackelt Um zu 
sehen welchen Einfluss sie genau haben.

Ich Versuche mal was passiert wenn ich die SPI init vom Flash auf die 
Pins vom LCD (das sollten zwei Initialisierte SPI Interfaces sein und 
SPI1 sollte theoretisch das Display sein) anwende.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Es ändern sich pixel... trotzdem ein reset loop.

von Dieter S. (ds1)


Lesenswert?

Wenn Du den IWDG nicht konfigurierst ist der Default Timeout nach dem 
Reset nur 0.5 Sekunden. Dann geht "delay(500)" relativ sicher schief.

Setzte den IWDG Prescaler auf 256, dann ist genügend Zeit (32 Sekunden).

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Jetzt kommt auf dem Display immerhin mal "etwas".
Dafür streikt die BL Steuerung.

Code kommt gleich.

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Ich bin gespannt wo ich es diesmal verhauen hab!

von Kilo S. (kilo_s)


Lesenswert?

da kann ich sowohl in der init als auch in der funktion:
1
// Memory Access Control
2
    lcdCommand(0x36);
3
    lcdData(0x60);
verwenden. Orientation ändert sich nicht.

Backlight bekomme ich auch ncht mehr zum laufen, völlig egal was ich da 
mache....

Ein schritt vor und drei zuruck!

von M. G. (looking)


Lesenswert?

Kilo S. schrieb:
> Ich bin gespannt wo ich es diesmal verhauen hab!

In den Funktionen lcdCommand und lcdData würde ich erst den Pin 
LCD_PIN_CMD_DATA setzen und danach LCD_PIN_CS. Hat evtl. zwar keinen 
Einfluss, ist aber besser verständlich.

von Kilo S. (kilo_s)


Lesenswert?

M. G. schrieb:
> Hat evtl. zwar keinen Einfluss, ist aber besser verständlich.

Den einzigen Einfluss den ich feststellen konnte ist im Zusammenhang mit 
PB3/LCS_PIN_SCK.

Kommentiere ich SPI.setSCLK(LCD_PIN_SCK); aus geht die 
Hintergrundbeleuchtung.

Der Fehler ist mir Grad zu hoch.

Egal wie und in welcher Kombi ich da mit was wackel. Da geht nix!

von Dieter S. (ds1)


Lesenswert?

Kilo S. schrieb:
>
> Kommentiere ich SPI.setSCLK(LCD_PIN_SCK); aus geht die
> Hintergrundbeleuchtung.

PA11 hat als mögliche Funktion SPI1_MISO. Eventuell macht die Arduino 
Runtime hier irgendwas falsch, vielleicht mal 
"pinMode(LCD_PIN_BACKLIGHT, OUTPUT)" nach "SPI.setSCLK(LCD_PIN_SCK)" 
aufrufen und schauen ob das hilft.

von Kilo S. (kilo_s)


Lesenswert?

Beide änderungen getestet.

Bild bleibt das gleiche, anscheinend um 90° nach rechts/links gedreht 
und nur vier streifen die je ca 1/4 der 128 pixel breite belegen. 
(hell,dunkel,hell,dunkel)

Ich hab eben auch ne Soft SPI variante ausprobiert.

Das exakt gleiche verhalten.

Möglichkeit A: Ich hab irgendwo die init oder sonst was verkackt!
Möglichkeit B: Der Arduino core ist nicht ganz fehlerfrei.

: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

Eventuell hilft ein "SPI.setMISO(NC)" bevor SPI für das Display benutzt 
wird und danach dann nochmal PA11 für das Backlight initialisieren.

von Kilo S. (kilo_s)


Lesenswert?

Dieter S. schrieb:
> Eventuell hilft ein "SPI.setMISO(NC)" bevor SPI für das Display benutzt
> wird und danach dann nochmal PA11 für das Backlight initialisieren.

Genau das versuche ich Gerade. ;-)

Ich wühl mich gerade durch den core.

https://github.com/py32duino/Arduino-PY32/blob/master/variants/PY32F030xx/PY32F030_Base/PeripheralPins.c


Lustig, hab es mal mit dem core für "Generic" STM32F03 ausprobiert.

Nach der anderung einiger kleinigkeiten kam zwar ein bin bei raus, 
funktioniert aber leider nicht.

Kleine änderungen ab jetzt: Watchdog ist aus, mit dem ISPtool beides auf 
"Software" (0,0) gesetzt. Einfach zum test ob es einen unterschied 
macht. (Ich vermute es macht keinen, wenn doch beiss ich mir in 
hintern!)

: Bearbeitet durch User
von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

So weit so gut.

Jetzt "Kratzt" er beim init des LCD ab, springt mit lcdInit nicht in die 
loop, kommentiere ich lcdInit aus (egal welche varinte gewählt, also ob 
1/0) läuft die loop klaglos.

Backlight ist allerding an.

: Bearbeitet durch User
von Kilo S. (kilo_s)


Lesenswert?

Lustig.

NUR wenn
1
SPI.setMISO(NC);
gesetzt ist, springt er nicht in die loop.

Ansonsten ist immer die "Init" Falsh, das display zeigt die streifen 
(foto mit Taschenlape als BL) und die beleuchtung ist aus.

Wenn wenigstens nur das licht aus wäre aber die init ok...

von Kilo S. (kilo_s)


Angehängte Dateien:

Lesenswert?

Kurze Runde frische Luft schnappen und dann geht's weiter!

Backlight ist aus wenn das Schreiben klappt, immer, immerhin konnte ich 
eben (Taschenlampe zur Beleuchtung) schon mal genug testen um wenigstens 
einen Teil des Displays (knapp weniger als das obere Drittel) zu 
beschreiben.
(lcdFillScreen Funktion)

Kaum geht das Backlight ist nix mehr mit schreiben des Displays.

Und wie man sieht, erweiterte Fehlersuche ist auch gestartet.

: Bearbeitet durch User
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.
Lade...