Forum: Mikrocontroller und Digitale Elektronik AT89C2051 und das UART Rätsel


von Ronny (kraftstrom)


Lesenswert?

Hallo,
Ich bin hier neu und hätte sogleich eine Frage. Vorab muss ich noch 
sagen, ich habe wenig Ahnung von mikrocontrollern aber bin willens, 
vorhandene Wissenslücken zu füllen.

Ich habe ein Anzeigeplatine mit 4 großen 7 segment Anzeigen drauf, 
welche mit einem 32 bit Schieberegister(UCN5833) verbunden sind. Dieser 
wird von dem AT89C2051 "gefüttert.
Am Pin 2, was der RX Anschluss ist, wird er noch über einen Transistor 
mit Daten versorgt. Nun stellt sich mit die Frage, wie bekomme ich 
heraus, mit welchen Signalen ich ihn versorgen muss um eine sinnvolle 
Anzeige von Werten zu bekommen?
Ich hätte allerlei Messmittel zur Verfügung, sowie eine USB > UART 
bridge.

Ich hoffe ihr habt da eine Idee.

Mit freundlichen Grüßen

von Monk (Gast)


Lesenswert?

Ronny schrieb:
> wie bekomme ich heraus, mit welchen Signalen ich ihn versorgen muss

In erster Linie aus der Dokumentation. Ider man analysiert den Quelltext 
der Firmware, falls vorhanden. Ansonsten: vergiss es. Das ganze Produkt 
neu zu erfinden geht schneller und billiger.

von H. H. (hhinz)


Lesenswert?

Mit dem UART des 2051 kannst du das Schieberegister nicht füttern.

In welcher Sprache willst du denn das Programm für den 2051 erstellen?

von Peter D. (peda)


Lesenswert?

H. H. schrieb:
> Mit dem UART des 2051 kannst du das Schieberegister nicht füttern.

Natürlich geht das, siehe UART Mode 0.

von Mario M. (thelonging)


Lesenswert?

Ronny schrieb:
> Ich hoffe ihr habt da eine Idee.

4 x 7 = 28 ==> Jedes Segment an einen Ausgang. Such die Eingänge des 
Schieberegisters steuere es passend an und schiebe Bitmuster durch und 
man wird sehen.

von H. H. (hhinz)


Lesenswert?

Peter D. schrieb:
> H. H. schrieb:
>> Mit dem UART des 2051 kannst du das Schieberegister nicht füttern.
>
> Natürlich geht das, siehe UART Mode 0.

Und woher kommt der Takt für das Schieberegister?

von Monk (Gast)


Lesenswert?

Ich glaube ihr habt den TO missverstanden. Der Mikrocontroller ist 
Bestandteil der Anzeige. Diese hat einen seriellen Eingang. Er will das 
Kommunikationsprotokoll herausfinden, nicht den Mikrocontroller der 
Anzeige programmieren.

von Ronny (kraftstrom)


Angehängte Dateien:

Lesenswert?

H. H. schrieb:
> Mit dem UART des 2051 kannst du das Schieberegister nicht füttern.
>
> In welcher Sprache willst du denn das Programm für den 2051 erstellen?

Das ist eine vorhandene Platine, ein kommerzielles Produkt wo ich auch 
dessen Programm nicht kenne. Ich hatte gehofft  dass ich herausbekomme, 
mit welchen Signalen ich den UART füttern muss. Das schieberegister ist 
an den normalen IO Pins angeschlossen.

Monk schrieb:
> In erster Linie aus der Dokumentation. Ider man analysiert den Quelltext
> der Firmware, falls vorhanden. Ansonsten: vergiss es. Das ganze Produkt
> neu zu erfinden geht schneller und billiger.

Ok, wäre schade.

Beitrag #7748254 wurde vom Autor gelöscht.
von H. H. (hhinz)


Lesenswert?

Monk schrieb:
> Ich glaube ihr habt den TO missverstanden. Der Mikrocontroller ist
> Bestandteil der Anzeige. Diese hat einen seriellen Eingang. Er will das
> Kommunikationsprotokoll herausfinden, nicht den Mikrocontroller der
> Anzeige programmieren.

Ach je, das geht natürlich nur wenn er eine funktionierende 
Kommunikation mitverfolgen kann.

von Max D. (max_d)


Lesenswert?

