Hallo, das Thema FPGA ist für mich ziemlich neu, ich habe mir ein kleines Lattice testboard besorgt und ein paar 7 Segment LEDs. Jetzt würde ich diesen gerne via I2C ansprechen, gibt es eigentlich eine Möglichkeit I2C ohne zusätzlichen Taktgeber zu implementieren? (I2C Write würde ausreichen um einen Wert zu setzen und diesen dann am 7-Segment LED auszugeben, I2C Read würde nicht benötigt werden in dem Fall). Hat jemand eine Idee wie ich so etwas realisieren könnte? Ich seh den Wald vor lauter Bäumen nicht.. stehe absolut am Anfang damit.
I2C hat doch einen Takt. Nimm halt SCL als Takt, damit sollte es gehen. Gruß Marius
Ich habe mir ein paar Beispiele angesehen, die hatten aber alle einen Systemtakt vorausgesetzt, ich denke das war jetzt nicht SCL wenn es mich nicht täuscht. Hat denn schon jemand I2C (I2C write) ohne weiteren Taktgeber implementiert? Bei I2C read kann ich es mir schon eher vorstellen das so etwas benötigt wird da die Antwort ja vom FPGA kommen würde, das brauche ich in dem 7seg-LED Test aber nicht.
Bei I²C wird für jedes Bit im Byte SCL einmal getaktet (und dann noch ein 9. Mal um das ACK vom Slave zu kriegen). Man dürfte also rel. einfach die Daten einlesen können (ich könnte mir sogar vorstellen, dass das irgendein gelangweilter Jemand schonmal diskret mit Schieberegs gebaut hat (ich kenn zwar akut nix, es ist aber einfach genug dafür). Man hat so etwa den Flow: Start-bedingung (SDA fällt während SCL high ist, sehr einfach zu detektieren); hier kann man ja einen Reset rausholen -> Slave Adresse ins Schiebereg rattern lassen, nach 8 takten (3 bit-Zähler ist da dein freund) vergleichen (XOR und (N)OR), Status anpassen (lesen , schreiben oder nicht angesprochen, du hast ja nur schreiben oder garnix)) -> ersten datenbyte reinrattern lassen und wenn fertig in das Zielreg schieben (ich denk mal du hast nur eins) -> ACK oder NAK senden (je nachdem was du vorhast legst du halt den SDA low oder nicht) -> Stop-Befehl vom Master -> alles tristate
Martin schrieb: > gibt es eigentlich eine > Möglichkeit I2C ohne zusätzlichen Taktgeber zu implementieren? Was meinst Du mit "zusätzlich"? Welchen anderen verwendest Du denn schon?
Grendel schrieb: > Was meinst Du mit "zusätzlich"? > Welchen anderen verwendest Du denn schon? noch keinen ich arbeite mich gerade ein in das Thema. Das Problem das ich auch sehe ist ein eventueller stall von der ganzen State Maschine. Lattice hat dort ein I2C Beispiel, ich werde die kommenden Tage mal damit rumspielen, aber ich bin schon mal für jede Hilfe dankbar :-)
Ich hab grade gelesen, dass du ein LED-Disp hast, wenn du das muxxen willst brauchst du eh einen dauerhaften Takt.....
Nein ich habe solche hier: http://www.ebay.de/itm/5x-7-Segment-Anzeigen-rot-13mm-gebraucht-gepruft-sehe-Foto-/111234869097?pt=Bauteile&hash=item19e61d6769 Dazu brauch ich keinen zusätzlichen Taktgeber soviel weiss ich ja mittlerweile schon :-)
Wenn du für jedes Digit einen Pin hast, dann ja. Nur wenn man z.b. eine Uhr mit 4 Stellen hat würdest du so 7*4 = 28 I/Os brauchen. Deswegen multiplext man das (man zeigt die einzelnen Zeichen so schnell hintereinander an, dass es für einen Mensch statisch aussieht). Das braucht dann 7(Segemente)+4(Digits) = 11 I/Os und halt einen Takt. Und das Gefälle wird noch größer wenn man mehr Stellen hat. Für alles was mehr als zwei Stellen hat ist die statische Ansteuerung eigtl. daneben...
@ Martin (Gast) >Ich habe mir ein paar Beispiele angesehen, die hatten aber alle einen >Systemtakt vorausgesetzt, ich denke das war jetzt nicht SCL wenn es mich >nicht täuscht. das wird wohl so sein. >Hat denn schon jemand I2C (I2C write) ohne weiteren Taktgeber >implementiert? Kann man machen, ist aber nicht so günstig und ggf. gefährlich. Denn I2C benötigt einen ROBUTEN Glitchfilter am Takteingang, sonst läuft das nicht stabil. Ein heutiges FPGA ist mehr als hundertmal schneller als I2C, darum ist der Takt SCL als Takt für ein FPGA nur mit Bauchschmerzen zu verwenden. Siehe Taktung FPGA/CPLD. Darum nimmt man für I2C im FPGA besser einen hochfrequenten Takt, so 10 MHz oder so, sampelt damit SCL und SDA und macht dann eine Auswertung der Signale. Dabei kann man noch sehr gut filtern und kann Fehler besser abfangen. Denn was machst du, wenn SCL aus einen bestimmten Grund nicht mehr taktet? Dann steht alles!
Falk Brunner schrieb: > Denn was machst du, wenn SCL aus einen bestimmten Grund nicht > mehr taktet? Dann steht alles! Wenn SCL nicht mehr taktet dann kann ich den FPGA in so einen Fall sowieso nicht mehr ansprechen denn dann wäre ja die Master -> Slave Kommunikation hinüber? Übersehe ich da jetzt irgendetwas?
@ Martin (Gast) >Wenn SCL nicht mehr taktet dann kann ich den FPGA in so einen Fall >sowieso nicht mehr ansprechen denn dann wäre ja die Master -> Slave >Kommunikation hinüber? Sicher, aber darum allein geht es nicht. Wenn man etwas komplexere Logik als nur ein paar statische LED-Ausgänge hat, will man ja meist bei Fehlern auf dem I2C Bus was machen, dafür braucht es einen dauerhaften Takt.
Martin schrieb: > > ich habe mir ein kleines Lattice testboard besorgt Welches? Wenn es das MachXO2 Breakoutboard ist gibt es Möglichkeiten einen Takt zu bekommen: 1) Oscillator nachbestücken 2) Den MachXO2 internen Oscillator benutzen (OSCH Primitive)
Vlt. sagt der OP mal was er plant zu tun :D Wenn das nur eine "Machbarkeitsstudie" ist, dann ist das was anderes als ein Produktiv-System. Ich denk mal dass das mehr als Experiment gedacht ist, da man an jeder Ecke I²C-Displaytreiber für <5€ hinterher geworfen bekommt :D
Einen I2C Client mit dem ich ein 7 Segment Display ansteuern kann (wobei ich für jedes Segment in dem Fall einen Pin zur Ansteuerung verwenden möchte). Es geht um's Verständnis von dem Ganzen.
Wenn es dir um's Verständniss geht, dann setzt dich hin und überlege, wie du das Problem mit normalen Logikgattern lösen würdest. Das sollte dann auch so mit einem FPGA möglich sein. Du musst es halt passend in VHDL beschreiben. Der Grundgedanke bei FPGAs ist aber sequentielle Logik und das geht nur mit Takt. Im Endeffekt ist das wohl auch einfacher. Gruß, SIGINT
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.