Forum: Mikrocontroller und Digitale Elektronik Code für 7-Segmente Ausgabe


von der_Jan (Gast)


Lesenswert?

Hallo Microcontrollergemeinde,
habe mich einem kleinen Projekt unseres Vereins übernommen.
Ich möchte eine 7-Segmente Anzeigentafel bauen die eine Ziffer zwischen 
0-9999 anzeigt.

Die Daten kommen aus einer Datenbank und sollen über den USB-Port an 
einen Microcontroller gesendet werden der die Umwandung auf die LEDs 
dann vornehmen soll.

Gekauft habe ich mir bei MyAVR das Controller Board mySmartControl MK2 
16K (ATmega168) und das myAVR 7-Segment-Anzeige Projekt für die Ausgabe.
Leider habe ich festgestellt dass meine C-Kenntnisse doch sehr 
eingerostet sind  und  nicht ausreichen um den Controller zu 
programmieren.

Gibt es hier jemand der für kleines Geld den Code schreiben würde? Ist 
wie gesagt für einen kleinen Verein und damit auch irgendwie für einen 
guten Zweck.

So sollte das Moped arbeiten: Ein Numerischer Wert wird per USB an den 
Controller gesendet. Der Controller erzeugt die Ausgabe an den 7-Segment 
Anzeigen die solange dort angezeigt wird bis ein neuer Wert vom USB-Port 
übertragen wird und den Anzeigewert austauscht.

von Achim M. (minifloat)


Lesenswert?


von Jan N. (der_jan)


Lesenswert?

Ach ja, hier meine E-Mail Adresse: an_den_Jan@gmx.net

von Turbo T. (turbotoni)


Lesenswert?

Mit USB wird das nen bissl kompliziert.
Ich würde nen USB-V24 wandler empfehlen, der am Rechner wie eine 
Com-Schnittstelle angesprochen wird, und am avr mit nen Pegelwandler 
direkt an den V24 Anschluss kommt.

MfG Turbotoni

von Falk B. (falk)


Lesenswert?

@  der_Jan (Gast)

>So sollte das Moped arbeiten: Ein Numerischer Wert wird per USB an den
>Controller gesendet. Der Controller erzeugt die Ausgabe an den 7-Segment
>Anzeigen die solange dort angezeigt wird bis ein neuer Wert vom USB-Port
>übertragen wird und den Anzeigewert austauscht.

Also was eher einfaches. Ein kleiner AVR ala ATmega8 und ein FT232 sind 
deine Freunde.

MFG
Falk

von Peter D. (peda)


Lesenswert?

der_Jan schrieb:
> Die Daten kommen aus einer Datenbank und sollen über den USB-Port an
> einen Microcontroller gesendet werden der die Umwandung auf die LEDs
> dann vornehmen soll.

7-Segment macht Dir jeder Bastler.
Aber hast Du schonmal mit Datenbanken und USB programmiert?
Das ist kein Pappenstiel.
Da wirst Du wohl nen Profi brauchen und einige k€ hinblättern müssen.


Peter

von Jan N. (der_jan)


Lesenswert?

Mensch seit Ihr schnell.
Danke euch beiden erstmal.

@ Mini Float: Das ist schon sehr gut. Allerdings ist dort nur die 
Datenausgabe beschrieben.

@ Turbo Toni: Die Problematik mit der USB-Umwandlung habe ich im Vorfeld 
auch gesehen. Der mySmartControl MK2 mach die USB Umwandung über den USB 
2.0 zu seriell Konverter von SiLabs.
Wie gesagt, sprichst du leider mit einem Menschen, der sein Wissen 
überschätzt hat. Kannst du mir weiter helfen?

von Achim M. (minifloat)


Lesenswert?

myavr.de schrieb:
> mySmartControl MK2 16K
> [...]
> # anschlussfertiges USB-Modul, das sofort
> mit dem PC kommunizieren kann
> # stellt einen virtuellen COM-Port als
> Gerät im PC/Notebook zur Verfügung

myavr.de schrieb:
> my7-Segment Add-On, Bausatz
> [...]
> Ansteuerung des my7-Segment Add-On erfolgt
> über den BCD-to-7-Segment-Decoder und den Demultiplexer

Einfacher gehts echt nicht.
Das kann man sich aus Codeschnipseln usw, zusammendengeln.
mfg mf

