PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AT MEGA 32 + Relai Ansteuerung



Tux12Fun
03.06.2007, 21:50
Hallo,

folgendes Problem

Ich habe einen AT Mega 32 und möchte damit mit möglichst wenig Pins vom AT Mega 8 Relais steuern.

Dachte mir das so:

Ich verbinde den PC0 Pin mit dem IC 4017N CLK vom 4017 verbinde ich außerdem RES und ENA auf GND. Damit sollte ich mit dem AT MEGA mit 0 1 Impulsen auf PortC.0 am 4017N die Pins durchschalten können also von Q0 - Q9. Nun müsste ich aber dahinter einen 1 Bit Speicher setzen, der sich merkt, welcher Zustand der Pin hat und diesen dann hält, damit das Relai dann nicht abfällt wenn ich im AT MEGA weiter Steppe, Außerdem müsste ich wohl dazu einen AT Mega Pin opfern müssen, der dann den Speicher auf low oder high setzt. Leider habe ich im Moment keinen Plan wie ich das umsetzen könnte, die Relais werden über die Bais von BC548C im geschalten werden. Wäre auch schön wenn ich die Transistoren rausfallen lassen köntne. Problem des 4017 ist außerdem noch, dass glaub ich auf Q0 - Q9 Minus rauskommt und damit meine BC548 nix anfangen können.

Hoffentlich hat jemand eine Idee wie ich da vorgehen könnte. Bin für jeden Vorschag dankbar.

Danke schon im Voraus.

Thomas

vklaffehn
03.06.2007, 21:52
Moin!

Nimm doch ein Schieberegister 74* 164 oder so und einen ULN2803 Darlington Treiber...
MfG Volker

Tux12Fun
03.06.2007, 22:12
Das du dafür ein Beispiel, in das Datenblat von dem Darlinton Treiber hab ich schon mal geguckt glaub ich, der beinhaltet meine Transistoren oder ?. Aber wie ein Schieberegister funktioniert da hab ich keine Ahnung also ein BSP würde sehr helfen. Danke schon im Voraus

vklaffehn
03.06.2007, 22:26
Moin!
Ein Schieberegister macht quasi genau das, was Du möchtest, es hat einen Takteingang und einen Dateneingang, bei jedem Takt wird der Zustand des Eingangs auf den ersten Pin weitergegeben, dessen Zustand wird auf den zweiten 'geschoben' usw., also wenn man z.B. bei einem 8Bit Schieberegister 8 Signale am Takteingang hat und der Dateneingang die ganze Zeit high ist, so sind dann alle Ausgänge des Schieberegisters high.
Ich selber habe kein Beispiel parat, aber die Methode wird häufig benutzt, schau mal nach Portexpander im RN-Wissen. Und der Darlingtontreiber ist genau das, nur das nicht ein Transistor, sondern ein Transistorpärchen geschaltet wird, das nennt sich dann halt Darlington Schaltung.

MfG Volker

