Forum: Mikrocontroller und Digitale Elektronik 10 bit über LED ausgeben?


von Hannes (Gast)


Lesenswert?

Ich habe ein bestehendes Projekt mit einem Minicontroller, alle Pins 
sind belegt. Ich muss irgendwie den Messwert des ADCs (10 bit) 
"herausbekommen". Einzige Schnittstelle scheint mir eine LED zu sein die 
von einem Portpin gesteuert wird. Nur stehe ich gerade etwas auf dem 
Schlauch was den Blinkcode betrifft. Was kann man da machen um sich die 
Werte 0-1023 über eine LED anzeigen zu lassen?

von Eumel (Gast)


Lesenswert?

Mit einer Duo LED. Dann kannst du z.b.  Rot/Grün/Aus anzeigen. Rot für 1 
Grün für 0 und dazwischen eine aus Pause. Wenn du keine Duo LED zuhause 
hast kannst du auch einfach zwei einzelne nehmen :)

von H.Joachim S. (crazyhorse)


Lesenswert?

Naja, wenn du fit im Kopf bist, klappt das über ne LED. Du kannst auch 
morsen und das automatisiert empfangen :-)
Besser wäre was anderes. Z.b. PWM, Manchester-Code oder der hier 
ausführlich besprochene one-wire von Peter Danegger. Auch Software-UART 
ist geeignet.
Ne LED zum Zählen ist so ziemlich das letzte, was mir eingefallen wäre. 
Aber es geht natürlich trotzdem, wenn du dir eine geeignete Codierung 
einfallen lässt

von Verwirrter Anfänger (Gast)


Lesenswert?

Wenn das häufiger verwendet werden soll, würde ich mir die diversen 
Funkcodierungen mal angucken, Manchester und Morsen wurde ja schon 
genannt. Du könntest das auch per Infrarot rausschicken.


Wenn Du einfach nur schnell ein paar Werte "von Hand" auslesen willst 
würd ich das Bitweise rausgeben:

10: $n = 10
20: Zweimal schnell hintereinander blinken, ca. 0.5 sec an, 0.5 sec aus
30: falls $ZAHL & 0x01, LED an
40: warte 2 sec
50: $ZAHL = $ZAHL / 2
60: $n = $n-1
70: Wenn ($n > 0) GOTO 20

dauert ca. 30 sec pro Wert. Aber bei mehr als 5 Werten wirds 
wahrscheinlich nervig.

von Chris L. (kingkernel)


Lesenswert?

Willst du den Wert direkt ablesen können?
Sonst würde ich mit einem Fototransistor an die LED gehen und diese bei 
einer logischen eins im bitmuster für 100µs abdunkeln. das ganze dann 
mit einem weiteren µC auswerten und anzeigen lassen.
Wenn du den wert selbst ablesen willst, kannst du einmal aufblitzen für 
1 und zweimal aufblitzen für 0 nehmen.

Welchem Zweck dient das denn? Debugging? Oder soll das ein dauerhafter 
Zustand werden.

von uart (Gast)


Lesenswert?

Einfach rausmorsen. Vgl. RS232. Startbit und dann deine 10 bit. Das 
ganze dann per oszi oder logicanalyzer aufzeichnen und von Hand 
decodieren oder eben sehr langsam morsen.

von Hannes (Gast)


Lesenswert?

Ich will das Ding quasi nur einmal auslesen. Das heißt vielleicht 10 
Werte oder so aufnehmen zur weiteren Verarbeitung. Daher möchte ich 
keine zusätzlichen Empfänger basteln, eine Duo LED geht auch nicht.
Die Codierung vom "verwirrten Anfänger" ist schon mal ein Ansatz. 
Einfacher geht es wahrscheinlich nicht, oder?

Edit: Das RS232 Morsen werd ich mir gleich mal ansehen. Danke.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

nimm mal zeitbasis 1 sec, 0 kurz (0,2s) 1 lang (0,8s), pause 5 s, also 
etwa so wie DCF77. Da kannst du noch mitschreiben.

Gruss Reinhard

von Schlumpf (Gast)


Lesenswert?

Oder du gibst es dezimal aus.
Jede Stelle repräsentiert durch die Anzahl der Blinkvorgänge.

Davor ne Startkennung (z.B. LED lange an)
Dann z.B, die Zahl 0723
0 = LED aus.
Danach eine Sequenz, die dir den Wechsel auf die nächste Stelle 
signalisiert. zB. ein Burstpaket durch mehrmaligen schnellen Wechsel 
zwischen An und Aus.
7 = LED blinkt sieben mal
Burstpaket
2 = LED blinkt zwei mal
Burstpaket
3 = LED blinkt drei mal
Pause = LED aus

Aber zum öfteren "zu Fuß" auslesen ist das glaub echt mehr als nervig.
Ich würde mir da was für die RS232 Schnittstelle stricken und mit dem 
einen Pin die TX-Leitung imitieren, und den Messwert einfach in nen 
Rechner tickern..

von H.Joachim S. (crazyhorse)


Lesenswert?

Oder als MFV-Signal, das geübte Ohr kann das...:-)

von Schlumpf (Gast)


Lesenswert?

Ähh mal ne blöde Frage,
wenn du das nur EINMAL verwenden willst, und du in der Entwicklung 
deines Projektes steckst, warum stöpselst du dann nicht einfach den 
Debugger dran und schaust nach, was dein AD-Wandler so treibt?

von Andreas D. (rackandboneman)


Lesenswert?

"Minicontroller"

Vgl. "Minicomputer", also ein in SSI/MSI aufgebauter Controller? :)

Aber welchen Typs?

von Hannes (Gast)


Lesenswert?

Bei dem µC handelt es sich um einen Attiny13. Die Umgebung ist low-cost, 
selbstgebastelter Parallelportprogrammer, programmiert wird in Bascom.
Debugging wäre sehr interessant, ist aber nur mit der teuren original 
Atmel Hardware möglich. Da bin ich einfach zu geizig für ;)
Evtl. gibt es ja noch andere Möglichkeiten des Debuggings? Bin für 
Vorschläge offen..
Den ADC hab ich jetzt über eine Art Binärcode ausgelesen, war am 
schnellsten gebastelt. Ist aber etwas mühsam und dauert etwa 8s pro 
Wert.

von Electronics'nStuff (Gast)


Lesenswert?

Hannes schrieb:
> Evtl. gibt es ja noch andere Möglichkeiten des Debuggings?

Naja, das mit der LED z.B.
Perfekt wäre natürlich (wenn du ein paar Pins frei hast) ein Display.

Darum nehme ich eig. immer einen grösseren Controller und lasse einen 
Port frei, da kannst du locker ein Display im 4-Bit Betrieb betreiben 
und das Debugging ist so sehr komfortabel.

von Karl H. (kbuchegg)


Lesenswert?

Electronics'nStuff schrieb:
> Hannes schrieb:
>> Evtl. gibt es ja noch andere Möglichkeiten des Debuggings?
>
> Naja, das mit der LED z.B.
> Perfekt wäre natürlich (wenn du ein paar Pins frei hast) ein Display.

Und zur Not, wenn alle Stricke reißen, kann man die Schaltung ja auch 
erst mal so verändern, dass man einzelne Teilaspekte des Programms 
unabhängig von allem anderen erst mal testen kann.

Auch auf einem Tiny13 kriegt man normalerweise noch die 3 Pins frei, die 
man braucht um sich mit einem oder 2 595 eine Porterweiterung zu 
basteln, an die man ein paar 7_segment bzw. ein LCD ansteuern kann. Wenn 
man tatsächlich nur noch einen Pin hat, könnte man auch mit einer 
Software-UART und dann wahlweise auf PC und/oder LCD was hinkriegen.

Aber im Grunde hat Electronics Stuff schon recht. Die ganz kleinen Tiny, 
mit ihren 5 nutzbaren Pins, sind im Grunde nicht wirklich zur 
Entwicklung geeignet, wenn man noch nicht so weit ist, dass man es sich 
zutrauen würde, auch mal 'im Dunkeln' zu programmieren.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Reinhard Kern schrieb:
> nimm mal zeitbasis 1 sec, 0 kurz (0,2s) 1 lang (0,8s), pause 5 s, also
> etwa so wie DCF77. Da kannst du noch mitschreiben.

So ähnlich mache ich es auch schon seit Langem, hat sich wirklich 
bewährt!

Zur Ausgabe eines Bytes sende ich alle 8 Bits nacheinander, vom MSbit 
bis zum LSbit. Für ein 1-Bit blinkt die LED lang auf, für ein 0-Bit ganz 
kurz. Die Ausgabe eines ganzen Bytes dauert dann so grob zwischen 5 und 
10 Sekunden.

Bei den ersten zwei oder drei Mal musste ich noch mitschreiben, dann 
hatte ich mich an die etwas seltsame "Zahlendarstellung" gewöhnt.

@Karl Heinz:
Du hast Recht, die kleinen ATtinys (z.B. ATtiny13A) sind sehr mager, was 
die I/O-Pins betrifft, aber halt schön handlich, ich mag sie einfach.

von Wilhelm F. (Gast)


Lesenswert?

Markus Weber schrieb:

> Reinhard Kern schrieb:
>
>> nimm mal zeitbasis 1 sec, 0 kurz (0,2s) 1 lang (0,8s), pause 5 s, also
>> etwa so wie DCF77. Da kannst du noch mitschreiben.
>
> So ähnlich mache ich es auch schon seit Langem, hat sich wirklich
> bewährt!

Zustimmung. Exakt so mache ich es auch, ein Board hat nur eine LED, und 
das ist sogar auch noch die LED der LWL-Schnittstelle. Da ich diese oft 
nicht benötige, lasse ich mir dort einen DIP8-Schalter ausgeben. 
Allerdings nur 8 mal blinken, 2 mal mehr wäre aber auch kein Thema.

OK, ich muß auch überhaupt gar nicht rechnen, sondern nur direkt die 
Blinkcodes mit den Schalterstellungen vergleichen. Vielleicht hält das 
jemand für Nonsens, aber die DIP-Schalter sind bei mir auch nur seriell 
über 2 Pins eingelesen, ich vermutete da früher mal eine Störung. 
Kontrolle ist eben besser.

Ich hatte mir die Blinkerei auch bei DCF77 abgeschaut. Eines meiner 
Boards mit DCF77-Uhr hat gleich mehrere Status-LEDs, wo ich an einer das 
Empfangssignal als direkte Sichtkontrolle wieder ausgebe.

Als ich noch Telefonanlagen bei Kunden installierte, und auch die 
kundenspezifische Anwendungsprogrammierung machte, kam mir eine Anlage 
mal unter, die einen einzelnen Siebensegment-Baustein innen auf der 
Platine hatte. Das war was ähnliches. Dort wurden zur 
Anlagenprogrammierung mehrstellige Programmcodes Dezimalzahlen als 
Einzelziffern auch mit Blinken ausgegeben, man muß dann die Zahl seriell 
aus Einzelziffern lesen. Hinter einer Zahlenkolonne kam zur Abgrenzung 
eine Pause. Die Sache wiederholte sich endlos, bis man eine Zahl notiert 
hatte, und eine Taste am Programmieradapter drückte. Für jede 
Anlagenfunktion gab es eine eigene Zahl. Im Grunde ist das ähnlich wie 
mit einer einzelnen LED. Nur muß man bei der LED noch minimal selbst 
rechnen. Den Anlagentyp sah ich nur seltenst, setzte sich auch nicht 
groß durch, ich nutzte sie ab und zu als vorläufiges Provisorium für 
einen Kunden, bis die bestellte gewünschte Anlage geliefert wurde. So 
macht man das, und signalisiert dem Kunden schon mal mit schneller 
Hilfe, daß man alles machbare tut. Eine Anlagenbestellung dauerte immer 
etwas, wie bei Neuwagen. Solche Preisklassen hat man nicht mal eben auf 
Lager liegen, und muß auch passend abgestimmt werden. Es ist eine Weile 
her, gut 20 Jahre, die ersten Mikroprozessoranlagen. Den 
Programmieralgorithmus hatte man noch auf Papier, in der 
Serviceanleitung.

Es geht mal, wenn man nichts anderes zur Verfügung hat, bzw. weil der 
Anlagenhersteller am Programmierkomfort gespart hat. Das Ding mit dem 
einzelnen Siebensegment-Baustein war also definitiv eine Sparmaßnahme an 
Hardware in der Anlage, Entwicklungskosten, Aufwand, aber auch 
Verkaufspreis. Jedenfalls sah ich so einen Gerätetyp mit dieser 
Programmiertechnik nur ein einziges mal im Leben. Ein Sinn steckt 
trotzdem dahinter: Es reicht aber einfach aus, da eine Anlage im Laufe 
ihres Lebens meistens nur ein einziges mal programmiert wird. Allenfalls 
2-3 mal noch ne Kleinigkeit umprogrammiert, bis es dem Kunden gefällt, 
mehr aber nicht. Einzig der Monteur muß sich damit mal eine Stunde herum 
schlagen.



