Forum: Mikrocontroller und Digitale Elektronik Viele µC mit BUS Verbinden


von Martin (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei für einen Warenausgabeautomat (sicher kennt ihr die 
"Zigarettenautomaten" wie sie in Supermärkten stehen) umzubauen.

Der Automat hat 60 "Auswerfer". In jedem Auswerfer ist eine kleine 
Platine.
Auf der Platine sind im Prinzip nur 2 Taster: einer ist geschlossen wenn 
Ware im Schacht vorhanden ist, der andere gibt an ob sich der Auswerfer 
in der Endposition befindet. Außerdem ist an der Platine noch der Motor 
des Auswerfers angelötet.

Die Schaltung mit der aktuellen Verdrahtung hat den Nachteil das die 
Hauptplatine erst mitbekommt ob ein Schacht leer ist wenn Ware aus 
diesem angefordert wird. Nach dem Befüllen des Entsprechenden Schachts 
muss dem Automaten dies auch erst durch Tastendruck mitgeteilt werden 
das nun wieder Ware vorhanden ist.

Was ich nun vorhabe:
Ich möchte im Prinzip die komplette Steuerung des Automaten ersetzen 
(Hauptplatine stellt kein Problem dar).

Für die Auswerfer möchte ich kleine Platinen fertigen lassen.
Auf die Platine soll ein kleiner µC.
Die µCs haben dabei folgende Aufgabe:
  - Auf Anforderung vom Master-µC den Motor einschalten
  - Motor laufen lassen bis der Schieber wieder in Endposition ist
  - Schieber nach X Sekunden nicht in Endposition -> Motor aus, Bericht 
an Master
  - Schacht leer -> Bericht an Master
  - Schacht wieder gefüllt -> Bericht an Master

Die µCs möchte ich dabei über ein BUS-System verbinden.


Welchen µC würdet Ihr hierfür verwenden? Ob AVR oder PIC ist mir 
eigentlich relativ egal. Sollte nur "günstig" sein (um nicht zu sagen 
"billig" :D)

Und welches BUS-System?

Stehe hier gerade n bisschen auf dem Schlauch :D

von Jürgen (Gast)


Lesenswert?

Tiny 45/85 und je nach Länge I2C oder UART Anbindung.

von Peter D. (peda)


Lesenswert?

Beitrag "mehrere MC seriell über Datenbus verbinden (1Draht)"

Ich würde den ATtiny24 oder ATtiny261 empfehlen. Dann hat man reichlich 
Pins.

: Bearbeitet durch User
von soundso (Gast)


Lesenswert?

Tiny mit UART via Differenzeillem Bus (rs245 treiber)

von Johnny S. (sgt_johnny)


Lesenswert?

Martin schrieb:
> Für die Auswerfer möchte ich kleine Platinen fertigen lassen.
> Auf die Platine soll ein kleiner µC.


Solange da nur digitale Signale notwendig wären, würdens auch 
Port-Expander o ähnlich tun.
Möglicherweise gibts sogar Motortreiber mit I/O

Hätte den Vorteil das die "Platinen" keine eigene Software haben müssen. 
Wenn man die Software mal ändern muss, kannste 60uC's updaten..

von M. P. (Gast)


Lesenswert?

Hallo,

Die Beschreibung kommt mir sehr bekannt vor.
Darf ich fragen, um welchen Automaten es geht (Hersteller, Typ, 
Baujahr)?
Würde mich mal so nebenbei interessieren.


Peter D. schrieb:
> Ich würde den ATtiny24 oder ATtiny261 empfehlen. Dann hat man reichlich
> Pins.

Die schwirrten mir auch sofort im Kopf rum.


Johnny S. schrieb:
> Wenn man die Software mal ändern muss, kannste 60uC's updaten..

Ein weiteres Problem, dass bedacht werden muss.
Dabei ist dann noch die Frage, wie du die Module adressieren willst?
Soll jedes Modul eine feste Adresse bekommen, weil es nur der eine 
Automat ist?
Soll das vielleicht größer werden, sodass man eine eigenständige (aber 
konsistente und reproduzierbare) Adressierung der Module mithilfe des 
Masters vorsieht. - Was ist mit "ausgebauten" Modulen? (Schacht zu 
schmal)

Gruß

von Harald (Gast)


Lesenswert?

LPC11C24
Kleiner Cortex-M0 mit CAN und(!) integriertem CAN-Transceiver. D.h., du 
hast keine weiteren Aufwand für die CAN-Anschaltung. Preis liegt bei 
1,50€ bei 100 Stück vom Distributor.
Durch CAN hast Du einfache und flexible Möglichkeiten der Kommunikation. 
Adressierung der Module über einen zusätzlichen Draht zwischen den 
Platinen (Daisy Chain) zur Adressvergabe oder normale DIP-Schalter

von Michael D. (Firma: indEAS) (indeas)


Lesenswert?

Die Adressvergabe könnte man wie folgt lösen:
1. Die Modul Adresse liegt im EEPROM bzw. in einem durch den µC selbst 
dauerhaft beschreibbaren Speicher (Flash etc.)
2. Neben der vergebenen Adresse hört der Slave immer unter einer 
weiteren Adresse (0xFF) = Basisadresse.
3. Beim Adressieren hängt immer nur derjenige Slave am "Bus", der eine 
neue Adresse bekommen soll; alle andere sind entweder nicht 
angeschlossen oder im RST. Dieser Slave wird auf der Basisadresse 
angesprochen und seine  Adresse als Parameter über den Bus gesetzt.

So kann man die Adresse eines jeden (einen nach dem anderen) setzen.
Firmware update via Bootloader.

Die meisten Programmer können eine EEPROM Zelle (=Adresse) auch direkt 
beschreiben, damit könnte diese Zelle auch direkt ausgelesen und 
beschrieben werden.

von Nosnibor (Gast)


Lesenswert?

Wie ist das denn bisher gelöst? Wie kommt es, daß die Hauptplatine den 
"Schacht leer"-Taster nicht zu jeder beliebigen Zeit abfragen kann?

Adressvergabe sollte am besten automatisch über die Hardware gehen, also 
entweder mit einer daisy-chain-Leitung zu diesem Zweck oder indem der 
Bus selber als daisy-chain ausgelegt ist (WS2812 läßt grüßen). Alles 
andere provoziert Fehler bei der Montage oder spätestens bei 
Wartung/Reparatur im Feld.

von Ralph (Gast)


Lesenswert?

Mach dir einen großen SPI Ring.
Jeweils MOSI and MISO, den Clock und CS parallel an alle.
Damit bekommst du ein großes Schieberegister mit 8Bit ( 
Schiebregisterbreite) *  Anzahl der Platinen.

Auf dem Main macht du dir einen Puffer mit Größe Schiebregisterbreite  * 
Anzahl der Platinen.
Die Position im Puffer entspricht der Position der Platine im Ring, 
damit hast du die Adressierung ohne zusätzlichen Aufwand.
Eine Erweiterung ist sehr einfach durch hinzufügen im Ring und Anpassung 
des Puffers.

Zu Kommunikation dann CS auf Aktiv ( jede Platine legte ihren Datenwert 
ins Schiebregister), dann alle Bytes durch takten, danach CS auf Pasiv 
und damit die Daten die gerade aktuell im Schiebregister sind in die 
Platinen übernehmen.

Danach hast du im Eingangsbuffer alle Daten der Platinen und jede 
Platine hat das für sie vorgesehene Byte.

Noch einfacher geht es wohl nicht.

Ich denke nicht das du für die paar Informationen mehr als ein Byte 
benötigst.

Gruß,
Ralph

von Draco (Gast)


Lesenswert?

Die Idee ist Klasse, nur mit einem Hacken. Wann weiß einer der Clients: 
Wann er an der Reihe ist mit schreiben / Welche Position er beim 
Schreiben hat??

Deine Überlegung macht durchaus Sinn, wenn es eine einseitige 
Kommunikation ist, die vom Master zu den Clients geht.

Möglich wäre aber, wenn sie im Daisy Chain hängen. Das jeder, wie im 
Schieberegister, mit DIN  DOUT  CLK alle am Anfang eine eigene Adresse 
zugewiesen bekommen, und mit dieser dann Rekursiv Antworten.

von Peter D. (peda)


Lesenswert?

Ralph schrieb:
> Mach dir einen großen SPI Ring.

Meine Erfahrung ist, daß SPI extrem störempfindlich ist und für große 
Leitungslängen unbrauchbar ist.
Ich benutze SPI nur innerhalb einer Platine.
Schon die Führung über eine Backplane auf mehrere Platinen machte eine 
Filterung auf jeder Platine erforderlich.

Den Cortex-M0 mit CAN intern finde ich recht interessant.

Zur Adressierung würde ich einfach die Module der Reihe nach an den Bus 
anschließen und der Master vergibt dann jedem neuen Modul eine Adresse, 
die es sich im EEPROM merkt. Damit ist dann automatisch auch die Lage 
der Module festgelegt.
Bei einer Reparatur setzt man das neue Modul auf jungfräulich und der 
Master stellt fest, welche Moduladresse fehlt.

von Ralph (Gast)


Lesenswert?

Draco schrieb:
> Wann weiß einer der Clients:
> Wann er an der Reihe ist mit schreiben / Welche Position er beim
> Schreiben hat??

Gar nicht und ist auch egal.
Nur der Master muss wissen wer wo ist.

Auf CS Aktiv legt jeder Slave seine Datenwort ins Schieberegister. Damit 
ist die Position im Ring vorgegeben.
Nach dem durch takten aller Bytes hat jeder Slave SEIN Datenwort im 
Schieberegister liegen und der Master die Daten aller Slaves in seinem 
Puffer.

Die Slaves lesen gar nicht alle Bytes ein, die werden nur durch 
geschoben.
Die Übernahme im Slave erfolgt mit CS auf Passiv.

Empfindlichkeit ist so eine Sachen.
Da ist CAN auch nicht ganz ohne.

Wir haben auf der Arbeit eine 10 Mbit SPI Verbindung über 10 m Kabel 
laufen.
Die Verbindung steht 1a stabil.
Kommt immer drauf an wie man das macht.

Wenn man hier eine Verbindung mit 10 Kbit nimmt ( dürfte bei der 
Datenrate locker reichen) sollte das nu wirklich stabil stehen.

von Martin (Gast)


Lesenswert?

Hallo miteinander,

war leider einige Tage nicht zuhause und hab eben erst die ganzen 
Antworten gelesen.

M. P. schrieb:
> Die Beschreibung kommt mir sehr bekannt vor.
> Darf ich fragen, um welchen Automaten es geht (Hersteller, Typ,
> Baujahr)?
> Würde mich mal so nebenbei interessieren.

Das ist eine "Smokythek SMT 60" von Harting.... Baujahr hab ich gerade 
nicht im Kopf




Hmmm... Ich dachte (nach der ersten Antwort von "Jürgen") an I2C.
Ich hätte das dann so ungefähr gelöst:
ATtiny25 (würde von den PINS her genau reichen und ist für unter 1€ zu 
haben^^)... Jeder davon bekommt beim Flashen gleich eine eindeutige ID 
mit in den EEPROM und einen entsprechenden Aufkleber mit auf die 
Platine.
So kann ich dem Master später mitteilen "Slave 21 sitzt in Schacht 45".

Der Master soll dann einfach der Reihe nach von den bekannten IDs den 
Status abfragen oder sagen "Slave 21: Wirf mir bitte eine Schachtel aus"

So uuuuungefähr hatte ich mir das nun gedacht - noch keine Ahnung ob das 
dann in der Praxis auch genauso gut funktioniert wie in meinem Kopf :D

von Timo N. (tnn85)


Lesenswert?

Ralph schrieb:
> Da ist CAN auch nicht ganz ohne.

Ähm... hab gehört CAN wird in der Automobilindustrie eingesetzt....
CAN ist einer der störunempfindlichsten Busse überhaupt. Das ist 
schließlich überhaupt der Vorteil von CAN.

Wenn es wirklich µC für 1,50€ mit CAN-Controller und Transceiver gibt, 
dann macht das für mich am meisten Sinn.

Adressierung könnte natürlich auch auf jedem Board mit Jumpern 
vorgenommen werden. Bei 60 Schächten reichen dann ja 6 Jumper aus. Würde 
aber dann gleich 8 Jumper spendieren, damit 256 Schächte adressierbar 
sind.
Der Cortex wird vermutlich genug IOs haben um die 8 IOs einzulesen.

von Peter D. (peda)


Lesenswert?

Ralph schrieb:
> Empfindlichkeit ist so eine Sachen.
> Da ist CAN auch nicht ganz ohne.

Kann ich überhaupt nicht bestätigen.
CAN funktioniert selbst über Klingeldraht problemlos, selbst wenn man 
die 2. Terminierung am anderen Ende vergißt.
Selbst billigstes unverdrilltes ungeschirmtes DB9-Kabel geht.

Wir hatte auch ein Fremdgerät, wo SPI über differentielle RS-485 Treiber 
geleitet wurde. Das ganze war hochgradig störempfindlich. Das Kabel 
durfte nur max 10m lang sein und mindestens geschirmtes und paarig 
verdrilltes Ethernetkabel.

Schau Dir mal das Datenblatt der CAN-Transceiver an. Die funktionieren 
selbst bei +/-5V GND-Shift. D.h der Receiver funktioniert immer noch, 
wenn CANL/H beide unter GND oder über VCC liegen.

CAN führt ähnlich wie RS-232 eine Mehrfachabtastung je Bit durch.
Wenn bei SPI eine kurze Störnadel auf SCK auftritt, sind die Daten nur 
noch Müll. Oder bei einem Übersprechen des SCK auf die Datenleitungen.

: Bearbeitet durch User
von Harald (Gast)


Lesenswert?

Timo N. schrieb:
> Ralph schrieb:
>
> Adressierung könnte natürlich auch auf jedem Board mit Jumpern
> vorgenommen werden. Bei 60 Schächten reichen dann ja 6 Jumper aus. Würde
> aber dann gleich 8 Jumper spendieren, damit 256 Schächte adressierbar
> sind.
> Der Cortex wird vermutlich genug IOs haben um die 8 IOs einzulesen.

Natürlich hat so ein CAN-Treiber eine maximale Anzahl Nodes. Bei dem in 
dem LPC11C24 verwendeten Transceiver (musste mal ein wenig suchen, 
irgendwo steht das (aber nicht im Datenblatt)). Ich meine, dass die 
Grenze hier bei 64 liegt. Notfalls zweiten Strang aufmachen.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Martin schrieb:
> Das ist eine "Smokythek SMT 60" von Harting.... Baujahr hab ich gerade
> nicht im Kopf

Interessant was sich manche Leute so ins Wohnzimmer stellen ;)

