Hallo, ich suche eine inizialisierung für einen Si5352 in Assembler-Code. Danke.
Das ist ein Taktgenerator, der per I2C angesprochen wird. Wie soll da was "in Assembler" initialisiert werden? Oder willst Du für Deinen nicht genannten µC ein Assemblerprogramm, das über I2C mit dem Ding redet? Warum?
Für welchen Prozessor sollte denn die Initiaslisierung geschrieben sein? Nicht, dass einer Code für einen SHARC-DSP hat und du nichts damit anfangen kannst... Darf man die I2C-Engine des fraglichen Prozessors verwenden? Oder soll das Assembler sein, der händisch an den Pins wackelt?
:
Bearbeitet durch Moderator
Franz schrieb: > ich suche eine inizialisierung für einen Si5352 in Assembler-Code. Wir brauchen mehr Details! (Zitat in Anlehnung an Dieter Hallervorden)
Franz schrieb: > für einen Si5352 Dabei wird es jedoch schwierig werden die dazugehörige Hardware in Realität zu finden. Ich schlage vor "man nimmt" das "alte" Modell Si5351.
Und dann war da noch die Frage, wie der Baustein initialisiert werden soll. Immerhin gibt es da bis zu 180 Register zu bespaßen: https://www.google.com/search?q=si5351a+an619
Lothar M. schrieb: > Und dann war da noch die Frage, wie der Baustein initialisiert werden > soll. Einfach bei Arduino abkupfern statt selbst zu denken.
Das Setup des Si5351 wirkt am Anfang recht unübersichtlich. Mir hat folgender Beispielcode geholfen die passenden Registerwerte zu finden: https://qrp-labs.com/images/synth/demo1/si5351a.c von der Seite: https://qrp-labs.com/synth/si5351ademo.html
Hallo Leute, zunächst möchte ich mich entschuldigen für meine unklare Anfrage inklusive der falschen IC-Bezeichnung. Also, ich verwende einen Si5351. Des weiteren arbeite ich mit AVR-Kontrollern, nach Möglichkeit mit dem ATTiny 84. Da ich ansonsten nichts von den üblichen Programmiersprachen kann und weis, ist es mir nicht möglich, z.B. den Arduino-Code zu lesen. Ich suche auch kein fertiges Programm, sondern einen reinen Assembler-Code. Es würden auch Aussagen über die einleitenden Befehle genügen. Ich benutze ein selbst geschriebenes I2C-Programm mit dem ich schon einiges im Si5351 zum Laufen brachte. Nur klappt nicht alles (z.B. gehen nicht alle Si5351 bei mir) und ich weiß nicht warum.
Du hast also gar keine Erfahrung und Ahnung, verlangst aber einen Code in Assembler? Mit Arduino bist du da am besten beraten für den Einstieg. Oder verwechselst du Assembler mit einer kompilierten Binary? Wobei mir da der Nutzen nicht klar wäre.
Ich kann auch nur Assembler, hab mit 6502 angefangen, auch mal in Z80 reingeschnuppert und dann noch AVR Assembler programmiert. Wir sind eine aussterbende Spezies. https://qrp-labs.com/synth/si5351ademo.html alles in C "sketch" wieso nicht gleich "app" ? Neumodischer Kram. Das Datenblatt, 72 Seiten: https://cdn-shop.adafruit.com/datasheets/Si5351.pdf https://cdn-learn.adafruit.com/downloads/pdf/adafruit-si5351-clock-generator-breakout.pdf Iih, in Python. Aber ziemlich ausführlich beschrieben wie mir scheint.
Christoph db1uq K. schrieb: > Neumodischer Kram. Der Si5351 eigentlich auch. Nur, damit man grob abschätzen kann, was zu was passt. Baut ja auch keiner eine Dampfmaschine in einen 40-Tonner rein, und erwartet, dass das rennt wie Schmitz Katze... Franz schrieb: > Nur klappt nicht alles (z.B. gehen nicht alle Si5351 bei mir) Hast du ein Oszilloskop und einen Logic-Analyzer? (**) > und ich weiß nicht warum. Dann drehen wir den Spieß doch leichter mal um: was geht, wenns geht? Und was sollte gehen, geht aber nicht? Warum erwartest du, dass es geht und wie stellst du fest, dass das nicht so ist? (**) ohne diese Dinge kann man serielle Busse nicht zuverlässig in Betrieb nehmen
:
Bearbeitet durch Moderator
Nun, es fällt mir schwer, mich hier richtig darzustellen, ohne als Angeber und Aufschneider zu erscheinen. Also ich bin Autodidakt, hatte noch nie Umgang mit Programmierern und kenne daher nicht wie es Andere machen. Meine Vorgehensweise ist folgende: ich besorge mir ein Datenblatt und lege los. Für Atmel habe ich mir -vor vielen Jahren- Studio 4 besorgt und in Assembler losgelegt. Habe bis heute noch kein fremdes Programm im Computer. Wüste auch nicht wie ich es dann in einen Atmel brächte. Angefangen habe ich übrigens 1978 mit einem Z80 im Nascom 1. Dort programmiere ich bis heute nur in Hex ! Anfänger beim Si5351 bin ich nicht. Habe dafür ein Berrechnungs.Pgr geschrieben was von 5 kHz bis 150 MHz Ausgabe alles von einer Quelle von 10-40 Mhz berrechnen kann, natürlich im AVR in Assemler. Ich kenne alle Register im Si5351 und benutze viele davon. Nun kann man sich fragen, was will ich eigentlich? Da manche PGR´s bei mir bei dem einen IC gar nicht gehen oder falsche, unstabile Frequenzen ausgeben , das selbe PGR in einem anderen IC aber über Monate völlig stabil läuft, bin ich auf der Ursachensuche. Das I2C-Programm habe ich 3 Tage lang mit Oszilograf und anderen Mitteln durchforstet, aber nichts gefunden. Nun dachte ich, daß ich vieleicht ein Register übersehen habe, was man noch beschicken müste. Wenn ja, bräuchte ich nur die Registernummer und dessen Inhalt. Entschudigung, war eine lange Geburt....
Hallo Christoph db1uq, mein Call ist DJ7KL und bei mir läuft seit Monaten eine Wisper-Dauerbake auf 40 Meter mit einem Si5451. Dort wird die QRG in Solchem erzeugt und muss alle ca. 0,7 Sekunden auf wechselnde QRG´s mit Abständen von etwa 1,4 Hz ausgegeben werden. Wenn so ein Ding bei mir läuft, dann läufts.
Also du hast ein Programm, dass fehlerfrei mit dem IC kommuniziert aber bei einigen anderen ein Fehler auftritt? Von welcher Quelle hast du den IC denn her?
:
Bearbeitet durch User
Zeig doch mal bitte deinen Versuchsaufbau (Schaltplan). Benutzt du einen Quarzoszillator in SMD oder THT ausführung oder ein Breakout Board?
:
Bearbeitet durch User
Hallo Ko, Ich speise den Si5351 folgendermaßen: der Takt kommt von einer 10 MHz-Referenz welche mit GPS synchronisiert/stabilisiert wird. Die Clock- und Daten-Eingänge weisen Pullup-Widerstände von 2,2 kOhm auf und werden von einem Attiny 84 beschickt. Die Stromversorgung von 3,3 V ist stab. und unmittelbar mit einem C von 100 nF verblockt. Als Ausgänge benutze ich M0 und/oder M1. Mit dem Si5351 kommunizieren ist bei mir etwas falsch ausgedrückt: ich beschicke das IC mit Daten, lese aber nicht zurück. Schaue mir lediglich manchmal am Oszi an ob das AK vom IC kommt. Mein Problem ist ja, daß manches Si5351 nach Beschickung/Inialisierung gar nichts am Output zeigt oder die Frequenz sehr unstabil ist, wie wenn die PLL nicht richtig funktioniert. Nun zur leidigen Frage von dir: ich kaufe immer 5 oder 10-stückweise in China! Endweder gehen dann alle oder keine. Da ich bisher von außen nichts von getürkten Si5351 hörte, nahm ich an, daß nur ich dieses Problem habe.
> Es würden auch Aussagen über die einleitenden Befehle genügen Hoffentlich kannst du C soweit lesen damit du verstehst was der code machen soll. In diesem Beispiel habe ich verstanden wie die vielen Register gesetzt werden müssen, bzw. wie eine Strategie aussehen kann um zu einer gewünschten Frequenz zu kommen: https://qrp-labs.com/images/synth/demo1/si5351a.c Der Takt am Eingang wird zuerst benutzt um mit einer Fractional-Int PLL den internen Oszillator zu stabilisieren. Dann wird diese Frequenz geteilt (=Teiler2) um die Ausgangsfrequenz zu bekommen. Der Jitter am Ausgang ist am geringsten wenn Teiler2 eine gerade Zahl ist. Also wird in Zeile 141/143 berechnet welcher Teiler die höchste gerade Zahl ist bei der der interne Oszillator unter 900MHz bleibt. Beispiel: Ausgangsfreq = 1,9MHz -> Teiler=472, Oszillator=896,8MHz
1 | divider = 900000000 / frequency;// Calculate the division ratio. 900,000,000 is the maximum internal |
2 | // PLL frequency: 900MHz |
3 | if (divider % 2) divider--; // Ensure an even integer division ratio |
In den Zeilen 147 bis 153 wird dann berechnet auf welche Werte (mult, num und denom) die frational-int PLL gesetzt werden muss um von der Eingansfreq (xtalFreq) die gewünschte Frequenz des internen Oszillators (pllFrequency) zu kommen.
1 | mult = pllFreq / xtalFreq; // Determine the multiplier to get to the required pllFrequency |
2 | l = pllFreq % xtalFreq; // It has three parts: |
3 | f = l; // mult is an integer that must be in the range 15..90 |
4 | f *= 1048575; // num and denom are the fractional parts, the numerator and denominator |
5 | f /= xtalFreq; // each is 20 bits (range 0..1048575) |
6 | num = f; // the actual multiplier is mult + num / denom |
7 | denom = 1048575; // For simplicity we set the denominator to the maximum 1048575 |
Na dann stell doch deinen Assembler-QuellCode ein und ein zwei Fotos vom Aufbau und Schaltplan hier rein und wir sagen Dir dann, was falsch läuft.
> Nun dachte ich, daß ich vieleicht ein Register übersehen habe, was man > noch beschicken müste. Wenn ja, bräuchte ich nur die Registernummer und > dessen Inhalt. Es gibt vom Hersteller ein Programm bei dem man seine Parameter eingeben kann und das einem die Registerinhalte ausgibt die man in den Si5351 schicken muss. AFAIR kann man da nur 25 und 27MHz für den eingang angeben. Wenn du 10MHz hast, musst du einfach deine Ausgangsfrequenz mit 2,5 multiplizieren und 25MHz als Quarz angeben... https://www.skyworksinc.com/en/Application-Pages/Clockbuilder-Pro-Software
Hallo Georg, danke für die Info, werde versuchen das "C-Beispiel" zu entziffern. Da ich die Berrechnungen im Attiny 84 mache, kann ich die nicht während der "Beschickung des Si5351" machen, sondern vorab. Als Ergebnis habe ich dann alle Registerwerte binär (in Hex) vorliegen und schiebe sie dann mit einem anderen Programm in den Si5351. Vieleicht kommt es dann auf die Reihenfolge der Register-Beschickung an?! Mal sehen. Danke auch für die Mühe die du dir für den Rest der Erklärung gemacht hast. Diese ist mir aber seit Jahren gut bekannt. Nun werden wieder einige sagen: wie kann man nur die Sache so umständlich handhaben. Für Leute die keine Zeit haben ist das gerechtfertigt. Ich bin aber seit über 20 Jahren Rentner (nach voll gearbeiteter Zeit) und beschäftige mich auf diese Weise um nicht frühzeitig zu verblöden.
Franz schrieb: > bei dem einen IC gar nicht gehen oder falsche, unstabile Frequenzen > ausgeben , das selbe PGR in einem anderen IC aber über Monate völlig > stabil läuft Wenn ein Programm Amok läuft, liegt es gern an einer falschen Initialisierung. Irgendein Zeiger auf den falschen Speicherbereich, oder er fehlt einfach, und schon werden Daten zerschossen. Vielleicht läuft im Hintergrund ein Interruptprogramm, das irgendwann zuschlägt. Oder ein Pin hängt in der Luft und hat einen beliebigen Logikpegel.
Hallo Christoph, warum glaubst du, daß ich eingangs geschrieben habe "ich suche eine inizialisierung für einen Si5352"
Franz schrieb: > Nun zur leidigen Frage von dir: ich kaufe immer 5 oder 10-stückweise in > China! Endweder gehen dann alle oder keine. Da ich bisher von außen > nichts von getürkten Si5351 hörte, nahm ich an, daß nur ich dieses > Problem habe. Beim Kauf in China kann da alles mit sein. Originalware, Ausschussware, Leergehäuse, Refurbished, etc. pp. Wenn Du schon in China kaufst dann doch bitte bei einem etablierten Distributor, auch nicht teuer. Da bekommst Du jedenfalls Originalware. https://www.lcsc.com/search?q=Si5351
Lothar hat oben schon einen Link genannt, hier die von ihm genannte Application Note 619 beim Hersteller Skyworks: https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/application-notes/AN619.pdf Der Chip hat ja eine Menge Funktionen, eine Spreizspektrum-Option und einen VCXO, der (nur in der Version Si5351 B) eine Feineinstellung der Quarzfrequenz erlaubt. Hier im Forum gab es schon 2022 einen Thread zum Si5351 und die AN619: Beitrag "si5351 AN619" Skyworks bietet hier eine Windows-Software zur Berechnung der Parameter an: https://www.skyworksinc.com/Application-Pages/Clockbuilder-Pro-Software Beschreibung dazu: https://tools.skyworksinc.com/timingfiles/latest-tools/ClockBuilder-Pro-README.pdf In der Beschreibung gibt es 51 Fundstellen zu "Si535", die Software gilt aber für viele weitere Bauteile von Skyworks. Die neuste dürfte "CBPro 4.17 [2025-11-06]" sein.
Wastl schrieb: > Wir brauchen mehr Details! > (Zitat in Anlehnung an Dieter Hallervorden) "Schreiben Sie es auf!" folgt noch danach. https://www.youtube.com/results?search_query=ich+brauche+mehr+details "Didi der Doppelgänger" von 1984, mehrfach auf YT zu finden. Die Varianten A, B und C könnten auch ein Grund für das unterschiedliche Verhalten sein. Ob die chinesischen Händler von dem Unterschied wissen?
Hallo, um es nochmal klar zu stellen: ich habe KEIN Problem mit den von mir berechneten Registerwerten für xbeliebige Ausgangsfrequenzen. Wenn bei mir ein IC geht, dann stimmt die Frequenz auf hundertstel Hz genau. Wenn es nicht geht, habe ich entweder gar keinen Output oder die Frequnz ist total falsch und wackelt herum. Da es außer den Frquenzbestimmenden Registern auch noch ein paar Andere gibt, kann dort bei mir der Hund begraben sein. (und bitte keine Diskusion, wie ich die Frequenzen messe/bestimme).
Hallo Christoph db1uq, du wohnst ja in der Frankfurter Gegend, bist du auf 2m QRV ?
Mannheim liegt doch noch etwas südlicher. Und Qrv bin ich auch kaum noch. Dann mal viel Erfolg bei der Fehlersuche. Den chinesischen Händlern traue ich einiges zu, das könnten auch einfach defekte Teile sein, oder nur einigermaßen kompatibles.
Ja danke Christoph, nun erinere ich mich. Ich kenne dich doch von den Flohmärkten, wo du immer eifrig am Gucken warst. Schade, daß du nichts mehr auf 2m machst.
Ja mithilfe der Rufzeichenliste erinnere ich mich auch wieder, ich bin mal mit dem Rad von Karlsruhe aus ins Fahrzeugmuseum nach Marxzell gefahren. Ich habe während des Studiums in der Südstadt KA gewohnt. Ich erinnere mich dunkel, dass mein späterer Wisi-Kollege Werner DC8TN deinen Nachnamen mal erwähnt hat.
:
Bearbeitet durch User
Franz schrieb: > ist es mir nicht möglich, z.B. den Arduino-Code zu lesen. Ich > suche auch kein fertiges Programm, sondern einen reinen Assembler-Code. Dann kompilier doch einfach den C oder Arduino-Code und schau dir den Assembler-Code an. Franz schrieb: > Pullup-Widerstände von 2,2 kOhm Recht niedrig. Franz schrieb: > lese aber nicht zurück. Vielleicht mal prüfen ob in den Registern die richtigen Werte ankommen? Franz schrieb: > Ich bin aber seit über 20 Jahren Rentner (nach voll > gearbeiteter Zeit) und beschäftige mich auf diese Weise um nicht > frühzeitig zu verblöden. Dann lern doch mal eine andere Programmiersprache als AVR-Assembler, dann kannst du die Berechnungen auch auf dem PC machen und musst nicht alles auf dem kleinen ATtiny über zwei Programme berechnen&anwenden lassen... Neues lernen ist auch gut für den Kopf.
Niklas G. schrieb: > Dann kompilier doch einfach den C oder Arduino-Code Geht nicht, da ich noch keinen Kompilier in Assemler geschrieben habe. Niklas G. schrieb: > Dann lern doch mal eine andere Programmiersprache als AVR-Assembler, Kein Bedarf, da ich der Meinung bin daß ich in Hex und Assembler meinen Kopf mehr anstrenge als in irgend einer anderen höheren Programmiersprache. Im übrigen: da ich mit meiner Arbeits- und- Ansichtsweise seit über 40 Jahren immer alleine gut zurecht kam und vieles durchgezogen habe ohne Hilfe zu benötigen, werde ich mich nun mit 87 Jahren nicht mehr ändern. Jedenfalls danke für deine Anregungen.
Franz schrieb: >> Dann kompilier doch einfach den C oder Arduino-Code > > Geht nicht, da ich noch keinen Kompilier in Assemler geschrieben habe. musst du auch nicht, du kannst das auch bequem online erledigen: https://godbolt.org/z/MjE8asPqs
Franz schrieb: > Geht nicht, da ich noch keinen Kompilier in Assemler geschrieben habe. AVR Studio enthält doch einen? Ansonsten installier einen beliebigen Compiler. Oder verwende einen Online -Compiler wie von Roger vorgeschlagen. Franz schrieb: > , da ich der Meinung bin daß ich in Hex und Assembler meinen Kopf mehr > anstrenge als in irgend einer anderen höheren Programmiersprache Die Wissenschaft ist da anderer Meinung - man muss was völlig neues machen, das ganz andere Denkweisen erfordert. Wer schon immer mit Hexadezimalzahlen arbeitet, wird von noch mehr Hexadezimalzahlen nicht viel profitieren. Und ja, es ist anstrengend.
Ich konnte keinen Unterschied zwischen Summers Prgrammierung und der Meinigen feststellen. Auch die beiden Befehle am Ende Reset_PLL und Output_ EIN liegen bei mir genauso vor. Wenn ich einen grundsätzlichen Fehler im PGR hätte, würden nicht ALLE Si5351 einer Charge auf Anhieb gehen. So, meine letzten Überlegungen. Muß mir doch einen anderen Lieferanten suchen. Niklas G. schrieb: > Die Wissenschaft ist da anderer Meinung ... Mag sein, die Freude und Genugtuung die ich bei HEX- und Assembler-Programmierung erfahre, ist mir aber wichtiger. Vor allem für die Gesundheit.
Franz schrieb: > So, meine letzten Überlegungen. In solchen fraglichen Fällen (manche Chips funktionieren, manche nicht) ist es oft auf eine Nichteinhaltung von vorgeschriebenen Toleranzgrenzen zurückzuführen. Ich denke da z.B. an Delays für das Einschwingen von PLLs, oder Wartezeiten für einen Reset-Zylklus. Wurde die Referenz schon erwähnt - ist der Pegel richtig geliefert (kann ja auch zuviel sein)? Etc. .... Will heissen dass ich nicht an die Version glaube dass "schlechte" Chips geliefert werden. Als "Schnelltest" könnte man ja mal mein Testprogramm ausprobieren. BluePill erforderlich: Beitrag "Mini HF Generator mit SI5351 und Bluepill" Wenn es sein muss kann ich auch kurzfristig ein Programm- Pendant auf AVR-Basis liefern.
Wie ist denn die genaue Bezeichnung des Chips? Z.B. hat ein SI5351A-B04771-GT andere Voreinstellungen der Register als ein SI5351A-B-GT. Ich nehme mal an, daß SI5352 und Si5451 Tippfehler sind.
Hallo F.P. es sind tatsächlich Tippfehler. Ich habe nun versucht, von einigen IC`s die Beschriftung zu lesen. Es fiel mir aber trotz Lupe sehr schwer es einigermaßen zu entziffern. Aber mit Sicherheit habe ich keines mit einem A oder B hinter SI5351 gefunden. Habe folgendes einigermaßen erkannt: 5351 AJI9 202 5351M TCVD 59 5351 8LTF 5351 BWDS MS5351V TC1A01 Gruß Franz
Franz schrieb: > Habe folgendes einigermaßen erkannt: 5351 AJI9 202 / 5351M TCVD 59 / > 5351 8LTF 5351 BWDS MS5351V TC1A01 Bei einem echten SI5351A steht SI5351A drauf. Das könnten chinesische Nachbauten sein, von Hangzhou Ruimeng Tech. Ich hatte mir mal überlegt, ob ich davon welche zum Testen kaufe (gibt es bei LCSC), aber Deine Erfahrungen sprechen dagegen.
Lothar M. schrieb: > Baut ja auch keiner eine Dampfmaschine in einen 40-Tonner rein, und > erwartet, dass das rennt wie Schmitz Katze... Die Zeiten der alten Dampflokomotiven scheinen an dir vorbei gegangen zu sein. Die Schnellzugloks der Baureihe 05 brachten 130 Tonnen auf die Waage. ;-) https://dbmuseum.de/nuernberg/fahrzeuge/schnellzuglokomotive-05001 F. P. schrieb: > Ich nehme mal an, daß SI5352 und Si5451 Tippfehler sind. Das darfst du alles nicht so genau nehmen: Franz schrieb: > ... inizialisierung für einen Si5352 Franz schrieb: > zunächst möchte ich mich entschuldigen für meine unklare Anfrage > inklusive der falschen IC-Bezeichnung. > Also, ich verwende einen Si5351.
F. P. schrieb: > Bei einem echten SI5351A steht SI5351A drauf. Bei ICs von Silicon Labs vielleicht, aber bei ICs von Skyworks nicht (siehe Anhang).
Auf meinen von (laut Rechnung) Skyworks steht SI5351A. Vielleicht waren das noch Lagerbestände aus Silicon-Labs-Zeiten und die Distributoren hatten den Namen des Herstellers schon umgestellt.
Hier ist ein Fund zu den Unterschieden zwischen SI5351A und MS5351M: https://groups.io/g/nanovna-users/message/26386
Wenn etwas manchmal funktioniert, liegt meist irgendwas ausserhalb des garantierten Bereiches, hier kann es eigentlich nur der VCO sein. Dieser ist garantiert von 600 bis 900 MHz, meist gehn die von 500 bis 1000, ich hab auch schon manche gehabt, die mit 1100 noch funktionierten. Bei einem 10 MHz Takt muß man den PLL-Teiler größer machen als angegeben, angegebene Werte beziehen sich immer auf 25 oder auch 27 MHz. 25 MHz mit PLL-Teiler=30 ergibt schöne 750 MHz, bei 10 MHz aber nur mehr 300 MHz, da steigen die Dinger dann aus. Auch eine zu schnelle i2c Übertragung wäre noch denkbar, bis 1 MHz klappt es meist, darüber wirds dann anfällig und Daten kommen nicht oder falsch an. Könnte auch eine Erklärung sein. Oder eben nachgebaute Chips, obwohl die Dinger bei Mouser & Co auch um ca. 1 Eur erhältlich sind.
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.
