Forum: Mikrocontroller und Digitale Elektronik SAA1057 in Bascom Ansteuern


von Fabian W. (fabi)


Lesenswert?

Hi an alle,

da ich noch bei www.sly.de recht günstig an den SAA1057 gekommen bin 
(7.2MHZ Quarze gibts da auch noch, falls jemand den LM7001 verwenden 
will), würde ich nun gerne die bisherige Pwm Abstimmung meines 
Bastelradios durch eine Pll ersetzen. Da das aber mein erstes I2C 
Projekt ist, habe ich noch ein paar Fragen. MC ist ein Amega16

1. Wie funktioniert den genau das Beladen des Latches A mit dem 
Frequenzwert?
   Ich sende eine I2C Startbedingung an den Chip und dann sende ich an 
die Datenleitung den Bitwert 0, um ihm zu sagen, dass er in den Latch A 
schreiben soll, was kommt aber dann ?

2. Wofür ist die DLEN Leitung? Und was muss ich auf der ausgeben, um 
Senden und lesen zu können. Kann ich denn die in Bascom integrierten I2C 
Routinen zum steuern verwenden?

3. Welche I2C Adresse hat den der Saa1057?

von Fabian W. (fabi)


Angehängte Dateien:

Lesenswert?

Hier das Datenblatt

von Fabian W. (fabi)


Lesenswert?

Kann mir keiner weiterhelfen? Wenn das noch niemand in Bascom gemacht 
hat, kann er mir vielleicht bitte Pseudocode bzw. allgemeine Antworten 
geben. Wie ich Latch B beschreiben muss, hab ich bereits dem Datenblatt 
entnommen, aber mit den Angaben für Latch A konnte ich nichts anfangen.

von Fabian W. (fabi)


Lesenswert?

So nachdem ich nochmal gründlich ins Internet und Datenblatt geschaut 
habe, denke ich jetzt zu wissen wie das funktioniert. Kann mir 
vielleicht jemand sagen ob meine Annahmen richtig sind?

Also in Latch A muss der Teilerwert von 512 bis 32... in Binärform 
geschrieben werden, multipliziert mit den gewählten Tuningschritten 
ergibt er die Frequenz.

DLEN sagt einem Slave ob er angesprochen wird, deshalb muss er solange 
wie man
in einen Latch schreibt/liest high sein, ist die Datenübertragung 
beendet muss er wieder Low werden.
Deshalb entfällt dann auch die I2C Adresse, die integrierten Bascom I2C 
Routinen werde ich denke ich mal benutzen können.

Eine Frage hätte ich aber noch, wie ändere ich den die Frequenz in der 
Software, kann ich einfach vom Teilerwert eins abziehen, und er tunt 
dann runter oder wie muss ich das machen?

Schonmal danke für eure Antworten.

von Michael U. (Gast)


Lesenswert?

Hallo,

I2C nutzt Dir nichts, der SAA1057 und auch die anderen alten PLLs machen 
kein I2C.

Das ist einfach ein serielles Schieberegister.

Ruhezustand:
CLB auf L
Data auf L
DLEN auf L

Zum rüberschieben jetzt:

DLEN auf H.
mit L -> H -> L auf CLB übernimmt der SAA jetzt das Bit an Data.

Das ist die führende 0, weil Data ja auf L liegt.
dann:

Nächstes Bit an Data.

CLB L -> H -> L

Nächstes Bit an Data

CLB L -> H -> L

usw. bis Bit 16

Dann DLEN auf L
CLB auf L
Data auf L

dann bist Du durch.

Mit I2C hat das nichts zu tun.
Man könnte es vielleicht mit SPI machen, ist aber vermutlich selbst mit 
grötem Vorteiler zu schnell.

Beachte die Zeiten auf Seite 8 und das Diagramm auf Seite 5.

Das geht alles im Bereich mehrerer µs, also recht langsam für einen AVR.

Viel Erfolg.

Gruß aus Berlin
Michael



von Fabian W. (fabi)


Lesenswert?

Danke für deine Antwort Michael

Hi ich bin gerade dabei das Programm zu schreiben
Kann mir vielleicht jemand helfen ich hab noch ein Problem:

Wie muss ich den im Allgemeinen das rauf und runtertunen an den Saa1057 
übertragen, ich habe gerade leider keine Idee wie ich das in Software 
realisieren muss?

@Bascom Benutzter gibt es den einen Befehl oder irgendeibe einfache 
möglichkeit Dezimalzahlen als Binärzahlen auf einem Port auszugeben?
Er soll je nach entsprechender Binärzahlenfolge den Port im Wechsel High 
und Low schalten.