Mal im Ernst:

> Hmmm... Ich dachte (nach der ersten Antwort von "Jürgen") an I2C.

Einige haben es schon angedeutet: Störsicherheit. Du schreibst irgendwo, 
dass an den Platinen auch die Motoren befestigt sind. Ein Bus, wie CAN, 
der differenziell betrieben wird, kann dort eventuell viel Kummer 
ersparen. Vernünftige Entstörung der Motoren, gute Leiterbahn- und 
Kabelführung auch.

von Anja (Gast)


Lesenswert?

Hallo,

so ein Automat muß ggf. viel mehr aushalten als die Störungen von so 
kleinen Motörchen.
Der Standardfall in der Automatenindustrie ist daß irgend so ein 
Spaßvogel mit einem Elektroschocker mit 100-200 kV oder einem 
EMP-Generator alle Ausgabeschächte auf einmal öffnet.

Alles was nicht differentiell und ohne CRC-Checksumme arbeitet fällt 
damit als Bus aus.

Gruß Anja

von Martin (Gast)


Lesenswert?

Hannes J. schrieb:
> Interessant was sich manche Leute so ins Wohnzimmer stellen ;)

Das Teil steht nicht bei mir im Wohnzimmer, sondern in einem 
"Tante-Emma-Laden" einer bekannten...
Diese hat den Automaten vor einigen Wochen gebraucht für wenige Euros 
gebraucht gekauft und er steht seitdem ungenutzt in einer Ecke bei Ihr 
im Abstellraum... Die Motoren etc funktionieren alle, nur die Steuerung 
hat wohl mit der Zeit irgendwie gelitten :)

Anja schrieb:
> Der Standardfall in der Automatenindustrie ist daß irgend so ein
> Spaßvogel mit einem Elektroschocker mit 100-200 kV oder einem
> EMP-Generator alle Ausgabeschächte auf einmal öffnet.

Wie gesagt... Es handelt sich um einen Automaten wie er IN Supermärkten 
steht... Also kein Zigarettenautomat wie er am Straßenrand steht.
Sollte sich an diesem wirklich einer mit einem Elektroschocker zu 
schaffen machen hat Sie (denke ich) ganz andere Probleme.... :)

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.