Marlin: Masalah UBL

Dibuat pada 13 Apr 2017  ·  163Komentar  ·  Sumber: MarlinFirmware/Marlin

Akhirnya punya waktu untuk memeriksa UBL, dan saya mengalami masalah:

Menggunakan RCBugFix terbaru (02fca54), saya melihat kesalahan setelah G29 P1 :

Send: M502
Recv: echo:Hardcoded Default Settings Loaded
Recv: ok
Send: M105
Recv: ok T:82.7 /0.0 B:41.7 /0.0 T0:82.7 /0.0 T1:24.0 /0.0 @:0 B@:0 <strong i="8">@0</strong>:0 <strong i="9">@1</strong>:0
Send: M500
Recv: echo:Settings Stored (451 bytes)
Recv: ok
Send: G28
Recv: echo:Active Extruder: 0
Recv: echo:busy: processing
Recv: echo:Active Extruder: 0
Recv: X:128.00 Y:134.00 Z:6.20 E:0.00 Count X:12800 Y:13400 Z:4960
Recv: ok
Send: G29 P1
Recv: ubl.eeprom_start=64
Recv: Mesh invalidated. Probing mesh.
Recv: 
Recv: Error:Heating failed, system stopped! Heater_ID: bed
Changing monitoring state from 'Operational' to 'Error: Heating failed, system stopped! Heater_ID: bed
'
Recv: Error:Heating failed, system stopped! Heater_ID: bed
Recv: Error:Printer halted. kill() called!

Memanaskan tempat tidur dan ekstruder 1 tampaknya baik-baik saja - diuji ini karena masalahnya tampaknya terkait.

Saya juga mencoba 1b12fea dan sepertinya macet tanpa kesalahan atau indikasi ada masalah:

Send: M502
Recv: echo:Hardcoded Default Settings Loaded
Recv: ok
Send: M500
Recv: echo:Settings Stored (451 bytes)
Recv: ok
Send: G28
Recv: echo:Active Extruder: 0
Recv: echo:busy: processing
Recv: echo:Active Extruder: 0
Recv: X:128.00 Y:134.00 Z:6.20 E:0.00 Count X:12800 Y:13400 Z:4960
Recv: ok
Send: G29 P1
Recv: ubl.eeprom_start=64
Recv: Mesh invalidated. Probing mesh.
Recv: 

**** Apparently we hard crash here?  The printer does nothing, and ****
**** serial output simply continues with the 'start' below. ****

Recv: start
Recv: echo:Marlin 1.1.0-RCBugFix
Recv: 
Recv: echo: Last Updated: 2016-12-06 12:00 | Author: BG
Recv: Compiled: Apr 13 2017
Recv: echo: Free Memory: 1255  PlannerBufferBytes: 1296
Recv: echo:V34 stored settings retrieved (451 bytes)
Recv:  UBL not active!
Recv: 
Recv: Initializing Bed Leveling State to current firmware settings.
Recv: 
Recv: UBL System reset()
Recv: echo:Steps per unit:
Recv: echo:  M92 X100.00 Y100.00 Z800.00 E99.00
Recv: echo:Maximum feedrates (mm/s):
Recv: echo:  M203 X500.00 Y500.00 Z15.00 E30.00
Recv: echo:Maximum Acceleration (mm/s2):
Recv: echo:  M201 X1100 Y1100 Z100 E10000
Recv: echo:Accelerations: P=printing, R=retract and T=travel
Recv: echo:  M204 P1100.00 R1100.00 T3000.00
Recv: echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)
Recv: echo:  M205 S0.00 T0.00 B20000 X15.00 Y15.00 Z0.40 E5.00
Recv: echo:Home offset (mm)
Recv: echo:  M206 X0.00 Y0.00 Z0.00
Recv: echo:Hotend offsets (mm)
Recv: echo:  M218 T1 X-32.65 Y-0.45
Recv: Unified Bed Leveling:
Recv: echo:  M420 S0
Recv: 
Recv: UBL is Inactive
Recv: 
Recv: Active Mesh Slot: -1
Recv: z_offset: 0.000000
Recv: EEPROM can hold 4 meshes.
Recv: 
Recv: GRID_MAX_POINTS_X  15
Recv: GRID_MAX_POINTS_Y  15
Recv: UBL_MESH_MIN_X     (0 + 20)
Recv: UBL_MESH_MIN_Y     (35 + 20)
Recv: UBL_MESH_MAX_X     (250 - (20))
Recv: UBL_MESH_MAX_Y     (300 - (20))
Recv: MESH_X_DIST        (float((250 - (20)) - ((0 + 20))) / float(15 - 1))
Recv: MESH_Y_DIST        (float((300 - (20)) - ((35 + 20))) / float(15 - 1))
Recv: 
Recv: echo:Material heatup parameters:
Recv: echo:  M145 S0 H204 B45 F0
Recv:   M145 S1 H230 B110 F0
Recv: echo:PID settings:
Recv: echo:  M301 P47.58 I7.45 D76.00
Recv: echo:LCD Contrast:
Recv: echo:  M250 C40
Recv: echo:Filament settings: Disabled
Recv: echo:  M200 D1.75
Recv: echo:  M200 T1 D1.75
Recv: echo:  M200 D0
Recv: echo:Z-Probe Offset (mm):
Recv: echo:  M851 Z-1.20
Recv: Error:volume.init failed

File konfigurasi saya:

Saya yakin saya telah dikonfigurasi dengan benar (beri komentar UBL dan hapus komentar bilinear atau mesh dan semuanya berfungsi dengan baik [dengan 1b12fea; belum mencoba yang terbaru]) dan berencana untuk segera melakukan debug, tetapi hanya ingin memposting di sini untuk melihat apakah ada yang punya ada pemikiran? @ Roxy-3D?

U.B.L.

Semua 163 komentar

Hei @bgort !!! Saya telah mengatasi masalah ini selama 5 atau 6 hari. Jika Anda ingin terjun dan membantu, itu akan sangat dihargai. Harap aktifkan opsi M100_FREE_MEMORY_WATCHER Anda. Itu akan memungkinkan Anda memverifikasi ini terjadi. (Ini akan memberi Anda akses ke fungsi top_of_stack ())

Di file ubl_G29.cpp Anda, Tambahkan baris kode ini tepat di awal fungsi:

char* top_of_stack();
  void gcode_G29() {
  SERIAL_PROTOCOLLNPAIR("Start of G29     ", hex_word(top_of_stack()));
    if (ubl.eeprom_start < 0) {
      SERIAL_PROTOCOLLNPGM("?You need to enable your EEPROM and initialize it");
      SERIAL_PROTOCOLLNPGM("with M502, M500, M501 in that order.\n");
      return;
    }
  SERIAL_PROTOCOLLNPAIR("After accessing UBL object: ", hex_word(top_of_stack()) );

Apa yang saya lihat adalah penunjuk tumpukan dalam posisi normal sebelum objek UBL direferensikan. Penunjuk tumpukan akan berada di suatu tempat dekat dengan 0x2180. Tetapi setelah mengakses objek UBL, penunjuk tumpukan telah rusak dan (dalam kasus saya) berada di sekitar 0x1cc0. Jelas sekali, hal ini menyebabkan berbagai macam masalah. Nilai sistem penting disimpan di sana.

Dapatkah Anda melihat dan / atau memverifikasi jika Anda melihat penunjuk tumpukan melompat?

Hei Roxy! Tentu!

Inilah yang saya lakukan itu:

*** snip ***
Recv: ok
Send: G29 P1
Recv: Start of G29; stack @ 8588
Recv: ubl.eeprom_start=64
Recv: After accessing UBL object; stack @ 8506
Recv: Mesh invalidated. Probing mesh.
Recv: 
Recv: d from 3rd point: -0.000000  c: -0.000000
*** (snipped a bunch of newlines here) ***
start
Recv: echo:Marlin 1.1.0-RCBugFix
Recv: 
Recv: echo: Last Updated: 2016-12-06 12:00 | Author: BG
Recv: Compiled: Apr 13 2017
Recv: echo: Free Memory: 1204  PlannerBufferBytes: 1296
Recv: echo:V34 stored settings retrieved (451 bytes)
Recv:  UBL not active!
*** snip ***

Tumpukan berbeda.

Saya akan menggali sedikit setelah saya kembali dari FedEx. Perlu mengirimkan paket.

Apa pun yang salah ... Itu adalah sesuatu yang sangat kecil dan sederhana. Tapi sekarang, saya tidak bisa memahaminya !!!

Recv: Awal G29; tumpukan @ 8588
Terima: ubl.eeprom_start = 64
Terima: Setelah mengakses objek UBL; tumpukan @ 8506

Apakah Anda memiliki hex_word () di sekitar panggilan top_of_stack ()? Saya tidak yakin hal-hal dicetak dengan cara yang masuk akal tanpa itu. Tetapi tampaknya Anda melihat pergeseran penunjuk tumpukan dengan cara yang tidak masuk akal.

@bgort Apakah Anda pakar GCC? Saya tahu GCC dapat menghasilkan file .ii dan .iii dengan kode C yang dicampur dengan kode assembly yang dihasilkan kompilator. Itu akan sangat membantu sekarang. Tetapi saya tidak tahu cara mendapatkan file-file itu dalam lingkungan Arduino dan terutama di Windows. Apakah ini sesuatu yang bisa Anda pahami?

Kadang sulit ditemukan ... hal-hal kecil.

Mulailah sekarang. Semoga ada sesuatu yang menonjol - mata segar dan semua itu.

Kadang sulit ditemukan ... hal-hal kecil.
Mulailah sekarang. Semoga ada sesuatu yang menonjol - mata segar dan semua itu.

Saya punya beberapa pembaruan untuk M100 yang akan saya bersihkan dan pasang kembali di cabang utama. Hal inilah yang membantu saya mempersempit cakupan ke awal rutinitas G29. Saya mungkin akan menyiapkannya untuk membantu Anda dalam waktu satu jam.

Ah, bagus!

Masih tidak yakin apa yang terjadi, tapi itu tidak ada hubungannya dengan G29, menurut saya.

Setelah melihat-lihat sebentar, saya memutuskan untuk mencoba ini hanya untuk melihat apa yang bisa saya lihat:

  char *top_of_stack();
  extern char __bss_end;
  extern char __heap_start;
  extern void* __brkval;

  void gcode_G29() {
    int cnt=0;

    SERIAL_PROTOCOLLNPAIR("Start of G29; stack @ ", (unsigned int)top_of_stack());

    while(1) {
      SERIAL_PROTOCOLLNPAIR("G29 Loop ", ++cnt);
      SERIAL_PROTOCOLLNPAIR("Stack @ ", (unsigned int)top_of_stack());

      int free_memory;
      if ((int)__brkval == 0) free_memory = ((int)&free_memory) - ((int)&__bss_end);
      else free_memory = ((int)&free_memory) - ((int)__brkval);

      SERIAL_PROTOCOLLNPAIR("Free memory ", free_memory);

      delay(200);
    }

Berikut hasilnya:

Send: G29 P1
Recv: Start of G29; stack @ 8588
Recv: G29 Loop 1
Recv: Stack @ 8586
Recv: Free memory 1534
Recv: G29 Loop 2
Recv: Stack @ 8586
Recv: Free memory 1534
*** snip - all identical ***
Recv: G29 Loop 22
Recv: Stack @ 8586
Recv: Free memory 1534
Recv: G29 Loop 23
Recv: Stack @ 8586
Recv: Free memory 1534
*** crash after loop 23 ***
Recv: start
Recv: echo:Marlin 1.1.0-RCBugFix
Recv: 

Saya sudah mencoba ini berkali-kali - selalu macet di tempat yang sama - loop 23. Seperti yang Anda lihat, kami bahkan tidak menyentuh objek / struktur UBL, jadi sepertinya tidak ada hubungannya dengan itu. Saya tidak mengerti mengapa loop ini harus crash, kecuali jika ada interrupt dan crash di tempat lain?

Akan terus mencari, tapi kupikir aku akan memeriksanya, setidaknya.

@bgort dan @thinkyhead Silakan lihat di: https://github.com/MarlinFirmware/Marlin/pull/6334

Dan jika Anda menambahkan baris kode yang ditampilkan ke ubl_G29.cpp

void check_for_free_memory_corruption(char *);

void gcode_G29() {
  check_for_free_memory_corruption("G29 starting... ");
  SERIAL_PROTOCOLLNPAIR("ubl.eeprom_start=", ubl.eeprom_start);
  if (ubl.eeprom_start < 0) {
    SERIAL_PROTOCOLLNPGM("?You need to enable your EEPROM and initialize it");
    SERIAL_PROTOCOLLNPGM("with M502, M500, M501 in that order.\n");
    return;
  }
  check_for_free_memory_corruption("after accessing UBL object... ");

Saya yakin Anda akan mendapatkan banyak informasi bagus tentang apa yang terjadi. Anda mungkin harus melakukan

  • M100 I
  • M100 F
  • G28
  • M100 F
  • G29
    Dan pada saat itu ... Penunjuk tumpukan kacau!

Akan memeriksanya sekarang.

Juga, menambahkan loop saya ke G28 dan crash di loop 23 juga. Jadi, tidak ada hubungannya dengan G29. Kecuali saya hanya menggonggong pohon yang salah sepenuhnya.

Nah ... Kita sedang berurusan dengan masalah kerusakan memori. Jadi tidak ada yang tahu apa yang menjadi akar masalahnya. Tetapi memiliki cara yang andal untuk menyebabkan masalah adalah bantuan besar. Saya sudah berulang kali mendefinisikan kelas objek UBL dan saya tidak melihat ada masalah. Saya telah mengubah semua tautan dari statis menjadi 'normal'. Saya telah memindahkan barang-barang dari kelas. Dll Dll Masalahnya masih terus terjadi ...

Jadi jika Anda melihatnya terjadi di G28, sebenarnya itu hal yang baik. Artinya, dampaknya juga. Ada kemungkinan ini tidak ada hubungannya dengan UBL dan UBL yang sakit hanyalah gejala.

Jadi jika Anda melihatnya terjadi di G28, sebenarnya itu hal yang baik. Artinya, dampaknya juga. Ada kemungkinan ini tidak ada hubungannya dengan UBL dan UBL yang sakit hanyalah gejala.

Itu pendapat / keyakinan saya, sekarang. Bukan UBL - muntah UBL hanyalah gejala. Mungkin salah, tapi ...

Saya sudah berulang kali mendefinisikan kelas objek UBL dan saya tidak melihat ada masalah.

FWIW, saya juga tidak melihat ada masalah di sana.

Saya baru saja membandingkan file Configuratioh.h dan Configuration_adv.h kami. Tentang satu-satunya hal yang kami miliki serupa adalah kami berdua memiliki probe BL-Touch. Selain itu ... kebanyakan barang berbeda. Panel LCD, End Stop Interrupts, Z-BabyStepping, Filament_Change_Sensor, dll ... Mesin kami tampaknya hanya berbagi konfigurasi BL-Touch.

Saya ingin tahu apakah kami harus memeriksa setiap dan semua perubahan BL-Touch selama 6 minggu terakhir ????

Satu hal yang dapat saya lakukan adalah kembali ke FolgerTech i3-2020 saya dan melihat apakah saya dapat membuat masalah tersebut muncul di sana. Itu memiliki servo dengan kaki probe, tetapi tidak ada BL-Touch. Itu mungkin poin data yang menarik.

UPDATE: Hal lain yang dapat saya lakukan adalah membatalkan deklarasi BL_Touch di gMax saya dan cukup mengatur sudut servo yang benar. Saya akan melepaskan deteksi status kesalahan dan mengatur ulang tetapi itu akan menjadi tes positif kontra yang sangat baik.

Saya ingin tahu apakah kami harus memeriksa setiap dan semua perubahan BL-Touch selama 6 minggu terakhir ????

Masuk akal bagiku ...

Akhiri Berhenti Interupsi,

Saya tidak menyadari interupsi endstop ada di RCBugFix; Saya tidak sepenuhnya memahami Configuration.h baru - cukup banyak hanya menggabungkan yang baru ke yang lama, memperbaiki konflik, dan mengompilasi. Rapi! Berharap untuk menggunakan itu setelah masalah ini diatasi.

Perubahan besar karena BLTouch adalah perubahan "deteksi terjamin".

Dengan interupsi endstop dimatikan maka stepper ISR dijalankan setidaknya setiap 2 mS. Saya menjalankan 200 langkah per unit jadi jika laju gerak makan di atas 150mm / menit maka ISR langkah berjalan lebih cepat dari 2mS.

Jika interupsi endstop aktif maka ISR stepper berjalan pada kecepatan normalnya dan satu ISR tambahan dijalankan saat endstop dicapai.

Perubahan lainnya adalah memanggil fungsi stop () ketika BLTouch tidak keluar dari status kesalahan. Sejauh yang saya tahu, fungsi berhenti sebenarnya tidak melakukan apa pun sampai semua gerakan stepper selesai. Ada beberapa penundaan lama tambahan saat melakukan percobaan ulang dan mencoba mengeluarkan pesan kesalahan.

Saya memaksakan batas waktu WDT tetapi Marlin tidak melaporkan mengapa harus disetel ulang.

Ya, mengatur ulang pengawas memungkinkan loop yang saya uji untuk berjalan selamanya, jadi sepertinya itu hanya wdt yang melakukan reset. Maaf karena tidak mengetahuinya lebih awal dan untuk setiap penyimpangan. Terima kasih, BtK.

Kembali mencari masalah lain ...

FYI: Saya tidak memiliki masalah dengan melakukan G29 P1 di cabang ini:
https://github.com/Tannoo/Marlin/tree/RGB_Printer_Events

Sekarang ada 7 penggabungan yang belum saya asimilasi ke dalam cabang saya (Saat ini berumur sekitar 1 hari). Mungkin ini akan membantu kalian.

Saya memiliki UBL yang bekerja sekarang. Mengurangi titik grid UBL menjadi 11 atau kurang 'memperbaiki' masalah crash / reset untuk saya.

check_for_free_memory_corruption () masih melaporkan memori yang rusak, tetapi tampaknya melakukan itu terlepas dari apakah objek ubl diakses / pada stack. Saya melihat posisi __heap_start, __brkval, penunjuk tumpukan, memori yang tersedia, dll., Dan semuanya tampak baik-baik saja, secara umum.

Akan melalui check_for_free_memory_corruption () sebentar lagi. Mungkin ada sesuatu di luar sana?

@Tannoo Saya mencari semua tangkapan layar yang Anda posting. Tapi saya tidak bisa menemukannya. Apakah Anda tahu di mana itu diposting ??? (Saya mencoba membuat beberapa cabang yang sangat berbeda!)

Saya memiliki UBL yang bekerja sekarang. Mengurangi titik grid UBL menjadi 11 atau kurang 'memperbaiki' masalah crash / reset untuk saya.

Saya rasa saya dapat mengonfirmasi ... Saya mulai dengan cabang Tannoo hanya karena dia mengatakan bahwa dia berfungsi dan saya mulai melewati pengaturan saya. Dengan grid 10x10 itu berhasil. Ketika saya menggantinya dengan ukuran 15x15, semuanya menjadi sangat sakit. Harus ada cukup memori untuk 15x15.

Tapi satu hal yang berubah adalah namanya

  #define GRID_MAX_POINTS_X 15      // Don't use more than 15 points per axis, implementation limited.
  #define GRID_MAX_POINTS_Y 15      // Don't use more than 15 points per axis, implementation limited.

Itu dilakukan untuk menggunakan nama umum di berbagai rasa meratakan tempat tidur. Mungkin ada beberapa definisi larik atau hal lain yang melakukan kesalahan dengan perubahan itu.

check_for_free_memory_corruption () masih melaporkan memori yang rusak, tetapi tampaknya melakukan itu terlepas dari apakah objek ubl diakses / pada stack. Saya melihat posisi __heap_start, __brkval, penunjuk tumpukan, memori yang tersedia, dll., Dan semuanya tampak baik-baik saja, secara umum.

Apakah area bebas berakhir sebagai beberapa blok dengan 'kebisingan' di tengahnya? Jika tidak, mungkin tidak masalah.

Akan melalui check_for_free_memory_corruption () sebentar lagi. Mungkin ada sesuatu di luar sana?

Rutinitas pemeriksaan tidak super mewah. Kebanyakan, itu hanya melakukan dua hal. Itu melihat apakah area bebas adalah satu bagian besar dan tidak ada yang 'merusak' di tengahnya. Hal lain yang dilakukannya adalah memastikan penunjuk tumpukan lebih besar dari ujung heap.

Apa sebenarnya yang dikeluhkan cek di sistem Anda?

Sementara itu ... Saya akan mengubah ubl.z_values ​​[] [] menjadi tidak menjadi bagian dari objek ubl. Saya hanya akan membuatnya menjadi global dengan nama ubl_z_values ​​[] []. Itu harus mengubah di mana semuanya berada di memori. Akan menarik untuk melihat apa yang mempengaruhi.

@bgort Hei !!! Dengan RCBugFix terbaru dan file Configuration.h terlampir ... Saya bekerja dengan baik dengan grid 15x15.

Saya memang perlu menangani beberapa masalah cakupan untuk Z-BabyStepping baru yang mengubah z_offset. Saya hanya mematikannya untuk UBL saat ini. Jika Anda Potong & Tempel ini ke ultra_lcd.cpp sangat mungkin sistem Anda akan bekerja pada 15x15. Saya akan sangat menghargai jika Anda dapat membandingkan file Configuration.h Anda dengan ini ... Dan beri tahu saya seberapa baik atau buruk hal-hal bekerja untuk Anda!


    #if HAS_BED_PROBE
      #ifndef AUTO_BED_LEVELING_UBL

      void lcd_babystep_zoffset() {
        if (lcd_clicked) { defer_return_to_status = false; return lcd_goto_previous_menu(); }
        defer_return_to_status = true;
        ENCODER_DIRECTION_NORMAL();
        if (encoderPosition) {
          const int babystep_increment = (int32_t)encoderPosition * (BABYSTEP_MULTIPLICATOR);
          encoderPosition = 0;

          const float new_zoffset = zprobe_zoffset + steps_to_mm[Z_AXIS] * babystep_increment;
          if (WITHIN(new_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {

            if (planner.abl_enabled)
              thermalManager.babystep_axis(Z_AXIS, babystep_increment);

            zprobe_zoffset = new_zoffset;
            refresh_zprobe_zoffset(true);
            lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
          }
        }
        if (lcdDrawUpdate)
          lcd_implementation_drawedit(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_zoffset));
      }
      #else
        void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEPPING_Z)); }
        void lcd_babystep_z() { lcd_goto_screen(_lcd_babystep_z); babysteps_done = 0; defer_return_to_status = true; }
      #endif
    #else // !HAS_BED_PROBE
      void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEPPING_Z)); }
      void lcd_babystep_z() { lcd_goto_screen(_lcd_babystep_z); babysteps_done = 0; defer_return_to_status = true; }
    #endif // HAS_BED_PROBE
  #endif //BABYSTEPPING

