Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

Marlin 2 bugfix & Filament Durchmesser

geschrieben von DocYester 
Marlin 2 bugfix & Filament Durchmesser
29. March 2020 04:43
Hallo,

ich wollte meinem Ender-3 mit einen Filament-Durchmesser-Sensor aufrüsten.
Dazu habe ich das (https://www.thingiverse.com/thing:704897) Projekt nachgebaut.
Klappt soweit auch alles mit der Hardware - Spannung kommt entsprechend dem Durchmesser am Signalausgang.

Das Verwirrende ist die Anzeige im Display des Druckers selber.
Egal ob Filament eingelegt ist oder nicht , oder ob der Sensor mit dem Mainboard verbunden ist - vom Booten an springt diese auf ~0.7mm und zählt kontinuierlich hoch bis 4.99/5mm in ~0.03-0.06mm Schritten.
Die Anpassung an die Flowrate bleibt dabei aber permanent auf 100%.

Ich habe auch einmal einen Testdruck laufen lassen - die Anzeige bleibt stur bei 4.99/5mm.

Ein zweiter Testdruck (ohne echte Extrusion) wobei ich den Sensor mit verschiedenen durchmessenden Bohrern (1.5 , 1.6 1,75 , 1.8 , 2) "gefüttert habe" um eine Veränderung des Durchmessers zu simulieren blieb ohne Änderung.

Ich habe für den Sensor die PINs 27&29 getestet als Eingänge.
Zusätzlich ist auch ein BLTouch verbaut - dieser funktioniert auf beiden PINs ohne Probleme.

Board : Creality 1.1.5 (Silent - TMC2208)
Folgende zusätzliche Anpassungen habe ich in Marlin gemacht um mit Sensor kompilieren zu können :
(pins_MELZI_CREALITY.h)
#if ENABLED(FILAMENT_WIDTH_SENSOR)
#undef FILWIDTH_PIN
#define FILWIDTH_PIN 27
#endif

Beim kompilieren kommt nur eine Warnung :
In file included from f:\temp\arduino_build_880531\sketch\src\hal\hal_avr\hal.h:21:0,

                 from f:\temp\arduino_build_880531\sketch\src\hal\hal.h:26,

                 from f:\temp\arduino_build_880531\sketch\src\inc\marlinconfig.h:30,

                 from f:\temp\arduino_build_880531\sketch\src\module\thermistor/thermistors.h:24,

                 from f:\temp\arduino_build_880531\sketch\src\module\temperature.h:28,

                 from f:\temp\arduino_build_880531\sketch\src\module\temperature.cpp:27:

f:\temp\arduino_build_880531\sketch\src\module\temperature.cpp: In member function 'void Temperature::init()':

f:\temp\arduino_build_880531\sketch\src\hal\shared\marduino.h:48:34: warning: left shift count >= width of type [-Wshift-count-overflow]

   #define SBI(A,B ) (A |= (1 << (B )))

                                  ^

f:\temp\arduino_build_880531\sketch\src\hal\hal_avr\hal.h:363:34: note: in expansion of macro 'SBI'

   #define HAL_ANALOG_SELECT(ind) SBI(DIDR0, ind);

                                  ^~~

f:\temp\arduino_build_880531\sketch\src\module\temperature.cpp:1828:5: note: in expansion of macro 'HAL_ANALOG_SELECT'

     HAL_ANALOG_SELECT(FILWIDTH_PIN);

     ^~~~~~~~~~~~~~~~~

Die Warnung kommt auch wenn ich das nur mit Sensor oder nur BLTouch oder ohne beides kompiliere.

Hat einer eine Idee woran das liegen kann oder Erfahrung in der Richtung ? eye rolling smiley

1-mal bearbeitet. Zuletzt am 29.03.20 05:11.
Re: Marlin 2 bugfix & Filament Durchmesser
29. March 2020 06:54
Wenn BLTouch auch aktiviert ist solltest Du 29 benutzen.
Folgende zusätzliche Anpassungen habe ich in Marlin gemacht um mit Sensor kompilieren zu können :
(pins_MELZI_CREALITY.h)
#if ENABLED(FILAMENT_WIDTH_SENSOR)
#undef FILWIDTH_PIN
#define FILWIDTH_PIN 29
#endif
Zur Compilerwarnung siehe hier: [arduino.stackexchange.com]
Die Configuration_adv.h hast Du angepasst? (ab Zeile 2709)

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
29. March 2020 08:32
Die beiden PINs für den BL & Sensor kann ich umstecken und auch umstellen - kein Problem
Ich habe wie gesagt, beider getestet - BL auf 27 / Sensor auf 29 ; BL auf 29 / Sensor auf 27 - gleiches Ergebnis

Aktuell wieder auf BL (27) ; Sensor (29) zurückgestellt

Configuration_adv.h ist auch angepasst (sonst hätte ich die Anzeige im Display auch nicht smiling smiley ):

#define FILAMENT_WIDTH_SENSOR

#if ENABLED(FILAMENT_WIDTH_SENSOR)
  #define FILAMENT_SENSOR_EXTRUDER_NUM 0    // Index of the extruder that has the filament sensor. :[0,1,2,3,4]
  #define MEASUREMENT_DELAY_CM        14    // (cm) The distance from the filament sensor to the melting chamber

  #define FILWIDTH_ERROR_MARGIN        1.0  // (mm) If a measurement differs too much from nominal width ignore it
  #define MAX_MEASUREMENT_DELAY       20    // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM.

  #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially

  // Display filament width on the LCD status line. Status messages will expire after 5 seconds.
  #define FILAMENT_LCD_DISPLAY
#endif

Für den Teil der Compiler-Warnung reichen meine C-Kenntnisse nicht aus um es zu beheben.
Re: Marlin 2 bugfix & Filament Durchmesser
29. March 2020 14:17
Die Compilerwarnung entsteht, weil DIDR2 nicht definiert ist, deutet auf falsche Board-Einstellung.
359 // ADC
360 #ifdef DIDR2
361   #define HAL_ANALOG_SELECT(ind) do{ if (ind < 8) SBI(DIDR0, ind); else SBI(DIDR2, ind & 0x07); }while(0)
362 #else
363  #define HAL_ANALOG_SELECT(ind) SBI(DIDR0, ind);
364 #endif

Pin 29 wird in pins_SANGUINOLOLU_11.h für das Display benutzt, kontrollier das mal.

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 08:04
Das stimmt soweit mit dem Pin29 in der SANGU...11.h

Lustigerweise wird die Variable DIDR2 nur in der HAL.h verwendet - also genau da wo Du das Snippet her hast.
Sie wird nirgends in der Datei gesetzt - nur in nachfolgenden funktionen, wenn gesetzt auf 0 gesetzt, also nie.
Also ist das wohl eher ein Fehler in Marlin 2.0.3 ... oder siehst Du das anders ?

Also könnte es wohl eher sein das der gemeine PIN29 , nicht der 29er ist , obwohl er selbst wenn ich mit "M43" (aktiviertes PIN_DEBUGGING) den Status direkt auslese als "" deklariert wird ?!

Den Pin29 hatte ich auch den Doku's von "TeachingTech" entnommen - und auch den Pin neben dem Kondensator auf dem Board eingelötet.


Ich versuche später einfach mal die Definition vom 29er an allen anderen Stellen auszukommentieren, damit ich sicher sein kann das er nur von mir als analoger Input genutzt wird.
... Feedback folgt smiling smiley
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 08:38
In der Anleitung von "TeachingTech" steht, der eingelötete Pin sei der physische Pin35,
das wäre dann Pin 49 und nicht 29. Vielleicht ein Tippfehler?
Den könntest Du ja dann für den BLTouch nehmen.
Die Definition von DIDR2 kommt aus dem Headerfile des Compilers für den Mega2560,
deshalb meine Vermutung mit der falschen Boardeinstellung.

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 09:06
in der pins_CREALITY_MELZI.h steht am Ende auskommentiert die Liste der Pins ..

PIN:  29   Port: A2                    Input  = 0

Pin auf dem Board -> [www.youtube.com] @8:00
Pin Definition im Code -> [www.youtube.com] @8:37

Daher bin ich bei der Definition auf 29 gekommen

Kompilieren mit Sensor auf PIN 49 geht zumindestens schonmal ohne Warnungen - ich muss nur noch warten bis der aktuelle Job fertig ist, dann spiele ich es mal zum testen ein smiling bouncing smiley


p.s.: Melzi Creality hat ein Mega1284P @16MHz ?!

1-mal bearbeitet. Zuletzt am 30.03.20 09:10.
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 10:25
Das sehe ich auch gerade, bin vom MEGA 2560 ausgegangen!
Dann ist es A2 und Pin 29.

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 12:49
PIN49 klappte natürlich nicht.

Aber mir ist gerade nur aufgefallen
PIN:  25   Port: A6 (A 6)  FILWIDTH_PIN                           Analog in =   984
.                          TEMP_BED_PIN                           Analog in =   984

Obwohl ich den FILWIDTH_PIN aktuell auf den MISO gepackt habe zum weiteren testen ...

#if ENABLED(FILAMENT_WIDTH_SENSOR)
  #define FILWIDTH_PIN     MISO_PIN
#endif

Also einmal zurück auf Start :
BLTouch ist am Breakout-Board - PIN27 - funktioniert ohne Probleme
FILWIDTH_PIN steht auf 29
Die 5V für den Sensor hol ich vom ProgammerHeader

Der Kompiler Fehler ist zurück eye rolling smiley

Es stehen munter verschiedenste Werte im PIN-Debug :
PIN:  29   Port: A2 (A 2)     Analog in =   977   Input  = 1
PIN:  29   Port: A2 (A 2)     Analog in =   727   Input  = 1
PIN:  29   Port: A2 (A 2)     Analog in =   543   Input  = 1
PIN:  29   Port: A2 (A 2)     Analog in =   891   Input  = 1
PIN:  29   Port: A2 (A 2)     Analog in =    19   Input  = 0

Die Anzeige lt. Display ist wieder @5mm


€dit : Könnte es sein das die Jungs von Creality in der Board Version 1.1.5 doch ein wenig mehr geändert haben, als man nirgendwo findet ?! eye rolling smiley

1-mal bearbeitet. Zuletzt am 30.03.20 13:56.
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 14:05
Auf Deine Verantwortung, nur als Vorschlag:
Ersetze mal hier in der temperature.cpp FILWIDTH_PIN durch 2
1806 #if ENABLED(FILAMENT_WIDTH_SENSOR)
1807    HAL_ANALOG_SELECT(FILWIDTH_PIN);
1808  #endif
hier, Seite 259 unter 21.9.5
[ww1.microchip.com]

Herzl. Grüße

P.S. Dass Du beim Löten eine Brücke gebaut hast, kannst Du ausschliessen?

1-mal bearbeitet. Zuletzt am 30.03.20 14:10.
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 14:34
Quote
AlterBastler
Auf Deine Verantwortung, nur als Vorschlag:
Ersetze mal hier in der temperature.cpp FILWIDTH_PIN durch 2
1806 #if ENABLED(FILAMENT_WIDTH_SENSOR)
1807    HAL_ANALOG_SELECT(FILWIDTH_PIN);
1808  #endif
hier, Seite 259 unter 21.9.5
[ww1.microchip.com]

Herzl. Grüße

P.S. Dass Du beim Löten eine Brücke gebaut hast, kannst Du ausschliessen?

Lötbrücke schliesse ich aus - Abstand ist 1mm+ zum nächsten Kontakt , das wäre der Kondensator der dort auf GND liegt.
Schliesse ich den Sensor an bleiben die 2V stabil - mit Multimeter kontrolliert

Ohne Anschluss an dem PIN hat er stabile 0.04V - also Signal frei

Warum den FILWIDTH in der tempratures auf 2 ? nicht direkt auf 29 ?
PIN29 - Port A2 -> 2 ?! oder ?

1-mal bearbeitet. Zuletzt am 30.03.20 14:34.
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 14:42
direktes setzen auf Port 2 in der tempratures.cpp brachte keinen Unterschied
ausser das der Kompilerfehler nun wieder weg ist

Die Werte im Debug auf PIN29/A2 machen weiterhin einen auf Gebirgszug vom 0-1xxx obwohl das Multimeter stabile Werte anzeigt.
>>> m43 i
SENDING:M43 I
PIN:   0   Port: B0 (A31)  E0_DIR_PIN                             Output = 0
PIN:   1   Port: B1 (A30)  E0_STEP_PIN                            Output = 0
PIN:   2   Port: B2 (A29)  Z_DIR_PIN                              Output = 1
PIN:   3   Port: B3 (A28)  Z_STEP_PIN                             Output = 0    TIMER0A   PWM:     0    WGM: 3    COM0A: 3    CS: 3    TCCR0A: 3    TCCR0B: 3    TIMSK0: 5   overflow interrupt enabled
PIN:   4   Port: B4 (A27)  AVR_SS_PIN                             Output = 0    TIMER0B   PWM:   128    WGM: 3    COM0B: 3    CS: 3    TCCR0A: 3    TCCR0B: 3    TIMSK0: 5   compare interrupt enabled   overflow interrupt enabled
.                          FAN_PIN                                Output = 0    TIMER0B   PWM:   128    WGM: 3    COM0B: 3    CS: 3    TCCR0A: 3    TCCR0B: 3    TIMSK0: 5   compare interrupt enabled   overflow interrupt enabled
.                          SS_PIN                                 Output = 0
PIN:   5   Port: B5 (A26)  AVR_MOSI_PIN                           Input  = 0
.                          DOGLCD_MOSI                            Input  = 0
.                          MOSI_PIN                               Input  = 0
PIN:   6   Port: B6 (A25)  AVR_MISO_PIN                           Input  = 1    TIMER3A   PWM:  -25536    WGM: 0    COM3A: 0    CS: 2    TCCR3A: 0    TCCR3B: 2    TIMSK3: 2   non-standard PWM mode   compare interrupt enabled
.                          MISO_PIN                               Input  = 1    TIMER3A   PWM:  -25536    WGM: 0    COM3A: 0    CS: 2    TCCR3A: 0    TCCR3B: 2    TIMSK3: 2   non-standard PWM mode   compare interrupt enabled
PIN:   7   Port: B7 (A24)  AVR_SCK_PIN                            Input  = 0    TIMER3B   PWM:     0    WGM: 0    COM3B: 0    CS: 2    TCCR3A: 0    TCCR3B: 2    TIMSK3: 2   non-standard PWM mode
.                          DOGLCD_SCK                             Input  = 0    TIMER3B   PWM:     0    WGM: 0    COM3B: 0    CS: 2    TCCR3A: 0    TCCR3B: 2    TIMSK3: 2   non-standard PWM mode
.                          SCK_PIN                                Input  = 0
PIN:   8   Port: D0 (A23)  RXD0                                   Input  = 1
PIN:   9   Port: D1 (A22)  TXD0                                   Input  = 0
PIN:  10   Port: D2 (A21)  BTN_EN2                                Input  = 1
PIN:  11   Port: D3 (A20)  BTN_EN1                                Input  = 1
PIN:  12   Port: D4 (A19)  HEATER_BED_PIN                         Output = 0    TIMER1B   PWM:     0    WGM: 4    COM1B: 0    CS: 2    TCCR1A: 0    TCCR1B: 10    TIMSK1: 2   non-standard PWM mode
PIN:  13   Port: D5 (A18)  HEATER_0_PIN                           Output = 0    TIMER1A   PWM:  2000    WGM: 4    COM1A: 0    CS: 2    TCCR1A: 0    TCCR1B: 10    TIMSK1: 2   non-standard PWM mode   compare interrupt enabled
PIN:  14   Port: D6 (A17)  E0_ENABLE_PIN                          Output = 1    TIMER2B   PWM:     0    WGM: 1    COM2B: 1    CS: 4    TCCR2A: 1    TCCR2B: 4    TIMSK2: 0
.                          X_ENABLE_PIN                           Output = 1    TIMER2B   PWM:     0    WGM: 1    COM2B: 1    CS: 4    TCCR2A: 1    TCCR2B: 4    TIMSK2: 0
.                          Y_ENABLE_PIN                           Output = 1
PIN:  15   Port: D7 (A16)  X_STEP_PIN                             Output = 0    TIMER2A   PWM:     0    WGM: 1    COM2A: 1    CS: 4    TCCR2A: 1    TCCR2B: 4    TIMSK2: 0
PIN:  16   Port: C0 (A15)  BTN_ENC                                Input  = 1
PIN:  17   Port: C1 (A14)  LCD_PINS_ENABLE                        Output = 0
PIN:  18   Port: C2 (A13)  X_MIN_PIN                              Input  = 0
.                          X_STOP_PIN                             Input  = 0
PIN:  19   Port: C3 (A12)  Y_MIN_PIN                              Input  = 0
.                          Y_STOP_PIN                             Input  = 0
PIN:  20   Port: C4 (A11)  Z_MIN_PIN                              Input  = 0
.                          Z_STOP_PIN                             Input  = 0
PIN:  21   Port: C5 (A10)  X_DIR_PIN                              Output = 1
PIN:  22   Port: C6 (A 9)  Y_STEP_PIN                             Output = 0
PIN:  23   Port: C7 (A 8)  Y_DIR_PIN                              Output = 1
PIN:  24   Port: A7 (A 7)     Analog in =   982   Input  = 0
PIN:  25   Port: A6 (A 6)     Analog in =   985   Input  = 0
PIN:  26   Port: A5 (A 5)  Z_ENABLE_PIN                           Output = 1
PIN:  27   Port: A4 (A 4)  SERVO0_PIN                             Output = 0
PIN:  28   Port: A3 (A 3)  LCD_PINS_RS                            Output = 0
PIN:  29   Port: A2 (A 2)     Analog in =    77   Input  = 0
PIN:  30   Port: A1 (A 1)  LCD_PINS_D4                            Output = 1
PIN:  31   Port: A0 (A 0)  LCD_SDSS                               Input  = 0
.                          SDSS                                   Input  = 0

Ich habe auch schon den Versuch gemacht auf das letzte Release zu gehen (2.0.5.2) - selbes durchgespielt ohne Änderung

Vielleicht mal bei den Jungs von Marlin auf github posten ?!
Oder irgendwie an das layout der 1.1.5 kommen - nicht das da doch was geändert wurde ...
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 14:50
Entschuldige die Frage, aber der ProMicro und das CReality haben eine gemeinsame Masse?

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 14:55
Quote
AlterBastler
Entschuldige die Frage, aber der ProMicro und das CReality haben eine gemeinsame Masse?

Herzl. Grüße

Jup - Spannung für den Pro greife ich am SPI Port vom Board ab

Brauchst Dich nicht entschuldigen , jeder kann mal was vergessen/übersehen ... deswegen frage ich ja hier - kann mir ja auch passiert sein thumbs up

Am Pro habe ich auch ein kleines BreakOut , damit ich per DuPont am Kabelende messen kann
Re: Marlin 2 bugfix & Filament Durchmesser
30. March 2020 15:45
Hab zum Thema Lötbrücke aber nochmal nachgeschaut - es hat mir keine Ruhe gelassen ...

Also hing das Board mal kurz rum
f5691e60-6dcd-4056-bdb5-a1b352b48c26

und einmal von der Oberseite
34a6d479-1b0c-4535-ab63-44b351afbbcb
und einmal Unterseite
7b9f564c-bfde-4e35-ba91-3341311962f4

Alles sauber (Die Staubkörner bitte ignorieren smiling smiley )
Re: Marlin 2 bugfix & Filament Durchmesser
31. March 2020 10:13
Ich hab's gefunden ! hot smiley

Danke AlterBastler - der entscheidende Hinweis kam von Dir - gepaar mit ein wenig Frustration und gelangweilt resigniertem Lesen der Marlin Doku bin ich auf den Absatz in der Board Config gestoßen :
Analog pins
Analog inputs are always assigned using an index from 0-15. Marlin doesn’t need to know their digital pin numbers.

Habe dann einmal etwas Mühe investiert - komplett neue Firmware erstellt , von 0
Meine Konfiguration eingestellt und der entscheidende Schritt war dann :
#if ENABLED(FILAMENT_WIDTH_SENSOR)
  #define FILWIDTH_PIN     2
#endif

und den Fehler in der Berechnung korrigieren (MELZI hat nur 3V Input - nicht 5V) [filwidth.h]:
// Convert raw measurement to mm
  static inline float raw_to_mm(const uint16_t v) { return v * 3.0f * RECIPROCAL(float(MAX_RAW_THERMISTOR_VALUE)); }
  static inline float raw_to_mm() { return raw_to_mm(raw); }

Damit ist auch die Compilerwarnung weg (wenn man versucht einen Digitalen PIN als analog zu verkaufen klappts nicht mit dem Bit-shifting ... )

Das Umstellen in der tempratures.h direkt auf 2 beim FILWIDTH_PIN dürfte nicht geklappt haben, da die Variable FILWIDTH_PIN wohl noch an anderen Stellen verwendet wird ... in den PINS stand sie weiter auf 29 ... winking smiley

smileys with beer
Re: Marlin 2 bugfix & Filament Durchmesser
31. March 2020 13:30
Prima, auch was gelernt!
Den Hinweis mit den Analog-Pins kannte ich nicht.

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
31. March 2020 15:46
... nach einiger Zeit mit Überlegungen warum der angezeigte Wert, trotz stabiler Spannung, im Display Samba tanzt im Bereich von +/- 0.2mm ...

würde ich sagen das weder der Pin 27 / 29 oder der MISO im SPI Header als analoge Inputs auf dem Creality Board nutzbar sind - in keiner hier rumliegenden Version (1.1.2 / 1.1.4 / 1.1.5)

Alle 3 machen das im Bild rechts an allen 3 Eingängen :
2020-03-31-21-37-42-Window.png
Trotz stabiler Spannung und minimalistischem Aufbau :
7330232b-833d-4c01-8195-f1cd591747ee.jpg

Grundlegend funktioniert das ganze, aber wenn Abweichungen angewendet werden die nicht vorhanden sind, bringt's nix sad smiley

... also wieder viel gelernt, aber nicht wirklich weiter gekommen
Re: Marlin 2 bugfix & Filament Durchmesser
01. April 2020 09:25
Das kann aber nicht zufällig mit rauschen / elektrostatischen Lärm zu tun haben die beim Arduino mittels "pinMode(x, INPUT_PULLUP) x=der Pin ausschaltbar ist.
Re: Marlin 2 bugfix & Filament Durchmesser
01. April 2020 12:09
Quote
Wintex
Das kann aber nicht zufällig mit rauschen / elektrostatischen Lärm zu tun haben die beim Arduino mittels "pinMode(x, INPUT_PULLUP) x=der Pin ausschaltbar ist.
Ich habe am Ausgang vom Arduino gemessen , am Eingang vom Board, am Pin vom Chip (Mega1284p) - die Spannung ist stabil

Selbst das erwähnt Pullup aktivieren auf dem Board selber ( [marlinfw.org] - M42 P29 M2 ) bringt leider keine Änderung

Auch die "harte Variante" in der filwidth.h :
void FilamentWidthSensor::init() {
  pinMode(29, INPUT_PULLUP);
  const int8_t ratio = sample_to_size_ratio();
  LOOP_L_N(i, COUNT(ratios)) ratios = ratio;
  index_r = index_w = 0;
}

brachte nicht's moody smiley

Der PULLUP funktioniert aber - nachgemessen winking smiley

Wie gesagt, Ausgangsspannung am Arduino selber ist stabil, bis zum Pin auf dem Mainboard alles schick.
Erst die Werte die dann vom ADC kommen sind schwankend

€dit :
Ich sag dazu glaube ich nur noch "China-Board" ...
Der Input vom Board, als normalen INPUT (ohne Pullup) eingestellt.
Mit 10k Ohm an die Masse vom Board gelegt (Pulldown halt) - kein Sonstiges Signal dran :
PIN:  29   Port: A2 (A 2)     Analog in =     0   Input  = 0
>>> m43 p29
SENDING:M43 P29
PIN:  29   Port: A2 (A 2)     Analog in =     0   Input  = 0
>>> m43 p29
SENDING:M43 P29
PIN:  29   Port: A2 (A 2)     Analog in =  1023   Input  = 0
>>> m43 p29
SENDING:M43 P29
PIN:  29   Port: A2 (A 2)     Analog in =     0   Input  = 0
>>> m43 p29
SENDING:M43 P29
PIN:  29   Port: A2 (A 2)     Analog in =     0   Input  = 0
>>> m43 p29
SENDING:M43 P29
PIN:  29   Port: A2 (A 2)     Analog in =     0   Input  = 0

1-mal bearbeitet. Zuletzt am 01.04.20 15:42.
Re: Marlin 2 bugfix & Filament Durchmesser
04. April 2020 06:22
Hab mir den Filament-Durchmesser-Sensor auf Thingiverse mal angesehen, frage mich wie empfindlich der auf Staub oder ähnliches reagiert?
Re: Marlin 2 bugfix & Filament Durchmesser
04. April 2020 11:48
Quote
Wintex
Hab mir den Filament-Durchmesser-Sensor auf Thingiverse mal angesehen, frage mich wie empfindlich der auf Staub oder ähnliches reagiert?

Sowas stört den garnicht - durch die Helligkeitseinstellung der LED's im 99,9%+ Licht-dichtem Gehäuse kriegt man das wunderbar kalibriert.
Dazu wird jede Messung über mehre Bilder pro Scan gemittelt (auch einstellbar).
Grob gerechnet rennt der bei mir alle 30ms mit einer Messung über jede der 3 LED's mit jeweils 3 Scans für den Durchschnitt.
Also (ganz grob) 100ms/Messung aller Achsen -> 10 Messung pro Sekunde -> 300 Scans/pro Sekunde.
Ich hab mir das Original-Script noch angepasst das nur alle 5 Messungen die Ausgangsspannung angepasst wird und auch über diese 5 wieder ein Mittelwert gebildet wird.

Das Staubkorn was da was machen würde ist im Durchschnitt also vollkommen egal winking smiley
Die Mirkovibrationen die man zB am Schreibtisch alleine durch tippen auf der Tastatur verursacht sind auch sichtbar in den Messungen, wenn man weit genug hinter's Komma schaut - bzw beim visuellen Kalibrieren das Bild des Scan's leicht "wackelt".
Der Aufbau schafft eine Genauigkeit bis zur 3ten Nachkommastelle im mm-Bereich - also erst wenn ich auf 3 Stellen runde sehe ich ein minimales "Springen".

2020-04-04-17-52-51-TSL1401-visualizer-Processing-3-5-4

Meine Test's bzgl. der Ungenauigkeit am Drucker selber waren immer mit einem 2mm Bohrer - unbewegt im Sensor.

1-mal bearbeitet. Zuletzt am 04.04.20 11:54.
Re: Marlin 2 bugfix & Filament Durchmesser
04. April 2020 13:50
Teste doch mal, ob die Schwankungen bei Anlegen einer konstanten Spannung
auch auftreten. Es könnte ja an einer ungünstigen Beschaltung des AREF-Pins liegen.

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
04. April 2020 15:27
Der letzte Test (https://reprap.org/forum/read.php?249,869564,869811#msg-869811 - unterer Code-Schnipsel) war ohne das irgendwas an dem Pin angeschlossen war, ausser ein 10k Ohm Pulldown (um das restliche elektrostatische Rauschen zu eliminieren)
Da hat mir das Pin-Debugging immer wieder (alle 1-2-3 Sekunden , unregelmäßig) eine angeblich anliegende Spannung von 3,3V gezeigt (max. Auflösung des ADC = 1024 bit -> 0-1023 ; 1023 = 3,3V = max. Eingangsspannung).
Mir fehlt leider das Röntgengerät und das Elektronenrastermikroskop um im Chip nachzuschauen wo da der Murks ggf ist eye popping smiley

Um dann auszuschließen das es an den nicht beschalteten Pin's lag (es war ein minimaler Test, nur Board an USB , nichts außer den Sensor angeschlossen) , habe ich das ganze an dem Board genauso wiederholt, was momentan am Drucker hängt - mit dem gleichen Ergebnis.

Ich hatte in der Doku vom 1284er schon gelesen das ungenutzte Pins (besonders die analogen) mit einem 10k Pulldown versehen werden sollten um mögliche Schwankungen im ADC-Wandler zu minimieren/verhindern.

Ich hatte noch als letzen Strohhalm (im Sinne des Melzi Boards, bevor es rausfliegt) noch überlegt, die anderen Analogen Pins (Board/Hotend-Thermistoren) auch mit einem Pulldown zu versehen.

Bin aber aktuell schon am überlegen ob ich ein MKS GEN L oder ein MKS Robin kaufe - mehr Platz, mehr Pins - von Grund auf Unterstützung für einen Filament-Sensor (wenn man sich durch die Board-Def's im Marlin wühlt)

€dit: scheiß Covid-19 .... zuviel Zeit für zu viele Basteleien und Experimente smoking smiley

1-mal bearbeitet. Zuletzt am 04.04.20 15:28.
Re: Marlin 2 bugfix & Filament Durchmesser
05. April 2020 05:33
Quote
AlterBastler
Teste doch mal, ob die Schwankungen bei Anlegen einer konstanten Spannung
auch auftreten. Es könnte ja an einer ungünstigen Beschaltung des AREF-Pins liegen.

Herzl. Grüße

thumbs up
Netzteil mit 3.3V dran , Masse verbunden - stabile Werte
Der Ausreißer alle 1-2-3 Sekunden bleibt, wird aber über die maximale Abweichung im Marlin gefiltert.

Also doch irgendwo am Sensor weitersuchen
Re: Marlin 2 bugfix & Filament Durchmesser
05. April 2020 10:54
Nimm mal einen kleineren Kondensator (1nF) oder lass
ihn ganz weg.

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
05. April 2020 11:55
Quote
AlterBastler
Nimm mal einen kleineren Kondensator (1nF) oder lass
ihn ganz weg.

Herzl. Grüße

Meinst den der am Ausgang auf Masse gelegt ist ?!
2020-04-05-17-52-32-Filament-Width-Sensor-with-3-LEDs-TSL1401-CL-and-Arduino-Pro-Micro-by-inornate
Re: Marlin 2 bugfix & Filament Durchmesser
05. April 2020 12:10
Ja genau!

Herzl. Grüße
Re: Marlin 2 bugfix & Filament Durchmesser
05. April 2020 15:08
1nF SMD's hab ich leider keine mehr da ... die 10nF sind die kleinsten momentan.
Ganz ohne ist noch schlimmer - da kommen mal gleich fast 2V mehr durch.

Morgen wieder einen drauffriemeln ... SMD - man hat ja sonst nix zu tun drinking smiley

Es ist aber auch ein Problem vom PWM auf dem "Micro Pro" mit dem ADC auf dem "Mega".
Nach einigen Testläufen mit verschiedensten Werten beim initialisieren und Einstellung der Taktraten im Sketch vom Sensor wird das wilde springen der Werte weniger.
Hat aber leider auch Einfluss auf die Qualität der Messungen - ich hab einiges an Teilen noch im Zulauf - 3 Platinen für den Sensor hab ich auch noch über ... einfach mal abwarten bis der ganze Kram da ist und dann alles wieder aus der Schublade holen.
Mich stört am meisten, das der ADC im Mega auch ohne Signal - nur mit 10k Pulldown am Pin - immer wieder ein 100% Wert reinmogelt.
Re: Marlin 2 bugfix & Filament Durchmesser
05. April 2020 15:53
Das könnte daran liegen, daß beim einfachen Auslesen ADC_READY nicht abgefragt wird.
Aus pinsDebug.h:
          if (IS_ANALOG(pin)) {
            sprintf_P(buffer, PSTR("   Analog in = %5ld"), (long)analogRead(DIGITAL_PIN_TO_ANALOG_PIN(pin)));

Herzl. Grüße
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen