|
@@ -283,6 +283,12 @@ int temp2analog(int celsius, uint8_t e) {
|
283
|
283
|
SERIAL_ERRORLNPGM(" - Invalid extruder number!");
|
284
|
284
|
kill();
|
285
|
285
|
}
|
|
286
|
+ #ifdef HEATER_0_USES_MAX6675
|
|
287
|
+ if (e == 0)
|
|
288
|
+ {
|
|
289
|
+ return celsius * 4;
|
|
290
|
+ }
|
|
291
|
+ #endif
|
286
|
292
|
if(heater_ttbl_map[e] != 0)
|
287
|
293
|
{
|
288
|
294
|
int raw = 0;
|
|
@@ -352,7 +358,14 @@ float analog2temp(int raw, uint8_t e) {
|
352
|
358
|
SERIAL_ERROR((int)e);
|
353
|
359
|
SERIAL_ERRORLNPGM(" - Invalid extruder number !");
|
354
|
360
|
kill();
|
355
|
|
- }
|
|
361
|
+ }
|
|
362
|
+ #ifdef HEATER_0_USES_MAX6675
|
|
363
|
+ if (e == 0)
|
|
364
|
+ {
|
|
365
|
+ return 0.25 * raw;
|
|
366
|
+ }
|
|
367
|
+ #endif
|
|
368
|
+
|
356
|
369
|
if(heater_ttbl_map[e] != 0)
|
357
|
370
|
{
|
358
|
371
|
float celsius = 0;
|
|
@@ -446,6 +459,22 @@ void tp_init()
|
446
|
459
|
SET_OUTPUT(FAN_PIN);
|
447
|
460
|
#endif
|
448
|
461
|
|
|
462
|
+ #ifdef HEATER_0_USES_MAX6675
|
|
463
|
+ #ifndef SDSUPPORT
|
|
464
|
+ SET_OUTPUT(MAX_SCK_PIN);
|
|
465
|
+ WRITE(MAX_SCK_PIN,0);
|
|
466
|
+
|
|
467
|
+ SET_OUTPUT(MAX_MOSI_PIN);
|
|
468
|
+ WRITE(MAX_MOSI_PIN,1);
|
|
469
|
+
|
|
470
|
+ SET_INPUT(MAX_MISO_PIN);
|
|
471
|
+ WRITE(MAX_MISO_PIN,1);
|
|
472
|
+ #endif
|
|
473
|
+
|
|
474
|
+ SET_OUTPUT(MAX6675_SS);
|
|
475
|
+ WRITE(MAX6675_SS,1);
|
|
476
|
+ #endif
|
|
477
|
+
|
449
|
478
|
// Set analog inputs
|
450
|
479
|
ADCSRA = 1<<ADEN | 1<<ADSC | 1<<ADIF | 0x07;
|
451
|
480
|
DIDR0 = 0;
|
|
@@ -595,6 +624,62 @@ void bed_max_temp_error(void) {
|
595
|
624
|
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
|
596
|
625
|
}
|
597
|
626
|
|
|
627
|
+#define HEAT_INTERVAL 250
|
|
628
|
+#ifdef HEATER_0_USES_MAX6675
|
|
629
|
+long max6675_previous_millis = -HEAT_INTERVAL;
|
|
630
|
+int max6675_temp = 2000;
|
|
631
|
+
|
|
632
|
+int read_max6675()
|
|
633
|
+{
|
|
634
|
+ if (millis() - max6675_previous_millis < HEAT_INTERVAL)
|
|
635
|
+ return max6675_temp;
|
|
636
|
+
|
|
637
|
+ max6675_previous_millis = millis();
|
|
638
|
+ max6675_temp = 0;
|
|
639
|
+
|
|
640
|
+ #ifdef PRR
|
|
641
|
+ PRR &= ~(1<<PRSPI);
|
|
642
|
+ #elif defined PRR0
|
|
643
|
+ PRR0 &= ~(1<<PRSPI);
|
|
644
|
+ #endif
|
|
645
|
+
|
|
646
|
+ SPCR = (1<<MSTR) | (1<<SPE) | (1<<SPR0);
|
|
647
|
+
|
|
648
|
+ // enable TT_MAX6675
|
|
649
|
+ WRITE(MAX6675_SS, 0);
|
|
650
|
+
|
|
651
|
+ // ensure 100ns delay - a bit extra is fine
|
|
652
|
+ delay(1);
|
|
653
|
+
|
|
654
|
+ // read MSB
|
|
655
|
+ SPDR = 0;
|
|
656
|
+ for (;(SPSR & (1<<SPIF)) == 0;);
|
|
657
|
+ max6675_temp = SPDR;
|
|
658
|
+ max6675_temp <<= 8;
|
|
659
|
+
|
|
660
|
+ // read LSB
|
|
661
|
+ SPDR = 0;
|
|
662
|
+ for (;(SPSR & (1<<SPIF)) == 0;);
|
|
663
|
+ max6675_temp |= SPDR;
|
|
664
|
+
|
|
665
|
+ // disable TT_MAX6675
|
|
666
|
+ WRITE(MAX6675_SS, 1);
|
|
667
|
+
|
|
668
|
+ if (max6675_temp & 4)
|
|
669
|
+ {
|
|
670
|
+ // thermocouple open
|
|
671
|
+ max6675_temp = 2000;
|
|
672
|
+ }
|
|
673
|
+ else
|
|
674
|
+ {
|
|
675
|
+ max6675_temp = max6675_temp >> 3;
|
|
676
|
+ }
|
|
677
|
+
|
|
678
|
+ return max6675_temp;
|
|
679
|
+}
|
|
680
|
+#endif
|
|
681
|
+
|
|
682
|
+
|
598
|
683
|
// Timer 0 is shared with millies
|
599
|
684
|
ISR(TIMER0_COMPB_vect)
|
600
|
685
|
{
|
|
@@ -653,6 +738,9 @@ ISR(TIMER0_COMPB_vect)
|
653
|
738
|
#if (TEMP_0_PIN > -1)
|
654
|
739
|
raw_temp_0_value += ADC;
|
655
|
740
|
#endif
|
|
741
|
+ #ifdef HEATER_0_USES_MAX6675 // TODO remove the blocking
|
|
742
|
+ raw_temp_0_value = read_max6675();
|
|
743
|
+ #endif
|
656
|
744
|
temp_state = 2;
|
657
|
745
|
break;
|
658
|
746
|
case 2: // Prepare TEMP_BED
|
|
@@ -732,7 +820,7 @@ ISR(TIMER0_COMPB_vect)
|
732
|
820
|
#endif
|
733
|
821
|
|
734
|
822
|
#if EXTRUDERS > 1
|
735
|
|
- #ifdef HEATER_1_USES_AD595
|
|
823
|
+ #ifdef HEATER_1_USES_AD595 || defined HEATER_0_USES_MAX6675
|
736
|
824
|
current_raw[1] = raw_temp_1_value;
|
737
|
825
|
#else
|
738
|
826
|
current_raw[1] = 16383 - raw_temp_1_value;
|