Configuration_adv-h.txt
Konfigurasi-h.txt

Saya mencari semua tangkapan layar yang Anda posting. Tapi saya tidak bisa menemukannya. Apakah Anda tahu di mana itu diposting ??? (Saya mencoba membuat beberapa cabang yang sangat berbeda!)

Untuk topografi tempat tidur? -> # 6105
Atau operasi desktop Git? Tidak dapat menemukan postingan, tetapi ini tangkapannya:
https://drive.google.com/open?id=0B560i8PeUNErTjk0Vk11cHFtaGM

Atau operasi desktop Git? Tidak dapat menemukan postingan, tetapi ini tangkapannya:

IYA!!! Langkah-langkah Git DeskTop untuk membuat cabang !!! Saya agak melakukannya dengan melakukan hal yang benar. Tetapi sepertinya setiap kali saya mencoba membuat cabang baru, ia membunuh (menggunakan kembali) direktori tempat cabang sebelumnya berada.

Ya, memang begitu. Jika saya ingin menyimpan cabang itu secara lokal, saya cukup menyalin direktori itu di tempat lain sebelum saya berpindah cabang.
Saya hanya membuat direktori baru untuk repo yang berbeda. Bukan cabang dari repo yang sama.

Ya, memang begitu. Jika saya ingin menyimpan cabang itu, saya cukup menyalin direktori itu ke tempat lain sebelum saya berpindah cabang.

Pertanyaan: Jika saya memutuskan untuk 'melakukan' semua perubahan saya ke cabang, apakah saya perlu menyalin direktori itu ke suatu tempat? Lain kali saya beralih ke cabang itu, itu akan mengembalikan semua yang ada di direktori itu ke apa yang saya lakukan, bukan?

Setelah melakukan ke sebuah cabang .... klik tombol sinkronisasi untuk "mengunggah" mereka ke repo Git Anda.

Anda kemudian dapat beralih ke cabang lain. Saat Anda beralih kembali ke cabang sebelumnya, komit Anda yang telah disinkronkan, akan ada di sana.

apakah saya perlu menyalin direktori itu di suatu tempat?

Hanya jika Anda ingin menyimpan salinan lokal.

Lain kali saya beralih ke cabang itu, itu akan mengembalikan semua yang ada di direktori itu ke apa yang saya lakukan, bukan?

Hanya jika Anda menyinkronkan terlebih dahulu.

Di Git Desktop,
Mengirimkan komit hanya melakukan itu ke salinan lokal dari cabang itu. Sinkronkan sebelum Anda beralih ke cabang lain. Atau komitmen lokal tersebut akan hilang.

@ Roxy-3D, apa perintah G29 itu untuk mendapatkan yang paling tidak cocok?

@ Roxy-3D, apa perintah G29 itu untuk mendapatkan yang paling tidak cocok?

Itu adalah G29 G 3 yang melakukan probe Grid 3 x 3 ... Tapi ada terlalu banyak dorongan untuk menggunakan 'Magic Letter' seperti G untuk Grid. Jadi sekarang perintahnya adalah 'J'. Tapi itu belum selesai. Saya dilacak dengan masalah korupsi data itu. Jika itu di belakangku ... Dalam beberapa hari ke depan, aku akan mendapatkan kotak terkecil yang pas untuk memiringkan jaringmu.

Untuk saat ini ... Jika Anda ingin memiringkan jaring, Anda harus menggunakan versi 3-Poin untuk melakukannya. Itulah G29 T

Baik.

@ Roxy-3D UBL benar-benar luar biasa, Roxy. Akhirnya sempat menyelesaikan pengaturannya, dan saya sangat terkesan.

Keluar dari gerbang (tes pertama):
2017-04-15 13 43 44
(abaikan lingkaran yang hilang di sudut - saya melakukannya setelah selesai - dicetak dengan sempurna)

Mengatakan bahwa saya senang adalah pernyataan yang meremehkan .... Hebat, kerja bagus.

Akan melihat rutinitas terkait M100 di sini sebentar lagi.

@bgort Hei !!! Dengan RCBugFix terbaru dan file Configuration.h terlampir ... Saya bekerja dengan baik dengan grid 15x15.

Hebat! Saya akan mencobanya dalam beberapa menit!

@bgort Hei !!! Dengan RCBugFix terbaru dan file Configuration.h terlampir ... Saya bekerja dengan baik dengan grid 15x15.

Hebat! Saya akan mencobanya dalam beberapa menit!

Sebenarnya ... Itu dengan file kemarin ... Hari ini, kerusakan data sudah kembali. Saya sangat menghargai bantuan apa pun yang dapat Anda tawarkan untuk menemukan masalahnya!

Tapi Terima Kasih atas komentarnya! :)

Sebenarnya ... Itu dengan file kemarin ... Hari ini, kerusakan data sudah kembali. Saya sangat menghargai bantuan apa pun yang dapat Anda tawarkan untuk menemukan masalahnya!

Saya baru saja memeriksa konfigurasi Anda dan perubahan terbaru untuk melihat apa yang mungkin bertanggung jawab, tetapi tidak menemukan apa pun. FWIW, menurut saya ide untuk menghapus z_values ​​dari objek ubl adalah ide yang bagus.

Saya menemukan utas ini mencari di google, karena saya juga mengalami masalah yang sama dengan OP. Ini akan melakukan G28 dan G29 akan dilewati. Melakukannya di Pronterface akan membacakan kesalahan ini
ubl.eeprom_start = -1
• Anda perlu mengaktifkan EEPROM Anda dan memulainya
dengan M502, M500, M501 dalam urutan itu.

EEPROM diaktifkan. Juga perbaikan RC8 terbaru saya, saya mengunduhnya kemarin terlambat pukul 11 ​​malam. Saya juga menjalankan BlTouch.

Masalah itu karena UBL mendeteksi struktur negara tidak koheren. Jika Anda melakukan M502, M500, M501 dan mengatur ulang ... Ini akan hilang.

Yang terbaru sebenarnya bekerja dengan ukuran 15x15 di sini. Mengisi matriks z_values ​​sekarang. Saya belum menerapkan perubahan ultra_lcd yang Anda sarankan di atas.

Jika Anda belum memulai, saya dapat memindahkan z_values ​​dari objek ubl? Tampak sangat lurus ke depan.

@bort

UBL benar-benar luar biasa, Roxy. Akhirnya sempat menyelesaikan pengaturannya, dan saya sangat terkesan.
Keluar dari gerbang (tes pertama):
(abaikan lingkaran yang hilang di sudut - saya melakukannya setelah selesai - dicetak dengan sempurna)
Mengatakan bahwa saya senang adalah pernyataan yang meremehkan .... Hebat, kerja bagus.

Anda perlu menggunakan Interactive Mesh Editor untuk mendapatkan pola validasi untuk mencetak yang bagus, bukan? Berapa banyak iterasi G26 dan G29 P4 yang diperlukan untuk mendapatkan mesh yang bagus?

Bisakah Anda dibujuk untuk memposting mesh Anda? Saya ingin tahu jenis ketidaksempurnaan apa yang diperangi orang. Saya pergi ke toko Dollar untuk mendapatkan pecahan kaca terburuk yang bisa saya temukan supaya sistemnya stres.

Akan melihat rutinitas terkait M100 di sini sebentar lagi.

Saya bersiap untuk mengambil langkah lain pada korupsi data. Seperti yang saya katakan ... Bantuan apa pun akan sangat dihargai!

Anda perlu menggunakan Interactive Mesh Editor untuk mendapatkan pola validasi untuk mencetak yang bagus, bukan?

