Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Projekt - wieder mal-


von TobyTetzi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe nun einen Teil meines Projektes fertig.

Ich steuere jeweils 20 LEDs mit einem Mega8 direkt an.
Insgesamt 4 MCs mit insgesamt 80 LEDs.

Zudem kommt ein Interrupt auf Int0, dem im Moment alle 4 MCs bekommen.

Nun würde ich gerne, bevor ich Platinen entwerfe und bestelle,
meine weiteren Ideen verwirklichen.

Ich stelle mir vor, einen Mega8 als SteuerMC zu nutzen.
Dann vier MC zum steuern der LEDs.
Eine MM Karte auf der verschiedene Tabellen für die einzelnen vier MC
sind, welche der SteuerMC an die vier LED-MCs weitergibt.

Desweiteren würde ich gerne per Fernsteuersignal zwischen verschiedenen
Bildern umschalten können.

Wer kann mir bei diesem Projekt weiterhelfen.

Ich würde gerne auch zB. die Uhrzeit oder die aktuelle Drehzahl in
verschiedenen Bildern anzeigen.
Evtl. etwas scrollenden Text?!
Oder vielleicht Überblendungen zweier Bilder?

Außerdem sollte vielleicht jemand mein Programm mal ansehen und evtl.
verbessern, da ich momentan sehr kompliziert die Bitmuster
an die LEDs gebe!

Wenn ich einen Mega8 als Steuer MC nutzen will, stimmt das Programm eh
nicht mehr!
Ebenso, wenn ich zwischen verschiedenen Bildern Umschalten will.

Mit der Hardware Ahnung hapert es auch noch, ich habe zwar schon eine
Platine mit Target erstellt, aber ob das alles so passt
(Leiterbahnendicke, Konmdensatoren, Footprints....)

Würde mich sehr über Hilfe freuen!

Gruß Toby

von Aleksej (Gast)


Lesenswert?

Wozu brauchst du 4 MCUs, das geht doch viel einfacher, ich glaube nicht,
dass du die höhe Frequenz einsetzen wirst. Mach es doch lieber mit
Logik-Bausteinen, das spart Geld und Aufwand.

von TobyTetzi (Gast)


Lesenswert?

Hallo,

ich würde ja gerne nur einen MC nutzen, das würde einiges einfacher
machen, zb. die Platinen.
Nur leider glaube ich, das es nicht Möglich sein wird, bei
einem Rotierendem Teil ( ca. 1500 U/min), noch Daten an
andere Bausteine zu schicken.

Oder wie meinst Du das?
Hast Du ein Beispiel?

Gruß Toby

von Markus (Gast)


Lesenswert?

Du hast 25 Umdrehungen pro Sekunde. Wieviele Positionen? Ich rate jetzt
einfach mal 200. Dann sind das 25*200=5000. Du hast 80 LEDs, das sind
dann 400.000 Bit bzw. 50.000 Bytes pro Sekunde. Das wäre das Limit vom
I²C-Bus im Fast-Mode, aber z.B. der SPI-Bus macht da noch deutlich
mehr.

Also würde ich 10 Schieberegister mit SPI (z.B. 74HC595) benutzen und
diese an einen ATMega8 anschließen.

Markus

von Fritz Ganter (Gast)


Lesenswert?

Aber das Bild ist hübsch!

von Hans (Gast)


Lesenswert?

ich würd da einfach 3 ports zum led ansteuern verwenden...

2 ports für cs von latches und 1 port mit daten... damit könntest du
128 leds ansteuern... wenn du einen mega64 oder 128 nimmst hast genug
leitungen... dann bist auf jeden fall schnell genug ....

oder du kaskadierst schieberegister...das ist zwar langsamer aber
braucht ned soo viele pins...

73 de oe6jwf / hans

von TobyTetzi (Gast)


Lesenswert?

Hallo,

Momentan habe ich 240 Segmente.

Allerdings brauche ich bei größerem Umfang entsprechend mehr Segmente,
da der Abstand zwischen den Segmenten sonst zu groß wird.
(am äüßerem Ende)