Ersetz den einfach durch einen Attiny2313 und schreib deinen eigenen 
Code. Dort kannst du dann die Daten in deinem Wunschformat entgegen 
nehmen...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wenn ich ein Programmiergerät für den AT89C2051 hätte, würde ich dessen
Firmware mit meiner eigenen überschreiben.

Leider habe ich kein solches Programmiergerät, dafür aber bspw. eins für
AVRs. Da ich auch noch ein paar pinkompatible ATtiny2313 herumliegen
habe, würde ich diesen programmieren und anstelle des AT89C2051 in den
Sockel stecken.

Fertig.

Ob das auch für dich eine Option ist, hängt natürlich von deiner
Hardwareausstattung und deinen Programmierkenntnissen ab.

Edit: Max war schneller.

: Bearbeitet durch Moderator
von Dieter S. (ds1)


Lesenswert?

Läßt sich die Firmware des AT89C2051 auslesen oder sind die Lock Bits 
gesetzt? Falls sich die Firmware auslesen läßt stelle sie hier rein, 
dann kann man schauen wie die UART Kommunikation abläuft.

: Bearbeitet durch User
von H. H. (hhinz)


Lesenswert?

Max D. schrieb:
> Ersetz den einfach durch einen Attiny2313

Auf die Polarität des Resetsignals achten!

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Ronny schrieb:
> ich habe wenig Ahnung von mikrocontrollern[,] aber bin willens,
> vorhandene Wissenslücken zu füllen.

Wenn Du wenig Ahnung von µControllern hast, dann ist das, was Du Dir 
hier vorgenommen hast, genau der falsche Weg (dafür).

: Bearbeitet durch User
von Ronny (kraftstrom)


Lesenswert?

Vielen Dank für eure Antworten.
Auslesen kann ich den leider nicht auslesen, da ich kein HV programmer 
habe. Einen ATiny2313 müsste ich mir erst besorgen und dann könnt ichs 
mal versuchen selbst zu programmieren... so gleich als Übung.

Aber lässt sich das nicht empirisch ermitteln? Spannung ist ja klar, nur 
die baudrate durchprobieren? Variiert das so sehr, was als Zahlen 
gesendet werden kann?

von H. H. (hhinz)


Lesenswert?

Ronny schrieb:
> Variiert das so sehr, was als Zahlen
> gesendet werden kann?

Ja.

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


Lesenswert?

Ronny schrieb:
> Variiert das so sehr, was als Zahlen
> gesendet werden kann?

Die Frequenz des Quarzes kann dir zumindest vermitteln, ob du es da mit 
Standardbaudraten zu tun hast.

von Ronny (kraftstrom)


Lesenswert?

H. H. schrieb:
> Ronny schrieb:
>> Variiert das so sehr, was als Zahlen
>> gesendet werden kann?
>
> Ja.

Mist... Ich könnte ja versuchen, vom PC mit nem teminalprogramm mit 
verschiedenen baudraten mal zu senden und wenns nicht klappt, dann halt 
Haken dran.

von Monk (Gast)


Lesenswert?

Ronny schrieb:
> Ich könnte ja versuchen, vom PC mit nem teminalprogramm mit
> verschiedenen baudraten mal zu senden

nur WAS willst du senden?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ronny schrieb:
> Mist... Ich könnte ja versuchen, vom PC mit nem teminalprogramm mit
> verschiedenen baudraten mal zu senden und wenns nicht klappt, dann halt
> Haken dran.

Du kannst auch ein Programm schreiben, das nacheinander für verschiedene
Baudraten zufällige Daten hinausballert. Wenn dann irgendwann etwas
angezeigt wird, weißt du, dass du auf dem richtigen Weg bist, und kannst
die Sache näher eingrenzen.

Wenn die Firmware die Nachrichten aber per Prüfsumme auf Korrektheit
testet und diese Prüfsumme auch eine der unzähligen CRC-Varianten ist,
wirst du ewig am Herumprobieren sein.

Ronny schrieb:
> Einen ATiny2313 müsste ich mir erst besorgen und dann könnt ichs
> mal versuchen selbst zu programmieren... so gleich als Übung.

Du kannst auch einen anderen nehmen, musst dann halt eine Adapterplatine
anfertigen.

von Ronny (kraftstrom)


Lesenswert?

