Hallo zusammen, Ich bin noch relativ grün hinter den Ohren, was Mikrocontroller betrifft und stehe aktuell vor einem Problem, bei dem ich einmal nachfragen wollte, ob es so lösbar ist. Es geht darum, dass ich ein manuelles Bedienfeld mit verschiedenen Tastern, Status-LEDs und einem 7-Segment-Display habe und die Eingabe in das Gerät automatisieren möchte. Um die Taster zu schalten verwende ich ein Analog-/Digital-Schalter 4066, der über ein Arduino mit 433MHz-Empfänger angesprochen wird. Das ganze funktioniert auch zuverlässig. Allerdings besteht das Problem, dass ich trotzdem noch die manuelle Bedienung erlauben möchte, von der der der µC aber aktuell nix mitbekommt. Das kann zu teils falschen Aktionen des Arduino führen, grade beim manuellen Wechsel eines Betriebsmodus. Da die Anzeige (LEDs und Display) auf dem Bedienfeld anscheinend über eine Schieberegister angesteuert wird hatte ich jetzt die Idee dieses auszulesen und den µC so wissen zu lassen in welchen Status sich das zu steuernde Gerät befindet. Dazu würde ich die beiden Interrupt-Pins INT0 und INT1 des Arduino mit Latch- und Shift-Clock des Schieberegisters verbinden; einen der übrigen IO-Pins mit dem Eingang. Bei jedem Shift-Clock könnte ich dann den Wert vom Eingang per digitalRead einlesen und sammeln und beim Latch-Clock daraus den eingestellten Modus und Inhalt der Displayanzeige bestimmen. Ist das so möglich, oder besteht da meinerseits ein grundlegend falsches Verständnis zur Funktionsweise eines Schieberegisters und der Interrupt-Pins am Arduino?
:
Bearbeitet durch User
Um welche Taktrateen geht es dort? Ich schätze ganz grob, dass du auf diese Art (ohne Assembler) höchstens 1Mhz verarbeiten kannst.
Das weiß ich leider nicht. Lediglich, dass das Signal von einem nicht näher beschriebenen µC mit 8 MHz Taktfrequenz an das Schieberegister ausgegeben wird. Besteht die Möglichkeit die Frequenz des Signals ohne Oszilloskop festzustellen? Edit:Wenn das Signal eine Frequenz aufweist, die ich mit dem Arduino verarbeiten kann, würde meine Idee denn prinzipiell so funktionieren? Edit2: Ich habe mich grade einmal mit der Frequenzmessung mit Arduinos informiert. Hier (http://arduino.datamaster2003.com/f-measurements.htm) wird eine Methode beschrieben um diese mit über die Interrupt-Pins eines Arduino zu messen. Der Autor schreibt auch, das bei 10kHz Schluss ist, bzw. die Genauigkeit der Messung abfällt. Ich werde das aber mal ausprobieren.
:
Bearbeitet durch User
Nils H. schrieb: > Das weiß ich leider nicht. Lediglich, dass das Signal von einem nicht > näher beschriebenen µC mit 8 MHz Taktfrequenz an das Schieberegister > ausgegeben wird. Besteht die Möglichkeit die Frequenz des Signals ohne > Oszilloskop festzustellen? siehst du den μC? Was steht drauf? > Edit:Wenn das Signal eine Frequenz aufweist, die ich mit dem Arduino > verarbeiten kann, würde meine Idee denn prinzipiell so funktionieren? sollte schon gehen > Edit2: Ich habe mich grade einmal mit der Frequenzmessung mit Arduinos > informiert. Hier (http://arduino.datamaster2003.com/f-measurements.htm) > wird eine Methode beschrieben um diese mit über die Interrupt-Pins eines > Arduino zu messen. Der Autor schreibt auch, das bei 10kHz Schluss ist, > bzw. die Genauigkeit der Messung abfällt. Ich werde das aber mal > ausprobieren. du willst ja nicht die Frequenz messen - das geht nur zusammen mit einem Timer. Bei Dir liegt das Problem das bei einem INT dein Programm unterbochen werden muss und du dann den Pegel einlesen und speichern musst - und das muss passieren bis der nächste INT kommt. Sascha
Sascha W. schrieb: > siehst du den μC? Was steht drauf? Der ist leider ziemlich versteckt hinter anderen Komponenten verbaut. Ich kann aber mal versuchen ranzukommen. Sascha W. schrieb: > du willst ja nicht die Frequenz messen - das geht nur zusammen mit einem > Timer. > Bei Dir liegt das Problem das bei einem INT dein Programm unterbochen > werden muss und du dann den Pegel einlesen und speichern musst - und das > muss passieren bis der nächste INT kommt. Das ist mir bewusst. In diesem Fall ging es mir aber tatsächlich um die Messung, weil ja die Frage nach der Frequenz des Signals aufkam und ich kein Oszilloskop parat habe.
Im Prinzip geht das, wenn das Signal nicht zu schnell ist. Ohne geeignetes Messgerät kannst du die Frequenz nur erraten oder es ausprobieren.
Du könntest natürlich auch ein Schieberegister an den Arduino anschließen, und den Latch Clock an den interrupt hängen. So könntest du ganz entspannt auf einmal 8 bit einlesen und das Timeing entspannt sich deutlich.
Den µC, der das Signal ausgibt, habe ich jetzt identifizieren können. Dabei handelt es sich um einen Samsung S3F9454BZZ-DK94, mit externem 8 MHz Quarz. Das Schieberegister ist ein 74HC164N. Benedikt S. schrieb: > Du könntest natürlich auch ein Schieberegister an den Arduino > anschließen, und den Latch Clock an den interrupt hängen. So könntest du > ganz entspannt auf einmal 8 bit einlesen und das Timeing entspannt sich > deutlich. Die Idee werde ich definitiv mal im Hinterkopf behalten, vielen Dank. Stefan U. schrieb: > Im Prinzip geht das, wenn das Signal nicht zu schnell ist. Ohne > geeignetes Messgerät kannst du die Frequenz nur erraten oder es > ausprobieren. Ich werd's erstmal mit ausprobieren versuchen :)
:
Bearbeitet durch User
Nils H. schrieb: > Das ist mir bewusst. In diesem Fall ging es mir aber tatsächlich um die > Messung, weil ja die Frage nach der Frequenz des Signals aufkam und ich > kein Oszilloskop parat habe. Ein kleiner Logikanalysator für ein paar Euro würde dafür völlig reichen. Da es sich (hoffentlich) um digitale Signale handelt, dürfte der genaue Amplitudenverlauf ziemlich irrelevant sein.
> Die Idee werde ich definitiv mal im Hinterkopf behalten Setzt natürlich voraus, dass die datenübertragung auch wirklich höchsten 8 Bits pro Wort hat. Wobei mir gerade einfällt: Für solche Sachen ist doch eigentlich die universelle serielle Schnittstelle des AVR gedacht, oder nicht?
@Stefan Us stimmt ! Habe ich gar nicht dran gedacht. auf Seite 218 in dem Dabla http://www.atmel.com/Images/Atmel-42743-ATmega324P_Datasheet.pdf ist das Timing und die Eintsellungen für Spi gezeigt. Das solltest du für dein Problem nutzen können. Einfach die Datenleitung an MISO, Datenclock an SCK, SS an den Latchclock und schon fallen die Daten schön in den USART. Die genauen Parameter musst du natürlich ausprobieren. Kauf dir dafür am besten einen billigen LA.
Vielen Dank für eure Antworten. Wolfgang schrieb: > Ein kleiner Logikanalysator für ein paar Euro würde dafür völlig > reichen. Da es sich (hoffentlich) um digitale Signale handelt, dürfte > der genaue Amplitudenverlauf ziemlich irrelevant sein. Logikanalysatoren kannte ich bisher gar nicht - wieder was dazugelernt :) Ich hab jetzt auch Zeit gefunden mich mit dem Datenblatt des Schieberegisters auseinanderzusetzen und feststellen müssen, das ein 74HC164 gar kein Speicher hat sondern die Eingangsdaten mit jedem Shift-Clock direkt auf die Ausgänge gibt. Das ist bei dem 74HC595, das ich kenne, ganz anders :( Dachte die arbeiten alle so. Die von Stefan und Benedikt beschriebene Methode über USART wäre damit ja auch nicht möglich, weil auch die ein Latch-Clock benötigt, oder gibt's da noch eine andere Möglichkeit?
Nein, der USART braucht keinen Latch Clock. Der kann auch selbst einen Interrupt auslösen, wenn er genügend Takte/Bits empfangen hat.
Stefan U. schrieb: > Nein, der USART braucht keinen Latch Clock. Der kann auch selbst einen > Interrupt auslösen, wenn er genügend Takte/Bits empfangen hat. Nur hat man dann keine Syncronisation und weiß nicht wo die Daten anfangen. Interressant währe hier wie Schaltung nach dem SR aussieht, mit 8-Bit lässt sich ja auch nicht viel anzeigen. Sascha
Das LCD hat ja die Enable Leitung (gehe jetzt mal von HD44780 aus) die sollte man doch zur Synchronisation nehmen können, zumindest für die LCD Daten. Könntest du mal ein Schaltplan oder ein Foto der Platine hochladen ? EDIT: Wird bei dem 74HC164 nicht der Master Rest auf LOW gehalten während die Daten ins Register geschrieben werden. Und erst mit der Steigenden MR Flanke übernommen? Da hätten wir doch eine Synchronisation. EDIT2: das muss nicht so gemacht werden, könnte aber so sein, das solltest du mit einem LA klären, ist der MR Pin angeschlossen ?
:
Bearbeitet durch User
Benedikt S. schrieb: > Könntest du mal ein Schaltplan oder ein Foto der Platine hochladen ? Sascha W. schrieb: > Nur hat man dann keine Syncronisation und weiß nicht wo die Daten > anfangen. > Interressant währe hier wie Schaltung nach dem SR aussieht, mit 8-Bit > lässt sich ja auch nicht viel anzeigen. Sobald ich morgen abend wieder zu Hause bin, kann ich ein Foto von der Platine machen und hier einstellen. Vorweg kann ich schon soviel sagen, dass es sich um das Bedienpanel eines Bartscher IK35 Induktionskocher ist. Das ist wohl ein BT-350 des chinesischen Herstellers Better China mit anderem Label. Benedikt S. schrieb: > EDIT: Wird bei dem 74HC164 nicht der Master Rest auf LOW gehalten > während die Daten ins Register geschrieben werden. Und erst mit der > Steigenden MR Flanke übernommen? Da hätten wir doch eine > Synchronisation. > >EDIT2: das muss nicht so gemacht werden, könnte aber so sein, das >solltest du mit einem LA klären, ist der MR Pin angeschlossen ? Der Reset wird auf LOW aktiv und löscht dann das Register. In meinem Fall ist der Reset auf VCC gelegt und wird somit nie aktiv. Das hat mich zunächst etwas verwirrt, inzwischen habe ich das aber auch in mehreren Tutorials zu dem Schieberegister so gesehen.
Anbei die versprochenen Bilder.
Was auf einem geschubsten Bus los ist, ist mittels einer Unterbrechung und eines Eingangs, zusammen mit einem im Hintergrund laufenden Timer, leicht zu erfassen. Ob Du etwas damit anfangen kannst steht auf einem anderen Blatt. Wie aber willst Du das fast menschliche Problem lösen, dass zwei gleichzeitig Quasseln? µP sagt hü, der Tastenathur sagt hott.
Ach so, ich vergaß. Möglicherweise brauchst Du, um ein synchrones Signal/Ergebnis zu erhalten noch mehr Eingänge. Clock bekannt Data bekannt Reset möglich Latch möglich Output enable dem nach je Die Wahrscheinlichkeit, dass endlos geschubst wird ist relativ gering. Also muss irgendwie der aktuelle Zustand fixiert werden. Dafür gibt es aber verschiedene Möglichkeiten. Darüber hinaus brauchst Du wohl auch einen relativ breiten Monitor. Im Ergebnis kann es nämlich sein, dass 41 Bits geschubst werden wobei alle, bis auf eines, gleich sind.
:
Bearbeitet durch User
Ich habe mir jetzt einen Logikanalysator bestellt. Sobald der da ist werde ich damit mal das Signal untersuchen und die Ergebnisse hier veröffentlichen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.