Freundliche Grüße an alle

von ??? (Gast)


Lesenswert?

  Dim A As Byte
  Config Portb = Output

  A = 10
  Portb = A


  End

von nerv (Gast)


Lesenswert?

wenn du die zeit für deine forenergüsse in das bascom handbuch 
investieren würdest, dann wärst du schon längst fertig .............

traurig

von Fabian W. (fabi)


Lesenswert?

@ ??? Danke für deine Antwort


@ Nerv

zuerstmal hab ich ins Handbuch geschaut und bin bei Shiftout fündig 
geworden, leider kann ich das nicht benutzen, da nach jedem übertragenen 
Bit ein Wechsel auf der CLB Leitung von Low zu High und wider Low 
erfolgen muss, damit er das Bit übernimmt, somit funktioniert die Idee 
von ??? leider auch nicht bzw muss erweitert werden .

Und zweitens wäre es vielleicht besser wenn du bitte keine nutzlosen 
Kommentare schreibst, sondern wenn du weißt wies geht, die Lösung hier 
im Forum postest.

Für weitere Lösungen wäre ich sehr dankbar

Mfg Fabian





von ??? (Gast)


Lesenswert?

dann musst du deine Fragen auch richtig stellen.
Du das gefragt : Dezimalzahlen als Binärzahlen auf einem Port auszugeben
wiederhole --> Port

du meinst jetzt aber anscheinend :
eine Binärzahlen auf einem „Pin“ seriell ausgeben oder was ?

von Fabian W. (fabi)


Lesenswert?

Ja genau, kannst du mir vielleicht da weiterhelfen?

von ??? (Gast)


Lesenswert?

Und warum geht da Shiftout nicht ?
Pin ist deine Datenleitung und
Pclock ist dein CLB Leitung

und wenn das wirklich nicht geht dann mach das ganze von hand wie
es Michael U. oben schon geschrieben hat
1
 Dim Daten As Byte
2
Config Pinc.2 = Output                                      'CLB
3
Config Pinc.3 = Output                                      'Data
4
Reset Portc.2
5
6
  Daten = 10
7
8
 Portc.3 = Daten.0
9
 Set Portc.2
10
 Reset Portc.2
11
 Portc.3 = Daten.1
12
 Set Portc.2
13
 Reset Portc.2
14
 Portc.3 = Daten.2
15
 Set Portc.2
16
 Reset Portc.2
17
 Portc.3 = Daten.3
18
 Set Portc.2
19
 Reset Portc.2
20
 Portc.3 = Daten.4
21
 Set Portc.2
22
 Reset Portc.2
23
 Portc.3 = Daten.5
24
 Set Portc.2
25
 Reset Portc.2
26
 Portc.3 = Daten.6
27
 Set Portc.2
28
 Reset Portc.2
29
 Portc.3 = Daten.7
30
 Set Portc.2
31
 Reset Portc.2
32
33
 End
34
35
oder anstelle von Set / Reset   Pulseout Portc , 2 , 1000

  

von Michael U. (Gast)


Lesenswert?

Hallo,

??? hat ja jetzt schon den Ansatz in BasCom geliefert.

Ich habe wenig Lust, mich mit den Feinheiten von BasCom 
auseinanderzusetzen.

Du wirst obige Routine nochmal auf das Doppelte aufbohren müssen,
das 16Bit-Kommando für die PLL vorher zusammenbasteln, den High-Teil 
z.B. nach DatenH und den Low-Teil nach DatenH, dann eben hintereinander 
rausschieben.


 Portc.3 = 9            führende 0 zum Start
 Set Portc.2
 Reset Portc.2
 Portc.3 = 0            0 für Teiler, 1 für Controlwort
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenH.5
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenH.4
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenH.3
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenH.2
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenH.1
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenH.0
 Set Portc.2
 Reset Portc.2

 Portc.3 = DatenL.7
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenL.6
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenL.5
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenL.4
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenL.3
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenL.2
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenL.1
 Set Portc.2
 Reset Portc.2
 Portc.3 = DatenL.0
 Set Portc.2
 Reset Portc.2


Denk an die Zeiten, Clock Low > 5µS, Clock High > 5µS usw.

Gruß aus Berlin
Michael

von Fabian W. (fabi)


Angehängte Dateien:

Lesenswert?

Hi danke für eure Mühen ich stell mal den Quellcode rein. Hoff mal das 
ich das Proggi genügend gut kommentiert habe.

von Michael U. (Gast)


Lesenswert?

Hallo,