Matthias S. schrieb:
> Ronny schrieb:
>> Variiert das so sehr, was als Zahlen
>> gesendet werden kann?
>
> Die Frequenz des Quarzes kann dir zumindest vermitteln, ob du es da mit
> Standardbaudraten zu tun hast.

Da ist nen 12 MHz Quarz verbaut.

von H. H. (hhinz)


Lesenswert?

Ronny schrieb:
> Da ist nen 12 MHz Quarz verbaut.

Damit sind alle üblichen Baudraten von 300 bis 38400 bps möglich.

von Ronny (kraftstrom)


Lesenswert?

Monk schrieb:
> nur WAS willst du senden?

Zahlenwerte... da es eine Anzeige einer Waage war.

Yalu X. schrieb:
> Du kannst auch ein Programm schreiben, das nacheinander für verschiedene
> Baudraten zufällige Daten hinausballert. Wenn dann irgendwann etwas
> angezeigt wird, weißt du, dass du auf dem richtigen Weg bist, und kannst
> die Sache näher eingrenzen.

Um dazu ein Programm zu schreiben, fehlen mir die Kenntnisse. Gibt's 
sowas in irgendeiner Form fertig?

H. H. schrieb:
> Ronny schrieb:
>> Da ist nen 12 MHz Quarz verbaut.
>
> Damit sind alle üblichen Baudraten von 300 bis 38400 bps möglich.

Das ist schonmal eine ordentliche Spanne.

Es scheint wohl wirklich schwer, mit der gegebenen Hardwarekonstelation 
was auf die Anzeige zu gekommen.

von Thomas Z. (usbman)


Lesenswert?

H. H. schrieb:
> Damit sind alle üblichen Baudraten von 300 bis 38400 bps möglich.

Bei 12MHz sind nur max 2400 Bd erreichbar, mehr geht nur mit einem 
Baudratenquarz (11.059MHz). Der 89C2051 hat keinem Timer2.

von H. H. (hhinz)


Lesenswert?

Thomas Z. schrieb:
> Der 89C2051 hat keinem Timer2.

In der Tat. Ich hatte dem kleinen mehr zugetraut.

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


Lesenswert?

Dann kann man einen dieser kleinen CH340/341 USB/UART-TTL Adapter an den 
PC hängen und an den MC und dann mit z.B. HTerm einfach was senden.
Das wird nicht lange dauern und da kommt was. Gibt ja nicht mal 
Handshake oder sowas.

von Harald K. (kirnbichler)


Lesenswert?

Die Übertragungsparameter (Baudrate, Parity etc.) herauszufinden, ist 
das eine, aber das Protokoll, mit dem das Ding seine Daten bekommen 
will, durch reines Raten herausfinden zu wollen, ist ... ein bisschen 
wie die Geschichte mit den Schimpansen und den Shakespeare-Sonetten.

Es kann sein, daß da ASCII-Text mit CR oder LF gesendet wird:

"01234\n"

Es kann aber auch sein, daß der Wert als Binärzahl gesendet wird, und 
das wiederum in irgendeinen Protokollrahmen verpackt wird.

Die Binärzahl kann natürlich auch "packed BCD" sein, weils dann leichter 
zu decodieren ist.

Und für die Gestaltung von Protokollrahmen gibt es schier unendlich 
viele Möglichkeiten.

von Monk (Gast)


Lesenswert?

Ronny schrieb:
>> nur WAS willst du senden?
> Zahlenwerte... da es eine Anzeige einer Waage war.

Die spannende Frage ist: Wenn man eine 12 (binär) oder 12 (BCD) oder 
"12" (ASCII) codiert an das Display sendet, wird es dann auch "12" 
anzeigen?

Was ist, wenn das Display Kommandos erwartet, zum Beispiel?:

10 Anzeige ein schalten
11 Anzeige aus schalten
12 In den Standby Modus gehen
13 Heller
14 dunkler
2xxxx Eine Zahl xxxx ausgeben
9A5FC Blockade nach unerwartetem Kommando/Daten zurücksetzen

Oder noch komplexer: mit Prüfsummen, oder gar verschlüsselt.

Versuche den einfachen Fall, aber sei nicht allzu enttäuscht, wenn du 
per Trial&Error nicht hinter das Kommunikationsprotokoll kommst.

von Ronny (kraftstrom)


Lesenswert?

