Autor |
Clock/Data auslesen über LPT |
|
|
|
|
BID = 758648
IC-Killer Schriftsteller
Beiträge: 635 Wohnort: Stuttgart
|
|
Ich kann mir zwar nicht vorstellen, daß das Softwaremäßig nicht hinzubekommen ist ,aber
Ein Inverter (Invertierer), als Logikgatter mit Nicht(Not) bezeichnet macht nichts anderes als ein Signal (wie der Name schon sagt) zu invertieren, also das Signal "umzudrehen". Beispiel:
Eingang High (+5V) --> "Nicht/Not Gatter"/Inverter --> Ausgang Low (0V), und:
Eingang Low (0V) --> "Nicht/Not Gatter"/Inverter --> Ausgang High (+5V)
Hier noch was zum Lesen: Wiki und Elko. |
|
BID = 758657
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
|
Das MUSS per software auslesbar sein. Soll ich jetzt meine alte C-Control Anleitung raussuchen und dir den Befehl diktieren? Ich mach das mal. Bitte etwas geduld... |
|
BID = 758659
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Also ich empfehle dir das Taktsignal auf den IRQ eingang des C-Control zu legen. Dann schaust du dir mal dieses Beispiel an.
Hier steht beschrieben, wie man den Interrupt so einstellen kann, dass er nur auf steigende Flanken reagiert.
Bei jeder steigenden Flanke des Interrupt-Pins liest du dann den Zustand der Datenleitung aus, sammelst alle Bits ein und schickst das Ganze dann als Paket zum PC.
Hier ist nochmal ein Beispiel mit Interrupts in Basic hinterlegt. Einfach auf der Seite nach Interrupt suchen.
EDIT: Welche c-control denn? Bitte am besten einen Link. Dann kann ich dir auch genau sagen welcher Pin der Interrupt Pin ist.
[ Diese Nachricht wurde geändert von: QuirinO am 4 Apr 2011 20:25 ]
|
BID = 758679
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Wow!
Das ist ja mal eine riesen Hilfe!
Vielen, vielen Dank!
Hier der Link zu der C-Control, die ich gekauft habe:
http://www.conrad.de/ce/de/product/.....l=005
Den IRQ-Eingang habe ich schon gefunden.
Habe die Masse des Radios mit der Masse der C-Control verbunden...
Experimentiere gerade ein wenig rum...
Gruß Martin
|
BID = 758684
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Ich denke das ist einer der gangbarsten Wege
Für weitere Rückfragen stehe ich gerne zur Verfügung
|
BID = 758703
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Perfekt funktioniert schon recht gut.
Pro Senderwechsel 5 fallende Flanken. Sind also 10 Takte - zuverlässig.
Kommt mir wenig vor für 8 Bytes... aber mal sehn, was er dann auf der Datenleitung ausspuckt
Allerdings reagiert der Interrupt nur auf fallende Flanken.
Ich finde für Basic keinen Befehl, wie man den Interrupt für beide Flanken sensibel macht.
Ich finde in keiner Referenz das Thema Interrupt...
Dann gäbe es da immer noch das Problem, wie ich dann die Datenleitung auslesen soll.
Du sagst ja, die C-Control kann auch Hi-Pegel am Digital-Port erkennen.
Habe gerade nochmal gesucht...
Z.B. hier: http://ccontrol.csslabs.de/index.ph.....B.bpp
Hier steht auch, dass man ein Kabel mit Masse auf den Port legen soll zum Testen.
Gibts vielleicht sowas wie Pulldown, damit er auf +5V reagiert?
Habe nichts dazu gefunden.
Danke nochmals!
Gruß Martin
|
BID = 758712
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Folgendes solltest du mit der Datenleitung machen:
define Datenleitung bit[?] - ? Je nach angeschlossenem PIN
define Zaehler byte <- hier speicherst du die Position ab an der du dich im "stream" befindest, d.h. du zählst die ankommenden Flanken
define Data byte <- Datenspeicher
interrupt Impuls <- wenn ich das richtig verstanden habe springt er zum befehl Impuls jedes mal wenn ein Interrupt ausgelöst wird
Data=0
Zaehler=0
'Der Haupt Loop
#Loop
if Zaehler = 7 then goto Send
goto Loop <- hier endet der Haupt-Loop
#Send <- die Sprungadresse, wenn das Byte voll ist.
Print Data <- Ausgabe von Data an den PC
Zaehler =0 <- Zähler rücksetzen
Data=0 <- Daten rücksetzen
goto Loop
Dann immer wenn dein Interrupt ausgelöst wird:
#Impuls
Zaehler = Zaehler + 1
if Datenleitung then Data=Data+(2^zähler) <- Steht auf der Datenleitung eine 1 dann die jeweilige Position hinzurechnen.
return interrupt <- Rücksprung nach dem Interrupt
meh. das habe ich jetzt ausm Kopf zusammengehackt. Leider hab ich schon ewig nicht mehr Basic programmiert. Kann syntaktische Fehler enthalten. Aber das sollte das tun, was du willst. Probiers mal aus.
|
BID = 758719
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Hab in der Anleitung jetzt noch was gefunden.
Zitat :
| Der Interrupt-Eingang IRQ
Der IRQ-Pin ist auf dem Steuercomputer mit einem 10k-
Pullupwiderstand high-gezogen. Wird beim Ausführen eines BASIC-
Programms eine Low-Flanke am IRQ-Pin erkannt, so verzweigt die
Abarbeitung des Programms vor dem nächsten BASIC-Befehl zu einer
vom Anwender definierten Stelle (siehe INTERRUPT-Befehl). |
Also musst du den Interrupt eingang so konfigurieren, dass eine Steigende Flanke am Eingang den Interrupt-Pin auf Low zieht. Das geht im Normalfall mit einem einzelnen Transistor wie oben beschrieben. Eine Änderung in Software funktioniert definitiv nicht.
|
BID = 758728
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hier hätte Geld gespart werden können.
Ich kenne mich mit C-Controls nicht wirklich aus, aber kann es sein, dass da alles bloß interpretiert wird? Wenn ja, dann wird das nichts. Die Taktperiodendauern liegen im Bereich von 20µs, ob die C-Control das schafft?
Der Grafik ist ja eindeutig zu entnehmen, dass die Daten bei steigender Flanke gültig sind. Man invertiere das Taktsignal also und lese den Datenport kurz nach dem INT ein.
Dann schiebt man das Bit in eine Variable und nach acht Vorgängen ist man fertig.
Das macht man aber in keinem Fall so:
Zitat :
|
f Datenleitung then Data=Data+(2^zähler) |
Das mag mathematisch zwar wunderbar sein, geht aber in der Realität viel einfacher (Multiplikation mit zwei, Addieren mit sichselbst, Linksschiebeoperation,...)
_________________
|
BID = 758751
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
Jetzt muss ich mich erst nochmal bei euch allen bedanken!
Das ist wahnsinn, wie sehr einem hier geholfen wird.
Tausend Dank!
Also so ähnlich hab ichs bis jetzt auch gemacht, nur, dass er bei jedem Interrupt eine 1 auf dem Display ausgibt, damit ich sehe, wie viele es sind.
Dann muss ich das Taktsignal auch noch invertieren.
Werde heute nachmittag mal die Transistoren besorgen.
Theoretisch könnte man doch auch die fallenden Flanken auswerten, dann aber 20µs warten?...
Obwohl nein, geht wohl nicht, weil er die erste Flanke nicht mitbekommen würde.
Binärcode in Dezimale umrechnen krieg ich hin =)
Das ist an der Uni immer das Standardbeispiel.
@DonComi: Wenns nichts wird ist nicht so schlimm.
Eigentlich wollte ich schon immer ne C-Control zum üben/lernen haben.
Also verschwendetes Geld ists nicht.
Ich melde mich wieder, wenn ich weiter bin=)
Ihr seid eine wirklich gute Hilfe!
Vielen Dank
|
BID = 758766
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
martix hat am 4 Apr 2011 17:31 geschrieben :
|
Deshalb meine Frage: Wie realisiere ich es, dass ich die +5V Signale in ein Massesignal verwandle.
|
IC mit dem Namen ULN2003 (oder ULN2803) kann so was...
Ist ein sog. Open Kollektor Treiber und wird mit 5V angesteuert. Der schaltet seine Ausgänge entsprechend dem Eingang gegen Masse (nahezu 0V).
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|
BID = 758767
martix Neu hier
Beiträge: 37 Wohnort: Stuttgart
|
|
BID = 758768
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Ja, evtl. brauchst Du noch einen Pull - up Widerstand (ca. 2,7kOhm) aber so sollte es gehen.
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|
BID = 759080
QuirinO Schreibmaschine
Beiträge: 2205 Wohnort: Behringersdorf
|
Zitat :
| Ich kenne mich mit C-Controls nicht wirklich aus, aber kann es sein, dass da alles bloß interpretiert wird? Wenn ja, dann wird das nichts. Die Taktperiodendauern liegen im Bereich von 20µs |
Ja, C-Controls interpretieren. Zumindest die Basic Programme. Wie es mit den C Programmen aussieht kann ich nicht sagen, aber ich weiss auch, dass es die Möglichkeit gibt eigene Routinen in Assembler einzubinden. Man sollte einfach testen ob es so funktioniert, wenn nicht, dann muss man sich was einfallen lassen. Völlig Hoffnungslos ist es jedenfalls nicht, es werkelt schliesslich ein Atmel Prozessor auf dem Ding, wenn mich nicht alles täuscht.
|
BID = 759091
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Das bringt einem nichts. Wenn das Programm in einen SRAM geladen und von der Firmware im AVR interpretiert wird, kannst du nichts machen, auch kein ASM. AVRs (zumindest die 8-Bitter) können Programme nur aus dem Flash ausführen.
Ich bin mir aber gar nicht sicher, ob da wirklich ein AVR werkelt. Könnte auch irgendwas von Motorola sein.
Wenn jedenfalls diese vermeintlichen Interrupts eher dem VB-Konzept „Event“ entsprechen, dann läuft im Hintergrund irgendeine Event-Schleife, die zyklisch bestimmte Eingänge überwacht...
Dann ist das Unterfangen zum Scheitern verurteilt.
Ich sehe noch die Chance in externer Hardware, wie z.B. einem µC, der über I²C angebunden wird. Der tastet dann die Werte vom Radio aus und übermittelt sich byteorientiert als I²C-Slave der C-Control.
Die wird allerdings diesen Slave pollen müssen, es sei denn, die C-Control kann auch als Slave arbeiten...
_________________
|