@ Hannes:

Ist dein Notebook kaputt? Mit einer einzigen Tx-Leitung an deiner 
Schaltung und Masse könntest du dir Werte auch direkt an einem 
Terminalfenster anzeigen lassen. Voraus gesetzt, eine RS232 am Notebook. 
Selbst wenn der Pin kein UART ist, aber per Bitbanging.

von Sven B. (scummos)


Lesenswert?

Wenn du ein Digitaloszilloskop hast, geht das ja sehr bequem wenn du 
einfach in Binary mit "langen" (1ms?) Pausen zwischendrin das Signal auf 
die Leitung schickst. Ansonsten halt, wie gesagt, dasselbe Verfahren nur 
mit langen Pausen und manuellem Mitschreiben. ;)
Evtl. kannst du auch mal versuchen das an die Soundkarte zu hängen und 
mit Audacity auszuwerten. ;)

von Frank (Gast)


Lesenswert?

Warum nicht eine gepulste PWM und ein Oszilloskop? Oder ein Pseudo 
Oszilloskop über eine SOundkarte?

Noch besser wäre ein serielles Protokoll und Anzeige eines 10 Bit Busses 
mit einem Logic Analyzer.

von Sven B. (scummos)


Lesenswert?

Oh, ja, wenn du das gleiche Ergebnis periodisch immer wieder ausgibst, 
geht das auch mit einem analogen Oszilloskop wahrscheinlich sehr gut.

von Falk B. (falk)


Lesenswert?

Andere Leute würde einfach mittels Soft-UART dort massenhaft Daten sehr 
einfach lesbar ausgeben.

von Wilhelm F. (Gast)


Lesenswert?

Falk Brunner schrieb:

> Andere Leute würde einfach mittels Soft-UART dort massenhaft Daten sehr
> einfach lesbar ausgeben.

So mache ich es. Die LED-Methode, wenn aus irgend einem Grund kein PC 
verfügbar ist.

von Henning (Gast)


Lesenswert?

Wie wärs mit nem Schieberegister, und dort ein paar LEDs dranhängen??

von Malte S. (maltest)


Lesenswert?

(Soft-)UART wurde jetzt schon oft erwähnt. Spricht sehr viel für. Frage 
mich, was dagegen spricht. Wenn der TO über den Parallelport flasht, 
wird ein serieller wohl erst recht verfügbar sein. Da ist der Kram mit 
LEDs doch masochistisch - wenn auch grundsätzlich völlig gerechtfertigt 
und interessant, darüber nachzudenken.

von Electronics'nStuff (Gast)


Lesenswert?

Malte S. schrieb:
> Frage  mich, was dagegen spricht.

Naja wahrscheinlich kann das der TE nicht.

Henning schrieb:
> Wie wärs mit nem Schieberegister, und dort ein paar LEDs dranhängen??

An einen Pin?

von Harald W. (wilhelms)


Lesenswert?

Hannes schrieb:

> Was kann man da machen um sich die
> Werte 0-1023 über eine LED anzeigen zu lassen?

Nun, man sollte gut im Kopfrechnen sein, um den Blinkcode schnell
in eine konkrete Zahl umrechnen zu können. :-)
Gruss
Harald

von Peter D. (peda)


Lesenswert?

Man kann sich auch ein Miniterminal bauen, wenns ohne PC gehen soll:

Beitrag "LCD über nur einen IO-Pin ansteuern"

von Andreas D. (rackandboneman)


Lesenswert?

Man könnte - wenn der Rest des Codes damit klarkommt auch den Pin für zB 
X mal 10 Mikrosekunden anlassen und dann Pause machen - Vorteil ist dass 
man auf die Weise einen proportionalen Wert auf einem normalen 
Frequenzzähler ausgeben kann (den man dann natürlich noch mit einem 
Faktor verrechnen muss ausser man kann in glatten Mikrosekunden oder 
10-Mikrosekunden Pins schalten!)....

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.