Tidak, ini langsung setelah G29 P1, lalu G29 P2 B untuk mengisi celah (hanya ada 11 yang tidak bisa).

Bisakah Anda dibujuk untuk memposting mesh Anda? Saya ingin tahu jenis ketidaksempurnaan apa yang diperangi orang. Saya pergi ke toko Dollar untuk mendapatkan pecahan kaca terburuk yang bisa saya temukan supaya sistemnya stres.

Saya cukup datar, jadi tidak banyak stres.

Inilah jaring saya:

Recv: Bed Topography Report:
Recv: 
Recv: (0,10)                                                                                                                (10,10)
Recv: (0,0)                                                                                                            (237,308)
Recv:  -0.091   -0.087   -0.113   -0.086   -0.153   -0.174   -0.156   -0.175   -0.164   -0.199   -0.210
Recv: 
Recv:  -0.069   -0.056   -0.061   -0.093   -0.113   -0.084   -0.095   -0.140   -0.143   -0.163   -0.160
Recv: 
Recv:  -0.035   -0.045    0.011   -0.054   -0.039   -0.049   -0.075   -0.069   -0.099   -0.099   -0.089
Recv: 
Recv:   0.006   -0.003   -0.011    0.011   -0.003   -0.036   -0.038   -0.040   -0.065   -0.060   -0.053
Recv: 
Recv:   0.022    0.021    0.019    0.012    0.022   -0.009   -0.004   -0.005   -0.006   -0.030   -0.013
Recv: 
Recv:   0.017    0.044    0.011    0.024    0.000    0.001    0.011    0.002   -0.018   -0.028   -0.024
Recv: 
Recv:   0.045    0.015    0.029   -0.006    0.039    0.035    0.024    0.026    0.035   -0.008   -0.009
Recv: 
Recv:   0.026    0.055    0.019   -0.015    0.022    0.004    0.029    0.011    0.004    0.009    0.017
Recv: 
Recv:  -0.021   -0.035   -0.029   -0.031   -0.041   -0.036   -0.053   -0.024   -0.029   -0.024    0.001
Recv: 
Recv:  -0.034   -0.014   -0.059   -0.059   -0.058   -0.048   -0.060   -0.044   -0.051   -0.044   -0.023
Recv: 
Recv: [-0.090]  -0.050   -0.040   -0.050   -0.060   -0.020   -0.050   -0.050   -0.040   -0.020    0.010
Recv: (0,0)                                                                                                                (237,0)
Recv: (0,0)                                                                                                                   (10,0)
Recv: ok

Wow! Itu sangat bagus!

