Base64 coding problem on trunkey Marlin for raster engravings March 23, 2016 07:23PM |
Registered: 8 years ago Posts: 778 |
for (int i = 0; i < LASER_MAX_RASTER_LINE; i++) { //Scale the image intensity based on the raster power. //100% power on a pixel basis is 255, convert back to 255 = 100. //[stackoverflow.com] int OldRange, NewRange; float NewValue; OldRange = (255 - 0); NewRange = (laser.rasterlaserpower - 750); //7% power on my unit outputs hardly any noticable burn at F3000 on paper, so adjust the raster contrast based off 750 being the lower. 750 still produces burns at slower feed rates, but getting less power than this isn't typically needed at slow feed rates. NewValue = (float)(((((float)laser.raster_data - 0) * NewRange) / OldRange) + 750); //If less than 750, turn off the laser tube. if(NewValue == 750) NewValue = 0; block->laser_raster_data = NewValue; }
Re: Base64 coding problem on trunkey Marlin for raster engravings March 24, 2016 06:27PM |
Registered: 10 years ago Posts: 31 |
block->laser_raster_data[i] = NewValue;but I guess the "i" was stolen by the text formatting.
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 12:34AM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 06:09AM |
Registered: 10 years ago Posts: 31 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 07:09AM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 08:56AM |
Registered: 10 years ago Posts: 31 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 09:02AM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 10:05AM |
Registered: 10 years ago Posts: 31 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 12:14PM |
Admin Registered: 16 years ago Posts: 13,886 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 25, 2016 06:51PM |
Registered: 8 years ago Posts: 778 |
// decoding char input2[] = "Zm9vYmFy"; int input2Len = sizeof(input2); int decodedLen = base64_dec_len(input2, input2Len); char decoded[decodedLen]; base64_decode(decoded, input2, input2Len); Serial.print(input2); Serial.print(" = "); Serial.println(decoded);In Marlin_main.cpp where the decoding happens the laser.raster_data used for the base64 decoding, which originates from the changes to the laser.rasterlaserpower.
It's working!! March 25, 2016 11:22PM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 26, 2016 02:53AM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 26, 2016 07:51AM |
Registered: 10 years ago Posts: 31 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 26, 2016 07:57AM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 26, 2016 06:39PM |
Registered: 10 years ago Posts: 31 |
#ifdef LASER #define LASER_PWM_MAX_DUTY 255 static void TC_SetCMR_ChannelA(Tc *tc, uint32_t chan, uint32_t v) { tc->TC_CHANNEL[chan].TC_CMR = (tc->TC_CHANNEL[chan].TC_CMR & 0xFFF0FFFF) | v; } static void TC_SetCMR_ChannelB(Tc *tc, uint32_t chan, uint32_t v) { tc->TC_CHANNEL[chan].TC_CMR = (tc->TC_CHANNEL[chan].TC_CMR & 0xF0FFFFFF) | v; } static uint32_t chA, chNo; static Tc *chTC; static uint32_t TC_const; void laser_init_pwm(uint8_t ulPin, uint16_t ulFreq) { uint32_t attr = g_APinDescription[ulPin].ulPinAttribute; if ((attr & PIN_ATTR_TIMER) == PIN_ATTR_TIMER) { // We use MCLK/2 as clock. const uint32_t TC = VARIANT_MCK / 2 / ulFreq; TC_const = TC/TC_MAX_DUTY_CYCLE; // Setup Timer for this pin ETCChannel channel = g_APinDescription[ulPin].ulTCChannel; static const uint32_t channelToChNo[] = { 0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2 }; static const uint32_t channelToAB[] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }; static Tc *channelToTC[] = { TC0, TC0, TC0, TC0, TC0, TC0, TC1, TC1, TC1, TC1, TC1, TC1, TC2, TC2, TC2, TC2, TC2, TC2 }; static const uint32_t channelToId[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 }; chNo = channelToChNo[channel]; chA = channelToAB[channel]; chTC = channelToTC[channel]; uint32_t interfaceID = channelToId[channel]; pmc_enable_periph_clk(TC_INTERFACE_ID + interfaceID); TC_Configure(chTC, chNo, TC_CMR_TCCLKS_TIMER_CLOCK1 | TC_CMR_WAVE | // Waveform mode TC_CMR_WAVSEL_UP_RC | // Counter running up and reset when equals to RC TC_CMR_EEVT_XC0 | // Set external events from XC0 (this setup TIOB as output) TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_CLEAR | TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_CLEAR); TC_SetRC(chTC, chNo, TC); if (chA) TC_SetCMR_ChannelA(chTC, chNo, TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_CLEAR); else TC_SetCMR_ChannelB(chTC, chNo, TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_CLEAR); PIO_Configure(g_APinDescription[ulPin].pPort, g_APinDescription[ulPin].ulPinType, g_APinDescription[ulPin].ulPin, g_APinDescription[ulPin].ulPinConfiguration); TC_Start(chTC, chNo); } } void laser_intensity(uint8_t intensity) { uint32_t ulValue = intensity * TC_const; if (ulValue == 0) { if (chA) TC_SetCMR_ChannelA(chTC, chNo, TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_CLEAR); else TC_SetCMR_ChannelB(chTC, chNo, TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_CLEAR); } else { if (chA) { TC_SetRA(chTC, chNo, ulValue); TC_SetCMR_ChannelA(chTC, chNo, TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_SET); } else { TC_SetRB(chTC, chNo, ulValue); TC_SetCMR_ChannelB(chTC, chNo, TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_SET); } } } #endif
laser_init(5, 20000); // 20 kHz on pin 5 laser_intensity(200); // 200 of 255
Re: Base64 coding problem on trunkey Marlin for raster engravings March 27, 2016 08:34PM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 28, 2016 03:54AM |
Registered: 10 years ago Posts: 31 |
Timer3.initialize(); Timer3.setPeriod(1000000/LASER_PWM); Timer3.pwm(pin,0);and the firing is
Timer3.setPwmDuty(LASER_FIRING_PIN, intensity/100.0*1023);where intensity is in the range 0-100. The good news is that Timer3 has 1024 resolution
Re: Base64 coding problem on trunkey Marlin for raster engravings March 28, 2016 08:10AM |
Registered: 10 years ago Posts: 31 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 28, 2016 08:50PM |
Registered: 8 years ago Posts: 778 |
ICR3 = labs(F_CPU / LASER_PWM); // clock cycles per PWM pulseRight now configured for 8kHz.
Re: Base64 coding problem on trunkey Marlin for raster engravings March 29, 2016 03:28AM |
Admin Registered: 16 years ago Posts: 13,886 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 30, 2016 08:17AM |
Registered: 8 years ago Posts: 778 |
Re: Base64 coding problem on trunkey Marlin for raster engravings March 31, 2016 08:01PM |
Registered: 8 years ago Posts: 778 |