von Jan N. (der_jan)


Lesenswert?

Hallo Peter,
hab mich wohl falsch ausgedrückt. Die Werte kommen aus einer Datenbank. 
Das ist schon umgesetzt. Als DB-Administrator bin ich darin etwas 
geschickter im Bereich Datenbanken als im Bereicht Microcontroller. -)

von Jan N. (der_jan)


Lesenswert?

Hallo Mini Float,
weil es so einfach aussah hab ich mir die Dinger gekauft.
Einfach ist es eben nur wenn man Ahnung hat was man tut (ja, ja wer 
keine Ahnung hat soll die Finger davon lassen).
Aber genau aus diesem Grund habe ich mich an das Forum gewendet.
Wie gesagt muss es kein Schaden für die Person sein der mir helfen kann.

von Falk B. (falk)


Lesenswert?

@  Jan Nie (der_jan)

>Wie gesagt muss es kein Schaden für die Person sein der mir helfen kann.

Du musst einfach deine Zahl als ASCII oder binär an einen virtuellen 
COM-Port senden, die Gegenstelle mit dem Silabs oder FTDI IC macht 
daraus eine RS232 Schnittstelle, welche sehr einfach im AVR empfangen 
werden kann.
Mein Tipp, nimm ASCII, einfacher geht es nicht.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART

MfG
Falk

von Jan N. (der_jan)


Lesenswert?

Hallo Falk,
danke für deine Info.
Das versehen ich und kann das nachvollziehen.

Nun aber zu meine Kernproblem. Ich benötige einen Code der von der 
ersten Zeile bis zur letzten Zeile den kompletten Ablauf enthält, weil 
ich die einzelenen Codestücke nicht wirklich verstehe. Das ist mein 
Problem.
Würde das jemand für mich machen?

von Falk B. (falk)


Lesenswert?

@  Jan Nie (der_jan)

>ersten Zeile bis zur letzten Zeile den kompletten Ablauf enthält, weil
>ich die einzelenen Codestücke nicht wirklich verstehe. Das ist mein
>Problem.
>Würde das jemand für mich machen?

Dazu braucht man zumindest einen Schaltplan. Wo gibt es den für deine 
Hardware?
Der Rest ist trivial, für jemanden der sich auskennt.

MfG
Falk

von Holger P. (Gast)


Lesenswert?

Ich bekomme dein

1. Controller Board mySmartControl MK2, 16K (ATmega168) und die myAVR 
7-Segment-Anzeige.
2. Ein Taschengeld damit ich weiteres Hühnefutter für meine Projekte 
Kaufen kann.
3. Du bekommst ein Programm in ASM und ein Schaltplan.

Ist das ein Deal?

von Achim M. (minifloat)



Lesenswert?

Hier mal Schaltpläne zu dem Kram. Gabs auf der myavr Seite. Deren 
Projekte-Verzeichnis ist m.E. etwas dürftig. mf

von Oliver J. (skriptkiddy)


Lesenswert?

Jan Nie schrieb:
> Nun aber zu meine Kernproblem. Ich benötige einen Code der von der
> ersten Zeile bis zur letzten Zeile den kompletten Ablauf enthält, weil
> ich die einzelenen Codestücke nicht wirklich verstehe. Das ist mein
> Problem.

Dann bleibt wahrscheinlich nur auf was fertiges zurückzugreifen:

- http://www.watterott.com/de/7-Segment-LED-Anzeige-blau-seriell
- http://www.obdev.at/products/vusb/prjdetail.php?pid=46

von Falk B. (falk)


Lesenswert?

@  Mini Float (minifloat)

>Hier mal Schaltpläne zu dem Kram. Gabs auf der myavr Seite. Deren
>Projekte-Verzeichnis ist m.E. etwas dürftig. mf

Und im Schaltplan für den AVR ist ein Fehler drin, der berühmte AREF 
Fehler. Ist für dein Projekt aber egal.
Und wirklich schön sind die Schaltpläne auch nicht.

OK, dann musst du nur noch sagen, wie du die ICs auf dem Anzeigeboard 
mit den Drahtbrücken anschließen willst und los gehts.
Den Rest kann man so programmieren. Die Hardware musst du nicht 
verschicken, auch wenn das für das Debugging besser wäre.