Saya cukup senang dengan itu. Ini diratakan K100S (aluminium cor / perkakas) dengan selembar PEI. Tidak cukup perataan yang saya bayarkan (seharusnya +/- 0,001 "- 25,4um), tetapi jauh lebih baik daripada yang saya miliki sebelumnya.

15x15 tampaknya berfungsi dengan baik di sini sekarang:

Recv: Bed Topography Report:
Recv: 
Recv: (0,14)                                                                                                                                                                (14,14)
Recv: (0,0)                                                                                                                                                            (237,308)
Recv: [-0.021]  -0.023   -0.020   -0.024   -0.033   -0.104   -0.111   -0.086   -0.105   -0.141   -0.153   -0.163   -0.179   -0.170   -0.166
Recv: 
Recv:  -0.024    0.002   -0.026   -0.039   -0.019   -0.048   -0.076   -0.075   -0.093   -0.095   -0.121   -0.139   -0.129   -0.115   -0.124
Recv: 
Recv:   0.034    0.015    0.017    0.007   -0.034    0.025   -0.045   -0.074   -0.036   -0.066   -0.077   -0.031   -0.075   -0.064   -0.081
Recv: 
Recv:   0.031    0.048    0.040    0.045    0.046   -0.004   -0.024   -0.035    0.026   -0.061   -0.071   -0.055   -0.046   -0.048   -0.020
Recv: 
Recv:   0.101    0.089    0.060    0.029    0.071    0.043    0.024    0.014    0.019    0.017    0.005   -0.003   -0.013   -0.043   -0.001
Recv: 
Recv:   0.092    0.092    0.059    0.095    0.044    0.072    0.039    0.030    0.085    0.076    0.077    0.021    0.027    0.009    0.005
Recv: 
Recv:   0.086    0.056    0.086    0.040    0.076    0.104    0.065   -0.001    0.056    0.054   -0.008    0.072    0.065    0.020    0.027
Recv: 
Recv:   0.087    0.061    0.074    0.087    0.051    0.086    0.063    0.064    0.063    0.029    0.037    0.020   -0.004    0.071    0.036
Recv: 
Recv:   0.045    0.069    0.032    0.079    0.059    0.029    0.079    0.094    0.061    0.082    0.045    0.058    0.039    0.087    0.060
Recv: 
Recv:   0.061    0.089    0.035    0.101    0.069    0.053    0.079    0.096    0.087    0.102    0.060    0.060    0.075    0.075    0.094
Recv: 
Recv:   0.044    0.067    0.061    0.095    0.034    0.075    0.037    0.051    0.040    0.048    0.049    0.051    0.051    0.074    0.080
Recv: 
Recv:   0.009    0.025    0.027   -0.008    0.044    0.012    0.050    0.017   -0.006    0.014    0.021    0.021    0.020    0.049    0.056
Recv: 
Recv:   0.020    0.004    0.019    0.009   -0.021    0.058    0.000   -0.040    0.019    0.050    0.061    0.009    0.020    0.019    0.026
Recv: 
Recv:  -0.040   -0.010   -0.040   -0.020   -0.020   -0.030   -0.010    0.000   -0.010   -0.010   -0.020    0.020   -0.010   -0.010    0.030
Recv: 
Recv:  -0.070   -0.070   -0.020   -0.040   -0.010   -0.050   -0.010   -0.020   -0.020   -0.020    0.010   -0.010    0.000    0.020    0.020
Recv: (0,0)                                                                                                                                                                (237,0)
Recv: (0,0)                                                                                                                                                                   (14,0)      

2017-04-15 16 27 51

Hanya beberapa titik buruk kecil yang perlu saya pilah cara memperbaikinya. (Saya merusak bagian sudut dengan melepas gumpalan utama, lagi.)

Hanya beberapa titik buruk kecil yang perlu saya pilah cara memperbaikinya.

Pindahkan saja nozel di atas area yang membutuhkan penyesuaian, dan berikan G29 P4 R Dan ketika Anda telah mengedit semua poin mesh yang bermasalah ... Tekan dan tahan Roda Encoder dan pindahkan nozel ke area berikutnya.

Jangan lupa untuk menyimpan tautan yang diperbarui! Dan Anda dapat menyimpannya di lokasi baru untuk menyimpan yang lama sebagai cadangan.

Hai Roxy, Terima kasih atas bantuannya sebelumnya. Sekarang saya bertanya-tanya bagaimana Anda mengaktifkan mesh setelah G28 sehingga bisa digunakan.

Dengan asumsi Anda telah memuat mesh yang ingin Anda gunakan, Anda cukup melakukan G29 A.
Dan Anda dapat menggabungkan perintah. Anda dapat memuat dan mengaktifkan mesh dengan G29 L1 A.
Dan jika Anda memiliki mesh yang ingin digunakan, Anda dapat mengaktifkannya, lalu menyimpannya dengan G29 S 1
Sistem akan secara otomatis memuat dan memulihkan status mesh yang terakhir disimpan.

Masih tidak menemukan apa pun tentang masalah memori.

Namun, menemukan masalah kecil dengan padding ubl_state: https://github.com/MarlinFirmware/Marlin/pull/6361

Saya mengalami masalah. Saya mengaturnya ke 15 poin dan mendapatkan memori rendah yang tersedia, masalah stabilitas dapat terjadi. Jadi sesuatu terjadi saat melakukan leveling mesh. Saya memiliki hotend dan tempat tidur didinginkan, dan saya perhatikan saya mendapatkan kesalahan: printer dihentikan, kill () dipanggil! . Jadi beralih kembali ke 10 poin dan saya bisa menyelesaikan probing mesh. Jadi saya mencoba 15 poin lagi dan mendapatkan kesalahan yang sama. Tapi saya tidak tahu apa penyebabnya, jadi kali ini saya coba lagi dan perhatikan. Jadi saya melihat ke LCD dan hotend diatur secara otomatis untuk memanaskan hingga 500c dan tempat tidur ke 80c. Saya mematikannya dan segera setelah saya melihat suhunya sekitar 225 itu panas. Saya belum menyuruh printer untuk memanaskan, itu hanya melakukan penyamarataan mesh dingin.

Ya ... Aku juga pernah melihatnya. Objek temperatur mendapatkan datanya rusak. Ia hanya mencoba melakukan apa yang ia ingat seharusnya dilakukan.

Jadi, bukankah printer saya bertingkah. Saya telah memeriksa kabel dan semuanya tampak bagus. Hanya waktu saya melihat kesalahan beralih ke 15 poin dari 10. Tidak tahu apakah karena 15 poin probing membutuhkan waktu lebih lama dari 10 poin probing yang mulai memanas dan membunuh pemanasan untuk mencegah suhu berlebih.

Jadi saya menemukan banyak utas tentang masalah ini dan untuk memperbaiki nilai saya, saya tidak memiliki pengaturan suhu dan Hotend mulai memanas hingga 500c dan tempat tidur sebenarnya -80c secara otomatis di tengah leveling mesh 15 titik. Saya belum memperhatikan ini dengan 10 poin dengan waktu saya menjalankannya hari ini. Setiap kali saya menjalankan 15 titik mesh itu membunuh tindakan.

Hanya waktu saya melihat kesalahan beralih ke 15 poin dari 10. Tidak tahu apakah karena 15 poin probing membutuhkan waktu lebih lama dari 10 poin probing yang mulai memanas dan membunuh pemanasan untuk mencegah suhu berlebih.

Tidak. 15x15 adalah ukuran memori yang jauh lebih besar daripada 10x10. Ini memindahkan beberapa data penting lainnya (seperti apa yang seharusnya suhu hotends dan tempat tidur) ke area target untuk apa pun yang menyebabkan korupsi data ini.

Taruhan saya adalah jika Anda mengganti skema perataan tempat tidur dan meningkatkan ukuran jaring Bi-Linear menjadi 15x15 dan menambahkan beberapa BILINEAR_SUBDIVISIONS, Anda akan melihat hal-hal acak (serupa) lainnya terjadi.

Apakah ubl 15x15 menginjak lokasi memori dari tempuratures?

Sudahkah Anda mencoba 14x14?

Akan mencoba di pagi hari. Berharap kita bisa menyelesaikannya. Cintai pekerjaan yang dilakukan semua orang. Terutama Roxy yang sudah membantu saya sejak 2014.

Apakah ubl 15x15 menginjak lokasi memori dari tempuratures?

Saya rasa tidak. Tapi 15 x 15 cukup besar sehingga mendorong potongan data penting (seperti suhu target hotend) ke zona ledakan. Saya pikir itu acak yang terkena korupsi. Saya telah melihat buffer komunikasi serial dipukul dengan 'noise'.

Pemikiran acak di sini: Jika kita menyimpan z_values ​​sebagai mikron deviasi dari nol sebagai bilangan bulat 16-bit bertanda, kita akan menghemat kira-kira setengah memori vs. float. Saya belum yakin bagaimana koreksi mesh / z dihitung atau diterapkan, tetapi curiga mungkin ada beberapa siklus matematika tambahan jika kita melakukan ini?

Bagaimanapun, tidak yakin apakah ide ini praktis atau tidak (atau jika sudah dipertimbangkan), tetapi mungkin akan menyelesaikan masalah memori hanya dengan mengurangi penggunaan.

Bagaimanapun, tidak yakin apakah ide ini praktis atau tidak (atau jika sudah dipertimbangkan), tetapi mungkin akan menyelesaikan masalah memori hanya dengan mengurangi penggunaan.

Iya. Saya setuju. Tetapi menemukan alasan mengapa memori menjadi rusak adalah 'Jawaban Terbaik' dari perspektif Stabilitas Marlin. Saya semakin yakin UBL tidak melakukan ini. Tapi itu memungkinkan apa pun yang menyebabkan korupsi. Saya kira kita tidak akan tahu bahwa itu benar sampai kita menemukan akar masalahnya.

Tapi kembali ke ide Anda. Saya tidak yakin kita bahkan membutuhkan 2 byte integer. Karakter bertanda tangan akan memberi kita perpindahan +/- 1,28 mm dari jaring 'Sempurna 0.000 mm'. Dan memiliki perincian (atau akurasi) 0,01 mm pada setiap titik jala mungkin baik-baik saja untuk printer masa kini.

Matematika ekstra tidak terlalu buruk. Bergantung pada bagaimana faktor Koreksi-Z dikodekan, mungkin kita bahkan dapat melakukan interpolasi Bi-Linear menggunakan matematika integer. Tapi pada kasus terburuk, menggunakan brute force, kami akan melemparkan empat sudut sel mesh ke (float), melakukan matematika, dan kemudian mengalikan dengan 0,01 di akhir (dalam kasus karakter bertanda) untuk menyingkirkan ekstra dua digit.

Dengan beberapa keanggunan yang merayap ... Ini bisa dipilih pengguna apakah mereka menggunakan nomor 1 byte atau 2 byte untuk setiap nilai titik mesh. Jika tempat tidur mereka cukup datar sehingga dapat direpresentasikan dengan 1 byte mesh point, itu akan baik-baik saja. Tetapi jika mereka mengaktifkan poin mesh 2 byte, setiap poin mesh dapat mengoreksi hingga +/- 32.767mm dan itu akan memberikan akurasi .001mm. Mungkin, jika salah satu skema kemiringan mesh diaktifkan (seperti 3-titik atau kisi) Anda akan menginginkan nilai 2 byte karena jika tidak, Anda akan berada dalam bahaya meluap ...

Apakah Anda ingin melakukan pengkodean ????

Tetapi menemukan alasan mengapa memori menjadi rusak adalah 'Jawaban Terbaik' dari perspektif Stabilitas Marlin. Saya semakin yakin UBL tidak melakukan ini. Tapi itu memungkinkan apa pun yang menyebabkan korupsi. Saya kira kita tidak akan tahu bahwa itu benar sampai kita menemukan akar masalahnya.

Oh, saya setuju. Terbaik untuk menemukan dan memperbaiki apa pun masalah sebenarnya, jika memungkinkan. Sebagian besar hanya berpikir keras tentang cara-cara menghemat memori dan mengatasi masalah, jika itu memang diperlukan.

Saya masih belum menemukan apa pun. Saya telah melihat tumpukan, tumpukan, dan semua alamat relevan lainnya; di dalam G29 ada -harus- tidak ada masalah. Ada banyak ruang antara heap dan tumpukan untuk objek ubl.

FWIW, menurut saya masih tidak ada yang salah dengan UBL; Sepertinya ini hanya masalah yang berhubungan dengan memori. Sepertinya tidak ada kelelahan atau tabrakan tumpukan, tapi saya tidak tahu kemungkinan lain apa. Kompiler senang dengan semuanya, inspeksi visual tidak menghasilkan apa-apa, dll. Hal itu meninggalkan masalah runtime, dan satu-satunya masalah runtime yang masuk akal adalah alokasi memori yang 'tidak tepat'.

Yang benar-benar aneh adalah hal itu tampaknya terjadi secara semi-acak. Saya tahu ada debugger untuk Arduino di luar sana, meskipun saya belum pernah mencobanya; sudahkah kamu Tidak yakin apakah itu akan berhasil dengan Marlin atau bahkan dapat membantu dengan masalah seperti ini.

Tapi kembali ke ide Anda. Saya tidak yakin kita bahkan membutuhkan 2 byte integer. Karakter bertanda tangan akan memberi kita perpindahan +/- 1,28 mm dari jaring 'Sempurna 0.000 mm'. Dan memiliki perincian (atau akurasi) 0,01 mm pada setiap titik jala mungkin baik-baik saja untuk printer masa kini.

Saya setuju. Saya pikir presisi mikron akan ideal dan int 16-bit adalah yang terbaik, tetapi Anda benar bahwa itu sebenarnya tidak perlu; 8 bit akan cukup untuk sebagian besar kasus penggunaan.

Saya masih belum menemukan apa pun. Saya telah melihat tumpukan, tumpukan, dan semua alamat relevan lainnya; di dalam G29 ada -harus- tidak ada masalah. Ada banyak ruang antara heap dan tumpukan untuk objek ubl.

@thinkyhead menunjukkan cara mendapatkan tabel simbol dan pembongkaran semua kode. Tahukah Anda tentang ini: https://github.com/MarlinFirmware/Marlin/pull/6354#issuecomment -294700312

Dengan itu ... Kita bisa mendapatkan lokasi yang tepat dari semua yang ada di gambar firmware. Dan lihat kode yang dibongkar. Jadi sekarang, jika saya bisa mendapatkan bingkai tumpukan palsu lain untuk muncul di tengah area memori bebas atau di penyangga komunikasi ... Mungkin mungkin untuk melepas tumpukan dan melihat apa yang sedang terjadi ...

FWIW, menurut saya masih tidak ada yang salah dengan UBL; Sepertinya ini hanya masalah yang berhubungan dengan memori. Sepertinya tidak ada kelelahan atau tabrakan tumpukan, tapi saya tidak tahu kemungkinan lain apa. Kompiler senang dengan semuanya, inspeksi visual tidak menghasilkan apa-apa, dll. Hal itu meninggalkan masalah runtime, dan satu-satunya masalah runtime yang masuk akal adalah alokasi memori yang 'tidak tepat'.

Saya setuju ... Ini bukan UBL, tetapi UBL memindahkan banyak hal dalam memori sehingga kami melihat masalahnya. Sebenarnya ... Melihat peta tautan dan tabel simbol ... Saya ingin tahu apakah itu sesuatu yang lain. Di depan peta tautan Anda akan melihat:

SYMBOL TABLE:
00800200 l    d  .data  00000000 .data
00000000 l    d  .text  00000000 .text
0080036c l    d  .bss   00000000 .bss
00000000 l    d  .comment   00000000 .comment
00000000 l    d  .note.gnu.avr.deviceinfo   00000000 .note.gnu.avr.deviceinfo
00000000 l    d  .debug_aranges 00000000 .debug_aranges
00000000 l    d  .debug_info    00000000 .debug_info
00000000 l    d  .debug_abbrev  00000000 .debug_abbrev
00000000 l    d  .debug_line    00000000 .debug_line
00000000 l    d  .debug_frame   00000000 .debug_frame
00000000 l    d  .debug_str 00000000 .debug_str
00000000 l    d  .debug_loc 00000000 .debug_loc
00000000 l    d  .debug_ranges  00000000 .debug_ranges
00000000 l    df *ABS*  00000000 
0000003e l       *ABS*  00000000 __SP_H__
0000003d l       *ABS*  00000000 __SP_L__
0000003f l       *ABS*  00000000 __SREG__
0000003b l       *ABS*  00000000 __RAMPZ__
00000000 l       *ABS*  00000000 __tmp_reg__
00000001 l       *ABS*  00000000 __zero_reg__
00800204 l     O .data  00000001 soft_endstops_enabled
000001f8 l     O .text  0000001b _ZZ27prepare_move_to_destinationvE3__c
000001d9 l     O .text  0000001f _ZZ27prepare_move_to_destinationvE3__c_0

Saya tahu pasti, Stack Pointer sedang berubah. Bagaimana itu bisa terjadi? Nah, lihat alamat 0x3e dan 0x3d dari peta tautan. Apakah penunjuk tumpukan sebenarnya bukan register internal pada AVR? Apakah disimpan dalam memori? Jika demikian ... Pointer yang buruk mungkin menimpa barang-barang di dekat NULL (0x00000) dan memalu Stack Pointer. Dan itu akan menjelaskan semua hal lain yang telah kita lihat.

Yang benar-benar aneh adalah hal itu tampaknya terjadi secara semi-acak. Saya tahu ada debugger untuk Arduino di luar sana, meskipun saya belum pernah mencobanya; sudahkah kamu Tidak yakin apakah itu akan berhasil dengan Marlin atau bahkan dapat membantu dengan masalah seperti ini.

Saya ingin sekali memiliki In Circuit Emulator. Saya tahu Atmel menjual satu. Dan Anda dapat membeli alat USB kecil di eBay untuk digunakan dengannya. http://www.ebay.com/itm/AVR-JTAG-USB-emulator-Debugger-download-AVR-JTAG-ICE-Download-Programmer-atmega/152209769313?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D2220072% 26algo% 3DSIC.MBE% 26ao% 3D2% 26asc% 3D41811% 26meid% 3D9b9010ca55224b31b10d6383d87003da% 26pid% 3D100005% 26rk% 3D1% 26rkt% 3D6% 26sd% 3D371919571425 Ini menunjukkan CD juga seharga $ 8!

Ini satu untuk $ 3,00 tetapi tanpa CD: http://www.ebay.com/itm/AVR-JTAG-AVR-USB-Emulator-Simulator-Debugger-Programmer-JTAG-ICE-for-Atmel-/371919571425?hash= item56982249e1 : g: gFEAAOSwmgJY7 ~ UI

Saya ingin tahu apakah ini semua ada hubungannya dengan Debugging Sirkuit? Saya tidak yakin apa yang harus dilakukan untuk menggunakannya di papan Atmega, tetapi pasti akan menyenangkan menjalankan debugger perangkat keras!

@thinkyhead menunjukkan cara mendapatkan tabel simbol dan pembongkaran semua kode. Tahukah Anda tentang ini: # 6354 (komentar)

Tidak, saya tidak melihat itu dan tidak mengetahuinya. Akan mengulas sekarang. Tampak sangat keren. Terima kasih!

Saya ingin sekali memiliki In Circuit Emulator. Saya tahu Atmel menjual satu. Dan Anda dapat membeli alat USB kecil di eBay untuk digunakan dengannya. http://www.ebay.com/itm/AVR-JTAG-USB-emulator-Debugger-download-AVR-JTAG-ICE-Download-Programmer-atmega/152209769313?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D2220072% 26algo% 3DSIC.MBE% 26ao% 3D2% 26asc% 3D41811% 26meid% 3D9b9010ca55224b31b10d6383d87003da% 26pid% 3D100005% 26rk% 3D1% 26rkt% 3D6% 26sd% 3D371919571425

Ini menunjukkan CD juga seharga $ 8! Ini satu untuk $ 3,00 tetapi tanpa CD: http://www.ebay.com/itm/AVR-JTAG-AVR-USB-Emulator-Simulator-Debugger-Programmer-JTAG-ICE-for-Atmel-/371919571425?hash= item56982249e1 : g: gFEAAOSwmgJY7 ~ UI

Saya ingin tahu apakah ini semua ada hubungannya dengan Debugging Sirkuit? Saya tidak yakin apa yang harus dilakukan untuk menggunakannya di papan Atmega, tetapi pasti akan menyenangkan menjalankan debugger perangkat keras!

Saya baru saja menghabiskan 20 menit terakhir melihat berbagai ICE / debugger dan mungkin saja mengambil ICE ATMEL - saya harus dapat men-debug / memprogram MCU Cortex untuk proyek yang akan datang, dan sepertinya memang demikian hampir semuanya. EDIT: Annnd .. Saya baru saja memesan satu.

Saya baru saja menghabiskan 20 menit terakhir melihat berbagai ICE / debugger dan mungkin saja mengambil JTAG ICE - saya harus dapat men-debug / memprogram MCU Cortex untuk proyek yang akan datang, bagaimanapun, dan tampaknya memang demikian hampir semuanya.

Bahkan jika saya harus menyolder kabel ke papan Atmega-2560 ... Saya tidak peduli! Aku akan melakukannya! Tetapi akan sangat membantu untuk memiliki daftar periksa yang mengatakan:

  • Beli adaptor ini dari eBay
  • unduh dan instal perangkat lunak ini
  • solder kabel-kabel ini ke konektor dan buat terlihat seperti ini.
  • ubah opsi Arduino Anda untuk menambahkan info GDB dengan melakukan ini ...
  • dll.

Bahkan jika saya harus menyolder kabel ke papan Atmega-2560 ... Saya tidak peduli! Aku akan melakukannya!

Ya - menyelidiki sekarang.

Benang yang layak:

Tetapi akan sangat membantu jika memiliki daftar periksa yang mengatakan: ...

Saya setuju, itu akan bagus. Saya akan memposting di sini tentang apa yang saya pelajari dan semoga kita dapat membuat sesuatu bersama.

Sepertinya ini adalah pin yang diperlukan untuk JTAG di 2560:

  • TDO - PF6 (A6 dalam bahasa Arduino)
  • TCK - PF4 (A4)
  • TDI - PF7 (A7)
  • TMS - PF5 (A5)
  • Vsense (+ 5V) & GND

2560 pinmap: https://www.arduino.cc/en/uploads/Hacking/PinMap2560big.png

Cukup yakin semua ini gratis di RAMBo saya dan memiliki header; menebak saya hanya perlu memasang konektor / kabel / adaptor. Akan memposting langkah demi langkah di sini.

Pemetaan pin RAMBo: http://reprap.org/wiki/Rambo_development

Anda memiliki A7 terdaftar dua kali ... Dan saya tidak dapat menemukan A7 sekali pun di papan RAMPS v1.4. Mungkin ekor babi ICE harus disolder ke papan Atmega-2560? (Tapi A4 dan A5 dengan mudah tersedia di papan RAMPS v1.4!)

Maaf tentang itu - saya salah mengetik dan memperbaikinya. PF6 = A6, PF7 = A7.

Melihat skematiknya, saya melihat A6 dan A7 digunakan untuk Y-STEP dan Y-DIR? Kekecewaan.

http://reprap.org/mediawiki/images/f/f6/RAMPS1.4schematic.png

A6 adalah Y-Step dan A7 adalah Y-Dir. Jadi ... Sinyal tersebut harus dipetakan ulang ke beberapa pin lain dan file Pin RAMPS diubah untuk membuatnya berfungsi. Tapi sangat bisa !!!! Akan lebih bersih jika sinyal-sinyal itu ada pada pin yang tidak digunakan ... Tapi tetap saja .... Untuk mendapatkan debugger perangkat keras akan sangat bagus!

Salah satu idenya adalah dengan mencabut stik Y-Axis dan memetakan pergerakan Y-Axis ke ekstruder ke-2. Melakukan itu akan memotong banyak penyolderan ....

(Jelas ... kami memikirkan hal yang sama!)

Salah satu idenya adalah dengan mencabut stik Y-Axis dan memetakan pergerakan Y-Axis ke ekstruder ke-2. Melakukan itu akan memotong banyak penyolderan ....

Itulah yang saya pikirkan - jika Anda tidak menggunakan ekstruder kedua, cukup peta ulang Y untuk itu. Masalah terpecahkan, kurang lebih.

Saya berharap Anda menggunakan Atmega-2560 dengan papan RAMPS. Dengan cara itu kita bisa memunculkan sistem yang identik.

RAMBo adalah Atmega2560. Kami akan menjalankan pengaturan yang sangat mirip - hanya terhubung ke pin yang berbeda.

Saya memiliki peletakan ini di sini .. menggunakannya untuk membangun robot kartesius untuk memposisikan spektrofotometer. Mudah-mudahan bisa mulai dalam seminggu atau lebih. Hanya perlu menyelesaikan desain.

https://www.amazon.com/gp/product/B01FVTQQ2K

Cukup dekat dengan apa yang Anda gunakan, saya bayangkan?

RAMBo adalah Atmega2560. Kami akan menjalankan pengaturan yang sangat mirip - hanya terhubung ke pin yang berbeda.

Oh begitu. RAMPS adalah papan addon untuk Mega2560. Maafkan ketidaktahuan saya!

Ya ... Papan RAMPS dipasang di atas papan prosesor Atmega-2560. Dan kemudian semua papan tongkat kecil dan papan Antarmuka LCD dihubungkan ke papan RAMPS. Tapi secara elektrik ... kita tidak akan jauh berbeda. Dan saya curiga akan jelas jika alat USB-AVR-ICE dapat menghubungkan perangkat lunak debugging ke chip prosesor.

Ya, secara elektrik kita harus benar-benar mirip - kurang lebih identik jika Anda dapat menarik papan driver stepper Y sepenuhnya. Maka Anda hanya perlu perakitan pigtail / kabel.

Saya memesan milik saya dari Mouser jadi harusnya ada di sini nanti di minggu yang saya bayangkan .. mungkin Kam. atau Fri. Mereka biasanya sangat cepat.

Apa sebenarnya yang kamu pesan? Jika tidak lebih dari yang tersedia di eBay ... Saya akan memesan barang yang sama.

http://www.mouser.com/Search/ProductDetail.aspx?qs=KLFHFgXTQiDAUrt43H15kQ%3D%3D

Ini sedikit lebih banyak, tetapi saya membutuhkan kemampuan debugging Cortex di masa depan dan sepertinya unit yang dirancang dengan baik, jadi itu sepadan bagi saya.

Sebenarnya, jika Anda menginginkannya, saya dapat membayar melalui PayPal - pekerjaan Anda di UBL dan Marlin secara umum sangat membantu saya. Senang berkontribusi pada apa yang Anda lakukan.

Beri tahu saya jika itu menarik - hanya perlu alamat email PayPal atau cara untuk mengirimkan uang kepada Anda.

Saya rasa saya bisa bertahan dengan alat USB eBay! Tapi terima kasih sudah menawarkan!

Dengan asumsi kita bisa menjalankan antarmuka perangkat keras ... (Dan sepertinya itu tidak terlalu sulit untuk dipahami dan dicapai ...) Pertanyaan selanjutnya adalah perangkat lunak apa yang akan digunakan. Di direktori Arduino ada dua program. Ada Arduino.exe yang kita semua tahu apa fungsinya. Tetapi ada juga program Arduino_debug.exe. Itu mungkin sesuatu yang kita pedulikan.

Tetapi juga ... JustAnother1 merekomendasikan untuk melihat di: http://openocd.org/ Itu mungkin program host yang bagus untuk debugging. Idealnya ... Kami berakhir dengan sesuatu yang memiliki tabel simbol lengkap dan kemampuan untuk mengatur break point pada akses (eksekusi, membaca, atau menulis) ke lokasi memori tertentu. Dengan itu ... Segalanya akan jauh lebih sederhana.

Tidak masalah!

Sekarang saya menggunakan platformio pada RPi3 untuk kompilasi & flash.

Saya berencana menggunakan Atmel Studio untuk ini, tetapi openocd terlihat menarik. Tidak yakin apakah itu akan bekerja dengan apa yang baru saja saya beli. EDIT: Memang.

Apa yang akan Anda dapatkan di eBay?

Sepertinya semua gizmo USB sangat mirip. Saya berpikir untuk mendapatkan yang dengan CD tetapi tidak mengatakan itu mendukung prosesor Atmega-2560. Dugaan saya apakah itu mendukungnya. Tetapi karena itu, saya hanya akan mendapatkan salah satu dari yang lain. Dan saya pikir CD itu hanya memiliki Atmel Studio v. 4 di dalamnya. Jika demikian ... CD sebenarnya tidak memiliki nilai apa pun.

Kena kau. Jika menurut Anda memiliki pengaturan debugger / ICE yang serupa akan membantu, beri tahu saya yang mana yang akan Anda dapatkan dan saya akan mengambilnya juga (selama tidak terlalu mahal).

Saat ini saya menawar lelang yang berakhir dalam 25 menit. Tapi ini sama dengan apa yang saya harapkan untuk 'Menang'. www.ebay.com/itm/AVR-JTAG-AVR-USB-Emulator-Simulator-Debugger-Programmer-JTAG-ICE-for-Atmel-/121325165606?hash=item1c3f8b1c26 : g: HmUAAOSwrklVEOWL seharga $ 6,00

Saya akan memberi tahu Anda jika saya 'Menang' pelelangan! Dan siapa tahu mereka mungkin memasang satu sama lain sehingga Anda bisa mendapatkannya seharga $ 3,00! Oh! Mereka sudah memiliki satu lagi untuk dilelang dengan harga $ 3,00. Lihat:

http://www.ebay.com/itm/AVR-JTAG-AVR-USB-Emulator-Simulator-Debugger-Programmer-JTAG-ICE-for-Atmel/352032621803?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007% 26algo% 3DSIC.MBE% 26ao% 3D2% 26asc% 3D41811% 26meid% 3D0c9632f6a89e4317adcf8e562f0c64b6% 26pid% 3D100005% 26rk% 3D2% 26rkt% 3D6% 26sd% 3D371919571425

Sedikit khawatir dengan satu-satunya ulasan yang mengatakan itu tidak berhasil. Tidak yakin apakah itu sah atau tidak, tetapi saya sudah berkali-kali dibakar oleh barang-barang Cina ....

Sedikit khawatir dengan satu-satunya ulasan yang mengatakan itu tidak berhasil. Tidak yakin apakah itu sah atau tidak, tetapi saya sudah berkali-kali dibakar oleh barang-barang Cina ....

Ya ... Aku mendengarmu !!!! Tapi ... sepertinya ada 3 desain alat USB yang berbeda di eBay di mana Anda dapat melihat chipnya. Semuanya memiliki 2 kristal. Dan mereka semua memiliki paket datar persegi dengan chip lain di papan tulis. Dugaan saya adalah Atmel melakukan 'Desain Referensi' dan itulah yang dijual oleh perusahaan China tiruan ini.

Tentu saja, saya tidak tahu itu ... Tapi dalam pelelangan yang saya tawarkan, tertulis 137 terjual. 1 ulasan mengatakan "Saya tidak membuatnya bekerja." dan kita sudah tahu bahwa kita perlu memindahkan tongkat langkah pada papan RAMPS sebenarnya cukup nyaman ... Dan ... Selama seseorang tidak menawar lebih tinggi ... Saya mampu membayar $ 3,00 untuk melihat apakah itu berhasil! :)