Hallo an alle,
vielen Dank für eure Antworten. Nach meinem Urlaub werd ich mich mal 
dranstürzen und berichten.

Habt ein schönes Rest Wochenende.

Mit freundlichen Grüßen

von Peter D. (peda)


Lesenswert?

Harald K. schrieb:
> Die Übertragungsparameter (Baudrate, Parity etc.) herauszufinden, ist
> das eine, aber das Protokoll, mit dem das Ding seine Daten bekommen
> will, durch reines Raten herausfinden zu wollen, ist ... ein bisschen
> wie die Geschichte mit den Schimpansen und den Shakespeare-Sonetten.

Ich hatte mal ein Gerät, was mit Timeouts arbeitete. Mit Direkteingabe 
war da also nichts. Im Manual wurde empfohlen, ein Kommando in einem 
Texteditor zu schreiben und dann per C&P ins Hyperterminal zu kopieren. 
Nur dann kam auch eine Antwort.
Wer Protokolle mit Timeout erfunden hat, der gehört geteert und 
gefedert.

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Ronny schrieb:
> vielen Dank für eure Antworten. Nach meinem Urlaub werd ich mich mal
> dranstürzen und berichten.

Dann bin ich mal gespannt... denn, wenn die Leute so was schreiben, dann 
kommt da oft gar nix mehr von denen, nicht einmal ein leises Kukuryku 
aus der Brust.

von Ronny (kraftstrom)


Lesenswert?

Gregor J. schrieb:
> Ronny schrieb:
>> vielen Dank für eure Antworten. Nach meinem Urlaub werd ich mich mal
>> dranstürzen und berichten.
>
> Dann bin ich mal gespannt... denn, wenn die Leute so was schreiben, dann
> kommt da oft gar nix mehr von denen, nicht einmal ein leises Kukuryku
> aus der Brust.

Dann lass dich mal überraschen:-D

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ronny schrieb:
> Zahlenwerte... da es eine Anzeige einer Waage war.

Gibt es den Rest der Waage nicht mehr?

Sonst könnte man die Kommunikation zwischen den beiden Teilen abhören
und reverse-engineeren.

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Yalu X. schrieb:
> (...) reverse-engineeren (...)

Im Moment basiert alles nur auf einem kleinen Fotoausschnitt und 
aufgestellten Behauptungen einer Person, die – wie sie selbst von sich 
sagt – wenig Ahnung von µControllern hat, wie es abgeblich funktionieren 
könnte – alle sind dann auf den UART-Zug aufgesprungen und senden mit 
bzw. spinnen die These weiter, manche führen schon Streitgespräche 
darüber, was der UART angeblich kann oder nicht kann und sogar wieviele 
Timer der AT89C2051 hat, was angesichts der dargebotenen Informationen 
und Fakten nicht nur absurd, sondern in gewisser Weise auch ziemlich 
naiv ist – ist aber leider die gängige Praxis in diesem Forum. 
Vielleicht stimmt das mit der anfänglichen Annahme zu der Funktionsweise 
der Schaltung, von der es nicht einmal einen Fetzen vom Schaltplan gibt, 
vielleicht ist aber alles oder ein großer Teil davon auch ganz anders 
und die ganzen aus dem Finger gesogenen Eingangsüberlegungen sind 
einfach nur eine schöne Erzählung, von der manche so beigestert sind. 
Mit Reverse Engineering hat das wenig zu tun – es ist einfach nur ein 
Rätseln, wie es zufällig auch in der Überschrift des Themas steht, aber 
vielleicht mag der Autor ja auch Rätsel raten und die Leute ebenfalls, 
dann passt es ja auch ganz gut zusammen.

von Obelix X. (obelix)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

Gregor J. schrieb:
> Im Moment basiert alles nur auf einem kleinen Fotoausschnitt und
> aufgestellten Behauptungen einer Person, die – wie sie selbst von sich
> sagt – wenig Ahnung von µControllern hat, wie es abgeblich funktionieren
> könnte – alle sind dann auf den UART-Zug aufgesprungen ...

Wenn ich dich richtig verstehe, bezweifelst du diese Aussage:

Ronny schrieb:
> Am Pin 2, was der RX Anschluss ist, wird er noch über einen Transistor
> mit Daten versorgt.