Tux12Fun
04.06.2007, 18:39
Also das Schieberegister funktioniert so ? (Habe ich das richtig verstanden ?

1. Noch kein Takt-Signal erfolgt wenn Dateneingang auf 1 gesetzt wird, ist auch auf Pin 1 des Registers dann immer Strom, ich Schalte durch die Registerstellen mit 101010101 usw immer bei 1 Schalte ich 1 weiter und setze das Register neu. Der Wert des Registers in das ich schreibe wird in das nächste übertragen ?

Lenox
04.06.2007, 19:03
Nimm doch ein I²C Multipelxer, da kannst du mit 2 Pins 16 Relais steuern und zusätzlich kannst du den Schaltzustand 'frezzen'.

Alternativ kannst du ein 4-to-16 Multiplexer benutzen, an dem musst du dann ein Bitmuster anlegen (benötigt halt 4 bzw mit Latch 5 Pins).
z.B. den 74HC4514

PS: Aber bitte nicht vergessen das dahinter noch ein Leistungstreiber benötigt wird, z.B. den ULN2803

Tux12Fun
04.06.2007, 21:21
Ich glaube ganz verstehe ich die Function Table noch nicht

Ich sehe zwar, dass wenn ich wohl E auf - Lege und ich
A0=H
A1=L
A2=L
A3=L

habe wohl der Pin Q1 H ist. Aber was mache ich wenn ich Q1 und Q11 auf H aben will.

Und noch eine Frage, kann ich diese Pins A0 - A4 einfach mit PC0 - PC3 vom AT Mega verbinden und dann in der Software 0 für Low und 1 für H auf die Pins senden ?

Nach dem IC würde ich dann einfach meine BC548C an die Q Anschlüsse hängen warscheinlich mit Vorwiderstand.

Tux12Fun
04.06.2007, 21:21
LE muss wohl auch noch auf + oder ?

wkrug
04.06.2007, 21:38
Ob das was Du da machen willst mit einem Multiplexer geht weiß ich nicht.
Soweit ich Weiß schaltet ein Multiplexer immer nur einen Ausgang, also ein Relais aktiv. Und ich denke, das ist nicht das was Tux12fun will.

Die Idee mit dem Schieberegister find ich super.
Such Dir aber eins raus, das ein Latch hat.
Wenn Du ein normales Schieberegister benutzt werden deine Schaltinformationen bei jedem Takt um einen Ausgang weitergeschoben bis alle Bits an der richtigen Stelle sind.
Nimmst Du ein Schieberegister mit latch wird das Latch vor dem Einschieben disabled, dann die Informationen quasi im Hintergrund in das Schieberegister eingeschoben, anschließend das Latch wieder enabled und somit die gewünschten Ausgänge umgeschaltet. Dazu brauchst Du dann aber einen zusätzlichen Pin am Microcontroller der das Latch Enable Signal bedient. Also insgesamt dann 3.

Viele Schieberegister haben auch noch eine DOut Ausgang, an dem die Bits die hinten aus dem Schieberegister rausfallen würden an ein weiteres Schieberegister weitergeben können. Somit kannst Du die Schaltung sogar noch kaskadieren, wenn 8 Relais nicht mehr reichen. \:D/

Lenox
04.06.2007, 22:15
Hi,
ja stimmt sorry, der Multipelxer kann immer nur ein Ausgang schalten.
Hab ich wohl irgentwie vergessen :-#

Tux12Fun
04.06.2007, 23:06
Hm dann ist das IC doch nichts für mich brauch was wie das ic nur dass auch mehrere Ports aktivierbar sein müssen.

Tux12Fun
04.06.2007, 23:09
Nochmal Schieberegister: ^^

Also das Schieberegister funktioniert so ? (Habe ich das richtig verstanden ?

1. Noch kein Takt-Signal erfolgt wenn Dateneingang auf 1 gesetzt wird, ist auch auf Pin 1 des Registers dann immer Strom, ich Schalte durch die Registerstellen mit 101010101 usw immer bei 1 Schalte ich 1 weiter und setze das Register neu. Der Wert des Registers in das ich schreibe wird in das nächste übertragen ? (ist glaub ich auch nicht so gut, wenn die Werte weitergeschoben werden.)

wkrug
05.06.2007, 16:52
1. Noch kein Takt-Signal erfolgt wenn Dateneingang auf 1 gesetzt wird, ist auch auf Pin 1 des Registers dann immer Strom, ich Schalte durch die Registerstellen mit 101010101 usw immer bei 1 Schalte ich 1 weiter und setze das Register neu. Der Wert des Registers in das ich schreibe wird in das nächste übertragen ? (ist glaub ich auch nicht so gut, wenn die Werte weitergeschoben werden.)
Fast richtig.
Du legst also eine 1 auf den Eingang, an den Ausgängen passiert noch nichts.
Jetzt gibst Du einen Taktimpuls auf den Takteingang des Schieberegisters.
Jetzt erscheint die 1 am Ausgang 1.
Nun legst Du beispielsweise eine 0 an den Eingang.
Da passiert noch nichts.
Jetzt gibst Du wieder einen Taktimpuls auf die Taktleitung.
Die 1 von Ausgang 1 wird auf Ausgang 2 weitergeschoben und die 0 vom Eingang wird auf den Ausgang 1 erscheinen.
So geht das weiter bist alle z.B. 8 Datenbits eingelesen sind.

Wie Du richtig erkannt hast werden die einzelnen Bits vom niederwertigsten Ausgang 1 bis zum höherwertigsten Ausgang 8 durchgeschoben - drum heisst das Ganze ja auch Schieberegister. Da das erscheinen der Bitinformationen auf den einzelnen Ausgängen ja sehr unschön ist hat man das Latch erfunden.
Auch hierbei werden die Bits durch das Schieberegister durchgeschoben, aber die jeweiligen Bits werden erst Dann auf die Ausgänge durchgeschaltet, wenn das Latch aktiviert wird (LE).
Bis zu diesem Zeitpunkt bleiben die Ausgänge der vorherigen Einstellung aktiv(Also die vom letzten Latch Enable). Also eigentlich genau das was Du brauchst.

Bei einer Relaisschaltung wäre zwar ein Latch nicht unbedingt nötig, bis das Relais anspricht oder abfällt ist die 1 bzw. 0 schon lange auf den nächsten Port weitergewandert. Du musst dann allerdings Programmmäßig dafür sorgen, das die komplette Information zügig in das Schieberegister eingelesen wird.

In einer Halbleiteranschlusstabelle sollte sich mit Sicherheit ein passendes Schieberegister finden lassen. Eventuell kenn ja auch jemand aus dem Forum hier was passendes.

Tux12Fun
05.06.2007, 17:09
Danke für die Antwort ich gucke mir heute abend mal das Datenblatt an.

Tux12Fun
05.06.2007, 21:24
Data inputs: (Wie kann ich die am AT Mega anhängen einfach Dsb an + und Dsa an PC0 ?)
Dsa
Dsb

Q0 - Q7 Outputs and die ich meine BC548C (NPN Transistor) mit der Basis dranklemmen kann (natürlich mit Vorwiderstand).

GND = -
VCC = +5V

MR auf +5V ??? (evtl an den AT Mega einen pin gönnen)

CP müsste der Tackt sein
------------------------------------------------------------------------------------------------------
Kann mir jemand villeicht das 74HCT164 erklären, ganz raff ich des net vom Datenblatt
GND und VCC sind klar und Q0 -Q1 auch ziemlich.
Das es immer intern Weitergereicht wird habe ich auch verstanden
und dass ein latch drin ist, damit ich irgendwie zuerst alle belegen kann und dann aktiv schalten kann.

Was ich noch nicht verstehe wie bekomm ich die Daten in das IC? also was muss ich wie an die Pins Dsa Dsb CP MR anlegen um das Register mit
10110010 z.b zu füllen und scharf zu schalten

und wie muss es vom AT Mega Programmiert werden
also ich meine damit Psydocode
PC0 ein
PC1 Wert ein oder aus setzen
PC0 aus oder so in der Richtung

Danke schon jetzt für alle noch folgenden Bemühungen und schon erfolgenden Bemühungen.

vklaffehn
05.06.2007, 21:50
Moin!
Praktischerweise sind 8Bit genau ein Byte, also irgendwas zwischen Dezimal 0-255, Hexadezimal 0x00-0xff, bzw. Binär 0b00000000 - 0b11111111. Du machst also folgendes für z.B. Dein 10110010 :

Variable = 0b10110100

dann 8 mal, z.B. for-schleife oder so:

Und-Verknüpfung mit 1 -> 0b00000001
wenn 1: Datenpin auf High
sonst: Datenpin auf Low

dann CP auf high und wieder auf low
Variable nach rechts schieben(shiften), im Zweifel durch 2 teilen, bewirkt binär genau das
schleife von vorn

das ergibt dann folgendes:
10110010 & 1: D=0
01011001 & 1: D=1
00101100 & 1: D=0
00010110 & 1: D=0
00001011 & 1: D=1
00000101 & 1: D=1
00000010 & 1: D=0
00000001 & 1: D=1

D ist z.B. Dsa, Dsb muß High sein, also an 5V, oder Dsa und Dsb müßen zusammengeschaltet werden.
Die Daten, Takt- und evtl. Latch Pins können direkt an Portpins vom AVR gehängt werden.
das 74* 164 hat kein Latch, das gibt die Pegel sofort aus, der MR-Anschluß setzt alle Ausgänge gleichzeitig auf 0 (Master Reset), das gleiche erreicht man (nur ein klein wenig langsamer), wenn man einfach eine 0 in das Register schiebt, man spart sich aber so den zusätzichen Pin am Controller, MR muß dann an 5V gelegt werden.

Ein Schieberegister mit Latch wäre z.B. das 74LS595.

Schön beschrieben und mit Bildchen steht das übrigens alles https://www.roboternetz.de/wissen/index.php/Portexpander_am_AVR

MfG Volker

Tux12Fun
05.06.2007, 23:11
Danke, die Seite und das Forum hat mir sehr geholfen, hab gleich mal über einen Kumpel der bei Reichelt bestellt, das 74HC 595 mitbestellt zum experimentieren, dann nehm ich eine IC Fassung ein paar kabel und teste einfach mal drauf los. Muss ich beim Takt geben entprellen ? (wenn ich das von Hand mache zum test )

vklaffehn
05.06.2007, 23:46
Moin!
Jupp, auf alle Fälle!!!! So ein Chip kann ein paar MHz, wenn Du da einfach einen Taster anschließt, schießen Deine Bits hinten gleich wieder raus!!
;-)
Nimm doch lieber gleich Deinen Mega32, der schaltet wenigstens gleich sauber, und langsam machen kann man den auch...
Viel Erfolg!

MfG Volker

Tux12Fun
06.06.2007, 19:21
Danke für die ganzen Posts

Ich werde wieder von mir hören lassen, wenn ich das IC habe.

Danke noch mal an alle.

kalledom
06.06.2007, 22:21
Hier kommt eine Schaltung mit Schieberegister und Treiber.
Die 'linken' IC's zum Einlesen von Daten kannst Du weg lassen.
Dann brauchst Du 3 Signale:
SCL = Seriell Clock ... Takt
SDO = Seriell Data Out ... Daten
PS = Parallel Set ... Daten-Übernahme und Ausgabe

Die Funktion eines Schieberegisters ist ja schon ausreichend beschrieben worden.

Tux12Fun
06.06.2007, 23:04
Danke für den Schaltplan, der hilft mir sehr weiter.

Tux12Fun
06.06.2007, 23:59
Ich habe das ganze jetzt mal in Eagle gezeichnet. Villeicht könnte jemand mal prüfen ob das so stimmt.

Wenn jemand den Quellcode für den Schaltplan hat wäre ich sehr dankbar für eine Kopie.

Hubert.G
07.06.2007, 07:29
Das Relais gehört doch nach VCC, und auf CD+ gehört auch VCC sonst sind die Freilaufdioden nicht aktiv. IC5 ist doch ein 2803?
Hubert

Tux12Fun
07.06.2007, 13:32
So müsste es besser sein oder ?

Hat jemand zufällig einen Quellcode dafür noch rumliegen ?

Hubert.G
07.06.2007, 13:43
So ist es OK, mit Quellcode kann ich dir leider nicht helfen.

Hubert

Tux12Fun
07.06.2007, 21:03
Danke nochmals für den Schaltplan, villeicht findet sich ja bei irgend jemand noch ein Quellcode der da dazupasst.

lowtzow
10.06.2007, 19:11
hy

na so ein zufall, ich brauch für mein projekt, auch fast so eine ähnliche anforderung. also schieberegister an uln. naja wurscht hauptsache schieberegister.

programmierst du mit bascom oder c
bei mir is es daweil bascom, c ist mir noch weniger vertaut.

also wir brauchen den clock
also entweder umständlich set/reset oder den harware spi verwenden.

ich denk mal wenn ich nicht falsch liege müsste es so funktionieren


' SERiell nach PArallel (serpa) mit Hardware-Unterstuetzung
' Beispiel mit 2 Datenbytes

' SPI Bus (Hardware) als Master konfiguiren
Config SPI = Hard , Master = Yes

' SPI Bus initialisieren
' setzt das DDR Register entsprechend
Spiinit

' Bytes für die Daten
Dim Serpa(2) As Byte
Serpa(1) = &B10101010
Serpa(2) = &B00000000

' Die Bytes auf den SPI Bus schieben
Spiout Serpa(1) , 2

das ganze ist halt ohne latch geschrieben, bin am überlegen ob ich latch brauch oder nicht. wollt damit ein lauflicht machen 10leds.
bin noch am probieren aber werd mir mal in der nächsten woche testweise nen 74hc595 holen.

Tux12Fun
12.06.2007, 22:47
Danke schon mal für den Codeteil, bin leider noch nicht dazugekommen das zu Programmieren. Aber wenn ich was neues hab werde ich es dir zukommen lassen.

DANKE.