so auf den ersten Blick sollte es gehen.
2 Fragen dabei: Du bist sicher, daß Du die Übertragung für Latch B 
einach früher abbrechen kannst? Im Datenblatt habe ich auf die Schnelle 
nichts dazu gefunden. Es würde mich etwas wundern, wenn es so wäre.
Normalerweise ist in der PLL ein Schieberegister, wenn Du nur 8 statt 16 
Bits reinschiebst, landen die eigentlich an falschen Positionen. Der 
Hinweis, daß SB2 die letzten 8Bit intern auf 0 setzte, heißt für mich, 
daß es egal ist, was man da rausschiebt.

Das Diagramm spricht immer von allen 16Bit.

2. Du hast die ZF von 10,7MHz berücksichtigt?
94,7MHz ist die Oszillatorfrequenz, empfangen wird dann ein Sender auf 
94,7 - 10,7 = 84 MHz, da sendet aber niemand...

Ansonsten: wenn Du was kürzeres als waitms in BasCom hast, 10µs würden 
überall reichen und wäre 100x schneller... ;)

Gruß aus Berlin
Michael

von nerv (Gast)


Lesenswert?

faulen menschen hilft man nicht damit, indem man ihnen alles vorkaut.
das problem begrenzt sich darauf wie man portpins an und 
abschaltet(bascom)
und wie man es in der richtigen reihenfolge tut (handbuch SAA105).

von Michael U. (Gast)


Lesenswert?

Hallo,

@nerv: naja, ob faul will ich mal dahingestellt lassen...
Ich habe eher den Eindruck von "ich habe von nichts eine Ahnung, will 
aber jedes Fahrrad erstmal selbst erfinden.
Inzwischen weiß ich schon, daß eckige Räder nicht so das Wahre sind.
Etwas sträube ich mich aber noch, runde Räder zu nehmen, ich probiere 
erstmal dreieckige, rund bekomme ich nicht auf die Reihe."

Ich denke, sich Kenntnisse über Überlagerungs-Empfänger, UKW-Tuner, 
elektronische Abstimmung, Aufbau von HF-Schaltungen,  Progammierung im 
Allgemeinen, AVR-Programmierung im Speziellen, BasCom usw. gleichzeitig 
aneignen zu wollen, fordert einen sehr gesunden Optimismus.

Andererseits habe ich gaaaanz früher in meiner Jugend auch unbedingt 
alls selber probieren müssen und manchmal ging dann sogar was von den 
Sachen.

Es ist heute manches auch "zu einfach" geworden, man findet genug 
"Baukästen", die man gut nutzen kann. Wenn ich an einen Tunerbaustein 
mit ZF und Demodulator eine Abstimmspannung hängen kann und es kommt 
hinten Musik raus, habe ich ein Radio gebaut.

Nein, ich habe ein fast fertiges Radio in Betrieb genommen, nicht soviel 
mehr, als wenn ich den Stecker in die Steckdose stecken kann...

Ich will ihn damit auch garnicht vergraulen, er ist mit dieser 
herangehensweise ja garnicht so alleine.

Gruß aus Berlin
Michael

von Fabian W. (fabi)


Lesenswert?

Ok danke für die Posts.

Ich werde dann mal demnächst die Bauteile bestellen und das Ding 
aufbauen.

@Nerv Portpin an und abschalten, dass kann ich ja wohl, sonst hätte ich 
das Programm ja nicht schreiben können.

Nebenbei würde mich mal interessieren was du schon so gebaut hast .

@ Michael immerhin finde ich es besser mal selber mit nem Tunermodul nen 
Radio aufzubauen als sich son billig Radio (Geiz ist geil) selber zu 
kaufen und sich dann drüber wundern das man seinen Lieblingssender nicht 
reinbekommt. Ein anderes Ding wären die vielen "Hobbybastler" die ihre 
Geräte an der Netzspannung betreiben und sich um elektronische 
Sicherheit keine Gedanken machen. Aber genug gestritten.

Außerdem ist son Forum ja da um Fragen zu stellen oder etwa nicht?

von ??? (Gast)


Lesenswert?

>Ansonsten: wenn Du was kürzeres als waitms in BasCom hast, 10µs würden
>überall reichen und wäre 100x schneller... ;)

das währe dann : Waitus 10


Ich habe mit dem SAA 1057 nichts am Hut
aber alle 16 Bit auf einmal zu schreiben scheint mir auch sinnvoller.

um 16 Word aufzuteilen :
Low()
High()


und auch entweder von Hand Set /Reset oder mit Shiftout
einmal so und einmal so, ist nicht so Übersichtlich und
auch das Timing schwankt .



von Fabian W. (fabi)


Angehängte Dateien:

Lesenswert?

Hi ich bins wieder,

ich hab geradeben alles aufgebaut und getestet, leider scheint es nicht 
zu funktionieren, ich hör zwar Sender, aber leider total verrauscht. Das 
einzige was ich an der Schaltung des Datenblatts geändert habe ist der 
Kondi, der den Quarz zum schwingen anregt, ich hab anstatt 27pf 22 
genommen, aber das wird wohl egal sein.
Kann vielleicht bitte jemand nochmal den Quellcode durchschauen, oder 
falls er schonmal den SAA1057 angesteuert hat mir vielleicht seinen 
Quellcode zum testen geben. Ich hab für die Versorgungsspannung 5V 
genommen und für die Ladungspumpe 10V.

Oben ist der Quellcode.


von Michael U. (Gast)


Lesenswert?

Hallo,

wenn Du Sender einstellen kannst, muß ja die PLL irgendwie laufen und 
eine Abstimmspannung erzeugen...

Verrauscht würde nur gehen, wenn Du auf die Spiegelfrequenz abstimmst, 
also statt Fosc = Feing + Fzf auf Fosc = Feing - Fzf abstimmst, dann 
sind die Vorkreise logischerweise faksch abgestimmt.

Das sollte aber nicht sein, wenn Du  einen festen bekannten Sender 
programmierst.
Die andere Möglichkeit wäre nur, der PLL-Kram stört duch seinen Aufbau 
usw. den Tuner oder die ZF direkt.

Gruß aus Berlin
Michael


von Fabian W. (fabi)


Lesenswert?

Hi hat den noch niemand den SAA (egal in welcher Sprache) angesteuert, 
im Internet hab ich leider nur Beispiele mit einem Pic aber nicht mit 
einem Atmega gefunden. Kann mir vielleicht jemand bitte nen Link geben, 
wo ich mir  ein Programm (um den SAA per Mega anzusteuern) zum testen 
runterladen kann?

Danke schonmal für eure Antworten.

von Fabian W. (fabi)


Lesenswert?

Lustig immer wenn ich nen Taster drücke dann leuchtet die Stereo Decoder 
Led, aber ich höre nur rauschen woran kann das den liegen?

von Fabian W. (fabi)


Angehängte Dateien:

Lesenswert?

Hi ich bins wieder,

da Bascom wohl doch nicht so verbreitet ist, hab ich im Internet das 
angehängte Programm in C gefunden und habe es dann meine Config 
angepasst.
Bei mir ist die Clock Leitung Portc.7, die Dataleitung Porta.6 und die 
Dlen Leitung Porta7. Leider hab ich gerade beim probieren wieder nur 
Rauschen gehört und ganz schwach nen Sender. Als Mc hab ich den Atmega16 
bei 1MHZ internen Takt genommen.

Kann jemand vielleicht mal bitte einen Blick auf das Programm werfen und 
mir sagen, ob das Programm funktionieren müsste? Ich bin gerade ein 
bisschen am verzweifeln, hab es schon etliche Male mit Bascom und dann 
auch C probiert aber es hat nicht geklappt.
Danke schonmal für alle Antworten im Voraus. Den SAA1057 müsste ich doch 
direkt an meinen Ozillatorausgang anschliessen können und brauch nicht 
nochmal extra Wandlerschaltungen oder? Als Schaltung hab ich die von 
Pira.cz genommen im Ausgang hat der einen 10µF Tantal Kondensator 
genommen, ich aber nen normalen 10µF Elko, trotzdem dürfte ich doch 
wenigstens etwas hören.

von Michael U. (Gast)


Lesenswert?

Hallo,

hab mal was rangehangen.

kannst ja mal ein Übersetzungsprogramm bemühen für die Kommentare...

Gruß aus Berlin
Michael

von Michael U. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

grrr Anhang weg... nochmal...

Gruß aus Berlin
Michael

von Fabian W. (fabi)


Lesenswert?

:D ja das wäre angebracht, aber entweder war ich zu doof um was auf 
Englisch oder Deutsch zu finden, oder es gab wirklich nichts. Der 
Schaltplan bleibt aber zum Glück immer noch lesbar.

von nerv (Gast)


Lesenswert?

gib zu du bist doch auch zum lesen des schaltbildes zu dusselig.
jetzt hast du sogar schon ein komplettes program und bekommst immer noch 
nichts auf die reihe.

tipp:

kauf dir ein radio...


von Fabian W. (fabi)


Lesenswert?

Hi ich bins nochmal,
ich hab die ganze Schaltung gerade an nem Labornetzteil angeschlossen,
jetzt kann ich per Betriebsspannungspoti am Labornetzteil den Sender 
einstellen, Stereo funktioniert auch, also scheint das Ding irgendwie 
eine Abstimmspannung zu erzeugen.
Normal müsste er sich doch, wenn ich die Spannung geringfügig ändere 
wieder auf den Anfangs per Frequenzword eingestellten Sender einregeln 
oder? Ich hab irgendwie den Verdacht das irgendwas mit dem 
Ozillatorausgang des Tunermoduls nicht stimmt. Woran könnte das den 
vielleicht liegen
Als Programm hab ich das von mir oben gepostete verwendet. Das 
Labornetzeil hat nen seperaten 5V Ausgang da hab ich den Mc und die 
Betriebsspannung des SAA angeschlossen. Die Abstimmspannung für die PLL 
und die Betriebsspannung für das Tunermodul hab ich an den variablen 
Ausgang rangehängt.

von sb (Gast)


Lesenswert?

Hallo

dass sich der Sender ändert, wenn du die Spannung hochdrehst erdscheint 
mir logisch, da du damit ja uch die Verstärkerspannung des PLL und so 
die AUsgangsspannung erhöhst.

Kannst du den sender auf knopfdruck ändern, oder bekommst du immer den 
gleichen verrauschten sender?

von Giacomo (Gast)


Lesenswert?

Hallo dear friends,
I can't uderstand German but I feel your discussion should be very 
helpfull for me. I have some SAA1057 but I am not able to configure its. 
What I need is the sequence of istruction to set the PLL (using a PIC).
I realized the PLL by Freddo's page and really work well. What I want is 
to program my PIC to drive thi PLL chip using my own software.
Reading around (data sheet included)I understand is necessary to start 
whit at least 10 clock impulses. But in same application this is not 
present. Could be very interesting to get your experiences but, again, I 
don't understand German language. Could you sommarize a sequence of 
istruction in English? (I am Italian but I can read English).
Thanks and Happy New Year
Giacomo

von Michael (Gast)


Lesenswert?

Hallo!
Ich bin auch dabei einen SAA1057 mit einem AVR anzusprechen.
Nur leider funktioniert rein garnichts.

Hat von Euch schon jemand den SAA1057 über einen AVR zum laufen 
bekommen?
Wäre schön mal einen Code als Beispiel zu bekommen.

Michael

von Nils (Gast)


Lesenswert?

Hallo Michael,
zwar ein recht alter Originalbeitrag - aber vielleicht hilft Dir das 
weiter:

Arnoldt, Michael
Computergesteuerte Empfänger
Schaltungen, Software, Selbstbau
Elektor-Verlag GmbH, 1991

Dort findest Du Applikationen, genaue Bechreibungen des SAA1057 und 
Programmbeispiele in Assembler und Basic für Z80 und 8255-PIO.

Das Buch wird nicht mehr aufgelegt, Du findet es aber in 
Uni-Bibliotheken und z.B. hier:
http://www.antiquariat-buecher.de/Buecher_32911.htm

Gruß
Nils

von Michael (Gast)


Lesenswert?

Hallo Nils,

vielen Dank für deine Antwort. Das Buch klingt sehr interessant.
Allerdings ist mein Problem eher die Programmierung des AVR`s als die 
Schaltung des Radios.

Mein Testaufbau mit dem SAA1057 funktioniert in Verbindung mit einem 
PC-Programm problemlos.
Nur ich möchte nicht diesen großen PC an das kleine Radio knüpfen ;-)

Bei mir hapert es an dem Programmcode, um die richtigen Daten vom AVR in 
den SAA1057 zu befördern.

von Nils (Gast)


Lesenswert?

Hallo Michael,

ich kenne nur das Buch von Arnoldt, weil ich es gelesen habe - habe aber 
nichts mit der SAA1057 gemacht. Wie gesagt, es sind Codebeispiele 
enthalten, aus denen das Prinzip hervorgeht.

> Bei mir hapert es an dem Programmcode, um die richtigen Daten vom AVR in
> den SAA1057 zu befördern.
Wenn es das ist, hilft 'googeln': 'SAA1057 bascom', bzw. 'SAA1057 AVR'

Das bringt unter anderem zu Tage:
http://www.mieciu.pl/www/pll/SAA1057_PLL_Driver.pdf

Das Dokument ist zwar polnisch - beinhaltet aber ein komplettes 
BASCOM-Listing für AVR.

Gruß & viel Erfolg,
Nils

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
Noch kein Account? Hier anmelden.