Arduino, Frequenz mittels Encoder einstellen und ausgeben.

  • Du kannst den ATtiny auch mit 5V betreiben. Oder man verwendet eine Treiberstufe. Von daher, wird wohl auch deine hohle Uhr damit funktionieren. Es gibt auch passende 5V LDOs für das Board. Ein MCP1703-5002E/MB ist z.B. so ein LDO mit 650mA Drop Out. Da kann der ATtiny mit bis zu 16V (so hoch sollte man aber nicht gehen) versorgt werden. Oder man klemmt direkt 5V an dem Pin an, wo auf dem Board 3,3V aufgedruckt ist. In dem Fall kann man den LDO auch ganz weg lassen.


    Aber das ist eine Aufgabe, die du selber ausloten und lösen kannst. Mir ging es hier nur darum, die Funktionalitäten der neuen ATtiny Serien zu lernen und die PWM Geschichte bot sich dafür an. Aber um soviel zu sagen, wenn Du das ATtinyboard mit 5V über die JST Buchse oder die zwei Lötpins versorgst und den Motortreiber direkt an die 5V klemmst, funktioniert der Motor.

  • Toll:thumbup:

    habe bitte Verständnis, dass ich Dir programmiertechnisch nur begrenzt folgen kann, aber verstehe, was Deine Intention ist und finde es super, was Du entwickelst.


    Den Nachteil für den Einsatz eines ATtiny, wenn es überhaupt einer ist, sehe ich darin, dass in der Praxis, wenn der ATtiny für ein Projekt eingesetzt werden soll, wie z.B. eine Schrittmotoransteuerung immer mindestens ein 5V Signal benötigt wird. Die Schrittmotortreiber/Verstärker, die ich kenne, benötigen alle mindestens 5V Signal.

    Bei der Ansteuerung eines Ventil, würde das über einen Leistungstransistor aber funktionieren.


    Ich denke, wenn ich Deine bisherigen Ausführungen bis jetzt richtig verstanden habe, der größte Vorteil eines ATtiny für den Einsatz in einem Projekt liegt in dem geringen Stromverbrauch ca 8 µA und er ist klein in der Baugröße und im Preis.


    Deshalb ist sein Einsatz für die Küchenuhr und den Spielewürfel optimal. Aber was ist mit der hohle Uhr?


    Sorry, wenn ich etwas vom Deinem eigentlichen Thema abgewichen bin.

  • Ich bin mich gerade selber etwas bei den ATtinys der Serie 0/1/2 am Einlesen und am Ausprobieren. Darum habe ich die PwmTimer1 Klasse, die hier im Thread für die Minimalmengenschmierung-Software verwendet wird, zu Lernzwecken angepasst. Dadurch ist es möglich, diese Software auch auf einem ATtiny der Serie 1 oder 2 laufen zu lassen. Somit könnte die im "Küchenuhr Thread" entwickelten Platine, auch für die Minimalmengenschmierung verwendet werden. Allerdings benötigt man hierfür min. einen ATtiny der Serie 1 (z.B. 1614).


    Der Attiny 1604 funktioniert leider nicht so ohne weiteres, wenn man ihn zusammen mit dem "megatinycore" des Arduino Frameworks verwenden möchte, weil er einen Timer zu wenig hat, bzw. der TimerB nicht unabhängig vom TimerA (der für millis() / delay() usw. des Arduinoframeworks verwendet wird) konfiguriert werden kann.


    Getestet habe ich die (PWM-) Software auf einem ATtiny-826 und einem ATtiny1614. Das ganze Minimalschmierungs-Programm passt wg. der "speicherfressenden" OLED Geschichte nicht auf einen 8Kb Microcontroller. Das Programm ist, für einen ATtiny1614 compiliert, 12890Kb groß und benötigt 527 Bytes RAM.


    Allerdings habe ich den gesamten Aufbau noch nicht nachvollzogen. Nur die PWM Funktion mit einem Testprogramm ausprobiert und versucht das Minimalschmierungsprogramm für den 1614 zu compilieren.


    Das ursprüngliche Hauptprogramm kann nahezu unverändert übernommen werden. Einzig #include "PwmTimer1.hpp" muss gegen #include "PwmTimerA.hpp" ausgetauscht werden und die PwmTimer1 Dateien gegen die untenstehende Version.


    PwmTimerA.hpp


    PwmTimerA.cpp

    Da die internen Oszillatoren mit einem Fehler von bis zu 2% angegeben sind, nimmt die Ungenauigkeit des PWM Signals mit steigender Frequenz zu.

    In diesem Fall wird "Dual Slope PWM" verwendet, bei den "alten" ATtinys, ATmegas wird das noch "phasenkorrektes PWM" genannt.


    Hier ein paar Beispiele gemessen an einem ATtiny-1614:


    Programmeinstellung 5Hz, 50% Tastgrad:

    SCR23.PNG


    Programmeinstellung 11 Hz, Tastgrad 50%

    SCR41.PNG



    Programmeinstellung 39kHz, 75% Tastgrad:

    SCR35.PNG


    Programmeinstellung 65,535kHz (höchstmöglicher Eingabewert bei der vorgestellten Klasse - 16Bit), Tastgrad 50%

    SCR40.PNG


    Wie man sieht, bei niedrigen Frequenzen wie sie bei dieser Minimalmengenschmierung benötigt werden, ist das dicke genau genug. Bei Frequenzen im höheren kHz Bereich, wird es doch schon recht ungenau. Aber immer noch genau genug um Motoren oder PWM Lüfter zu steuern.

  • Hallo Kai, ich ziehe anerkennend mit großem Dank und Respekt meinen Hut für Deine große Geduld mit mir und Deine Hilfsbereitschaft.

    Immer wieder sitze ich grübelnd vor Deinem Code und versuche wenigstens etwas davon zu verstehen.

    Es freut mich auch, dass doch einige andere User, wenn auch nur mitlesend, uns bei unserem Austausch hier begleitet haben und bestimmt auch von Deinem Wissen profitieren.


    Heute habe ich hier im Forum über Dein Projekt DCF77 Uhr gelesen, dass ich auch sehr spannend finde.


    Grüße, Franz

  • Ich habe noch einmal ein paar kleiner Änderungen im Code vorgenommen und noch ein paar Byte eingespart...


    Das wars dann auch erst mal. Ich denke er erfüllt nun seinen Zweck. Der Link zum Code ist immer noch derselbe wie in #63 und #60.

  • Da bin ich aber froh, dass Du selber drauf gekommen bist :). In der Simulation gibt es halt kein SPI Display.


    Ich habe den Code in der Frequenzgenerator-OLED.ino noch einmal aufgeräumt und durchgefegt. Außerdem die Steuerung noch etwas (ich denke zum besseren) angepasst.

    Verwende diesen Code. Dort musst du nur in der Zeile 8 die Kommentarzeichen // vor dem //#define U8G2_SPI_DISPLAY entfernen, dann sollte der Code für dein SPI Display compiliert werden. Falls Du dann irgendwann mal in I2C Display verwenden willst, mach einfach aus dem #define wieder einen Kommentar.


    Interessant. Bei Dir wird die Schrift gelb, bei meinem Monochrome Display wird die Schrift(farbe) invertiert.

  • Kai, ich habe den von Dir eingesetzten Code: U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

    ersetzt durch

    U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 7, /* reset=*/ 8);


    Es funktioniert!!!


    003.JPG

  • Hallo Kai, herzlichen Dank.

    Den Sketch kann ich kompilieren und laden, aber das Display bleibt dunkel.

    Es funktioniert aber, weil ich vorher mit einem eigenen Menü (nur Anzeige ohne Funktion) getestet habe.


    Dieses Waveshare SPI Display: U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 7, /* reset=*/ 8);


    Eingesetzt hatte ich diese Schrift: u8g2.setFont(u8g2_font_courB12_tf);


    Grüße, Franz

  • Ja schön…. für die Umsetzung hast Du ja alles was du brauchst. Wie das Oled genutzt wird, siehst Du ja im Küchenuhr Sketch. Wenn Du beides in einem Programm unterbringen willst, kannst du ja mit Präprozessor Anweisungen arbeiten (In dem Video ab Minute 17 erklärt).


    Evtl musst Du das sogar, weil sonst der Speicherplatz knapp werden könnte.

  • Bei diesem Wetter kommt man nur auf dumme Gedanken.

    Ich habe den Testaufbau für die MMK wieder verdrahtet. Die Lesbarkeit des LCD Display ist, wie schon einmal angemerkt, eine Katastrophe.

    Da ich das OLED SPI Display besitze, denke ich darüber nach, dieses einzusetzen.


    Das Menü für die Auswahl und Eingabe könnte z.B. so aussehen


    001.JPG


    Evtl. könnte man im Sketch die Auswahl programmieren, wenn LCD dann...., oder SPI dann ......


    Grüße, Franz

  • Moin Kai,

    wenn wir das in dem Halter eingelassene 12V Ventil nicht ansteuern und somit öffnen würden, kommt auch keine Kühlflüssigkeit vorne heraus.

    Die Öffnung vorne in dem Ventilhalter ist 1mm.

    002.JPG


    Hier wird noch ein Stahlrohr eingeschraubt.

    Düsenröhrchen


    Der im #54 zu sehende Behälter mit der Kühlflüssigkeit wird mit einem Druck von ca. 4 bar beaufschlagt. Dadurch wird die Flüssigkeit durch den hinteren Anschluss ins Einspritzventil gedrückt. Durch die Ansteuerung des Einspritzventiles spritzen kleine Mengen Flüssigkeit aus dem Einspritzventil. Am vorderen Anschluss liegt Druckluft mit ca. 1 bar an. Dadurch wird die Flüssigkeit, die am Einspritzventil austritt durch das Rohr auf den zu kühlenden Fräser ausgeblasen.

    Wenn wir an unserem Frequenzgenerator, der das Ventil ansteuert z.B. eine Frequenz von 12 Hz einstellen, das Ventil also 12 mal in einer sec. jeweils 1,42 ms öffnet, dann kommen wir auf einen Durchfluss von nur100 ml/h.

    Wir können also mit unserem Frequenzgenerator ganz gezielt kleinste Mengen Kühlflüssigkeit, von Tropfen bis Sprühnebel einstellen.

    Der Vorteil dieses System ist meiner Meinung nach auch der, das der enge Flüssigkeitsaustritt immer freigeblasen wird und somit eine gleichmäßige

    Kühlung gewährleistet ist.

    Bei anderen Systemen (fast alle) , die z.B. die Kühlflüssigkeit mit einer Pumpe befördern, kommt es immer wieder zu Verstopfungen, so habe ich in Foren gelesen.

    Da ich noch keine MMK hatte, dachte ich mir, dass ist doch ein Versuch wert. Bisher habe ich mit einer Handspritzflasche gekühlt. Wer mal erlebt hat, wie die abgefrästen Alu -Späne durch die Umgebung des Fräser geschleudert werden, weiß wie gefährlich das ist. Die Frässpindeldrehzahl liegt bei 20000 - 30000 U/min.

    Ich hoffe jetzt ist klar, wie wichtig unser Frequenzgenerator ist.

    Wir sind ja Hobbyfräser und die Fräsen stehen irgendwo im privaten Bereich der Wohnung. Da kann man nicht mit Kühlflüssigkeit planschen.


    Grüße, Franz

  • Jallo Franz,


    ich lasse meine Platinen bei Aisler https://aisler.net/?lang=de-DE

    und jlcpcb https://jlcpcb.com fertigen.


    Aisler hat den Vorteil, dass man KiCad Dateien hochladen kann, bei JLCPCB muss man Gerberdateien erzeugen. Wie das funktioniert ist aber sehr gut auf deren Hilfeseite beschrieben. JLCPCB ist gerade bei größeren Platinen günstiger. Weil Aisler portofrei zusendet ist es bei kleineren meist günstiger oder nur unwesentlich teurer.


    Außerdem ist Aisler in Europa (DE/Niederlande) angesiedelt.