Habe weiter gemacht. Bei den einzelnen Funktionen bin ich noch am testen ob es so einfach geht. Habe jetzt erstmal das Display eingebunden und nutze es zur Anzeige verschiedenener Werte:
Python
from machine import SPI, Pin
from utime import sleep
import tt24
import tt32
from ili934xnew import ILI9341, color565
# SPI-Konfiguration für den AD9833 (Signal-Generator)
spi_ad9833 = SPI(0, baudrate=100000, polarity=1, phase=1, sck=Pin(2), mosi=Pin(3))
cs_ad9833 = Pin(1, Pin.OUT, value=1) # Chip Select für AD9833
cs_mcp41010 = Pin(5, Pin.OUT, value=1) # Chip Select für MCP41010
# SPI Angaben für das Display
WIDTH, HEIGHT = 320, 240
BACKGROUND_COLOUR = color565(67, 167, 255)
TEXT_COLOUR = color565(0, 0, 0)
RED_COLOUR = color565(255, 0, 0) # Rote Farbe
# Wellenform- und Frequenzeinstellungen
frequency = 500 # Standardfrequenz in Hz
min_freq = 20 # Minimalfrequenz in Hz
max_freq = 20000 # Maximalfrequenz in Hz
#waveform = "sinus" # Wellenform sinus dreieck rechteck
waveform = "dreieck" # Wellenform sinus dreieck rechteck
#waveform = "rechteck" # Wellenform sinus dreieck rechteck
volume = 215 # Lautstärke für MCP41010 von 0-255
# Funktion zum Senden eines 16-Bit-Worts an den AD9833
def send_ad9833_command(command):
cs_ad9833.value(0) # Chip Select auf Low, um Kommunikation zu starten
spi_ad9833.write(bytearray([(command >> 8) & 0xFF, command & 0xFF])) # 16-Bit-Befehl senden
cs_ad9833.value(1) # Chip Select auf High, um Kommunikation zu beenden
# Funktion zum Einstellen der Frequenz am AD9833
def set_ad9833_frequency(frequency):
reference_frequency = 25_000_000 # Referenzfrequenz des AD9833 in Hz (hier 25 MHz)
multiplier = 2**28 # Konstante für den AD9833
freq_word = int((frequency * multiplier) / reference_frequency) # Frequenzberechnung
freq_lsb = freq_word & 0x3FFF # Untere 14 Bits
freq_msb = (freq_word >> 14) & 0x3FFF # Obere 14 Bits
# Frequenz auf das Register 0 schreiben
send_ad9833_command(0x4000 | freq_lsb) # LSB der Frequenz
send_ad9833_command(0x4000 | freq_msb) # MSB der Frequenz
# Funktion zum Stoppen des AD9833 (Reset als Stopp)
def reset_ad9833():
send_ad9833_command(0x2100) # Vollständiger Reset des AD9833 (Reset aktivieren)
# Funktion zum Umschalten der Wellenform
def set_ad9833_waveform(waveform_type):
if waveform_type == "sinus":
send_ad9833_command(0x2000) # Sinuswelle aktivieren
elif waveform_type == "dreieck":
send_ad9833_command(0x2002) # Dreieckwelle aktivieren
elif waveform_type == "rechteck":
send_ad9833_command(0x2028) # Rechteckwelle aktivieren
else:
print("Unbekannter Wellentyp")
# Funktion zum Einstellen des MCP41010 Digital-Potentiometers
def set_mcp41010(poti):
cs_mcp41010.value(0) # Chip Select auf Low, um Kommunikation zu starten
spi_ad9833.write(bytearray([0x11, poti])) # 16-Bit-Befehl senden
cs_mcp41010.value(1) # Chip Select auf High, um Kommunikation zu beenden
# Hauptprogramm
def main():
# SPI Angaben für das Display
spi = SPI(1, baudrate=40_000_000, sck=Pin(14), mosi=Pin(11))
display = ILI9341(spi, dc=Pin(15), cs=Pin(13), rst=Pin(12), w=WIDTH, h=HEIGHT, r=3)
# Display löschen und Hintergrund zeichnen
display.erase()
display.fill_rectangle(0, 0, WIDTH, HEIGHT, BACKGROUND_COLOUR)
display.set_color(TEXT_COLOUR, BACKGROUND_COLOUR)
display.set_font(tt32)
display.set_pos(30, 10)
display.write("AD9833 :")
display.set_font(tt24)
# Frequenz, min/max und Wellenform am Anfang setzen
set_ad9833_frequency(frequency)
set_ad9833_waveform(waveform)
set_mcp41010(volume) # Lautstärke einstellen
# Initiale Werte für die Anzeige
while True:
# Display aktualisieren
display.set_color(TEXT_COLOUR, BACKGROUND_COLOUR)
display.set_pos(10, 50)
display.write("Frequenz: ")
display.set_color(RED_COLOUR, BACKGROUND_COLOUR) # Setze Textfarbe auf Rot
display.set_pos(150, 50) # Werte um 10 nach rechts verschoben
display.write(f"{frequency} Hz")
display.set_color(TEXT_COLOUR, BACKGROUND_COLOUR)
display.set_pos(10, 80)
display.write("Min: ")
display.set_color(RED_COLOUR, BACKGROUND_COLOUR)
display.set_pos(150, 80) # Werte um 10 nach rechts verschoben
display.write(f"{min_freq} Hz")
display.set_color(TEXT_COLOUR, BACKGROUND_COLOUR)
display.set_pos(10, 110)
display.write("Max: ")
display.set_color(RED_COLOUR, BACKGROUND_COLOUR)
display.set_pos(150, 110) # Werte um 10 nach rechts verschoben
display.write(f"{max_freq} Hz")
display.set_color(TEXT_COLOUR, BACKGROUND_COLOUR)
display.set_pos(10, 140)
display.write("Wellenform: ")
display.set_color(RED_COLOUR, BACKGROUND_COLOUR)
display.set_pos(150, 140) # Werte um 10 nach rechts verschoben
display.write(waveform)
display.set_color(TEXT_COLOUR, BACKGROUND_COLOUR)
display.set_pos(10, 170)
display.write("Lautstaerke: ")
display.set_color(RED_COLOUR, BACKGROUND_COLOUR)
display.set_pos(150, 170) # Werte um 10 nach rechts verschoben
display.write(f"{volume}")
sleep(1) # Beispielhafte Pause von 1 Sekunde
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
reset_ad9833() # AD9833 zurücksetzen bei Tastendruck
Display More