Sie erscheint mir aber sehr plausibel, auch wenn auf dem Foto nicht alle
Details erkennbar sind. Für mich sieht es jedenfalls so aus, dass ein
über die rote Schraubklemme kommendes RS-232-Signal mit dem Transistor
und zwei Widerständen von +(3..15)V und -(3..15)V auf UART-kompatible 0V
und 5V umgesetzt (also invertiert und im Pegel begrenzt) wird. Ob das
dann tatsächlich an Pin 2 des Mikrocontrollers geht, kann man auf dem
Bild nicht erkennen. Da Ronny die Platine vor sich liegen hat und die
Leiterbahn verfolgen kann, wird das aber schon stimmen.

Jetzt ist eben die Frage, ob man an weitere Informationen herankommt,
bspw. die Firmware des AT89C2051 (s. Beitrag von Dieter) oder eine
Aufzeichnung der RS-232-Daten (s. mein letzter Beitrag). Stellt sich
beides als unmöglich heraus, bleibt nur zu hoffen, dass es sich um ein
ganz primitives Protokoll handelt, das durch geduldiges Ausprobieren
ermittelt werden kann. Oder man ersetzt die Firmware (ggf. zusammen mit
dem µC) durch eine Eigenentwicklung, was ebenfalls schon vorgeschlagen
wurde.

: Bearbeitet durch Moderator
von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Der wohl wichtigste Hinweis dürfte wohl dieser sein:

Ronny schrieb:
> Ich habe ein Anzeigeplatine mit 4 großen 7 segment Anzeigen drauf,
> welche mit einem 32 bit Schieberegister(UCN5833) verbunden sind. Dieser
> wird von dem AT89C2051 "gefüttert.

Die Anzeige hängt an einem Schieberegister, welches mit UART wohl nichts 
am Hut haben dürfte!

Ronny schrieb:
> Am Pin 2, was der RX Anschluss ist, wird er noch über einen Transistor
> mit Daten versorgt.

Welcher Pin 2 ist hier gemeint? Der des Controllers oder der des 
Schieberegisters.

UCN5833 ist ein ganz normales Schieberegister (mit eben 32-Bit) mit 
Standardanschlüssen: clock, data, strobe, output enable.

Einzig und allein eine serielle Datenleitung (an den TO, weil die 
anderen das garantiert wissen: seriell gibt es auch "außerhalb" von 
UART) reicht garantiert nicht, das Schieberegister zu bedienen.

Im Anhang siehe Datenblatt.

By the way: Taktübernahme bei steigender Flanke

von Erni (pudding)


Lesenswert?

Serieller Eingang mit RS232-Pegeln könnte schon sein, wenn es der rote 
Schraubklemmanschluß ist. Der Transistor als Inverter und Pegelwandler, 
die Diode kappt den negativen Pegel an der Basis, ein Widerstand vom 
Kollektor gegen +5V (dünne Leiterbahn, geht unterm IC zu Pin 20). Aber, 
der Kollektor geht auf Pin 9 des AT89C2051 und nicht auf den RX-Pin 2? 
Wäre merkwürdig, auf dem Foto ist keine Leiterbahn an Pin 2 zu erkennen. 
Oder sehe ich das falsch?

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Yalu X. schrieb:
> Wenn ich dich richtig verstehe, bezweifelst du diese Aussage:

Im Moment muss man alles in Zweifel ziehen, was der Autor und später 
andere sich selbst zusammengedichtet haben – ohne gute, komplette Fotos 
von beiden Seiten und ohne abgezeichneten Schaltplan und ggfs. 
zusätzliche Messungen ist das leider so, auch wenn Teile der Aussage 
einem durchaus plausibel erscheinen mögen. Er hat sich nicht einmal die 
Mühe gemacht, zu nennen, was das für ein Transistor ist – hier kann man 
nur vermuten, dass es z.B. ein NPN ist, vielleicht ein BC548, aber genau 
Vermutungen sind hier fehl am Platz. Ich darf in diesem Moment auch 
bezweifeln, dass es die vermeintliche UART-Kommunikation gibt und dass 
diese genau für die LED-Anzeigen bestimmt ist, und zwar so wie er oder 
alle sich das hier denken, weil sie sich von dem Gedanken haben blenden 
und leiten lassen, auch wenn alles bis dato in der Phantasie ersponnene 
sich am Ende vielleicht doch als richtig erweisen könnte. Also erstmal 
Fotos machen und Schaltplan (zumindest das Wichtgiste) abzeichnen, denn 
ohne diese grundlegenden Informationen sind das alles nur Spekulationen 
und Rätsel raten – das kann man auch von Hand mit Bleistift auf Papier 
zeichnen und Fotos machen ist heutzutage mit jedem Smartfon machbar. Und 
wenn das ein Gerät ist oder war, dann auch den Hersteller, die 
Modellnummer etc. versuchen zu ermitteln, denn damit kann man unter 
Umständen noch weitere Informationen im Netz finden.