Ya, saya mendengarmu! Saya hanya paranoid karena saat ini saya berurusan dengan pengembalian barang yang saya beli dari sana. Mereka semua curiga sekarang ...

$ 3 bukanlah pertaruhan! 👍

Ya, saya mendengarmu! Saya hanya paranoid karena saat ini saya berurusan dengan pengembalian barang yang saya beli dari sana. Mereka semua curiga sekarang ...

Ya ... Ada banyak barang elektronik BS yang berasal dari China di eBay. Terutama hal-hal seperti kartu SD-Memory dan USB Flash drive. Seluruh strategi mereka adalah biaya untuk mengirim sesuatu kembali dengan pelacakan yang sangat tinggi, tidak ada gunanya. Tetapi pengiriman kepada Anda 'gratis'. (Ini benar-benar disubsidi oleh pemerintah.)

Baiklah ... Saya bangga menjadi pemilik alat ICE AVR China yang 'belum dikirim' ... Jika Anda menggunakan salah satu tautan di atas, Anda dapat menawar untuk hal yang persis sama.

Ya. Saya selalu mencoba memaksa mereka untuk membayar pengiriman kembali jika apa pun itu tidak berfungsi atau tidak seperti yang diiklankan, dan kebanyakan akhirnya mendapatkan sampah apa pun yang rusak itu 'gratis' karena mereka juga tidak akan membayar pengiriman kembali. Program perlindungan pembeli eBay dan PayPal cukup baik.

Jangan salah paham - saya telah menemukan beberapa vendor yang sangat bagus untuk beberapa hal, tetapi mereka relatif jarang ...

Debugger USB JTAG $ 8 yang murah bekerja sebagai debugger hanya pada beberapa chip Atmel kelas bawah. Jangan repot-repot dengan mereka.

Saya mengalami masalah "pin JTAG yang digunakan untuk fungsi lain". Saya akhirnya mendapatkan perisai Ultimaker. Ini memiliki A4-A7 saat breakout. Saya perlu menyolder pada header tetapi setidaknya sinyalnya tersedia.

Saya memiliki debugger Dragon JTAG dalam pesanan. Seharusnya sampai di sini hari Jumat. Sekarang jika saya bisa mengetahui cara menggunakan Atmel Studio 7, saya mungkin berbahaya di akhir akhir pekan.

Mungkin apa yang Anda tawarkan akan berhasil. Saya baru saja membuka ebay & menemukan beberapa perangkat bernama serupa yang secara eksplisit mengatakan bahwa mereka hanya mendukung beberapa chip TAPI ... mereka memiliki chip yang berbeda pada mereka.

Masalahnya adalah ... Jika mereka dapat melakukan J-Tag pada chip kelas bawah ... Anda akan berpikir bahwa chip kelas atas akan bersedia 'mendengarkan' programmer J-Tag? Saya kira kita akan segera tahu. Jika Anda mempelajari sesuatu yang baru atau jika Anda membuat pengaturan Anda berfungsi ... Beri tahu kami!

Beberapa informasi kecil yang mungkin membantu:

Atmel memiliki Atmel JTAG ICE dan bersumber terbuka. Ini juga didukung oleh Atmle Studio (Atmel Studio akan memperbarui firmware itu). Itulah klon murah ini. Ini adalah hal yang baik jika Anda bekerja dengan Atmel Studio atau avrdude.

Atmel kemudian (untuk alasan apapun) merilis JTAK-ICE-mk2 Itu adalah sumber tertutup. Dan hanya mk2 yang mendukung mega2560. Butuh waktu beberapa lama, tapi saya pikir sekarang juga mendukung mk2. Jadi ini akan bekerja dengan debugging menggunakan Atmel Studio di Windows.

Atmel kemudian memiliki mk3 dan akhirnya ATMEL ICE. Anda dapat memesannya dari mouser (seperti yang ditautkan di atas) atau Microchip langsung, atau lainnya. Ini akan mendukung semua AVR dan juga prosesor SAM Atmel. Ini mungkin tidak akan berfungsi dengan Prosesor Cortex-M lainnya dan hanya bekerja dengan Atmel Studio. Alasannya adalah karena komunikasi antara Atmel Studio dan ATMEL ICE adalah hak milik.

Pendekatan yang lebih open source adalah memiliki Perangkat yang berbicara bahasa GDB. atau memiliki papan perangkat keras terbuka dengan firmware yang menyatakan sesuatu yang kemudian dapat diterjemahkan oleh perangkat lunak sumber terbuka ke bahasa GDB. Perangkat lunak konverter ini adalah Openocd. Mereka memiliki daftar panjang papan pendukung (Bus Pirate, Open Bench, FTDI H *, ..) Orang-orang OpenOcd tampaknya tidak percaya diri dengan dukungan AVR yang ada. Ini mungkin hanya karena tidak ada yang menggunakannya. Tetapi itu mungkin berarti bahwa itu tidak akan berhasil di luar kotak.

Pin out tidak hanya mencakup ini (tercantum di atas)
TDO -
TCK -
TDI -
TMS -
Vsense (+ 5V) & GND

Tapi juga / Reset. Itu membuatnya jadi lebih mudah.

Papan Rumba juga memiliki Header JTAG. Jadi dengan ATMEL ICE Anda cukup mencolokkannya dan memulai debugging. Itu setelah Anda menyusun Marlin menggunakan Arduino Studio, ..

Untuk menemukan bug seperti ini, saya juga merekomendasikan untuk menambahkan pengujian unit. Ya, pengujian unit untuk firmware 8bit dimungkinkan, dan itu juga tidak sulit. Itu hanya banyak pekerjaan yang membosankan.

Saya telah melakukan JTAG Debugging pada Arduino 2560 jadi jika Anda membutuhkan bantuan lebih lanjut, beri tahu saya. Saya akan menawarkan untuk melakukan debugging sendiri, tetapi saya tidak tahu cara mengkompilasi Marlin menggunakan Arduino IDE di mesin Linux saya. Dan makefile juga tidak berfungsi, ...

Beginilah tampilan Adaptor JTAG (solder jelek) untuk Arduino 2560. Konektor 10 Pin memiliki Atmel Pinout standar.
20170419_025622

Atmel kemudian (untuk alasan apapun) merilis JTAK-ICE-mk2 Itu adalah sumber tertutup. Dan hanya mk2 yang mendukung mega2560. Butuh waktu beberapa lama, tapi saya pikir sekarang juga mendukung mk2. Jadi ini akan bekerja dengan debugging menggunakan Atmel Studio di Windows.

Jadi, dengan ekor babi pada gambar di atas, dapatkah beberapa antarmuka J-Tag lainnya berbicara dengan papan Atmega-2560? Atau hanya MK2 yang bisa melakukannya?

Dan jika hanya MK2 yang akan melakukannya ... Apakah ini yang Anda bicarakan? Jika saya memesan ini, itu hanya harus terhubung dan bekerja tanpa gangguan? http://www.ebay.com/itm/Atmel-JTAGICE-mkII-JTAG-ICE-mk2-ATJTAGICE2-AVR-AVR32-Debugger-Emulator-compliant-/111999248960?hash=item1a13acea40 : g: kL4AAOSwQ15XOY6W

Ini info yang bagus. Terima kasih @ JustAnother1.

Saya menemukan bahwa Atmel ICE seharusnya bekerja dengan openocd di beberapa tempat, karena itu sesuai dengan CMSIS-DAP (apapun itu).

Berikut salah satu tautannya:
http://vk5tu.livejournal.com/56648.html

Mudah-mudahan ini benar, karena saya tidak ingin menggunakan Atmel Studio 7 jika saya tidak mau.

Jadi, dengan ekor babi pada gambar di atas, dapatkah beberapa antarmuka J-Tag lainnya berbicara dengan papan Atmega-2560? Atau hanya MK2 yang bisa melakukannya?

ATMEL Jtag-ICE (dan klonnya) tidak akan dapat berbicara dengannya. Mk2 dan yang lebih tinggi (mk3, ATMEL ICE) dapat berbicara dengannya. Alasannya adalah Atmel Studio membaca ID Bytes dari chip dan kemudian memutuskan untuk tidak bekerja dengan mereka jika es Hardware yang terbuka terhubung. Alasannya sepertinya hanya karena mereka bersikap baik.

Papan yang didukung Openocd juga harus dapat berbicara dengan chip.

Mungkin ada masalah. AVR memiliki bit sekering. dan satu bit sekering menonaktifkan antarmuka JTAG. Tetapi semua Debugger juga memiliki ISP. Dan melalui ISP bit Sekering JTAG dapat diaktifkan. Pada Arduino 2560 saya, antarmuka JTAG dinonaktifkan dan saya harus menggunakan antarmuka ISP untuk mengaktifkannya sebelum saya dapat menggunakan antarmuka JTAG. Di papan Rumba saya, JTAG diaktifkan. YMMV

@bgort CMSIS adalah standar yang ditemukan oleh ARM. Ini mendefinisikan banyak hal Cortex-M. DAP mungkin adalah Debug Adapter. Jika halaman Anda yang tertaut mengatakan yang sebenarnya maka Anda akan dapat menggunakan ATMEL ICE dengan openocd untuk mungkin semua prosesor ARM Cortex.

Tetapi AVR tidak kompatibel dengan CMSIS. Menggunakan Atmel ICE dengan openocd untuk avr mungkin berhasil. Tolong beri tahu saya jika Anda berhasil melakukannya.

Menggunakan Atmel ICE dengan openocd untuk avr mungkin berhasil. Tolong beri tahu saya jika Anda berhasil melakukannya.

Dan MK2 atau MK3 akan memenuhi syarat sebagai 'Atmel ICE'? Baik? Karena seharga $ 23 bisa didapatkan disini:

http://www.ebay.com/itm/AT-AVRISP-AVR-ISP-mkII-In-System-Programmer-ATAVRISP2-AVRISPmkII-Compliant/192152083426?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D22%2007%26algos=aid%3D22%2007%26algo 3DSIC.MBE% 26ao% 3D2% 26asc% 3D41811% 26meid% 3Db3904b7d594c4dffb2a4c05f95ef33d3% 26pid% 3D100005% 26rk% 3D6% 26rkt% 3D6% 26sd% 3D111949022769

@ Roxy-3D Anda memerlukan Atmel JTAG ICE-mkII bukan Atmel ISP-mk2. ISP mk2 yang Anda tautkan (sepengetahuan saya) tidak pernah lebih mahal dari $ 30. Tetapi itu juga hanya memiliki ISP dan bukan antarmuka JTAG. Jadi itu perangkat yang salah!

JTAG-mk2 terlihat serupa. Sedikit lebih besar, memiliki led dan memiliki kabel datar dengan satu pcb dan dua konektor di ujungnya. Ia memiliki 10 pin JTAG pinout, 6 pin ISP dan kabel squid, ..

Ini adalah pemasaran yang buruk di pihak Atmel ... Memiliki nama yang sama tetapi hanya mengubah MKII menjadi MK2 akan menyebabkan kebingungan! BAIK! TERIMA KASIH! Saya akan mencari MK2 dengan J-Tag!

Ini adalah JTAG mk2:
http://www.ebay.de/itm/Atmel-JTAGICE-mkII-JTAG-ICE-mk2-ATJTAGICE2-AVR-AVR32-Debugger-Emulator-compliant-/260612589287?hash=item3cadb886e7 : m: mmnaWxJ-C5FA39K8Q

Dan ini mk3 ???:
http://www.ebay.de/itm/Atmel-JTAGICE-MKIII-JTAGICE-MK3-ATJTAGICE3-Entwicklungswerkzeug-/192127268398?hash=item2cbbad762e : g: K7kAAOSw2gxYxC1U

