Stutter on long curves - bitrate?
-
@T3P3Tony
The diagnostics above are made by a print when some stutter happened.... or do I need to print for a longer time? -
@IndeX4D it does not look like you were printing a file. I suggest pritning one that stutters a lot and have it stuttering for at least (say) 100 stutters then send the M122 9while its still printing).
If that doe snot show up anything in the CAN communication, hiccups or buffers then the next thing to try is temporarily switch the axes into open loop mode
-
@T3P3Tony
I added a M413 S0 to stop power loss like somebody said. was not working. may that´s the reason it looked like it was not printing.
I´ll start a print, now. -
=== Diagnostics ===
RepRapFirmware for Duet 3 MB6HC version 3.5beta2 (2023-02-08 17:43:01) running on Duet 3 MB6HC v1.01 (standalone mode)
Board ID: 08DJM-956L2-G43S8-6J9D0-3S46R-9U2AD
Used output buffers: 3 of 40 (40 max)
Error in macro line 15 while starting up: No WiFi interface available
=== RTOS ===
Static ram: 154344
Dynamic ram: 119384 of which 0 recycled
Never used RAM 68072, free system stack 128 words
Tasks: NETWORK(ready,31.1%,194) ETHERNET(notifyWait,0.2%,559) HEAT(notifyWait,0.0%,321) Move(notifyWait,1.8%,214) CanReceiv(notifyWait,0.1%,771) CanSender(notifyWait,0.1%,325) CanClock(delaying,0.0%,340) TMC(notifyWait,8.4%,56) MAIN(running,58.2%,446) IDLE(ready,0.0%,30), total 100.0%
Owned mutexes:
=== Platform ===
Last reset 01:33:42 ago, cause: software
Last software reset at 2023-03-24 18:35, reason: User, Gcodes spinning, available RAM 69384, slot 0
Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0044a000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
Error status: 0x00
Step timer max interval 271
MCU temperature: min 39.8, current 41.1, max 42.0
Supply voltage: min 23.7, current 23.9, max 24.0, under voltage events: 0, over voltage events: 0, power good: yes
12V rail voltage: min 12.1, current 12.2, max 12.2, under voltage events: 0
Heap OK, handles allocated/used 99/4, heap memory allocated/used/recyclable 2048/104/40, gc cycles 0
Events: 0 queued, 0 completed
Driver 0: standstill, SG min 0, mspos 488, reads 4467, writes 4 timeouts 0
Driver 1: standstill, SG min 0, mspos 488, reads 4467, writes 4 timeouts 0
Driver 2: standstill, SG min 0, mspos 488, reads 4467, writes 4 timeouts 0
Driver 3: standstill, SG min 0, mspos 488, reads 4467, writes 4 timeouts 0
Driver 4: standstill, SG min n/a, mspos 8, reads 4471, writes 0 timeouts 0
Driver 5: standstill, SG min n/a, mspos 440, reads 4468, writes 2 timeouts 0
Date/time: 2023-03-24 20:09:25
Slowest loop: 54.15ms; fastest: 0.05ms
=== Storage ===
Free file entries: 18
SD card 0 detected, interface speed: 25.0MBytes/sec
SD card longest read time 4.3ms, write time 146.2ms, max retries 0
=== Move ===
DMs created 125, segments created 34, maxWait 3037708ms, bed compensation in use: none, comp offset 0.000
next step interrupt due in 1472 ticks, disabled
=== DDARing 0 ===
Scheduled moves 50125, completed 50065, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state 3
=== DDARing 1 ===
Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
=== Heat ===
Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
Heater 0 is on, I-accum = 0.2
Heater 2 is on, I-accum = 0.0
=== GCodes ===
Movement locks held by null, null
HTTP is idle in state(s) 0
Telnet is idle in state(s) 0
File is idle in state(s) 3
USB is idle in state(s) 0
Aux is idle in state(s) 0
Trigger is idle in state(s) 0
Queue is idle in state(s) 0
LCD is idle in state(s) 0
SBC is idle in state(s) 0
Daemon is idle in state(s) 0
Aux2 is idle in state(s) 0
Autopause is idle in state(s) 0
File2 is idle in state(s) 0, sync state 1
Queue2 is idle in state(s) 0
Q0 segments left 3, axes/extruders owned 0x40000007
Code queue 0 is empty
Q1 segments left 0, axes/extruders owned 0x0000000
Code queue 1 is empty
=== CAN ===
Messages queued 417508, received 276475, lost 0, boc 0
Longest wait 5ms for reply type 6024, peak Tx sync delay 655, free buffers 50 (min 16), ts 18180/18180/0
Tx timeouts 0,0,0,0,0,0
=== Network ===
Slowest loop: 147.44ms; fastest: 0.03ms
Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
HTTP sessions: 2 of 8
= Ethernet =
State: active
Error counts: 0 0 0 0 0 0
Socket states: 5 2 2 2 2 0 0 0
=== Multicast handler ===
Responder is inactive, messages received 0, responses 0 -
=== Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.5beta2 (2023-02-08 17:43:01) running on Duet 3 MB6HC v1.01 (standalone mode) Board ID: 08DJM-956L2-G43S8-6J9D0-3S46R-9U2AD Used output buffers: 1 of 40 (40 max) Error in macro line 15 while starting up: No WiFi interface available === RTOS === Static ram: 154344 Dynamic ram: 119384 of which 0 recycled Never used RAM 68072, free system stack 128 words Tasks: NETWORK(ready,28.8%,194) ETHERNET(notifyWait,0.3%,559) HEAT(notifyWait,0.0%,321) Move(notifyWait,12.6%,214) CanReceiv(notifyWait,0.1%,771) CanSender(notifyWait,0.5%,325) CanClock(delaying,0.0%,340) TMC(notifyWait,8.0%,56) MAIN(running,49.6%,446) IDLE(ready,0.0%,30), total 100.0% Owned mutexes: === Platform === Last reset 01:50:56 ago, cause: software Last software reset at 2023-03-24 18:35, reason: User, Gcodes spinning, available RAM 69384, slot 0 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0044a000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x04 Step timer max interval 252 MCU temperature: min 41.5, current 41.7, max 41.8 Supply voltage: min 23.7, current 24.0, max 24.0, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 12.1, current 12.2, max 12.2, under voltage events: 0 Heap OK, handles allocated/used 99/4, heap memory allocated/used/recyclable 2048/104/40, gc cycles 0 Events: 0 queued, 0 completed Driver 0: standstill, SG min 0, mspos 488, reads 10678, writes 0 timeouts 0 Driver 1: standstill, SG min 0, mspos 488, reads 10676, writes 0 timeouts 0 Driver 2: standstill, SG min 0, mspos 488, reads 10676, writes 0 timeouts 0 Driver 3: standstill, SG min 0, mspos 488, reads 10677, writes 0 timeouts 0 Driver 4: standstill, SG min n/a, mspos 8, reads 10677, writes 0 timeouts 0 Driver 5: standstill, SG min n/a, mspos 440, reads 10677, writes 0 timeouts 0 Date/time: 2023-03-24 20:26:39 Slowest loop: 9.70ms; fastest: 0.09ms === Storage === Free file entries: 18 SD card 0 detected, interface speed: 25.0MBytes/sec SD card longest read time 3.5ms, write time 0.0ms, max retries 0 === Move === DMs created 125, segments created 34, maxWait 165ms, bed compensation in use: none, comp offset 0.000 next step interrupt due in 2125 ticks, disabled === DDARing 0 === Scheduled moves 225820, completed 225760, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state 3 === DDARing 1 === Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === Heat === Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0 Heater 0 is on, I-accum = 0.1 Heater 2 is on, I-accum = 0.0 === GCodes === Movement locks held by null, null HTTP is idle in state(s) 0 Telnet is idle in state(s) 0 File is idle in state(s) 3 USB is idle in state(s) 0 Aux is idle in state(s) 0 Trigger is idle in state(s) 0 Queue is idle in state(s) 0 LCD is idle in state(s) 0 SBC is idle in state(s) 0 Daemon is idle in state(s) 0 Aux2 is idle in state(s) 0 Autopause is idle in state(s) 0 File2 is idle in state(s) 0, sync state 1 Queue2 is idle in state(s) 0 Q0 segments left 58, axes/extruders owned 0x40000007 Code queue 0 is empty Q1 segments left 0, axes/extruders owned 0x0000000 Code queue 1 is empty === CAN === Messages queued 11311, received 1164, lost 0, boc 0 Longest wait 0ms for reply type 0, peak Tx sync delay 292, free buffers 50 (min 18), ts 77/77/0 Tx timeouts 0,0,0,0,0,0 === Network === Slowest loop: 12.66ms; fastest: 0.03ms Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0) HTTP sessions: 2 of 8 = Ethernet = State: active Error counts: 0 0 0 0 0 0 Socket states: 5 2 2 2 2 0 0 0 === Multicast handler === Responder is inactive, messages received 0, responses 0
Slowest loop 12.66ms?
Is this right?
When having 12 in M569.1 -
m122 b20 Diagnostics for board 20: Duet EXP1HCL firmware version 3.5beta2 (2023-02-08 15:50:31) Bootloader ID: SAME5x bootloader version 2.4 (2021-12-10) All averaging filters OK Never used RAM 51496, free system stack 172 words Tasks: Move(notifyWait,0.7%,110) HEAT(notifyWait,0.0%,78) CanAsync(notifyWait,0.0%,53) CanRecv(notifyWait,0.4%,42) CanClock(notifyWait,0.0%,69) TMC(notifyWait,47.7%,346) CLSend(notifyWait,0.0%,152) MAIN(running,49.2%,399) IDLE(ready,0.0%,30) AIN(notifyWait,1.9%,265), total 100.0% Last reset 01:55:04 ago, cause: software Last software reset data not available Closed loop enabled: yes, pre-error threshold: 12.00, error threshold: 8.00, encoder type rotaryQuadrature, position -65535 Encoder reverse polarity: yes, raw count 65535 Tuning mode: 0, tuning error: 0, collecting data: no Control loop runtime (us): min=12, max=42, frequency (Hz): min=10000, max=15306 Driver 0: pos 97480, 160.0 steps/mm,ok, SG min n/a, mspos 764, reads 0, writes 36246 timeouts 0, steps req 3911300 done 0 Moves scheduled 367793, completed 367793, in progress 0, hiccups 0, step errors 0, maxPrep 119, maxOverdue 2, maxInc 2, mcErrs 0, gcmErrs 0 Peak sync jitter -2/14, peak Rx sync delay 207, resyncs 0/0, next step interrupt due in 12 ticks, enabled VIN voltage: min 24.6, current 24.7, max 24.7 V12 voltage: min 12.1, current 12.1, max 12.1 MCU temperature: min 31.9C, current 35.7C, max 36.5C Last sensors broadcast 0x00000000 found 0 165 ticks ago, 0 ordering errs, loop time 0 CAN messages queued 7290, send timeouts 0, received 160029, lost 0, free buffers 37, min 37, error reg 40000 dup 0, oos 0/0/0/0, bm 0, wbm 0, rxMotionDelay 335, adv 34405/74350
m122 b21 Diagnostics for board 21: Duet EXP1HCL firmware version 3.5beta2 (2023-02-08 15:50:31) Bootloader ID: SAME5x bootloader version 2.4 (2021-12-10) All averaging filters OK Never used RAM 51320, free system stack 172 words Tasks: Move(notifyWait,0.3%,110) HEAT(notifyWait,0.0%,78) CanAsync(notifyWait,0.0%,53) CanRecv(notifyWait,0.2%,42) CanClock(notifyWait,0.0%,69) TMC(notifyWait,47.5%,346) CLSend(notifyWait,0.0%,152) MAIN(running,50.1%,399) IDLE(ready,0.0%,30) AIN(notifyWait,1.9%,265), total 100.0% Last reset 01:55:51 ago, cause: software Last software reset data not available Closed loop enabled: yes, pre-error threshold: 12.00, error threshold: 8.00, encoder type rotaryQuadrature, position 65490 Encoder reverse polarity: yes, raw count 46 Tuning mode: 0, tuning error: 0, collecting data: no Control loop runtime (us): min=12, max=41, frequency (Hz): min=9868, max=15306 Driver 0: pos 97480, 160.0 steps/mm,ok, SG min n/a, mspos 444, reads 0, writes 64430 timeouts 0, steps req 8692927 done 0 Moves scheduled 367793, completed 367793, in progress 0, hiccups 0, step errors 0, maxPrep 118, maxOverdue 2, maxInc 1, mcErrs 0, gcmErrs 0 Peak sync jitter -2/17, peak Rx sync delay 209, resyncs 0/0, next step interrupt due in 4 ticks, enabled VIN voltage: min 24.6, current 24.7, max 24.9 V12 voltage: min 12.2, current 12.2, max 12.2 MCU temperature: min 31.0C, current 35.0C, max 35.2C Last sensors broadcast 0x00000000 found 0 212 ticks ago, 0 ordering errs, loop time 0 CAN messages queued 59178, send timeouts 0, received 381438, lost 0, free buffers 37, min 37, error reg 80000 dup 0, oos 0/0/0/0, bm 0, wbm 0, rxMotionDelay 335, adv 34423/81293
m122 b30 Diagnostics for board 30: Duet EXP1HCL firmware version 3.5beta2 (2023-02-08 15:50:31) Bootloader ID: SAME5x bootloader version 2.4 (2021-12-10) All averaging filters OK Never used RAM 51496, free system stack 172 words Tasks: Move(notifyWait,0.3%,110) HEAT(notifyWait,0.0%,78) CanAsync(notifyWait,0.0%,53) CanRecv(notifyWait,0.2%,42) CanClock(notifyWait,0.0%,69) TMC(notifyWait,47.1%,346) CLSend(notifyWait,0.0%,152) MAIN(running,50.5%,399) IDLE(ready,0.0%,30) AIN(notifyWait,2.0%,265), total 100.0% Last reset 01:55:54 ago, cause: software Last software reset data not available Closed loop enabled: yes, pre-error threshold: 12.00, error threshold: 8.00, encoder type rotaryQuadrature, position 65541 Encoder reverse polarity: yes, raw count 65531 Tuning mode: 0, tuning error: 0, collecting data: no Control loop runtime (us): min=12, max=42, frequency (Hz): min=9868, max=15625 Driver 0: pos 92616, 160.0 steps/mm,ok, SG min n/a, mspos 948, reads 0, writes 38835 timeouts 0, steps req 9192394 done 0 Moves scheduled 367344, completed 367344, in progress 0, hiccups 0, step errors 0, maxPrep 118, maxOverdue 4, maxInc 1, mcErrs 0, gcmErrs 0 Peak sync jitter -5/19, peak Rx sync delay 214, resyncs 0/0, next step interrupt due in 5 ticks, enabled VIN voltage: min 24.2, current 24.3, max 24.3 V12 voltage: min 12.2, current 12.3, max 12.3 MCU temperature: min 32.4C, current 38.9C, max 39.1C Last sensors broadcast 0x00000000 found 0 27 ticks ago, 0 ordering errs, loop time 0 CAN messages queued 39474, send timeouts 0, received 380779, lost 0, free buffers 37, min 37, error reg a0000 dup 0, oos 0/0/0/0, bm 0, wbm 0, rxMotionDelay 336, adv 33841/80725
-
While you are hunting down a FW issue, I'd suggest to use "arcwelder.exe" as postprocessor in your slicer.
It's very helpful compressing gcode and reduce SD-card traffic while printing.I don't remember where I found it, but I think it was on github. Maybe others who use it can chime in?
-
@IndeX4D can't see any hiccups, can you try running the same print in open loop mode.
-
New situation:
I used cura 5.0 insteaf of 5.3 --> almost no stutter
Then I increased the stl output stl (0.001mm) resolution.
Then I sliced and the g code had around 10mb instead of 2.7mb. So more steps are not a hugh problem - I think the new cura version make to many strange corners. I´ll test it more and more the next hours and will tell you the exact Issue.I was a bit lazy and I haven´t told you, that I usally print with up to 250mm/s and I had no stutter- now I was printing with maximum 100mm/s, so I could not imagine that the board is to slow. Only different was a very natural curvy shape and a much bigger hotend/ layer width/ with much more filament output.
Now, I after was printing 2.5 hours without stutter, I had 1 little layer shift but some underruns. I don´t know where this comes from. I very often ask, If 10 meter cable is to long or need higher bitrate?`
Layer shifts has never be a problem, so I just keep an Eye on it.
m122 b0 === Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.5beta2 (2023-02-08 17:43:01) running on Duet 3 MB6HC v1.01 (standalone mode) Board ID: 08DJM-956L2-G43S8-6J9D0-3S46R-9U2AD Used output buffers: 8 of 40 (37 max) Error in macro line 15 while starting up: No WiFi interface available === RTOS === Static ram: 154344 Dynamic ram: 119352 of which 0 recycled Never used RAM 67432, free system stack 140 words Tasks: NETWORK(ready,1852.5%,194) ETHERNET(notifyWait,13.8%,445) HEAT(notifyWait,2.2%,321) Move(notifyWait,222.0%,214) CanReceiv(notifyWait,11.8%,771) CanSender(notifyWait,6.8%,325) CanClock(delaying,0.7%,340) TMC(notifyWait,1030.5%,56) MAIN(running,995.7%,446) IDLE(ready,4.5%,30), total 4140.4% Owned mutexes: HTTP(MAIN) === Platform === Last reset 09:37:23 ago, cause: software Last software reset at 2023-03-26 13:09, reason: User, Gcodes spinning, available RAM 68600, slot 0 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x00 Step timer max interval 339 MCU temperature: min 38.7, current 39.7, max 41.9 Supply voltage: min 23.7, current 24.0, max 24.0, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 12.1, current 12.2, max 12.2, under voltage events: 0 Heap OK, handles allocated/used 99/2, heap memory allocated/used/recyclable 2048/72/32, gc cycles 0 Events: 0 queued, 0 completed Driver 0: standstill, SG min 0, mspos 808, reads 48960, writes 23 timeouts 0 Driver 1: standstill, SG min 0, mspos 808, reads 48960, writes 23 timeouts 0 Driver 2: standstill, SG min 0, mspos 808, reads 48960, writes 23 timeouts 0 Driver 3: standstill, SG min 0, mspos 808, reads 48960, writes 23 timeouts 0 Driver 4: standstill, SG min n/a, mspos 8, reads 48972, writes 11 timeouts 0 Driver 5: standstill, SG min 0, mspos 440, reads 48961, writes 23 timeouts 0 Date/time: 2023-03-26 22:47:17 Slowest loop: 51.47ms; fastest: 0.04ms === Storage === Free file entries: 20 SD card 0 detected, interface speed: 25.0MBytes/sec SD card longest read time 4.6ms, write time 41.5ms, max retries 0 === Move === DMs created 125, segments created 62, maxWait 6017841ms, bed compensation in use: none, comp offset 0.000 no step interrupt scheduled === DDARing 0 === Scheduled moves 318648, completed 318648, hiccups 0, stepErrors 0, LaErrors 0, Underruns [120, 7, 7], CDDA state -1 === DDARing 1 === Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === Heat === Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0 === GCodes === Movement locks held by null, null HTTP is ready with "m122 b0" in state(s) 0 Telnet is idle in state(s) 0 File is idle in state(s) 0 USB is idle in state(s) 0 Aux is idle in state(s) 0 Trigger is idle in state(s) 0 Queue is idle in state(s) 0 LCD is idle in state(s) 0 SBC is idle in state(s) 0 Daemon is idle in state(s) 0 Aux2 is idle in state(s) 0 Autopause is idle in state(s) 0 File2 is idle in state(s) 0 Queue2 is idle in state(s) 0 Q0 segments left 0, axes/extruders owned 0x40000003 Code queue 0 is empty Q1 segments left 0, axes/extruders owned 0x0000000 Code queue 1 is empty === CAN === Messages queued 3010480, received 2632681, lost 0, boc 0 Longest wait 13ms for reply type 6018, peak Tx sync delay 669, free buffers 50 (min 16), ts 173217/173215/0 Tx timeouts 0,0,0,0,0,0 === Network === Slowest loop: 56.31ms; fastest: 0.03ms Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0) HTTP sessions: 1 of 8 = Ethernet = State: active Error counts: 0 0 0 1 0 0 Socket states: 5 5 2 2 2 0 0 0 === Multicast handler === Responder is inactive, messages received 0, responses 0
-
@IndeX4D lots of very very short segments can cause stuttering but AFAIK modern slicers have a setting to set the shortest allowed segment length to something reasonable.
for example on cura:
-
@T3P3Tony
yes I know, but Cura 5.0 is working, Cura 5.3 with same settings is horrible.Cura 5.3 is producing small corners, which is not fine. Also it replaces z seams to this small unvisible corners.
Setting up the resulution in cura 5.0 to 0.001mm is still working. Gcode has 50mb instead of 5 and it´s printing with 200mm/s completely ok, so I don´t understand why I should reduce any resolution when the Duet3 mainboard can work with heavy loaded gcodes.
Edit: Layer shift came from bad quality rj11 cable -- replaced with rj11 cat5e cable. Printer is running much smoother and no layer shifts at all, also when shaking thr cables a lot!
-
@IndeX4D said in Stutter on long curves - bitrate?:
Setting up the resulution in cura 5.0 to 0.001mm is still working. Gcode has 50mb instead of 5 and it´s printing with 200mm/s completely ok, so I don´t understand why I should reduce any resolution when the Duet3 mainboard can work with heavy loaded gcodes.
ok so to confirm, you have tied this down to gcode generated by Cura 5.3 causing issues which are not present in cura 5.0? and that is the same no matter the version of RRF?
-
@IndeX4D
In the Cura settings... is RepRap set for the "GCode Flavor" ?
It can be found in the printer settings, where the start and end GCode is also entered.
(Settings -> Printer -> Manage Printers... -> Machine Settings).@T3P3Tony
I added a M413 S0 to stop power loss like somebody said. was not working. may that´s the reason it looked like it was not printing.
I´ll start a print, now.M413 does not know the duet.
You probably mean M911: Configure auto save on loss of power (Duet GCode Dictionary Link) !? -
@T3P3Tony
yes, I think cura is the main source. Playing around with resolution etc in cura with 5.0 is always fine. Also when printing with with very high resolution.
I´m not sure, if I do anything wrong with cura 5.3.
Cura 5.0 is running fine for this project.@Norder
thank you, gcode style is enabled. I just took a wrong command from youtube ;/ latenight.I mean in general the printers are working very good since 3.5 - especially closed loop steppers. They make me happy!