: Bearbeitet durch User
von Erni (pudding)


Lesenswert?

Sorry, ich hatte Yalus Beitrag übersehen, in dem er schon auf die 
Pegelwandlung und Pin 2 hingewiesen hatte.
Wenn es tatsächlich, wie ich vermute, auf Pin 9 geht, wird es wohl kein 
UART-Signal sein.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Erni schrieb:
> Aber,
> der Kollektor geht auf Pin 9 des AT89C2051 und nicht auf den RX-Pin 2?

Die Leitung verläuft zwischen Pin 8 und 9. Es ist anzunehmen, dass sie
unterhalb des ICs zu Pin 2 weitergeführt ist.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Erni schrieb:
> Sorry, ich hatte Yalus Beitrag übersehen, in dem er schon auf die
> Pegelwandlung und Pin 2 hingewiesen hatte.

Kein Problem. Ich hatte oben vergessen, die Diode zu erwähnen, weswegen
dein Beitrag den meinigen vervollständigt.

von Erni (pudding)


Lesenswert?

> Die Leitung verläuft zwischen Pin 8 und 9. Es ist anzunehmen, dass sie
> unterhalb des ICs zu Pin 2 weitergeführt ist.

Gute Augen! Parallaxenfehler, sieht man auch bei den XTAL-Anschlüssen 
Pin 4 und 5.
Dann würde ich es doch einfach mal mit "1234\n" senden versuchen, über 
eine echte Serielle-COM mit RS232.

von Soul E. (soul_eye)


Lesenswert?

Ralph S. schrieb:
> Die Anzeige hängt an einem Schieberegister, welches mit UART wohl nichts
> am Hut haben dürfte!

Das Schieberegister hängt an einem Mikrocontroller. Das ist ein kleiner 
Computer, der die über RS-232 empfangenen Daten in Steuersignale für das 
Schieberegister umwandelt.

> Welcher Pin 2 ist hier gemeint? Der des Controllers oder der des
> Schieberegisters.

Pin 2 ist der RxD-Eingang des AT89C2051 Mikrocontrollers. Davor sitzt 
ein Transistor, der den RS-232-Pegel in TTL wandelt.

> UCN5833 ist ein ganz normales Schieberegister (mit eben 32-Bit) mit
> Standardanschlüssen: clock, data, strobe, output enable.

Und die werden von den GPIOs des Mikrocontrollers bedient.

: Bearbeitet durch User
von Christian M. (christian_m280)


Lesenswert?

Ronny schrieb:
> 20241005_043740.jpg
>
>             210 KB

Gibt's vielleicht noch scharfe, hochauflösende Bilder von der gesamten 
Vorder- und Hinterseite?

Gruss Chregu

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Erni schrieb:
> Dann würde ich es doch einfach mal mit "1234\n" senden versuchen, über
> eine echte Serielle-COM mit RS232.

Es gibt noch Dezimalpunkte, die so nicht angesteuert werden könnten, 
falls das wirklich eine Waage war und sie beim Anzeigen gebraucht 
werden. Das ganze Protokoll kann theoretisch nur 1-bytelang sein – damit 
hätte man das Problem der Synchronisation (das größte hier) damals so 
lösen können und auch wenn einer das nicht glauben mag, man kann damit 
alle 32 Segmente der Anzeige einzeln beliebig ein- und ausschalten und 
hätte in dem 1-Byte-Protokoll nebenbei noch Platz für sehr viele 
zusätzliche Befehle, wie dunkler, heller, EIN/AUS etc. Da die µC sehr 
wenig Speicherplatz haben, ist das Programm vermutlich in Assembler 
geschrieben und man muss auch beim SRAM auf den Verbrauch achten (musste 
ich damals auch, ich habe aber den AT89C4051 genommen und für größere 
Projekte den AT89C52), was mit so einer Kompaktheit des Protokolls im 
Einklang wäre, falls das wirklich der UART-Eingang für die Übertragung 
der Displaydaten ist, denn es kann genauso einfach etwas von einem 
Spezialsensor an dieser Stelle zum µC ankommen.