Ich plane einen Durchmesser von 1,20m.
Mit 360 Segmenten wären die äußeren LEDs schon ca 10mm außeinander.
Da würde ich schon ca 1000 Segmente nutzen wollen.

Wie genau funktioniert so eine Ansteuerung von 10 Schieberegister mit
SPI (z.B. 74HC595) ???

Können damit alle LEDs einzeln, gleichzeitig und unabhängig von
einander an sein?
Dabei lag nämlich schon mal das Problem.
Ich könnte zwar alle LEDs einzeln ansteuern, aber zB.
LED 1 und LED 2 gleichzeitig ging dabei nicht.

Vielleicht kann mir jemand einen Schaltplan zukmmen lassen?

Gruß Toby

von Markus (Gast)


Lesenswert?

1,2m Durchmesser bei 5000U/min ist schon recht heftig. Hast Du keine
Bedenken, daß sich so eine Konstruktion einfach zerlegt?

Mit einem (bzw. 10) Schieberegister kann man natürlich alle LEDs
einzeln ansteuern. Allerdings solltest Du überprüfen, ob sie genug
Strom für Deine LEDs abgeben bzw. ob bei 1000 Segmenten Deine LEDs noch
hell genug sind.

Einen Schaltplan gibts z.B. hier:
http://wiki.mikrocontroller.net/wiki/Porterweiterung_mit_SPI

Benutzt wird das so: Auf MOSI werden die Bits rausgeschrieben, SCK ist
der dazugehörige Takt. Diese Bits erscheinen aber noch nicht sofort an
den Ausgängen, sondern erst wenn ENable aktiviert wird.

Du schreibst hier also die 80Bit raus und dann aktivierst Du EN. Danach
wieder 80 Bit schreiben und EN setzen usw. usf.

Für die hier nötige Geschwindigkeit (1000 Segmente  80LEDs  25Hz =
2.000.000 Bit/s) brauchst Du unbedingt Hardwareunterstützung für SPI im
Mikrocontroller, aber das hat der ATMega8.

Markus

von TobyTetzi (Gast)


Lesenswert?

Hallo Markus,

das würde ja heißen, ich könnte alle paar cm in meinem Rotorblatt einen
74HC595 einsetzen, die 8 LEDs daran,
und angesteuert wird alles von nur einem Mega8 ?!
Richtig?

Das ist eine Klasse Sache.

Vielleicht kannst Du mir auch noch sagen, wie ich eine MMC Karte
nutzen kann, um davon meine "Bilder" zu laden?

Gruß Toby

von Markus (Gast)


Lesenswert?

Ja, genau, so einfach sollte das funktionieren.

Allerdings fällt mir gerade auf, daß man für 1000 Segmente * 80 LEDs ja
etwa 10KB Speicher braucht. Die hat ein Mega8 aber nicht. Und ob man die
zeitlich passend von der MMC Karte lesen kann ist fraglich. Da die Daten
ja ins RAM müssen und der Mega8 nur 1KB hat, mußt Du also mit etwa
250KByte/s von der MMC Karte lesen und mit der selben Geschwindigkeit
per SPI rausschreiben. Das Timing muß dabei recht exakt sein, weil man
das sonst ja bei der Ausgabe sieht.

MMC Karten werden glaub über ebenfalls über den SPI-Bus angesteuert,
was die Sache hier sicher nicht einfach macht. Das Thema MMC war hier
aber schon öfters dran, also einfach mal hier im Forum danach suchen.

Markus

von TobyTetzi (Gast)


Lesenswert?

Hallo,

könnte ich, statt 8 74HC595 in Reihe, auch einen Port des Mega8
nehmen, und an jedem Portpin die Daten für die 8 HCs gleichzeitig
ausgeben?

Dann würde ich doch Zeit sparen.

Statt 64 Bit nacheinander auszugeben,
würde man 8x8 Bit ausgeben.
Das wäre immerhin 8 mal schneller?!

Hat jemand evtl. einen Asembler Code zum ansteuern der HCs ?

Gruß Toby

von Hagen (Gast)


Lesenswert?

