Hallo Leute,
ich habe ein Programm geschrieben in dem ein Schrittmotor sehr schnell hin und her steppen soll.
Nun will ich meine Schrittmotor Steps, und die Frequenz über Taster ändern und alles an einem LCD visualisieren. Das funktioniert auch soweit.
Aber: Immer wenn das Display neu aktualisiert beeinflusst es die Motorfrequenz und immer wenn die Frequenz relativ hoch wird beeinflusst es die LCD anzeige. Die Taster werden über Interrupts eingelesen.
Nun meine Frage: Wie kann ich LCD und Motor so unabhängig wie möglich an einem ArduinoMega miteinander Betreiben ohne dass so ein extremer Einfluss ensteht.
Bestimme erst Mal, wie viel Zeit Du überhaupt dafür hast, Inhalt auf das LCD zu bringen.
Solange Dir die Zeit bleibt, ein/zwei Bytes zu senden, kannst Du die Änderungen 'abarbeiten'.
Und wirklich nur Das ändern, was sich geändert hat.
Auch ist I²C nicht unbedingt das Protokoll, wenn's schnell werden soll - da ist SPI mit einigen MHz doch deutlich über den maximal 800kHz von I²C (Standard sind 400kHz).
Oder Du lagerst das LCD auf einen weiteren Arduino aus und schickst Diesem die Daten z.B. per SPI - wobei Du aber auch Da vorher schauen musst, ob Dir die Zeit reicht, um Alles am Stück zu versenden.
Ein LCD - Display braucht man nicht schneller als alle 100 .. 200 ms zu ändern, wenn Menschen sich die Zeichen ansehen sollen. Soll ja hauptsächlich Feedback für die Taster-Eingabe sein.
Was schnell ist bei einem Schrittmotor, muss man auch erstmal klar definieren, man kann da evtl. mit Hardware-Timern und auf jeden Fall nicht blockierend arbeiten.
Von I2C auf SPI umsteigen, oder die Aufgabe auf 2 Controller aufteilen, wird vermutlich gar nicht nötig sein.
Wer Taster per Interrupt einliest, macht vermutlich auch sonst Unsinn