MFG
Falk

von Achim M. (minifloat)


Lesenswert?

UART-Empfang:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART#Empfangen_.28RX.29

Baudrateneinstellung muss natürlich auf deine Vorlieben geändert werden, 
ansonsten kann das direkt übernommen werden.

uart_string_complete kann im Mainloop ausgewertet werden:
1
if(uart_string_complete)
2
   {
3
      strcpy(number_buffer, uart_string);
4
      number_buffer_length = strlen(number_buffer);
5
      number_buffer_count = number_buffer_length;
6
      uart_string_complete = 0;
7
   }
8
else
9
   {
10
      //DeMultiplexer-Funktion
11
   }

DeMultiplexer-Funktion ASCII -> BCD:
String number_buffer Zeichenweise von hinten nach vorn abklappern und 
auf Siebensegment-Anzeige darstellen.
Dazu wurde schon mit strlen() die Länge festgestellt.
Was die Funktion tut:
# Die Globale Variable number_buffer_count enthält die Position der 
Dezimal-Stelle. Das gibt man auf den Multiplexereingang.

# number_buffer[number_buffer_count] enthält den Stellenwert. Dieser 
wird um das Zeichen '0' verkleinert, mit 0x0F ver-&-et und auf den 
BCD-Dekoder Eingang gegeben.

# number_buffer_count wird dekrementiert. Wenn number_buffer_count = 
255(Überlauf) muss man sie wieder auf den Anfangswert setzen: 
number_buffer_count = number_buffer_length;

Ergänzung:
Die Port-Inits. Das findest du im AVR-GCC-Tutorial.

mfg mf

von Jan N. (der_jan)


Lesenswert?

Erstmal vielen Dank an alle die sich mein Problem angehört haben und 
wirklich konstruktiv informiert haben. Das habe ich in noch keinem 
anderen Forum erlebt. Das ist echt super.
Gerne würde ich die Hilfe von Falk beanspruchen.

Hier die Beschreibung der Brücken der my7-Segment Anzeige:

AVR-Pin  PIN(74138) / Stellenauswahl
PD4      1            A 0
PD5      2            B 1
PD6      3            C 2

AVR-Pin  Pin(74HC4511) Zahlenwert
PB0      7             A0
PB1      1             A1
PB2      2             A2
PB3      6             A3