: Bearbeitet durch User
Beitrag #7749403 wurde vom Autor gelöscht.
von Christian M. (christian_m280)


Lesenswert?

Gregor J. schrieb:
> 1-bytelang sein – damit hätte man das Problem der Synchronisation (das
> größte hier) damals so lösen können und auch wenn einer das nicht
> glauben mag, man kann damit alle 32 Segmente der Anzeige einzeln
> beliebig ein- und ausschalten

Ja klar!

Gruss Chregu

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Christian M. schrieb:
> Ja klar!

Man muss es nicht auf 256 Befehle zerbröseln, da wir hier keine zwölf 
Digits, sondern nur „vier” haben – die 4 im Anführungszeichen, denn 
selbst die 4 Ziffern können einen Unerfahrenen mächtig ins Schwitzen 
bringen oder in die Verzweiflung treiben, aber theoretisch würde es 
sogar mit 15 Ziffern gehen (d.h. 120 Segmenten) – das Protokoll selbst 
wäre immer noch ein Byte lang und damit immer eindeutig, den gesamten 
Bildaufbau müsste man dann mit sehr vielen Befehlen vollführen, für alle 
Segmente bei 4 Digits wären mindestens 32 nötig, bei 15 Digits 
entsprechend mindestens 120. Bei 4 Ziffern kann man sich das Leben aber 
etwas leichter machen, indem man das Übertragungsbyte für sich im Kopf 
auf Nibbles aufteilt, z.B. als AAAADDDD – wobei A die Adresse bedeutet 
und D das Daten-Nibble und somit immer vier Bits auf einmal übertragen 
werden könnten, was deutlich angenehmer wegen der Anzahl der Sendebytes 
und damit verbundenen Verzögerung des Bildaufbaus ist (bei einer relativ 
niedrigen Baudrate kann sich das dann bemerkbar machen). Die ersten acht 
Adressen (0-7) wären beispielsweise für die LED-Segmente reserviert (8*4 
Bits=32 Bits), die restlichen acht Adressen (8-15) würden noch Platz für 
diverse Befehle bieten, insgesamt hätte man noch 128 Kombinationen frei 
zur Verfügung. Den Befehl für die Helligkeitseinstellung könnte man z.B. 
gleich nach den Displaydaten bei Adresse 8 machen und dessen 4 Datenbits 
dann für den Wert der Helligkeit verwenden (0-15, also 16 Stufen); das 
µC-System müsste die Helligkeitsregelung natürlich auch irgendwie 
unterstützen, notfalls auch als eine in software geschriebene 
PWM-Regelung umsetzen – bei einer Waage bräuchte man solche zusätzlichen 
„Spielereien” eigentlich nicht, Display EIN/AUS als Befehle reichen 
vollkommen aus. Das Protokoll selbst bleibt weiterhin nur 1-Byte-lang 
und eindeutig, der Bildaufbau hier benötigt dann nur noch mindestens 8 
Byte-Übertragungen (8x4=32Bits). Die Synchronisation ist immer 
gewährleistet, was im Gegensatz dazu bei längeren ASCII-Übertragungen 
(die heutzutage so beliebte Textkommunikation) einem immer entgleiten 
kann und wenn man keine Sicherheitsmechanismen und explizite 
Synchronisationszeichen einbaut, wird es irgendwann mal auf jeden Fall 
schieflaufen, aus dem Takt geraten. Man könnte sich noch andere 
Aufteilungsformen wie AAAAAADD oder umgedreht als DDDDAAAA ausdenken, 
falls nötig – diese vorgestellte Aufteilung auf zwei Nibbles sollte nur 
als Beispiel fungieren. Die Verwendung eines Displays mit acht Ziffern 
wäre damit auch noch gut realisierbar.