Secara historis harga turun. MK2 selalu sangat mahal mk2 lebih murah dan Atmel ICE lebih murah lagi (Mungkin Atmel menyadari bahwa membuat debugger tersedia secara luas bukanlah hal yang buruk, ...)

@ Roxy-3D Tidak ada perbedaannya bukan mkII vs MK2 Perbedaannya adalah ISP -mk2 vs JTAG -mk2

Saya tidak akan berdebat tentang pemasaran yang buruk. Mungkin itulah alasan mereka sekarang menjadi Microchip, ...

Oke ... Satu pertanyaan lagi: Pakai J-TAG MK2, sepertinya masih tersambung ke konektor ISP 6 pin? Apakah itu juga membutuhkan kabel terpisah menuju pin J-Tag? Ataukah hanya menggunakan konektor ISP untuk melakukan J-Tag?

Tetapi AVR tidak kompatibel dengan CMSIS. Menggunakan Atmel ICE dengan openocd untuk avr mungkin berhasil. Tolong beri tahu saya jika Anda berhasil melakukannya.

Akan melakukan.

Saya tidak akan berdebat tentang pemasaran yang buruk. Mungkin itulah alasan mereka sekarang menjadi Microchip, ...

Saya relatif bingung ketika membaca tentang / meneliti ini. Mereka benar-benar tidak / tidak melakukan pekerjaan dengan baik dalam menamai sesuatu, umumnya.

Diperlukan konektor 10 pin untuk melakukan JTAG. 6 pin hanya dapat melakukan ISP, tidak ada tunneling yang melewatinya.

Diperlukan konektor 10 pin untuk melakukan JTAG. 6 pin hanya dapat melakukan ISP, tidak ada tunneling yang melewatinya.

Jadi kita colokkan ke konektor ISP 6 pin dan tambahkan 4 pin lagi yang dibutuhkan ke kabel?

Diperlukan konektor 10 pin untuk melakukan JTAG. 6 pin hanya dapat melakukan ISP, tidak ada tunneling yang melewatinya.

Jadi kita colokkan ke konektor ISP 6 pin dan tambahkan 4 pin lagi yang dibutuhkan ke kabel?

Apa ? JTAG dan ISP adalah antarmuka yang sangat berbeda. Perangkat yang hanya dapat melakukan ISP tidak berguna jika Anda ingin melakukan JTAG. Sinyal pada pin tersebut juga sangat berbeda.

JTAG-MK2 dapat melakukan keduanya. Ini memiliki ISP dan Antarmuka JTAG.

Ups! Permintaan maaf saya JustAnother1 Saya menekan tombol yang salah dan mengedit komentar Anda ...

JTAG-MK2 dapat melakukan keduanya. Ini memiliki ISP dan Antarmuka JTAG.

Ya ... Apa yang saya coba cari tahu adalah bagaimana saya menghubungkannya ke papan Atmega-2560 saya dalam mode J-Tag. Di atas bgort ditemukan bahwa kami membutuhkan 4 sinyal selain daya dan ground untuk melakukan J-Tag. Itu ada di komentar ini: https://github.com/MarlinFirmware/Marlin/issues/6331#issuecomment -294963888

Jika kita perlu menyolder kabel untuk mendapatkan beberapa sinyal ... Bahkan itu tidak masalah. Dan kemudian saya kira kita menyambungkan sesuatu seperti ekor babi Anda pada gambar di atas, bukan?

Arduino2560 memiliki header 6 pin di sebelah avr cpu. Jtag-mkII memiliki konektor 6 pin untuk itu dan dapat berbicara ISP (pada dasarnya SPI: MISO, MOSI, ..) di atasnya.

JTAG-mk2 juga memiliki konektor 10 pin. Itu perlu dihubungkan ke pin yang tercantum di atas: TDO, TCK, TDI, TMS, Vsense (+ 5V), / Reset & GND

Salah satu cara untuk melakukannya ditunjukkan pada gambar yang saya posting. Cukup hubungkan Jtag-mk2 ke konektor 10 pin yang ditunjukkan pada gambar dan Anda siap untuk pergi. Itu sama dengan yang dijelaskan @bgort dalam postingannya.

Di papan Rumba Anda sudah memiliki konektor 10 pin yang sama (2 baris 5 pin) yang sudah ada di papan.

