Hallo, ich möchte das im Anhang befindliche Signal erzeugen. Zuerst soll
auf Leitung 1 ein 100 ns langer Puls erzeugt werden, danach soll Leitung
2 400 ns auf high gehen und dann wieder fallen. 1 us nach dem ersten
Puls soll dann das ganze von vorn beginnen. Das soll exakt 5036 mal
passieren, wozu ich einen MC benutzen würde. Aber das schnelle
Zeitsignal würde ich gern mit Logik-ICs erzeugen (billig billig
einfach).
Wichtig ist vor allem, dass Leitung und 2 immer in Phase sind.
Ich habe an eine Oszillatorschaltung und Zähler gedacht, aber so richtig
weiß ich nicht wie ich die Zeitverhältnisse damit realisieren soll. Die
genauen Werte sind aber nicht soo wichtig, kann alles +- 100 ns sein.
Vielen Dank den Helfern!
Markus
Ich glaube nicht, dass du mit Logik-ICs billiger weg kommst als mit z.B.
einem attiny13, gibts für einen Euro. Den taktest du mit 10MHz und
schreibst ein kurzes asm-Programm:
1
ldione_reg,1
2
lditwo_reg,2
3
ldizero_reg,0
4
ldicounterl,low(5000)
5
ldicounterh,high(5000)
6
start:
7
outPORTB,one_reg
8
outPORTB,two_reg
9
deccounterl
10
subccounterh,zero_reg
11
nop
12
outPORTB,zero_reg
13
tstcounterl
14
tstccounterh
15
brnestart
(So, sonst schreib ich niemandem einfach so seinen Code, aber dafür hab
ich auch mal ein paar Fehler eingebaut ;-) )
Danke für den Code, aber kennt vielleicht jemand, zumindest zum
Verständnis, einen Link auf eine Schaltung mit der man sowas direkt
machen kann? Vielleicht muss es später ja schneller gehen und dann ist
bei einem MC schnell Schluss.
100ns entspricht einem Cycle bei 10Mhz Takt.
Mit einem Mini Atmel ATtiny für 1 Euro lässt sich das einfach erledigen.
Nehmen wir an die Leitung 1 sei PortB0 und Leitung 2 sei PortB1
dann setzt du den PortB auf 0x01 und im nächsten Schritt auf 0x02 dann
drei nop und den PortB auf 0x00 zurücksetzen. das ganze in einer
Schleife 5036 mal und in der Schleife die restliche Zeit der 2400ns
durch eine weitere kleine Schleife oder nop verbraten. Fertig.
.define tmp = R16
.define zero = R17
.define one = R18
.define two = R19
; Variablen initialisieren
ldi null, 0x00
ldi one, 0x01
ldi two, 0x02
; Ports initialisieren
out PORTB, zero ; PortB initialisieren
ldi tmp, 0x03
out DDRB, tmp ; PortB0+1 sind Ausgänge
; schleife 5036mal, -5036 ist in hex 0xEC54
ldi R25, 0xEC
ldi R24, 0x54
loop:
ldi PortB, one
ldi PortB, two
nop
nop
nop
ldi PortB, zero ; 600 von 2400 ns sind nun verbraten
nop ; Die Schleifa am Schluss braucht noch 4 cycles
nop ; also noch 1400ns durch 14 nops verbraten
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
addiw R24, 0x01 ; 16-bit Schleifenzähler erhöhen
brne loop ; schon 5036 mal durch ?
fertig:
rjmp fertig
So, wirklich fertig, viel Spass und ciao
Remo
@Jan: du warst schneller, aber es ist doch erstaunlich wie sich die
Lösungen ähneln. Das mit dem low()+high() hast du schöner gemacht. dafür
ist mein Addiw mit einem einzigen anschliessenden brne schöner.
So nun muss er doch auch mal was selbst machn, oder?
Remo
Sagt mal, kann es sein dass ihr nicht wisst wie es mit Logik geht? Ich
will wirklich kein CPLD, da muss ich Zeug kaufen um es zu proggn,
irgendeine Sprache zum programmieren lernen etc. Viel zu aufwendig. Tiny
ist sicher eine gute Idee, aber vielleicht sollen aus den 100 ns mal 10
ns werden und dann wirds knapp für den Tiny. Ich möchte gern etwas dabei
lernen, aber beim programmieren vom Tiny lern ich nichts Neues. Wie hat
man sowas denn früher gemacht? Vor CPLDs und den Sachen? Ich freu mich
auch über einen Link wo solche Zeitgeberschaltungen allgemein
beschrieben sind, bei digitaler Logik hapert es bei mir wirklich und dem
würde ich gern anders abhelfen als in Software zu lösen.
Grüße,
Markus
Such mal nach 'Monoflop'.
2 555 als Monoflop beschaltet, einer mit 100, einer mit 400ns
wobei der 2.te von der fallenden Flanke des ersten getriggert
wird.
Aber wenn du sowieso einen µC einsetzt, bietet es sich ja
geradezu an, den auch für die Pulse zu benutzen. Und ausserdem
ist das ein µC Forum. Was hast du erwartet?
Es ist ja sehr nett von euch das ihr mir helft, aber mich interessiert
eben speziell wie es mit Logik geht. Euer Code ist zwar sehr nett,
allerdings hilft er mir bei meiner Frage leider nicht weiter.
Markus
Ich bin zwar bisher nur Beobachter, hätte allerdings doch erwartet, dass
nach Markus' zweitem Posting bei irgendjemandem der Groschen fällt.
Nagut, ist er halt nicht gefallen...
Also ich würde mal sagen, mit nem AVR hast Du immerhin noch Luft bis
20MHz, wo ein 555 - sorry Karl-Heinz - schon lange nicht mehr mitkommt,
aber darüber ist mit dieser Family echt Sense. Womöglich auch schon
vorher, denn ich nehme nicht an, dass die ganze "Zappelei" auf zwei
Leitungen reiner Selbstzweck ist, sondern dass da so nebenbei noch
irgendwas übertragen oder eingespeist oder sonstwie verarbeitet werden
soll. Oder?
Gruß Johannes
Hi,
mit Zähler ist doch eigentlich ganz einfach:
Zählerstand 0 --> Leitung1 ein
Zählerstand 1 --> Leitung1 aus, Leitung2 ein
Zählerstand 5 --> Leitung2 aus
Zählerstand 10 --> Zähler auf 0 zurücksetzen
Ansonsten noch bei Zählerstand 10 einen zweiten Zähler triggern, der bis
5036 zählt und dann den Takt abschaltet.
CU Frank
Hallo.
keine Lust zum malen jetzt...
Takt 100ns erzeugen (20MHz-Oszi und Teiler 2:1 dahinter, damit 50:50.
4-Stufigen Binär-Zähler damit Takten, 1-aus 16 Dekoder dahinter.
Ausgang 0 ist der 100ns-Impuls. Ausgang 1,2,3,4 OR-Verknüpft ist der
400ns Impuls im Anschluß. Mit Ausgang 10 den Zähler zurücksetzen.
Falls Spikes nicht sein dürfen, die Ausgangsleitungen Leitungen auf je
ein D-Flip-Flop als Latch mit dem Eingangstakt takten.
Das wäre so die U-Variante. Aufmalen und vereinfachen musst Du noch
selbst. ;)
Gruß aus Berlin
Michael
Hallo,
im Moment würde mir auch nur "Museums-Ware" einfallen:
TTL-Kochbuch evtl.
Hab mal den Anfang zum Spaß rangehangen. ;)
Ob es die ICs noch alle gibt? Keine Ahnung...
Jetzt noch 2x 74HCT590 o.ä. als 16-Bit-Counter an den 100ns-Ausgang,
den Zählerstand von 5036 mit Gattern dekodieren, ein Flip-Flop als
Start-Stop-Schaltung ran und fertig.
Wenn die Dekodierung auf DIP-Schalter legt, kann man es sogar einfach
umprogrammieren.
Naja, geht heutzutage eben auch mit anderen Mitteln, hier ist es mehr
Lötaufwand, Kosten halten sich in Grenzen, Platz- und Strombedarf ist
höher, machen kann man das aber auch heute noch, wenn man will. :)
Gruß aus Berlin
Michael