Übertragungsfehler kann es selbstverständlich auch bei einem 
1-Byte-Protokoll geben – wenn man Pech hat, geht z.B. das Display aus, 
weil das falsch Empfangene genau dieser Bytebefehl war. Solche Fehler 
kann man aber hardware- und softwaretechnisch reduzieren, indem man z.B. 
solche Befehle während der Übertragung der LED-Daten (wenn diese immer 
gleich abläuft) herausfiltert und gar nicht zur Ausführung freigibt, 
sondern sie ignoriert – ein Restrisiko bleibt trotzdem, denn irgendwann 
mal – z.B. nach den Bilddaten – will man auch irgendwelche Steuerbefehle 
übertragen, mit doppelter oder gar dreifacher Übertragung hintereinander 
könnte man das Risiko aber noch weiter absenken. Bei dreifacher 
Übertragung wären mindestens zwei gleiche Bytes das 
Entscheidungskriterium, um den Befehl auszuführen – das hat aber auch 
seine Schattenseiten, insofern wird man das Restrisiko so nicht los, bei 
einer Waage, die vom Drucksensor mit Daten gefüttert wird, kann man es 
codemäßig aber anders lösen. Für die Assemblerprogrammierung ist diese 
Kodierungsart deutlich einfacher zu programmieren als Strings zu 
empfangen, sie in Echtzeit zu untersuchen und umzuwandeln und wird 
vermutlich auch weniger Flash und vor allem RAM verbrauchen, was bei 
diesen µControllern ein großes Problem darstellt, denn in den 128 Bytes 
sind die Registerfiles integriert, es gibt ein Bitfeld und den Stapel 
muss man dort auch noch irgendwo so klug platzieren, dass man bei 
größerer Tiefe nicht auf die relevanten Dateninhalte fährt und diese 
versehentlich 'zerstört'. Der µC hat auch den SWAP-Befehl ($C4), um 
Nibbles zu tauschen, was einem Programmierer, der das in Assembler 
schreibt, viele Schiebeoperationen erspart und der Zugang zu den 
ankommenden Bytehälften somit deutlich schneller bewerkstelligt werden 
kann – was bei einem Nicht-RISC µController durchaus wichtig sein kann, 
denn selbst wenn er mit 12MHz laufen sollte, wäre er im Vergleich zum 
8-Bit-AVR, der auch mit 12MHz getaktet würde, eine lahme Ente. 
Beschleunigte C51-Derivate mit mehr Speicher gibt es für C51-Liebhaber, 
Mentalgefangene oder die Retroszene natürlich auch noch, aber im 
Normalfall ist das eine CISC-Architektur wie man sie von dem Urgestein 
8751 mit Quarzfenster kennt – heutzutage würde man sie als altbacken 
bezeichnen, die hier vorgestellte Art der Kommunikation (ohne die 
Möglichkeit einer Rückmeldung zu haben) und kurz erwähnten 
Schutzmechanismen kann man heutzutage aber genauso gut verwenden. Mit 
einer Full-Duplex-Kommunikation (als Handshake) kann man naturgemäß eine 
deutlich komplexere Kommunikation ohne ASCII-Texte realisieren, incl. 
Autosynchronisation im Falle einer mutwilligen Kabelunterbrechung und 
Wiedereinstecken etc.

: Bearbeitet durch User
von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Kann der TO damit etwas anfangen?
Er suchte doch einen Programmer und die passende Software dazu.

ciao
gustav

Beitrag #7750127 wurde vom Autor gelöscht.
von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Angehängte Dateien:

Lesenswert?

Karl B. schrieb:
> Kann der TO damit etwas anfangen?

Nun ja, was soll er damit schon anfangen können, wenn er sich mit
µControllern wenig auskennt.

Ich habe damals vor vielen, vielen Jahren sowohl meinen C51-Programmer 
als auch die PC-Software in VB6 für WinXP selbst gebaut und geschrieben 
– alte Fotos im Anhang. Der Kern des Programmers war dann auch ein C51 
als 40-Pinner, die Software natürlich von mir in Assembler geschrieben 
und die Kommunikation lief über den COM-Port, die USB-Buchse war nur für 
die Spannungsversorgung zuständig und die 12V wurden mit einem kleinen 
Solidwandler aus diesen 5V erzeugt. Funktionierte alles bestens, das 
Ding liegt bei mir zu Hause noch als Erinnerungsstück. Ich könnte das 
alles heute mit ganz anderen Möglichkeiten bauen und neugestalten (für 
Windows 10 und 11), nur fehlt mir die Zeit dazu, weil andere Projekte 
Vorrang haben, aber wer weiß schon, was in Zukunft noch passiert.

: 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.