Jika Anda membeli mk2 dengan kabel squid (kabel dengan konektor 10 pin dan 10 kabel yang hilang maka Anda dapat menghubungkan langsung ke arduino. Anda mungkin memerlukan beberapa kabel jumper karena perubahan jenis kelamin (menurut saya kabel squid memiliki ujung perempuan) Tapi yang jelas tidak akan berfungsi dengan Ramps terpasang.

Jika Anda membeli mk2 dengan kabel squid (kabel dengan konektor 10 pin dan 10 kabel yang hilang maka Anda dapat menghubungkan langsung ke arduino. Anda mungkin memerlukan beberapa kabel jumper karena perubahan jenis kelamin (menurut saya kabel squid memiliki ujung perempuan) Tapi yang jelas tidak akan berfungsi dengan Ramps terpasang.

Terima kasih telah memverifikasi itu. Bagian RAMPS bukan masalah.Saya hanya bisa memastikan untuk menyolder jenis kabel yang tepat ke konektor 10 pin.

TERIMA KASIH UNTUK SEMUA INFORMASI BERMANFAAT !!!!!

Ini adalah video yang lebih baik tentang apa yang saya bicarakan. Saya memulai seluruh proses dari awal. Suhu berubah pada 5:19. https://youtu.be/jrsUpjyUvmg

@ Rhonal89 Ya ... Saya telah melihat hal yang persis seperti itu ... Saya memiliki angka yang berbeda untuk suhu target tempat tidur dan nosel. Tapi saya sudah melihatnya. Dan ketika itu terjadi, Stack Pointer mati di lokasi baru. Sebuah In Circuit Emulator akan sangat membantu untuk menemukan masalahnya! Tetapi jika Anda beralih ke kisi 10x10 ... Masalahnya sepertinya tidak terjadi. Jadi sampai kita menemukan akar penyebab masalahnya ... Saran saya adalah menggunakan Mesh 10 x 10. Dan saya menggunakan jaring berukuran 10 x 10 pada alas 400 mm x 400 mm. Itu menawarkan banyak 'koreksi' untuk mendapatkan adhesi yang baik di 100% tempat tidur.

Terima kasih!! Roxy, aku hanya tidak ingin terlihat gila di sini. Saya menghargai semua pekerjaan yang kalian lakukan. Akan menggunakan 10 poin

Saya menghargai semua pekerjaan yang kalian lakukan. Akan menggunakan 10 poin

Terima kasih! Dan kami akan mencari tahu masalahnya dan membuat sistem mengizinkan 15x15. Tapi tidak perlu lagi mengumpat tentang berapa lama waktu yang dibutuhkan untuk menyelidiki kisi berukuran 15 x 15! Anda bisa mendapatkan secangkir kopi saat sedang melakukan tugasnya. Setelah Anda memiliki mesh yang disetel dengan baik ... Ini akan disimpan di EEPROM dan Anda cukup menggunakannya mulai saat itu.

Terimakasih. Sekarang ikuti semua yang telah Anda tulis kata demi kata untuk mendapatkan tautan yang sempurna.

@ Rhonal89 Mulailah utas baru .... (Yang ini sudah sangat jauh dari topik). Dan saya akan melatih Anda untuk mendapatkan hubungan yang sangat baik dengan sedikit kerja. Lakukan 10 x 10 G29 P1 dan kirim peta Anda ... Saya akan bangun selama satu setengah jam lagi. Seharusnya ada banyak waktu untuk melakukan beberapa iterasi untuk membuatnya sempurna.

Sebagai permulaan ... Itu pasti

  • Ubah Configuration.h agar memiliki mesh 10 x 10
  • Mungkin masuk akal untuk masuk ke Configuration_adv.h dan mengaktifkan Z-BabyStepping dan Double-Click untuk membuka opsi Z-BabyStepping.
  • Atur ulang printer dan lakukan M502, M500, dan M501.
  • Setel ulang printer dan atur suhu pipa semprot dan tempat tidur
  • Berikan G28
  • Berikan G29 P1
  • Berikan G29 L1 untuk menyimpan mesh. Kemudian posting mesh dan saya akan membalas segera setelah saya melihatnya.

Saya akan menerima tawaran itu Roxy, tetapi Anda sudah cukup sibuk. Saya akan melihat apakah saya mencari tahu ini dan saya akan memberi tahu Anda jika saya membutuhkan bantuan lebih lanjut, Ambil satu jam ekstra dan istirahat.

Saya hanya menonton TV ... Saya benar-benar tidak keberatan. Dan Anda sudah mengalami kesulitan dengan masalah korupsi data acak ini. Saya ingin Anda membuat semuanya berjalan lancar mulai dari sekarang.

Dan tergantung pada apa yang kita lihat di Peta Topologi ... Hampir tidak ada upaya untuk menyarankan cara yang 'tepat' untuk menanganinya. Silakan dan posting peta ketika Anda mendapatkannya ...

On Chip Debugger 2560 hanya dapat diakses melalui pin JTAG. Perangkat Atmel lainnya dapat mengakses OCD melalui ISP.


@ JustAnother1 - apakah Anda menggunakan Atmel Studio untuk melakukan debugging?

Setiap petunjuk untuk membantu / tutorial yang akan memudahkan kurva belajar akan sangat dihargai.

@ Bob-the-Kuhn Kita harus mencoba mempelajari apa itu Arduino_debug.exe. Itu mungkin secara otomatis menghasilkan file tabel simbol yang dibutuhkan GDB.

Pembaruan: Arduino_Debug.exe tidak melakukan apa pun yang kami pedulikan ....

apakah Anda menggunakan Atmel Studio untuk melakukan debugging?
Setiap petunjuk untuk membantu / tutorial yang akan memudahkan kurva belajar akan sangat dihargai.

Bisakah kita tetap mengkompilasi dan membangun menggunakan Arduino, tetapi menghasilkan tabel simbol yang diperlukan dan kemudian memasukkannya ke Atmel Studio? Jika tidak ... Seberapa sulit membuat Marlin mengkompilasi di dalam Atmel Studio?

@ Bob-the-Kuhn Ya saya menggunakan Atmel Studio7 (saya juga menggunakan versi yang lebih lama) untuk debug.

Adapun tutorial: Tidak ada yang langsung terlintas dalam pikiran. Tapi saya tidak tahu apa masalahnya yang ada pada kurva belajar Anda. Mungkin paling masuk akal untuk menambahkan semua informasi tentang cara mengompilasi dan menyiapkan debugging ke dokumentasi Marlin. Dengan cara ini, orang lain juga bisa mendapatkan keuntungan darinya. Saya pikir ada Wiki di suatu tempat. Jika Anda memulai halaman dan mengirimi saya tautan, saya akan memeriksa dan mengisi kekosongan jika saya bisa.

@ Roxy-3D Satu trik praktis jika kompilasi dengan Atmel Studio adalah masalah:
Di Atmel studio buat proyek dan tambahkan sumbernya. Kemudian sebagai gantinya ob build cukup klik debug. Ini akan mengeluh bahwa file * .elf hilang. Ambil file elf yang sudah dikompilasi dan letakkan di tempat yang bernama dan klik debug lagi. Atmel Studio kemudian akan mengunduh file elf itu ke dalam chip dan akan mulai men-debugnya. Jika file sumber berada di posisi yang benar, semuanya akan berfungsi dengan baik.

Seberapa sulit membuat Marlin mengkompilasi di dalam Atmel Studio?

Itu tergantung pada seberapa besar Marlin bergantung pada hal-hal spesifik Arduino. Saya telah mengkonversi firmware ini https://github.com/minnow-pmc/Minnow dari Arduino ke non Arduino.
Untuk semua pustaka Arduino yang digunakan, Anda perlu menyalin file * .c dan * .h ke dalam proyek Anda. Arduino kemudian juga membantu dengan penyertaan yang hilang. Jika kode bergantung pada Arduino IDE untuk menambahkan pernyataan include maka Anda juga harus menambahkannya.

Tetapi alih-alih membiarkan Atmel Studio membuat file make baru (yang kemudian disembunyikan), Anda juga dapat mengkonfigurasi Atmel Studio untuk hanya menjalankan makefile yang sudah ada. Jika membangun Marlin menggunakan karya makefile yang disediakan Marlin maka itu juga sudah cukup untuk membuat Atmel Studio men-debugnya.

FYI, ada addon gratis untuk Atmel Studio 7 untuk Arduino ('Arduino IDE for Atmel Studio 7') yang, saya yakin, menyediakan semua perpustakaan, dll., Dan yang tampak seperti versi terbatas dari visualmicro.com Arduino debugger ? Saya belum mencoba semua ini, tetapi ada di sana dan terpasang dengan baik.

Ada juga versi pro seharga $ 29 satu kali (harga non-profit / non-komersial) yang menambahkan banyak fitur yang terlihat berharga ('laporan memori lanjutan', 'laporan memori bebas hampir real-time', dll.).

Akan membalas di sini ketika saya sudah mencoba semuanya. EDIT: Sepertinya ATMEL ICE saya tidak akan ada di sini sampai hari Senin, karena Mouser menggunakan Inovasi UPS Mail yang hampir selalu sangat lambat; itulah yang saya dapatkan untuk memilih opsi termurah.

Mungkin paling masuk akal untuk menambahkan semua informasi tentang cara mengompilasi dan menyiapkan debugging ke dokumentasi Marlin. Dengan cara ini, orang lain juga bisa mendapatkan keuntungan darinya. Saya pikir ada Wiki di suatu tempat. Jika Anda memulai halaman dan mengirimi saya tautan, saya akan memeriksa dan mengisi kekosongan jika saya bisa.

Orang: Mari berusaha keras untuk membuat catatan yang bagus saat kita menampilkan perangkat keras debugging kita. Saya tidak yakin tentang cara yang benar untuk menyimpan dokumentasi, tetapi jangan sampai kehilangan resepnya. Saya tidak yakin tentang keadaan Marlin Wiki. @thinkyhead mungkin dapat memberikan saran tentang cara kami menyimpan catatan dalam bentuk yang dapat

Saya berencana untuk mendokumentasikan semuanya di sini untuk saat ini; dapat membantu dengan halaman wiki di beberapa titik, juga, jika / ketika ada.

Hanya untuk membuang Ide di luar sana:
Ada juga simulator AVR. Menggunakan simulator untuk debugging akan memungkinkan orang-orang yang tidak memiliki perangkat keras sama sekali untuk membantu pemrograman dan debugging. Dan simulator dapat memberikan lebih banyak informasi tentang apa yang sebenarnya terjadi daripada debugging JTAG.

Juga mungkin merepotkan untuk mengatur dengan benar, ..

Ada juga simulator AVR. Menggunakan simulator untuk debugging akan memungkinkan orang-orang yang tidak memiliki perangkat keras sama sekali untuk membantu pemrograman dan debugging.

Ya ... Tapi saat ini saya sedang mencari penunjuk buruk yang menulis di atas penunjuk tumpukan. Tanpa perangkat keras untuk bergerak ... Bagaimana cara agar masalah terjadi?

Apakah ini salah satu gejala UBL? Setelah nomor baris aneh biasanya menunggu 5-10 detik dan kemudian reboot. Setelah itu hanya menggulir keluhan nomor baris tidak valid selamanya.

12:32:43.676 : N27 G29 P1*102
12:32:43.681 : ubl.eeprom_start=64
12:32:43.693 : Mesh invalidated. Probing mesh.
12:32:43.739 : Error:Line Number is not Last Line Number+1, Last Line: 131072
12:32:43.739 : Resend: 131073
12:32:43.784 : Error:Line Number is not Last Line Number+1, Last Line: 16520896
12:32:43.784 : Resend: 16520897
12:32:54.744 : Printer reset detected - initalizing
12:32:54.745 : start
12:32:54.745 : echo:Marlin 1.1.0-RCBugFix

Saya mencoba menggunakan papan Ultishield tanpa terikat apa pun. Ini agar saya tidak perlu merobek semua kabel saya untuk memasang pengontrol baru (Ultishield) pada printer saya. Untuk melakukan ini, saya telah melakukan yang berikut:

  • menambahkan kode ini ke akhir fungsi setup () LOOP_XYZ(i) axis_homed[i] = true ;
  • setel sensor ekstruder ke 999 dan setel ke 220
  • setel semua endstop & probe saya ke false - aneh tetapi jika saya hanya menyetel probe ke false maka sistem akan hang saat melakukan G29 P1 dengan 3x3.
  • dipilih FIX_MOUNTED_PROBE

`

Saya mencari penunjuk buruk yang menulis di atas penunjuk tumpukan. Tanpa perangkat keras untuk bergerak ... Bagaimana cara agar masalah terjadi?

Bagaimana Anda berharap menemukan masalah dengan JTAG? AVR tidak memiliki Breakpoint data.

Maka saya tidak bermaksud menggunakan simulator yang hanya mensimulasikan inti AVR dan kemudian memiliki firmware pada dasarnya hanya duduk di sana dan tidak melakukan apa-apa. Simulasi perangkat keras juga akan dibutuhkan. Kemudian lagi untuk meratakan tempat tidur satu-satunya yang Anda butuhkan adalah sensor, bukan? Saat men-debug firmware yang berjalan di dalam simulator, Anda dapat mengubah nilai variabel. Mengubah nilai yang dibaca dari sensor (dipicu bukan dipicu) harus dapat dikonfigurasi di simulator, bukan?

Bagaimana Anda berharap menemukan masalah dengan JTAG? AVR tidak memiliki Breakpoint data.

Saya tidak menyadarinya. Tapi tetap saja ... Mampu mengatur break point pada kode akan sangat membantu. Misalnya, menetapkan break point pada salah satu kode reset atau inisialisasi setidaknya akan menghentikan banyak hal lebih cepat daripada yang dapat kita lakukan sekarang. DAN ... kita akan dapat melihat bingkai tumpukan dan melihat apa yang terjadi saat reset terjadi ...

Simulasi perangkat keras juga akan dibutuhkan. Kemudian lagi untuk meratakan tempat tidur satu-satunya yang Anda butuhkan adalah sensor, bukan? Saat men-debug firmware yang berjalan di dalam simulator, Anda dapat mengubah nilai variabel.

Saya rasa semua motor stepper harus disimulasikan juga. Nozel digerakkan berputar-putar. Dan dalam hal ini ... Roda encoder juga sangat penting untuk fungsionalitas UBL.

Bisakah Anda memberi tahu saya, untuk kejelasan, jika masalah memori berkaitan dengan
membaca / menulis ke EEPROM mesh UBL?

Bisakah Anda memberi tahu saya, untuk kejelasan, jika masalah memori berkaitan dengan
membaca / menulis ke EEPROM mesh UBL?

Sulit untuk spesifik karena korupsi memiliki banyak gejala yang berbeda dan kami belum menemukan akar penyebabnya. Tetapi masalah tampaknya muncul ketika Anda mendefinisikan mesh yang sangat besar dalam sistem UBL. Sebuah jaring berukuran 15x15 tampaknya cukup sering membuatnya terjadi. Jaring 10x10 tampaknya baik-baik saja.

EEPROM tampaknya tidak terpengaruh. Saat ini, tebakan terbaik saya adalah ada pointer NULL yang sedang ditulis ke suatu tempat dalam kode Marlin, dan itu memukulkan lokasi pertama RAM tempat Stack Pointer disimpan. Setelah Stack Pointer rusak, segera setelah kode itu 'kembali', semuanya pergi ke luar angkasa.

Apakah GCC memiliki opsi compiler untuk selalu memeriksa pointer sebagai NULL sebelum menulis ke sana? Jika demikian ... Itu mungkin membantu kami menemukan masalahnya.

UPDATE: Sepertinya tidak. Setidaknya tidak untuk kami:

-fdelete-null-pointer-memeriksa
Asumsikan bahwa program tidak dapat dengan aman merujuk pointer nol, dan tidak ada kode atau elemen data yang berada di alamat nol. Opsi ini memungkinkan pengoptimalan pelipatan konstan sederhana di semua tingkat pengoptimalan. Selain itu, pengoptimalan lainnya lewat di GCC menggunakan tanda ini untuk mengontrol analisis aliran data global yang menghilangkan pemeriksaan tidak berguna untuk pointer nol; ini mengasumsikan bahwa akses memori ke alamat nol selalu menghasilkan jebakan, sehingga jika penunjuk diperiksa setelah telah didereferensi, itu tidak bisa nol.

Namun perlu dicatat bahwa di beberapa lingkungan, asumsi ini tidak benar. Gunakan -fno-delete-null-pointer-checks untuk menonaktifkan pengoptimalan ini untuk program yang bergantung pada perilaku itu.

Opsi ini diaktifkan secara default pada sebagian besar target. Pada Nios II ELF, defaultnya adalah nonaktif. Pada AVR dan CR16, opsi ini dinonaktifkan sepenuhnya.

Passes yang menggunakan informasi dataflow diaktifkan secara independen pada tingkat pengoptimalan yang berbeda.

Telah melihat kodenya, bertanya-tanya mengapa menggunakan EEPROM begitu banyak?
Hanya ada begitu banyak siklus penulisan ke EEPROM
Ada juga beberapa potensi di sana untuk aliran bawah.

Juga, apa yang saya tidak tahu dari kode adalah apakah EEPROM sedang
ditulis ke setiap titik probe, atau sekaligus semua titik probe selesai.

Mungkin, saya hanya seorang idiot. Tapi hanya nilai 2c saya

Apakah ini salah satu gejala UBL? Setelah nomor baris aneh biasanya menunggu 5-10 detik dan kemudian reboot. Setelah itu hanya menggulir keluhan nomor baris tidak valid selamanya.

Untuk apa pun nilainya, saya belum melihat nomor baris yang tidak valid sama sekali.

@Grogyan Telah melihat kode tersebut, bertanya-tanya mengapa menggunakan EEPROM begitu banyak? Hanya ada begitu banyak siklus tulis ke EEPROM. Ada juga beberapa potensi untuk aliran bawah.

Info status UBL sedang ditulis ke EEPROM mungkin agak terlalu sering saat ini, tetapi kemungkinan akan berubah saat kami memindahkan status ke konfigurasi normal. toko (mungkin besok). Saya membayangkan itu dilakukan seperti sekarang karena UBL sedang dalam pengembangan dan lebih sederhana.

Juga, apa yang saya tidak tahu dari kode adalah apakah EEPROM sedang ditulis ke setiap titik probe, atau sekaligus semua titik probe selesai.

Poin yang diperiksa sama sekali tidak ditulis ke EEPROM sampai G29 Sx dikeluarkan; lalu semuanya ditulis sekaligus.

@ Roxy-3D

semua motor stepper harus disimulasikan juga

Anda mungkin terlalu memperumitnya. Satu-satunya input yang digunakan Marlin adalah input termal, penghentian & probe. Saya telah menjalankan G29 P1 15x15 hanya dengan RAMP tulang telanjang (dengan LCD terpasang) & mendapatkan perilaku yang aneh. 10x10 tampaknya berperilaku baik.

Lihat posting saya sebelumnya tentang apa yang saya lakukan.

EEPROM memiliki setidaknya 10.000 siklus hapus / tulis pada bagian AVR lama. Saat ini, dispesifikasi di lebih dari 100.000 siklus. Namun demikian ... EEPROM hanya ditulis ketika status Sistem UBL diubah dan 'Simpan' mesh terjadi. Jadi sekarang ... Jika Anda melakukan G29 A atau G29 D itu akan menulis ke EEPROM. Dan G29 S yang menyimpan mesh saat ini akan menulis ke EEPROM.

Jadi .... bagi saya itu bukan masalah. Saya menyalakan sistem dan tidak pernah mematikannya. Tetapi Anda benar, kami tidak boleh menginjak EEPROM setiap kali pengguna menghidupkan atau mematikan sistem. Mungkin yang harus dilakukan adalah tetap menyimpan status saat ini ketika Mesh disimpan. Tetapi selain itu ... Tidak menyimpan status yang diperbarui hanya karena pengguna melakukan G29 A atau G29 D. Saya akan memikirkannya lagi. Tetapi mungkin ini akan diubah dalam beberapa hari ke depan ketika saya menyinkronkan ulang kode lokal saya dengan cabang utama.

2 sen saya di sini ...
Saya benci masalah semacam itu yang mungkin disebabkan di dalam kotak (kumpulan kode MARLIN) DAN di luar kotak (kompiler) ...

Tampaknya gejala berubah saat memodifikasi kode Marlin ... Ini BISA berarti bahwa kami memicu perilaku salah dari luar ..

Bisakah kita mendapatkan kode Marlin yang gagal dan MENGUBAH kotak luar. Untuk menggunakan parameter kompilasi LAINNYA (pikirkan -fpermissive flag) atau bahkan mengubah versi compiler DAPAT memberikan beberapa indikasi tentang bagaimana melanjutkan sambil menunggu perangkat keras yang dibutuhkan ... BTW, versi Arduino apa yang digunakan oleh siapa yang melihat masalah?

Maaf, hanya beberapa ide yang tidak dapat saya coba sendiri ...

Tetapi selain itu ... Tidak menyimpan status yang diperbarui hanya karena pengguna melakukan G29 A atau G29 D. Saya akan memikirkannya lagi. Tetapi mungkin ini akan diubah dalam beberapa hari ke depan ketika saya menyinkronkan ulang kode lokal saya dengan cabang utama.

Ini adalah salah satu area di mana saya pikir kita bisa menyelamatkan EEPROM menulis; Secara pribadi, saya tidak melihat kebutuhan untuk - atau menginginkan - tabungan negara kecuali saya mengeluarkan M500 , dan saya pikir sebagian besar akan nyaman dengan itu, secara umum. Saya akan menerapkan perubahan ini saat saya memindahkan status ke konfigurasi. toko.

Mungkin yang harus dilakukan adalah tetap menyimpan status saat ini ketika Mesh disimpan.

Hmm. Jangan pikir saya setuju; menyimpan mesh seharusnya tidak menyelamatkan negara, menurut pendapat saya. Metode 'normal' untuk menyimpan keadaan saat ini dari seluruh printer dengan M500 sudah cukup, bagi saya. Ini meminimalkan perubahan yang mungkin tidak diinginkan ke pengaturan 'permanen', meminimalkan penulisan EEPROM, dan saya pikir yang terbaik adalah menjaga hal-hal tersegmentasi secara logis, secara umum, daripada menyimpan 'rantai' dengan cara yang mungkin tidak jelas (atau diinginkan).

Seperti yang Anda katakan, Anda mengaktifkan UBL dan membiarkannya aktif, dan saya pikir hampir semua orang akan melakukan hal yang sama setelah mereka beralih ke UBL; perlu mengeluarkan M500 untuk menyelamatkan keadaan yang diharapkan (dan mungkin diinginkan), umumnya, saya pikir.

Ingin mengarsipkannya di sini, karena ini dilakukan dengan baik, berpotensi digunakan untuk menemukan bug ini, dan saya tidak tahu dari mana saya mendapatkannya:
atmega640_1280_1281_2560_2561_sram_data_memory_locations

Hmm. Jangan pikir saya setuju; menyimpan mesh seharusnya tidak menyelamatkan negara, menurut pendapat saya. Metode 'normal' untuk menyimpan status saat ini dari seluruh printer w / M500 sudah cukup, bagi saya. Ini meminimalkan perubahan yang mungkin tidak diinginkan ke pengaturan 'permanen', meminimalkan penulisan EEPROM, dan saya pikir yang terbaik adalah menjaga hal-hal tersegmentasi secara logis, secara umum, daripada menyimpan 'rantai' dengan cara yang mungkin tidak jelas (atau diinginkan).

Alasan status disimpan pada saat yang sama saat mesh disimpan adalah karena hal itu memberi pengguna cara untuk mengontrol apakah sistem akan menyala dari reset dengan UBL aktif atau dinonaktifkan. Apa pun status mesin saat mesh disimpan adalah bagaimana sistem akan berperilaku.

Saya baik-baik saja dengan mengubahnya menjadi lebih intuitif. Namun penting untuk menyediakan cara bagi pengguna untuk mengatakan bagaimana mereka ingin mesin menyala (UBL Aktif atau UBL Dinonaktifkan). Mungkin jawaban 'Benar' adalah membuat sedikit modifikasi pada perintah G29 A dan G29 D dan menambahkan parameter tambahan (opsional). Jika Anda melakukan G29 AR, itu akan aktif setelah Reset (dan informasi status akan disimpan dengan cara itu) tetapi G29 A sederhana hanya akan mengubah status mesin saat ini dan tidak menyimpan ke EEPROM. Dan kemudian logika yang sama untuk G29 D dan G29 D R.

Itu mungkin lebih intuitif dan lebih mudah bagi pengguna untuk dipahami dan dikendalikan. Dan itu akan mengurangi penulisan EEPROM.

Hmm. Saya berpikir bahwa hanya menabung dengan M500 setelah dalam keadaan yang Anda inginkan mungkin paling konsisten dengan bagaimana hal-hal dilakukan sekarang, dan apa yang mungkin diharapkan kebanyakan orang dalam hal perilaku. Jadi dalam skenario itu, Anda akan melakukan mesh Anda-apapun, simpan mesh baru dengan G29 Sx, aktifkan mesh dengan G29 A, dan kemudian jika Anda ingin mesin selalu muncul dalam keadaan itu, lakukan saja M500 saat itu juga. dan Anda dalam kondisi yang baik. Baik slot penyimpanan baru # dan status aktif akan disimpan ke toko konfigurasi tanpa harus menulis apa pun lagi (seperti yang Anda ketahui dan saya baru menyadari, penulis eeprom toko konfigurasi memeriksa untuk melihat apakah nilai baru sama dengan yang sudah ada disimpan, lalu lewati penulisan jika tidak ada perubahan), sehingga tidak ada siklus penulisan yang sia-sia.

Saya merasa ingin menambahkan parameter lain ke G29 A / D seperti 'R' yang Anda usulkan mungkin tidak diperlukan, tetapi kami dapat melakukannya tanpa banyak masalah jika Anda merasa itu penting. Saya akan menyelesaikan apa yang saya tengah-tengah dan jika menurut Anda tambahan 'R' diperlukan setelah melihat semuanya, saya dapat menambahkannya dan mengubah komit.

Saya mengerti apa yang Anda pikirkan ... Saya jenis mengembangkan sistem UBL dengan pemikiran yang berbeda. Misalnya ... Ketika saya mulai membuat jaring untuk sepotong kaca, saya melakukan G29 P1. Setelah itu mendapatkan sebanyak mungkin kaca yang bisa diperiksa, saya melakukan G29 S0. Saya kemudian mengisi daerah yang tidak valid dan melakukan G29 S1. Saya kemudian melakukan G26 dan mengedit area yang dipertanyakan. Dan saya biasanya menyimpannya sebagai G29 S2. Tapi saya tidak pernah melakukan M500. Juga ... Ketika saya memiliki jala yang disetel dengan sempurna, saya tampaknya lebih suka itu ada di slot 1. Jadi saya akan melakukan G29 L4 (atau berapa banyak percobaan yang dibutuhkan saya) dan mengikutinya dengan G29 S1 untuk memasukkannya slot 1.

Apa pun yang kami lakukan, penting agar orang-orang dapat memindahkan pola jaring mereka dengan melakukan Beban dan Penghematan di luar M500.

Saya merasa ingin menambahkan parameter lain ke G29 A / D seperti 'R' yang Anda usulkan mungkin tidak diperlukan, tetapi kami dapat melakukannya tanpa banyak masalah jika Anda merasa itu penting. Saya akan menyelesaikan apa yang saya tengah-tengah dan jika menurut Anda tambahan 'R' diperlukan setelah melihat semuanya, saya dapat menambahkannya dan mengubah komit.

Saya rasa saya menyukai gagasan untuk hanya menulis informasi negara jika R ditambahkan ke perintah G29 A atau G29 D. Sisi negatifnya adalah G29 kehabisan huruf untuk digunakan dan R digunakan sebagai sub-opsi 'Ulangi'. Jadi ini semacam pembantaian apa kepanjangan dari 'R'. Tapi sekali lagi ... Ini semacam 'Pengulangan Global'. Kami mencoba untuk mendapatkan aktivasi atau penonaktifan sistem untuk Ulangi saat Atur Ulang atau Nyalakan.

Pokoknya ... Untuk menambahkan tanda 'R' pada G29 A dan G29 D harus sangat mudah. Parser perintah sudah menyetel repeat_flag untuk Anda. Secara harfiah, kodenya menjadi:

    if (code_seen('A')) {     // Activate the Unified Bed Leveling System
      ubl.state.active = 1;
      SERIAL_PROTOCOLLNPGM("Unified Bed Leveling System activated.\n");
      if (repeat_flag)
        ubl.store_state();
    }

    c_flag = code_seen('C');
    if (c_flag)
      ubl_constant = code_value_float();

    if (code_seen('D')) {     // Disable the Unified Bed Leveling System
      ubl.state.active = 0;
      SERIAL_PROTOCOLLNPGM("Unified Bed Leveling System de-activated.\n");
      if (repeat_flag)
        ubl.store_state();
    }

Komentar yang menjelaskan berbagai opsi akan membutuhkan lebih banyak upaya untuk melakukannya dengan benar daripada kode! Kapan itu pernah terjadi?

Saya mengerti apa yang Anda pikirkan ... Saya jenis mengembangkan sistem UBL dengan pemikiran yang berbeda. Misalnya ... Ketika saya mulai membuat jaring untuk sepotong kaca, saya melakukan G29 P1. Setelah itu mendapatkan sebanyak mungkin kaca yang bisa diperiksa, saya melakukan G29 S0. Saya kemudian mengisi daerah yang tidak valid dan melakukan G29 S1. Saya kemudian melakukan G26 dan mengedit area yang dipertanyakan. Dan saya biasanya menyimpannya sebagai G29 S2. Tapi saya tidak pernah melakukan M500. Juga ... Ketika saya memiliki jala yang disetel dengan sempurna, saya tampaknya lebih suka itu ada di slot 1. Jadi saya akan melakukan G29 L4 (atau berapa banyak percobaan yang dibutuhkan saya) dan mengikutinya dengan G29 S1 untuk memasukkannya slot 1.

Semua yang Anda katakan masuk akal bagi saya, dan saya akhirnya melakukan apa yang Anda lakukan saat membuat tautan pertama saya (hampir persis); kami pasti berada di halaman yang sama di sana. Saya pikir menyimpan mesh dengan perintah terpisah adalah ide bagus, dan dijalankan dengan baik. Untuk lebih jelasnya, saya tidak mengusulkan perubahan ke salah satu 'alur kerja' yang baru saja Anda jelaskan.

Apa pun yang kami lakukan, penting agar orang-orang dapat memindahkan pola jaring mereka dengan melakukan Beban dan Penghematan di luar M500.

Tentu saja. Saya tidak menyarankan bahwa jerat itu sendiri harus disimpan dengan M500 (itu akan selalu disimpan dengan G29 S); Saya berbicara tentang menyelamatkan negara (dan hanya negara bagian) menggunakan M500 (yang menurut saya Anda minta saya lakukan ketika Anda mengatakan ingin negara dipindahkan). Maaf jika sebelumnya tidak jelas.

Saya akan melakukan PR sebentar lagi. Saya pikir apa yang saya miliki akan bekerja dengan baik untuk Anda dan orang lain, tetapi kita dapat merevisi / mengubah setelah itu jika Anda merasa tidak nyaman dengan sesuatu, apakah itu masuk akal?

Tentu saja. Saya tidak menyarankan bahwa jerat itu sendiri harus disimpan dengan M500 (itu akan selalu disimpan dengan G29 S);

Mari kita bicarakan ini dari sudut pandang pengguna. Jika struktur status UBL memiliki Slot Jaring yang valid yang ditentukan di dalamnya ... Dugaan saya adalah setidaknya beberapa pengguna mengharapkan M500 untuk juga menyimpan jala saat ini. Saya kira itu tergantung pada berapa banyak pengguna yang mengharapkan perilaku itu. Mungkin paling aman untuk 'Simpan Segalanya' dengan perintah M500. Namun Anda mendapatkan kontrol yang lebih terperinci jika Anda menggunakan jalur G29 untuk menyimpan atau memperbarui EEPROM.

Jika Anda setuju ... Mari juga menyimpan mata jaring saat ini di slot mata jaring saat ini ketika terjadi M500.

Dan kemudian kita harus membuat keputusan lain ... Haruskah kita memindahkan pola mesh yang ada ke paling akhir EEPROM sekarang karena Struktur Status UBL tidak mengambil ruang di sana? Jika kita melakukan itu ... Beberapa pengguna akan kehilangan pola mesh mereka. Tapi ... Mereka dapat memindahkannya dengan G29 S -1 dan mencetak keluaran itu dalam versi yang diperbarui. Dan ... terlepas dari itu, sekarang lebih cepat dan lebih mudah untuk membuat tautan baru.

Jadi ... Ini benar-benar keputusan tentang membersihkan struktur data versus mencoba meminimalkan gangguan bagi pengguna. Jika Marlin akan 'Emas' di akhir bulan (atau segera), alangkah baiknya jika struktur datanya dipadatkan. Dan memiliki ruang yang tidak digunakan oleh struktur Negara UBL di ujung EEPROM agak jelek. Tapi saya juga benci menyebabkan beberapa pengguna kehilangan data mesh mereka.

Jika Anda setuju ... Mari juga menyimpan mata jaring saat ini di slot mata jaring saat ini ketika terjadi M500.

Ini yang sudah saya lakukan. Berkelahi dengan git sekarang agar saya bisa menyelesaikan dan melakukan PR.

Dan kemudian kita harus membuat keputusan lain ... Haruskah kita memindahkan pola mesh yang ada ke paling akhir EEPROM sekarang karena Struktur Status UBL tidak mengambil ruang di sana?

Saya sudah melakukan ini juga.

Jika kita melakukan itu ... Beberapa pengguna akan kehilangan pola mesh mereka. Tapi ... Mereka dapat memindahkannya dengan G29 S -1 dan mencetak keluaran itu dalam versi yang diperbarui. Dan ... terlepas dari itu, sekarang lebih cepat dan lebih mudah untuk membuat tautan baru.

Ya, ini persis dengan rencana saya, dan akan menyebutkan ini (G29 S-1) di komentar Humas.

Jadi ... Ini benar-benar keputusan tentang membersihkan struktur data versus mencoba meminimalkan gangguan bagi pengguna. Jika Marlin akan 'Emas' di akhir bulan (atau segera), alangkah baiknya jika struktur datanya dipadatkan. Dan memiliki ruang yang tidak digunakan oleh struktur Negara UBL di ujung EEPROM agak jelek. Tapi saya juga benci menyebabkan beberapa pengguna kehilangan data mesh mereka.

Saya setuju dengan semua itu, dan saya rasa kami yang menggunakan UBL sekarang dapat melakukan G29 S-1 dan kemudian mengimpor mesh. Tentunya ini harus terjadi pada akhirnya - tidak ada alasan untuk meninggalkan ruang pada akhirnya terbuang percuma; lebih baik sekarang sementara jumlah yang menggunakan UBL lebih sedikit daripada di masa depan ketika banyak orang. Juga, saya dapat membuat beberapa peningkatan pada penyimpanan EEPROM dan beberapa hal UBL, secara umum, dan akhirnya menghemat ~ 100 byte SRAM dan sedikit ruang EEPROM yang bagus, pada akhirnya.

Saya hanya perlu mencari tahu apa yang dilakukan oleh git (atau apa yang saya lakukan dengan git) sehingga saya dapat menggabungkan dengan benar perubahan yang baru saja Anda gabungkan tanpa harus mengulang semua yang telah saya lakukan. EDIT: simpanan melakukan pekerjaan untuk saya!

@ Roxy-3D - terima kasih untuk peta memori.

Saya belum dapat menemukan akhir dari heap tetapi saya baru saja mulai mencari.

Tidak! Itu bgort yang memposting itu! Saya memikirkan hal yang sama! Aku sedang mencetak anak anjing itu!

Tapi Bob ... inilah masalahnya ... Jika Anda benar-benar memiliki dukungan simbolis penuh dengan antarmuka J-Tag ... GDB seharusnya membiarkan Anda membuang memori di __BSS_END. Ia harus mengetahui simbol itu dan nilainya. Mungkin Anda harus bertarung dengannya untuk mencari cara bagaimana mewujudkannya. Tetapi ketika Anda mengkompilasi dengan opsi debug yang tepat dan semacamnya, saya berharap Anda dapat menggunakan simbol apa pun dan debugger akan tahu lokasi persis yang Anda bicarakan.

Dan JustAnother1 mengatakan kami tidak mendapatkan break point data. Itu menyebalkan. Tapi ... Meski begitu ... jika kita bisa satu langkah, dan melangkahi pemanggilan fungsi, kita bisa menemukan data yang rusak cukup cepat. Kami hanya akan menyiapkan sistem sehingga kami mengetahui urutan yang menyebabkan masalah. Dan kita dapat melakukan satu langkah (atau melangkahi) panggilan dan terus mengamati area data yang mengalami gangguan. Ini akan membutuhkan sedikit usaha ... Tapi kita bisa mencapainya dengan cukup cepat.

GDB adalah Debugger Gnu untuk GCC (Gnu's C Compiler)

@bgort - terima kasih

Apa itu GDB?

Saya belum dapat menemukan akhir dari heap tetapi saya baru saja mulai mencari.

Aktifkan opsi M100 . Ketika Anda melakukan M100 I atau M100 F , ini akan memberi tahu Anda lokasi persis dari __BSS_END dan __BRK_VAL .

@bgort - terima kasih

Jangan khawatir, Bob.

(GDB = GNU debugger)

Baru saja menguji perubahan saya pada printer dan menemukan ini: https://github.com/MarlinFirmware/Marlin/issues/6417

Steppers menjadi liar dalam gerakan apa pun.

Perlu menyelesaikan masalah ini agar saya dapat menguji dan merasa nyaman segala sesuatunya bekerja sebelum PR.

Steppers menjadi liar dalam gerakan apa pun.
Perlu menyelesaikan masalah ini agar saya dapat menguji dan merasa nyaman segala sesuatunya bekerja sebelum PR.

Sepakat!

Kode yang benar-benar merusak fungsionalitas Marlin TIDAK boleh digabungkan.

Ya - mengembalikan perubahan ke steppers.cpp memperbaiki masalah. Tidak tahu apa itu - tidak akan menggali ke dalam lembar data untuk mencoba mencari tahu. Ini adalah situasi 'Anda hancurkan, Anda perbaiki'. 👍

Kabar baiknya adalah perubahan saya tampaknya baik-baik saja. Melakukan sedikit pengecekan lagi, tapi menurutku kita baik-baik saja.

Berapa banyak perubahan dalam komit itu? Apakah hanya satu topik? Dapatkah hal-hal dibuat berfungsi kembali dengan mengembalikan penggabungan itu?

Ini dia: https://github.com/MarlinFirmware/Marlin/pull/6400

6 file diubah di 3 komit.

Tampaknya mengembalikan tidak apa-apa, tetapi sulit untuk mengetahui secara pasti.

Saya menemukan masalah stepper.cpp - ini disebabkan oleh kesalahan ketik di fastio.h, baris 141. PR # 6418.

Ini telah ditemukan dan diperbaiki oleh @benlye , @ Roxy-3D. Perubahannya memperbaikinya untuk saya.

https://github.com/MarlinFirmware/Marlin/pull/6418

Ha .. waktu yang tepat, kurasa.

Baru saja menyelesaikan PR saya. Semua yang saya uji (kebanyakan terkait UBL) tampaknya berfungsi dengan baik. Saya belum menguji konfigurasi perataan tempat tidur lainnya, tetapi saya tidak melihat mengapa ada masalah dengan mereka.

Sekitar seminggu yang lalu utas ini membahas tentang klon AVR JTAG ICE. Saya baru saja mendapatkan milik saya.

Studio 7 tidak mengenalinya.

Ada yang bisa menggunakan milik mereka?

Apakah Anda mencoba versi Atmel Studio 4. yang lebih lama misalnya?

Saya memiliki Olimex AVR-JTAG-USB. Itu adalah tiruan dari Atmel JTAG ICE (mk1). Saya baru saja mencobanya dengan Atmel Studio 7 dan Atmel Studio 6.2 dan keduanya tidak mengenalinya.

Alasannya mungkin karena perangkat ini terdeteksi oleh Windows sebagai port serial. Atmel ICE baru adalah Perangkat USB yang mencoba menjadi port serial. Mendeteksi port serial sedikit lebih sulit daripada mendeteksi perangkat USB asli. Jadi saya berasumsi jika Studios yang lebih baru mendukung perangkat lama (JTAG ICE dan JTAG ICE mk2 keduanya memiliki antarmuka serial) mereka akan memerlukan pengaturan konfigurasi untuk memberi tahu Studio port COM mana yang merupakan debugger. Saya belum menemukan pengaturan itu.

Studio lama 4. * bekerja dengan klon saya dan mereka menanyakan port COM mana yang digunakan debugger.

Penjual menjawab dan berkata untuk menggunakan Studio 4.

Saya menginstal Studio 4, mengatur port com dalam Studio 4 dan mendapatkan keheningan yang besar.

Saya harus menginstal ulang Studio 7. Sepertinya Studio 4 tidak bekerja dengan baik dengan Studio 7.

Untuk $ 8 itu sepadan dengan kesenangan hanya untuk melihat apakah klon murah akan bekerja.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat