Dieses Projekt wurde für den PSoC 4 Prozessor CY8C4225AXI-483 erarbeitet, der zum CY8CKIT - 049-42xx gehört. Zielstellung: Sinussignal im NF- Bereich erzeugen (8 Bit DDS) Darüber hinaus kann ein Doppelton erzeugt werden, 1100 Hz + 700 Hz Mittels Drehencoder kann eine Einzelfrequenz eingestellt werden. Auch die Ausgabe eines Sweeps (50 Hz .. 1800 Hz) ist möglich. Dabei ist ein exponentieller Frequenzverlauf programmiert. Die einzelnen Funktionen werden über den eingebauten Button angewählt. Eine LED blinkt proportional zur eingestellten Frequenz. Für PSoC 5 /5LP wurde ein gleichartiges Projekt erstellt, welches allerdings beim Doppelton mit 2- mal 8 Bit DDS arbeitet. PSoC 4 hat nur einen 8- Bit IDAC, der zweite kann nur 7 Bit. Das Projekt enthält außerdem einen Bootloader.
:
Bearbeitet durch User
Mir sind folgende Verbesserungen eingefallen: 1. Verdopplung der maximalen Frequenz auf Kosten der Stützstellenzahl 2. Kalibrierungsmöglichkeit über ein extra Menü 3. Synchronisation mit einem externen Quarztakt Punkt 1 ist in der neuen main.c realisert. Hat jemand noch andere Wünsche/ Vorschläge?
DH1AKF K. schrieb: > Hat jemand noch andere Wünsche/ Vorschläge? Hallo Wolfgang, mir sind noch einige Dinge aufgefallen, die dir vlt. nützen können. 1. auf Printchar() und PrintInteger() kannst du verzichten, wenn du sprintf() einsetzt. Das sollte dann auch etwas flexibler sein. Da CYPRESS die stdio.h ausdrücklich nicht empfiehlt, hab ich den Prototype in der main
1 | /---------prototypes |
2 | int sprintf(char *str, const char *format, ...); |
Nur floats kannst du damit nicht verwenden. Geht zwar auch (per Linker Flag), aber da bricht dir der Speicher zusammen. Für ints aber klasse. Beispiel für int Ausgabe mit 2 Nachkommastellen
1 | #define VALUE_LEN 7
|
2 | uint32 value = 1234567; |
3 | char outstring [VALUE_LEN+1]; |
4 | sprintf(outString, "%3ld,%02d", //3 Vorkomma ohne führende 0, 2 Nachkomma |
5 | value/100, // pre-decimal place |
6 | value%100); // post-decimal place |
7 | |
8 | // outstring dann per LCD_PrintString()
|
2. Einsatz Drehgeber
1 | QuadDec_1_Start(); |
2 | QuadDec_1_WriteCounter(50); |
3 | QuadDec_1_TriggerCommand(QuadDec_1_MASK, QuadDec_1_CMD_RELOAD); |
Der WriteCounter() muss nach dem TriggerCommand() stehen, sonst hat er keine Wirkung. Die Zeile kannst du streichen, weils auch so geht. Ich bin noch nicht komplett dahintergestiegen, was du mit dem decoderCounter machst;-) Jedenfalls kann er bei dir nur die Werte bis max. 50 annehmen. Wenn du das so willst, sollte auch ein
1 | #define MAXCOUNT 50
|
2 | #define COUNT_CORRECTION 0x8000%MAXCOUNT //0x8000 is standard counter on start
|
3 | |
4 | uint8 myCouunt = 0 |
5 | ...
|
6 | |
7 | myCouunt = (QuadDec_1_ReadCounter() - COUNT_CORRECTION) % MAXCOUNT; |
8 | |
9 | freq1+= myCount; |
reichen, da bauchst du weder WriteCounter() noch getencoder(). Ich muss gestehen, ich hab das jetzt mal so geschrieben ohne es getestet zu haben. Also siehs als Anregung. Gruß und frohes Schaffen Reiner Habs grad noch mal geändert. Jetzt steht myCount beim Einschalten auch immer auf 0;-)
:
Bearbeitet durch User
Hallo Reiner, vielen Dank für Deine Anregungen! Nr. 1 (sprintf) konnte ich gut verwenden, aber mit Nr. 2 hatte ich keinen Erfolg. Es gibt nun ein paar Neuerungen: 1. Anschluss eines Quarzoszillators an P0[6] (48 MHz), LCD an Port 2[6:0] 2. Doppelton nun mit 1200 Hz und 750 Hz, weil sich diese Frequenzen sehr gut mit 48000000 Hz und Teiler 128 bzw. 100 vertragen. Sie sind disharmonisch, um Intermodulation am SSB- Sender feststellen zu können. 3. Sweep von 50 bis 1800 Hz (128 Stützstellen) 4. Sweep von 100 bis 3600 Hz (64 Stützstellen) 5. Frequenz 1000 Hz mit Einstellmöglichkeit (ca. 1 Hz - Schritte) und Anzeige auf 3 Kommastellen genau 6. Frequenz 440 Hz exakt (glücklicherweise lässt sich die benötigte Clockfrequenz 14080 kHz genau einstellen) 14080 = 128 x 250 x 440 Was noch fehlt, ist eine Kalibriermöglichkeit. Der Quarzoszillator hat nur garantierte 100 ppm.
:
Bearbeitet durch User
DH1AKF K. schrieb: > aber mit Nr. 2 hatte ich keinen Erfolg Na immerhin 505 ;-) Wenn du das Thema weiter verfolgen willst, schreib einfach, wo es hakt. Muss mir erst mal ein paar 48MHz Quarze besorgen, dann kann das Projekt weiterverfolgen.
Reiner W. schrieb: > Muss mir erst mal ein paar 48MHz Quarze besorgen Es kann nur ein Quarzoszillator angeschlossen werden!! Siehe Foto.
Messergebnisse: gemessen mit Soundkarte ASUS Xonar D2 und dem Programm Audiometer von DG8SAQ 1. 440 Hz Einzelton 8 Bit D/A, 128 Stützstellen, ohne weitere Filter 2. Doppelton 750 Hz / 1200 Hz, die 1200 werden mit 7 Bit und 100 Stützstellen erzeugt.
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.