Ich habe den Testcode von der AVR Seite DL226: Testprogramm für das 
my7-Segment Add-On 
(http://shop.myavr.de/index.php?sp=download.sp.php&suchwort=testprogramm) 
mit dieser Brückeneinstellung laufen lassen. Hier werden die einzelnen 
Segmente durchgezählt.
Kann man damit etwas anfangen?

von Karl H. (kbuchegg)


Lesenswert?

Jan Nie schrieb:

> Kann man damit etwas anfangen?


Nicht wirklich.
Das ist einfach nur ein reiner Test. Aber so wie dort im Testprogramm 
gezeigt, würde man das in der Realität nicht machen. Ausserdem ist das 
in Assembler, was für dich als Einsteiger schon mal eine größere Hürde 
darstellt als ein C-Code.
Eine gemultiplexte 7-Segment Anzeige ist nun wirklich keine große 
Hexerei. Da du den PC-Teil schon erledigt hast, gehe ich davon aus, dass 
du zumindest irgendeine höhere Programmiersprache beherrscht.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

OK, wir wollen mal nicht so sein. Im Anhang der Code in BASCOM + Hexfile 
zum direkten Programmieren. Probier mal. Läuft mit 1200 Baud am 
COM-Port.

MfG
Falk

von Jasmin (Gast)


Lesenswert?

Und ich kann dir noch ne fertige 20 cm 7 Segment LED Anzeige 
spendieren..

Fertig.

von Jan N. (der_jan)


Lesenswert?

Hallo Falk,

tausend Dank für deine Mühe. Werde das direkt heute abend ausprobieren 
und dir eine Rückmeldung geben.

von Jan N. (der_jan)


Lesenswert?

Hallo Jasmin,
das ist ein tolles Angebot. Vielen Dank.
So etwas ähnliches möchte ich auch entwickeln.

Nehme dein Angebot gerne an.
Bin mir aber nicht sicher ob die Anzeigengröße und Helligkeit ausreicht.

Das was ich entwickeln möchte ist eine Anzeigentafel für ein Reitturnier 
eines kleinen ländlichen Reitvereins.
Diese Anzeigentafel zeigt die Pferdenummer an, die als nächstes in den 
Parcour einreiten soll. Bisher wird das freiwillige Helfer gemacht, die 
an einer Tafel stehen auf der die Pferdenummer in der Reihenfolge wie 
sie im Parcour erscheinen zu haben. Der Helfer streicht dann die 
Pferdenummer durch die eingeritten ist. Das ist ein etwas langweiliger 
Job für die Person an der Startertafel. Besonders weil die doofe Tafel 
an drei Tage (Freitag - Sonntag, morgens bis abends) mit freiwillige 
Helfer besetzt werden muss.

Zurück zum Thema:
Die gewünschte Größe der Ziffern für die Anzeige habe ich mir bei den 
Ziffern der Hindernisse im Parcour abgeschaut.
Diese haben ungefähr die Größe eines DIN A Blattes.
Der Reiter muss problemlos die angezeigte Nummern bis zu 60 Metern 
erkennen können. Erschwert kommt dazu, dass wir in der Vergangenheit 
glücklicherweise gutes Wetter hatten. D.H. Es gibt viel Umgebungslicht 
und die Anzeige muss sehr hell sein. Pro Ziffer habe ich 160 weiße 5mm 
Standard LEDs geplant die auf einen schwarzen matten Hintergrund 
leuchten.

Den Text hab ich geschrieben, damit die Menschen die hier helfen wollen 
wissen wofür das überhaupt ist.

von Falk B. (falk)


Lesenswert?

@  Jan Nie (der_jan)

>Diese haben ungefähr die Größe eines DIN A Blattes.
>Der Reiter muss problemlos die angezeigte Nummern bis zu 60 Metern
>erkennen können. Erschwert kommt dazu, dass wir in der Vergangenheit
>glücklicherweise gutes Wetter hatten. D.H. Es gibt viel Umgebungslicht
>und die Anzeige muss sehr hell sein.

Das schreit nach elektromechanischen Klappanzeigen, die haben auch kein 
Problem mit viel Sonne. Such mal im Forum, da gibt es ein paar Links.

> Pro Ziffer habe ich 160 weiße 5mm
>Standard LEDs geplant die auf einen schwarzen matten Hintergrund
>leuchten.

Nicht sinnvoll.

MFG
Falk

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

> Das schreit nach elektromechanischen Klappanzeigen,

Bezugsquellen: unter anderem Schrottplatz (aus alten Bussen)

von Jan N. (der_jan)


Lesenswert?

Danke für die Hinweise. Ich denke aber das es eine elektronische Anzeige 
sein muss.
Es dürfen keine unbekannten Geräusche auftreten und auch keine 
beweglichen Teile haben, denn Pferde sind Fluchttier.
Wenn 400-500Kg (ein Pferd auf dem du sitzt) der Meinung sind dass sie da 
nicht lang wollen weil dort etwas gefährliches gibt weil es unbekannt 
ist, sich bewegt oder sogar noch Geräusche macht, dann gibt es wirklich 
wenig Gegenargumente.
Noch viel schlimmer ist es in den kleinen Prüfungen, wenn die Mutter der 
talentfreien, nennen wir sie mal Chantale(Name frei erfunden) einen 
Diskussionsgrund erkennt da das Geräusch der Anzeigentafel das Pferd und 
die Reiterin doch so sehr gestört haben und ihr Kind jetzt im 
Wassergraben liegt. Du wirst mir sicherlich zustimmen, dass es dann mein 
Verschulden ist und nicht an dem Unvermögen der Reiterin liegt. -)

von Falk B. (falk)


Lesenswert?

@  Jan Nie (der_jan)

>Danke für die Hinweise. Ich denke aber das es eine elektronische Anzeige
>sein muss.
>Es dürfen keine unbekannten Geräusche auftreten und auch keine
>beweglichen Teile haben, denn Pferde sind Fluchttier.

Deutschland und seine Luxusprobleme. Die Geräusche der Klappanzeigen 
sind minimal, wenn die das Pferd nicht aushält darfst du auch nicht 
husten.
Und ein riesiger LED-Scheinwerfer irritiert nicht weniger.

Eieieiei