Das HW-SPI kann im Hintergrund arbeiten und schiebt 8 Bits in 16 MCU
Takten raus. 1 MCU Takt benötigst du um die Daten an's SPI zu
übergeben. Somit benötigst du 17 Takte pro 8 Bit um die Daten zu laden,
ein Postprocessing zu machen und rauszuschieben = 17/8 = 2.125.
In deiner Methode würde alles per Software laufen. Du benötigst mal
grob gerechnet 4 Takte zum Laden + 2 Takte Postprocessing + 1 Takt PORT
Zugriff + 3 Takte Clocking macht 10/8 = 1.25.
Somit wäre deine Methode 1.7 mal schneller.

Allerdings obige Annahmen sind nur Pi * Daumen.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Aber warum willste das so machen ?

Ein ATMega8 mit 16 MHz schiebt per HW-SPI 8Mbit/sec raus. Bei 360°
Auflösung wären das dann 22222 Bits pro Schritt in der Sekunde, / 80
LEDs sind dann 277 Umdrehungen pro Sekunde == 16666 U/min. Also bei
weitem ausreichend.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Also bei 1500U/min dauert es pro Schritt 1/10'tel der Zeit um über das
SPI die 80 Bits reinzuschieben. Das Enable der Shiftregister wird dann
zeitabhängig exakt alle 1/360 Sekunde aktiviert. Sofort danach kannste
per SPI die nächsten 80 Bits reinschieben und hast dann noch 9/10 Zeit
um die nächsten Daten zu laden bevor das Enable wieder gesetzt werden
muß. Diese Rechnung bezieht sich auf XTAL = 16Mhz und SPI mit 8Mhz. Ich
weiß halt nicht ob die Shiftregister 8Mhz vertragen.

Aber laut Datenblatt können die 74HC595 nur 8mA pro Pin treiben, reicht
das denn aus ??

Gruß Hagen

von TobyTetzi (Gast)


Lesenswert?

Hallo,

erstmal vieln Dank für deine vielen Rechnungen.

Ich treibe momentan die LEDs mit ca. 10 mAh,
Laut meinem Datenblatt des 595 kann er doch 35mAH pro pin!

Das sollte allemal ausreichen.

Viel wichter wäre, wie lade ich die Daten aus dem Ram, und gebe sie in
die Schieberegister ein?

Desweiteren: Wie lade ich die Daten aus dem EEProm oder einer MMC Karte
in den Ram?

Gruß Toby

Ach, wenn jemand Codes übrig hat?! Ich könnte diese sehr gebrauchen!

Bis denne...

von Steffen (Gast)


Lesenswert?

Ich klemm mich mal einfach in den Email-Verteiler. Das Projekt
interessiert mich (auch wenn ich im Moment nichts sinnvolles beitragen
kann).

Steffen

von Hagen (Gast)


Lesenswert?

http://www.semiconductors.philips.com/pip/74HC595N.html

Dort steht in der Tabelle in der Spalte "Output Drive Capability" +-
6mA. Im Datenblatt dann Icc, Strom im gesamten max. 70mA / 8 Pins =
8.75mA pro Pin wenn du alle LEDs gleichzeitig treiben willst.
Die 35mA beziehen sich höchstwahrscheinlich darauf das nur 1 Pin
treibt. Allerdings sicher bin ich mir da nicht ganz, die Datenblätter
sind manchmal so geschrieben das sie die Tatsachen ein bischen
verschleiern (meine Meinung). Ptot = 500mW bei 5V = 100mA. Bei 35mA * 8
Pins = 280mA * 5V = 1400mW >> Ptot.
Also ich meine du kannst nur mit 8mA pro Pin rechnen wenn du alle LEDs
gleichzeitig ansteuern willst.

Auf alle Fälle ist ein SPI Takt von 8Mhz absolut in den machbaren
Grenzen für den 74HC595N.

Gruß Hagen

von TobyTetzi (Gast)


Lesenswert?

Hallo,

ich hatte bei Reichelt geschaut.

Das ist allerdings ein 74HC595 und kein "N".

Ich werde mich dann noch weiter mit diesen Bausteinen beschäftigen.
Mal sehen, was ich damit so erreiche.

Gruß Toby

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.