von Paul2 (Gast)


Lesenswert?

>Der Reiter muss problemlos die angezeigte Nummern
> bis zu 60 Metern erkennen können.

> Es gibt viel Umgebungslicht und die Anzeige muss sehr hell sein.

>Ziffern haben ungefähr die Größe eines DIN A Blattes.

>Ich denke aber das es eine elektronische Anzeige sein muss.


Nach Brösel würde Meister Röhrich jetzt sagen: "Das kost teuer Geld!"

von Falk B. (falk)


Lesenswert?


von Jan (Gast)


Lesenswert?

Hallo Falk,
ich bin dir noch eine Antwort schuldig.
Dein Code funktioniert einwandfrei. Vielen Dank. Du hast mir wirklich 
sehr geholfen.

Kann ich mich bei dir in irgend einer Weise erkenntlich zeigen?

Herzliche Grüße

Jan

von Max (Gast)


Lesenswert?

Kukstu (USB + 7Segment/LCD):
http://www.obdev.at/products/vusb/prjdisplay.html
Extra für dich hab ich dir auch gleich was passendes aus der Liste 
gesucht:
http://spiffie.org/kits/usb7 (is auch als Bausatz erhältlich)

von Falk B. (falk)


Lesenswert?

@Jan (Gast)

>Dein Code funktioniert einwandfrei.

Schön zu hören, und immer etwas überraschend, dass sowas blind 
programmiertes auf Anhieb klappt ;-)

>Kann ich mich bei dir in irgend einer Weise erkenntlich zeigen?

Naja, es gibt ja neben Freeware und Shareware auch Beerware ;-)
Ne, lass mal. Spende bei der nächsten Gelegenheit 5 Euro für einen guten 
Zweck.

MfG
Falk

von ProfiKram (Gast)


Lesenswert?

Hallo Jan,
ich hätte da was für Dich:

http://www.alpha-american.com/p-alpha-4160r.html

das 4160R könnte ich Dir für 250€ + Versand verkaufen
es ist gebraucht, aber voll funktionfsfähig

es besitzt eine RS232 und eine RS458 Schnittstelle (für 2draht)
ein passendes Modem schicke ich mit.

Du brauchst dann nicht mehr zu basteln, gell?
was meinste?

Gruß

von ProfiKram (Gast)


Lesenswert?

Nachtrag:
mein 4160R hat nur rote LEDs
ist also KEIN Tricolor so wie in dem Link und ist etwas 10 Jahre alt
der Rest sollte aber stimmen

von Falk B. (falk)


Lesenswert?

"The Alpha 4160R LED Electronic Sign is a state-of-the-art indoor , 
full matrix, tricolor LED display."

von Jasmin (Gast)


Lesenswert?

Habe ich alles schon fertig mit allem pipapo inclusive WLAN ansteuerung 
fertig gebaut.

Für Sporttuniere.....

Kosten minimal, für die Anzeige mit superhellen LED ca 40-50€ mit 
kompletter Leistungs Ansteuerung .

Im Sonnenlicht locker 50 Meter.

Komplette fertige Platinen noch vorhanden....

WLAN nchmal ca.40€ dazu. Rs 422/485 auch leicht möglich...

Pc gesteuert mit Visual Basic , Code ist sehr einfach..

Atmega 8 mit Bascom programmiert, trivial.

Steiner Ätt key Bindestrich it Punkt de.

von Jan (Gast)


Lesenswert?

Hallo zusammen,

ich bin überwätigt von euren guten Vorschlägen.
Vielen Dank.

Ich Freds tollen Code für den vorhandenen Microcontroller nutzen und die 
Anzeige selber entwickeln.

Man sein das es professionelle Lösungen gibt, aber möchte gerne die 
Anzeige nach meinen Vorstellungen umsetzen.

@Jasmin: Gibt es ein Fotos von eurer Anzeige? Bist du unter der E-Mail 
Adresse zu erreichen?

von Falk B. (falk)


Lesenswert?


von jasmin (Gast)


Lesenswert?


von Jasmin (Gast)


Lesenswert?

Fotos im Link von oben, Mail funktioniert mit der Adresse !

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Ich hab Dir mal gemailt.

von Jasmin (Gast)


Lesenswert?

@ michael g:

Nix angekommen.
Was ist deine absender domain ?

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.