cleanups
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
{
 | 
			
		||||
  "board": {
 | 
			
		||||
    "active_layer": 6,
 | 
			
		||||
    "active_layer_preset": "All Layers",
 | 
			
		||||
    "auto_track_width": false,
 | 
			
		||||
    "hidden_netclasses": [],
 | 
			
		||||
    "hidden_nets": [],
 | 
			
		||||
    "high_contrast_mode": 0,
 | 
			
		||||
    "net_color_mode": 1,
 | 
			
		||||
    "opacity": {
 | 
			
		||||
      "images": 0.6,
 | 
			
		||||
      "pads": 1.0,
 | 
			
		||||
      "shapes": 1.0,
 | 
			
		||||
      "tracks": 1.0,
 | 
			
		||||
      "vias": 1.0,
 | 
			
		||||
      "zones": 0.6
 | 
			
		||||
    },
 | 
			
		||||
    "selection_filter": {
 | 
			
		||||
      "dimensions": true,
 | 
			
		||||
      "footprints": true,
 | 
			
		||||
      "graphics": true,
 | 
			
		||||
      "keepouts": true,
 | 
			
		||||
      "lockedItems": false,
 | 
			
		||||
      "otherItems": true,
 | 
			
		||||
      "pads": true,
 | 
			
		||||
      "text": true,
 | 
			
		||||
      "tracks": true,
 | 
			
		||||
      "vias": true,
 | 
			
		||||
      "zones": true
 | 
			
		||||
    },
 | 
			
		||||
    "visible_items": [
 | 
			
		||||
      "vias",
 | 
			
		||||
      "footprint_text",
 | 
			
		||||
      "footprint_anchors",
 | 
			
		||||
      "grid",
 | 
			
		||||
      "footprints_front",
 | 
			
		||||
      "footprints_back",
 | 
			
		||||
      "footprint_values",
 | 
			
		||||
      "footprint_references",
 | 
			
		||||
      "tracks",
 | 
			
		||||
      "drc_errors",
 | 
			
		||||
      "drawing_sheet",
 | 
			
		||||
      "bitmaps",
 | 
			
		||||
      "pads",
 | 
			
		||||
      "zones",
 | 
			
		||||
      "drc_warnings",
 | 
			
		||||
      "locked_item_shadows",
 | 
			
		||||
      "conflict_shadows",
 | 
			
		||||
      "shapes"
 | 
			
		||||
    ],
 | 
			
		||||
    "visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
 | 
			
		||||
    "zone_display_mode": 1
 | 
			
		||||
  },
 | 
			
		||||
  "git": {
 | 
			
		||||
    "repo_type": "",
 | 
			
		||||
    "repo_username": "",
 | 
			
		||||
    "ssh_key": ""
 | 
			
		||||
  },
 | 
			
		||||
  "meta": {
 | 
			
		||||
    "filename": "Sensors.kicad_prl",
 | 
			
		||||
    "version": 5
 | 
			
		||||
  },
 | 
			
		||||
  "net_inspector_panel": {
 | 
			
		||||
    "col_hidden": [
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false,
 | 
			
		||||
      false
 | 
			
		||||
    ],
 | 
			
		||||
    "col_order": [
 | 
			
		||||
      0,
 | 
			
		||||
      1,
 | 
			
		||||
      2,
 | 
			
		||||
      3,
 | 
			
		||||
      4,
 | 
			
		||||
      5,
 | 
			
		||||
      6,
 | 
			
		||||
      7,
 | 
			
		||||
      8,
 | 
			
		||||
      9,
 | 
			
		||||
      10,
 | 
			
		||||
      11
 | 
			
		||||
    ],
 | 
			
		||||
    "col_widths": [
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0,
 | 
			
		||||
      0
 | 
			
		||||
    ],
 | 
			
		||||
    "custom_group_rules": [],
 | 
			
		||||
    "expanded_rows": [],
 | 
			
		||||
    "filter_by_net_name": true,
 | 
			
		||||
    "filter_by_netclass": true,
 | 
			
		||||
    "filter_text": "",
 | 
			
		||||
    "group_by_constraint": false,
 | 
			
		||||
    "group_by_netclass": false,
 | 
			
		||||
    "show_unconnected_nets": false,
 | 
			
		||||
    "show_zero_pad_nets": false,
 | 
			
		||||
    "sort_ascending": true,
 | 
			
		||||
    "sorting_column": 0
 | 
			
		||||
  },
 | 
			
		||||
  "open_jobsets": [],
 | 
			
		||||
  "project": {
 | 
			
		||||
    "files": []
 | 
			
		||||
  },
 | 
			
		||||
  "schematic": {
 | 
			
		||||
    "selection_filter": {
 | 
			
		||||
      "graphics": true,
 | 
			
		||||
      "images": true,
 | 
			
		||||
      "labels": true,
 | 
			
		||||
      "lockedItems": false,
 | 
			
		||||
      "otherItems": true,
 | 
			
		||||
      "pins": true,
 | 
			
		||||
      "symbols": true,
 | 
			
		||||
      "text": true,
 | 
			
		||||
      "wires": true
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,675 @@
 | 
			
		||||
{
 | 
			
		||||
  "board": {
 | 
			
		||||
    "3dviewports": [],
 | 
			
		||||
    "design_settings": {
 | 
			
		||||
      "defaults": {
 | 
			
		||||
        "apply_defaults_to_fp_fields": false,
 | 
			
		||||
        "apply_defaults_to_fp_shapes": false,
 | 
			
		||||
        "apply_defaults_to_fp_text": false,
 | 
			
		||||
        "board_outline_line_width": 0.05,
 | 
			
		||||
        "copper_line_width": 0.2,
 | 
			
		||||
        "copper_text_italic": false,
 | 
			
		||||
        "copper_text_size_h": 1.5,
 | 
			
		||||
        "copper_text_size_v": 1.5,
 | 
			
		||||
        "copper_text_thickness": 0.3,
 | 
			
		||||
        "copper_text_upright": false,
 | 
			
		||||
        "courtyard_line_width": 0.05,
 | 
			
		||||
        "dimension_precision": 4,
 | 
			
		||||
        "dimension_units": 3,
 | 
			
		||||
        "dimensions": {
 | 
			
		||||
          "arrow_length": 1270000,
 | 
			
		||||
          "extension_offset": 500000,
 | 
			
		||||
          "keep_text_aligned": true,
 | 
			
		||||
          "suppress_zeroes": true,
 | 
			
		||||
          "text_position": 0,
 | 
			
		||||
          "units_format": 0
 | 
			
		||||
        },
 | 
			
		||||
        "fab_line_width": 0.1,
 | 
			
		||||
        "fab_text_italic": false,
 | 
			
		||||
        "fab_text_size_h": 1.0,
 | 
			
		||||
        "fab_text_size_v": 1.0,
 | 
			
		||||
        "fab_text_thickness": 0.15,
 | 
			
		||||
        "fab_text_upright": false,
 | 
			
		||||
        "other_line_width": 0.1,
 | 
			
		||||
        "other_text_italic": false,
 | 
			
		||||
        "other_text_size_h": 1.0,
 | 
			
		||||
        "other_text_size_v": 1.0,
 | 
			
		||||
        "other_text_thickness": 0.15,
 | 
			
		||||
        "other_text_upright": false,
 | 
			
		||||
        "pads": {
 | 
			
		||||
          "drill": 0.8,
 | 
			
		||||
          "height": 1.27,
 | 
			
		||||
          "width": 2.54
 | 
			
		||||
        },
 | 
			
		||||
        "silk_line_width": 0.1,
 | 
			
		||||
        "silk_text_italic": false,
 | 
			
		||||
        "silk_text_size_h": 1.0,
 | 
			
		||||
        "silk_text_size_v": 1.0,
 | 
			
		||||
        "silk_text_thickness": 0.1,
 | 
			
		||||
        "silk_text_upright": false,
 | 
			
		||||
        "zones": {
 | 
			
		||||
          "min_clearance": 0.5
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "diff_pair_dimensions": [
 | 
			
		||||
        {
 | 
			
		||||
          "gap": 0.0,
 | 
			
		||||
          "via_gap": 0.0,
 | 
			
		||||
          "width": 0.0
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "drc_exclusions": [],
 | 
			
		||||
      "meta": {
 | 
			
		||||
        "version": 2
 | 
			
		||||
      },
 | 
			
		||||
      "rule_severities": {
 | 
			
		||||
        "annular_width": "error",
 | 
			
		||||
        "clearance": "error",
 | 
			
		||||
        "connection_width": "warning",
 | 
			
		||||
        "copper_edge_clearance": "error",
 | 
			
		||||
        "copper_sliver": "warning",
 | 
			
		||||
        "courtyards_overlap": "error",
 | 
			
		||||
        "creepage": "error",
 | 
			
		||||
        "diff_pair_gap_out_of_range": "error",
 | 
			
		||||
        "diff_pair_uncoupled_length_too_long": "error",
 | 
			
		||||
        "drill_out_of_range": "error",
 | 
			
		||||
        "duplicate_footprints": "warning",
 | 
			
		||||
        "extra_footprint": "warning",
 | 
			
		||||
        "footprint": "error",
 | 
			
		||||
        "footprint_filters_mismatch": "ignore",
 | 
			
		||||
        "footprint_symbol_mismatch": "warning",
 | 
			
		||||
        "footprint_type_mismatch": "ignore",
 | 
			
		||||
        "hole_clearance": "error",
 | 
			
		||||
        "hole_to_hole": "warning",
 | 
			
		||||
        "holes_co_located": "warning",
 | 
			
		||||
        "invalid_outline": "error",
 | 
			
		||||
        "isolated_copper": "warning",
 | 
			
		||||
        "item_on_disabled_layer": "error",
 | 
			
		||||
        "items_not_allowed": "error",
 | 
			
		||||
        "length_out_of_range": "error",
 | 
			
		||||
        "lib_footprint_issues": "warning",
 | 
			
		||||
        "lib_footprint_mismatch": "warning",
 | 
			
		||||
        "malformed_courtyard": "ignore",
 | 
			
		||||
        "microvia_drill_out_of_range": "error",
 | 
			
		||||
        "mirrored_text_on_front_layer": "warning",
 | 
			
		||||
        "missing_courtyard": "ignore",
 | 
			
		||||
        "missing_footprint": "warning",
 | 
			
		||||
        "net_conflict": "warning",
 | 
			
		||||
        "nonmirrored_text_on_back_layer": "warning",
 | 
			
		||||
        "npth_inside_courtyard": "ignore",
 | 
			
		||||
        "padstack": "warning",
 | 
			
		||||
        "pth_inside_courtyard": "ignore",
 | 
			
		||||
        "shorting_items": "error",
 | 
			
		||||
        "silk_edge_clearance": "ignore",
 | 
			
		||||
        "silk_over_copper": "warning",
 | 
			
		||||
        "silk_overlap": "warning",
 | 
			
		||||
        "skew_out_of_range": "error",
 | 
			
		||||
        "solder_mask_bridge": "error",
 | 
			
		||||
        "starved_thermal": "warning",
 | 
			
		||||
        "text_height": "warning",
 | 
			
		||||
        "text_on_edge_cuts": "error",
 | 
			
		||||
        "text_thickness": "warning",
 | 
			
		||||
        "through_hole_pad_without_hole": "error",
 | 
			
		||||
        "too_many_vias": "error",
 | 
			
		||||
        "track_angle": "error",
 | 
			
		||||
        "track_dangling": "warning",
 | 
			
		||||
        "track_segment_length": "error",
 | 
			
		||||
        "track_width": "error",
 | 
			
		||||
        "tracks_crossing": "error",
 | 
			
		||||
        "unconnected_items": "error",
 | 
			
		||||
        "unresolved_variable": "error",
 | 
			
		||||
        "via_dangling": "warning",
 | 
			
		||||
        "zones_intersect": "error"
 | 
			
		||||
      },
 | 
			
		||||
      "rules": {
 | 
			
		||||
        "max_error": 0.005,
 | 
			
		||||
        "min_clearance": 0.0,
 | 
			
		||||
        "min_connection": 0.0,
 | 
			
		||||
        "min_copper_edge_clearance": 0.5,
 | 
			
		||||
        "min_groove_width": 0.0,
 | 
			
		||||
        "min_hole_clearance": 0.15,
 | 
			
		||||
        "min_hole_to_hole": 0.25,
 | 
			
		||||
        "min_microvia_diameter": 0.2,
 | 
			
		||||
        "min_microvia_drill": 0.1,
 | 
			
		||||
        "min_resolved_spokes": 2,
 | 
			
		||||
        "min_silk_clearance": 0.0,
 | 
			
		||||
        "min_text_height": 0.8,
 | 
			
		||||
        "min_text_thickness": 0.08,
 | 
			
		||||
        "min_through_hole_diameter": 0.25,
 | 
			
		||||
        "min_track_width": 0.0,
 | 
			
		||||
        "min_via_annular_width": 0.05,
 | 
			
		||||
        "min_via_diameter": 0.25,
 | 
			
		||||
        "solder_mask_to_copper_clearance": 0.005,
 | 
			
		||||
        "use_height_for_length_calcs": true
 | 
			
		||||
      },
 | 
			
		||||
      "teardrop_options": [
 | 
			
		||||
        {
 | 
			
		||||
          "td_onpthpad": true,
 | 
			
		||||
          "td_onroundshapesonly": false,
 | 
			
		||||
          "td_onsmdpad": true,
 | 
			
		||||
          "td_ontrackend": false,
 | 
			
		||||
          "td_onvia": true
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "teardrop_parameters": [
 | 
			
		||||
        {
 | 
			
		||||
          "td_allow_use_two_tracks": true,
 | 
			
		||||
          "td_curve_segcount": 0,
 | 
			
		||||
          "td_height_ratio": 1.0,
 | 
			
		||||
          "td_length_ratio": 0.5,
 | 
			
		||||
          "td_maxheight": 2.0,
 | 
			
		||||
          "td_maxlen": 1.0,
 | 
			
		||||
          "td_on_pad_in_zone": false,
 | 
			
		||||
          "td_target_name": "td_round_shape",
 | 
			
		||||
          "td_width_to_size_filter_ratio": 0.9
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "td_allow_use_two_tracks": true,
 | 
			
		||||
          "td_curve_segcount": 0,
 | 
			
		||||
          "td_height_ratio": 1.0,
 | 
			
		||||
          "td_length_ratio": 0.5,
 | 
			
		||||
          "td_maxheight": 2.0,
 | 
			
		||||
          "td_maxlen": 1.0,
 | 
			
		||||
          "td_on_pad_in_zone": false,
 | 
			
		||||
          "td_target_name": "td_rect_shape",
 | 
			
		||||
          "td_width_to_size_filter_ratio": 0.9
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "td_allow_use_two_tracks": true,
 | 
			
		||||
          "td_curve_segcount": 0,
 | 
			
		||||
          "td_height_ratio": 1.0,
 | 
			
		||||
          "td_length_ratio": 0.5,
 | 
			
		||||
          "td_maxheight": 2.0,
 | 
			
		||||
          "td_maxlen": 1.0,
 | 
			
		||||
          "td_on_pad_in_zone": false,
 | 
			
		||||
          "td_target_name": "td_track_end",
 | 
			
		||||
          "td_width_to_size_filter_ratio": 0.9
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "track_widths": [
 | 
			
		||||
        0.0,
 | 
			
		||||
        0.1,
 | 
			
		||||
        0.2,
 | 
			
		||||
        0.5
 | 
			
		||||
      ],
 | 
			
		||||
      "tuning_pattern_settings": {
 | 
			
		||||
        "diff_pair_defaults": {
 | 
			
		||||
          "corner_radius_percentage": 80,
 | 
			
		||||
          "corner_style": 1,
 | 
			
		||||
          "max_amplitude": 1.0,
 | 
			
		||||
          "min_amplitude": 0.2,
 | 
			
		||||
          "single_sided": false,
 | 
			
		||||
          "spacing": 1.0
 | 
			
		||||
        },
 | 
			
		||||
        "diff_pair_skew_defaults": {
 | 
			
		||||
          "corner_radius_percentage": 80,
 | 
			
		||||
          "corner_style": 1,
 | 
			
		||||
          "max_amplitude": 1.0,
 | 
			
		||||
          "min_amplitude": 0.2,
 | 
			
		||||
          "single_sided": false,
 | 
			
		||||
          "spacing": 0.6
 | 
			
		||||
        },
 | 
			
		||||
        "single_track_defaults": {
 | 
			
		||||
          "corner_radius_percentage": 80,
 | 
			
		||||
          "corner_style": 1,
 | 
			
		||||
          "max_amplitude": 1.0,
 | 
			
		||||
          "min_amplitude": 0.2,
 | 
			
		||||
          "single_sided": false,
 | 
			
		||||
          "spacing": 0.6
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "via_dimensions": [
 | 
			
		||||
        {
 | 
			
		||||
          "diameter": 0.0,
 | 
			
		||||
          "drill": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "diameter": 0.3,
 | 
			
		||||
          "drill": 0.25
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "zones_allow_external_fillets": false
 | 
			
		||||
    },
 | 
			
		||||
    "ipc2581": {
 | 
			
		||||
      "dist": "",
 | 
			
		||||
      "distpn": "",
 | 
			
		||||
      "internal_id": "",
 | 
			
		||||
      "mfg": "",
 | 
			
		||||
      "mpn": ""
 | 
			
		||||
    },
 | 
			
		||||
    "layer_pairs": [],
 | 
			
		||||
    "layer_presets": [],
 | 
			
		||||
    "viewports": []
 | 
			
		||||
  },
 | 
			
		||||
  "boards": [],
 | 
			
		||||
  "cvpcb": {
 | 
			
		||||
    "equivalence_files": []
 | 
			
		||||
  },
 | 
			
		||||
  "erc": {
 | 
			
		||||
    "erc_exclusions": [],
 | 
			
		||||
    "meta": {
 | 
			
		||||
      "version": 0
 | 
			
		||||
    },
 | 
			
		||||
    "pin_map": [
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        2,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        1,
 | 
			
		||||
        2,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        1,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        1,
 | 
			
		||||
        0,
 | 
			
		||||
        2,
 | 
			
		||||
        0,
 | 
			
		||||
        0,
 | 
			
		||||
        2
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2,
 | 
			
		||||
        2
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "rule_severities": {
 | 
			
		||||
      "bus_definition_conflict": "error",
 | 
			
		||||
      "bus_entry_needed": "error",
 | 
			
		||||
      "bus_to_bus_conflict": "error",
 | 
			
		||||
      "bus_to_net_conflict": "error",
 | 
			
		||||
      "different_unit_footprint": "error",
 | 
			
		||||
      "different_unit_net": "error",
 | 
			
		||||
      "duplicate_reference": "error",
 | 
			
		||||
      "duplicate_sheet_names": "error",
 | 
			
		||||
      "endpoint_off_grid": "warning",
 | 
			
		||||
      "extra_units": "error",
 | 
			
		||||
      "footprint_filter": "ignore",
 | 
			
		||||
      "footprint_link_issues": "warning",
 | 
			
		||||
      "four_way_junction": "ignore",
 | 
			
		||||
      "global_label_dangling": "warning",
 | 
			
		||||
      "hier_label_mismatch": "error",
 | 
			
		||||
      "label_dangling": "error",
 | 
			
		||||
      "label_multiple_wires": "warning",
 | 
			
		||||
      "lib_symbol_issues": "warning",
 | 
			
		||||
      "lib_symbol_mismatch": "warning",
 | 
			
		||||
      "missing_bidi_pin": "warning",
 | 
			
		||||
      "missing_input_pin": "warning",
 | 
			
		||||
      "missing_power_pin": "error",
 | 
			
		||||
      "missing_unit": "warning",
 | 
			
		||||
      "multiple_net_names": "warning",
 | 
			
		||||
      "net_not_bus_member": "warning",
 | 
			
		||||
      "no_connect_connected": "warning",
 | 
			
		||||
      "no_connect_dangling": "warning",
 | 
			
		||||
      "pin_not_connected": "error",
 | 
			
		||||
      "pin_not_driven": "error",
 | 
			
		||||
      "pin_to_pin": "ignore",
 | 
			
		||||
      "power_pin_not_driven": "ignore",
 | 
			
		||||
      "same_local_global_label": "warning",
 | 
			
		||||
      "similar_label_and_power": "warning",
 | 
			
		||||
      "similar_labels": "warning",
 | 
			
		||||
      "similar_power": "warning",
 | 
			
		||||
      "simulation_model_issue": "ignore",
 | 
			
		||||
      "single_global_label": "ignore",
 | 
			
		||||
      "unannotated": "error",
 | 
			
		||||
      "unconnected_wire_endpoint": "warning",
 | 
			
		||||
      "undefined_netclass": "error",
 | 
			
		||||
      "unit_value_mismatch": "error",
 | 
			
		||||
      "unresolved_variable": "error",
 | 
			
		||||
      "wire_dangling": "error"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "libraries": {
 | 
			
		||||
    "pinned_footprint_libs": [],
 | 
			
		||||
    "pinned_symbol_libs": []
 | 
			
		||||
  },
 | 
			
		||||
  "meta": {
 | 
			
		||||
    "filename": "Sensors.kicad_pro",
 | 
			
		||||
    "version": 3
 | 
			
		||||
  },
 | 
			
		||||
  "net_settings": {
 | 
			
		||||
    "classes": [
 | 
			
		||||
      {
 | 
			
		||||
        "bus_width": 12,
 | 
			
		||||
        "clearance": 0.15,
 | 
			
		||||
        "diff_pair_gap": 0.25,
 | 
			
		||||
        "diff_pair_via_gap": 0.25,
 | 
			
		||||
        "diff_pair_width": 0.2,
 | 
			
		||||
        "line_style": 0,
 | 
			
		||||
        "microvia_diameter": 0.3,
 | 
			
		||||
        "microvia_drill": 0.1,
 | 
			
		||||
        "name": "Default",
 | 
			
		||||
        "pcb_color": "rgba(0, 0, 0, 0.000)",
 | 
			
		||||
        "priority": 2147483647,
 | 
			
		||||
        "schematic_color": "rgba(0, 0, 0, 0.000)",
 | 
			
		||||
        "track_width": 0.2,
 | 
			
		||||
        "via_diameter": 0.6,
 | 
			
		||||
        "via_drill": 0.3,
 | 
			
		||||
        "wire_width": 6
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "meta": {
 | 
			
		||||
      "version": 4
 | 
			
		||||
    },
 | 
			
		||||
    "net_colors": null,
 | 
			
		||||
    "netclass_assignments": null,
 | 
			
		||||
    "netclass_patterns": []
 | 
			
		||||
  },
 | 
			
		||||
  "pcbnew": {
 | 
			
		||||
    "last_paths": {
 | 
			
		||||
      "gencad": "",
 | 
			
		||||
      "idf": "",
 | 
			
		||||
      "netlist": "",
 | 
			
		||||
      "plot": "",
 | 
			
		||||
      "pos_files": "",
 | 
			
		||||
      "specctra_dsn": "",
 | 
			
		||||
      "step": "Sensors.step",
 | 
			
		||||
      "svg": "",
 | 
			
		||||
      "vrml": ""
 | 
			
		||||
    },
 | 
			
		||||
    "page_layout_descr_file": ""
 | 
			
		||||
  },
 | 
			
		||||
  "schematic": {
 | 
			
		||||
    "annotate_start_num": 0,
 | 
			
		||||
    "bom_export_filename": "${PROJECTNAME}.csv",
 | 
			
		||||
    "bom_fmt_presets": [],
 | 
			
		||||
    "bom_fmt_settings": {
 | 
			
		||||
      "field_delimiter": ",",
 | 
			
		||||
      "keep_line_breaks": false,
 | 
			
		||||
      "keep_tabs": false,
 | 
			
		||||
      "name": "CSV",
 | 
			
		||||
      "ref_delimiter": ",",
 | 
			
		||||
      "ref_range_delimiter": "",
 | 
			
		||||
      "string_delimiter": "\""
 | 
			
		||||
    },
 | 
			
		||||
    "bom_presets": [],
 | 
			
		||||
    "bom_settings": {
 | 
			
		||||
      "exclude_dnp": false,
 | 
			
		||||
      "fields_ordered": [
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "Reference",
 | 
			
		||||
          "name": "Reference",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": true,
 | 
			
		||||
          "label": "Value",
 | 
			
		||||
          "name": "Value",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": true,
 | 
			
		||||
          "label": "Footprint",
 | 
			
		||||
          "name": "Footprint",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "Datasheet",
 | 
			
		||||
          "name": "Datasheet",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "Description",
 | 
			
		||||
          "name": "Description",
 | 
			
		||||
          "show": false
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "Qty",
 | 
			
		||||
          "name": "${QUANTITY}",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "#",
 | 
			
		||||
          "name": "${ITEM_NUMBER}",
 | 
			
		||||
          "show": false
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "LCSC_PART_NUMBER",
 | 
			
		||||
          "name": "LCSC_PART_NUMBER",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "Sim.Device",
 | 
			
		||||
          "name": "Sim.Device",
 | 
			
		||||
          "show": false
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "Sim.Pins",
 | 
			
		||||
          "name": "Sim.Pins",
 | 
			
		||||
          "show": false
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": false,
 | 
			
		||||
          "label": "Sim.Type",
 | 
			
		||||
          "name": "Sim.Type",
 | 
			
		||||
          "show": false
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": true,
 | 
			
		||||
          "label": "DNP",
 | 
			
		||||
          "name": "${DNP}",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": true,
 | 
			
		||||
          "label": "Exclude from BOM",
 | 
			
		||||
          "name": "${EXCLUDE_FROM_BOM}",
 | 
			
		||||
          "show": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "group_by": true,
 | 
			
		||||
          "label": "Exclude from Board",
 | 
			
		||||
          "name": "${EXCLUDE_FROM_BOARD}",
 | 
			
		||||
          "show": true
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "filter_string": "",
 | 
			
		||||
      "group_symbols": true,
 | 
			
		||||
      "include_excluded_from_bom": true,
 | 
			
		||||
      "name": "",
 | 
			
		||||
      "sort_asc": true,
 | 
			
		||||
      "sort_field": "Reference"
 | 
			
		||||
    },
 | 
			
		||||
    "connection_grid_size": 50.0,
 | 
			
		||||
    "drawing": {
 | 
			
		||||
      "dashed_lines_dash_length_ratio": 12.0,
 | 
			
		||||
      "dashed_lines_gap_length_ratio": 3.0,
 | 
			
		||||
      "default_line_thickness": 6.0,
 | 
			
		||||
      "default_text_size": 50.0,
 | 
			
		||||
      "field_names": [],
 | 
			
		||||
      "intersheets_ref_own_page": false,
 | 
			
		||||
      "intersheets_ref_prefix": "",
 | 
			
		||||
      "intersheets_ref_short": false,
 | 
			
		||||
      "intersheets_ref_show": false,
 | 
			
		||||
      "intersheets_ref_suffix": "",
 | 
			
		||||
      "junction_size_choice": 3,
 | 
			
		||||
      "label_size_ratio": 0.375,
 | 
			
		||||
      "operating_point_overlay_i_precision": 3,
 | 
			
		||||
      "operating_point_overlay_i_range": "~A",
 | 
			
		||||
      "operating_point_overlay_v_precision": 3,
 | 
			
		||||
      "operating_point_overlay_v_range": "~V",
 | 
			
		||||
      "overbar_offset_ratio": 1.23,
 | 
			
		||||
      "pin_symbol_size": 25.0,
 | 
			
		||||
      "text_offset_ratio": 0.15
 | 
			
		||||
    },
 | 
			
		||||
    "legacy_lib_dir": "",
 | 
			
		||||
    "legacy_lib_list": [],
 | 
			
		||||
    "meta": {
 | 
			
		||||
      "version": 1
 | 
			
		||||
    },
 | 
			
		||||
    "net_format_name": "",
 | 
			
		||||
    "page_layout_descr_file": "",
 | 
			
		||||
    "plot_directory": "",
 | 
			
		||||
    "space_save_all_events": true,
 | 
			
		||||
    "spice_current_sheet_as_root": false,
 | 
			
		||||
    "spice_external_command": "spice \"%I\"",
 | 
			
		||||
    "spice_model_current_sheet_as_root": true,
 | 
			
		||||
    "spice_save_all_currents": false,
 | 
			
		||||
    "spice_save_all_dissipations": false,
 | 
			
		||||
    "spice_save_all_voltages": false,
 | 
			
		||||
    "subpart_first_id": 65,
 | 
			
		||||
    "subpart_id_separator": 0
 | 
			
		||||
  },
 | 
			
		||||
  "sheets": [
 | 
			
		||||
    [
 | 
			
		||||
      "46346c04-8bed-48b4-837b-9342dd403232",
 | 
			
		||||
      "Root"
 | 
			
		||||
    ]
 | 
			
		||||
  ],
 | 
			
		||||
  "text_variables": {}
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										35338
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/Sensors/Sensors.step
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35338
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/Sensors/Sensors.step
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"EXTRA_LAYERS": "", "ALL_ACTIVE_LAYERS": false, "EXTEND_EDGE_CUT": false, "ALTERNATIVE_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": false}
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
(fp_lib_table
 | 
			
		||||
  (version 7)
 | 
			
		||||
  (lib (name "Sensor")(type "KiCad")(uri "/home/empire/workspace/PlantCtrl/board/modules/Sensors/Sensors/Sensor.pretty")(options "")(descr ""))
 | 
			
		||||
)
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
(sym_lib_table
 | 
			
		||||
  (version 7)
 | 
			
		||||
  (lib (name "Modules")(type "KiCad")(uri "/home/empire/workspace/PlantCtrl/board/modules/Modules.kicad_sym")(options "")(descr ""))
 | 
			
		||||
)
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
[build]
 | 
			
		||||
target = "riscv32imc-unknown-none-elf"
 | 
			
		||||
 | 
			
		||||
[target."riscv32imc-unknown-none-elf"]
 | 
			
		||||
rustflags = [
 | 
			
		||||
#  "-C", "link-arg=-Tlink.x",
 | 
			
		||||
]
 | 
			
		||||
# runner = "riscv64-unknown-elf-gdb -q -x openocd.gdb"
 | 
			
		||||
# runner = "riscv-none-embed-gdb -q -x openocd.gdb"
 | 
			
		||||
# runner = "gdb -q -x openocd.gdb"
 | 
			
		||||
# runner = "wlink -v flash"
 | 
			
		||||
 | 
			
		||||
runner = "wlink -v flash --enable-sdi-print --watch-serial --erase"
 | 
			
		||||
# runner = "wlink -v flash"
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
;;; .doomrc --- doom runtime config -*- mode: emacs-lisp; lexical-binding: t; -*-
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
;;; Code:
 | 
			
		||||
(require 'doom) ; be silent, byte-compiler
 | 
			
		||||
 | 
			
		||||
(after! dape
 | 
			
		||||
        (add-to-list
 | 
			
		||||
        'dape-configs
 | 
			
		||||
        `(gdb-dap-openocd
 | 
			
		||||
        ensure (lambda (config)
 | 
			
		||||
                (dape-ensure-command config)
 | 
			
		||||
                (let* ((default-directory
 | 
			
		||||
                        (or (dape-config-get config 'command-cwd)
 | 
			
		||||
                                default-directory))
 | 
			
		||||
                        (command (dape-config-get config 'command))
 | 
			
		||||
                        (output (shell-command-to-string (format "%s --version" command)))
 | 
			
		||||
                        (version (save-match-data
 | 
			
		||||
                                        (when (string-match "GNU gdb \\(?:(.*) \\)?\\([0-9.]+\\)" output)
 | 
			
		||||
                                        (string-to-number (match-string 1 output))))))
 | 
			
		||||
                        (unless (>= version 14.1)
 | 
			
		||||
                        (user-error "Requires gdb version >= 14.1"))))
 | 
			
		||||
        modes ()
 | 
			
		||||
        command-cwd dape-command-cwd
 | 
			
		||||
        command "gdb"
 | 
			
		||||
        command-args ("--interpreter=dap")
 | 
			
		||||
        :request nil
 | 
			
		||||
        :program nil
 | 
			
		||||
        :args []
 | 
			
		||||
        :stopAtBeginningOfMainSubprogram nil))
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
;;; .doomrc ends here
 | 
			
		||||
@@ -0,0 +1,7 @@
 | 
			
		||||
target extended-remote :3333
 | 
			
		||||
set remotetimeout 2000
 | 
			
		||||
 | 
			
		||||
#symbol-file target/riscv32imc-unknown-none-elf/release/ch32v203-examples
 | 
			
		||||
file target/riscv32imc-unknown-none-elf/release/bms
 | 
			
		||||
 | 
			
		||||
monitor reset halt
 | 
			
		||||
							
								
								
									
										1
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
target
 | 
			
		||||
							
								
								
									
										8
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
# Default ignored files
 | 
			
		||||
/shelf/
 | 
			
		||||
/workspace.xml
 | 
			
		||||
# Editor-based HTTP Client requests
 | 
			
		||||
/httpRequests/
 | 
			
		||||
# Datasource local storage ignored files
 | 
			
		||||
/dataSources/
 | 
			
		||||
/dataSources.local.xml
 | 
			
		||||
							
								
								
									
										11
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/ch32-sensor.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/ch32-sensor.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<module type="EMPTY_MODULE" version="4">
 | 
			
		||||
  <component name="NewModuleRootManager">
 | 
			
		||||
    <content url="file://$MODULE_DIR$">
 | 
			
		||||
      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
 | 
			
		||||
      <excludeFolder url="file://$MODULE_DIR$/target" />
 | 
			
		||||
    </content>
 | 
			
		||||
    <orderEntry type="inheritedJdk" />
 | 
			
		||||
    <orderEntry type="sourceFolder" forTests="false" />
 | 
			
		||||
  </component>
 | 
			
		||||
</module>
 | 
			
		||||
							
								
								
									
										8
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="ProjectModuleManager">
 | 
			
		||||
    <modules>
 | 
			
		||||
      <module fileurl="file://$PROJECT_DIR$/.idea/ch32-sensor.iml" filepath="$PROJECT_DIR$/.idea/ch32-sensor.iml" />
 | 
			
		||||
    </modules>
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										7
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="VcsDirectoryMappings">
 | 
			
		||||
    <mapping directory="$PROJECT_DIR$/../../../.." vcs="Git" />
 | 
			
		||||
    <mapping directory="$PROJECT_DIR$/../../../../website/themes/blowfish" vcs="Git" />
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
@@ -0,0 +1,43 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "bms"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
ch32-hal = { git = "https://github.com/ch32-rs/ch32-hal", features = [
 | 
			
		||||
    "ch32v203c8t6",
 | 
			
		||||
    "memory-x",
 | 
			
		||||
    "embassy",
 | 
			
		||||
    "rt",
 | 
			
		||||
    "time-driver-tim2",
 | 
			
		||||
], default-features = false }
 | 
			
		||||
 | 
			
		||||
embassy-executor = { version = "0.7.0", features = [
 | 
			
		||||
    "arch-riscv32",
 | 
			
		||||
    "executor-thread",
 | 
			
		||||
] }
 | 
			
		||||
 | 
			
		||||
embassy-time = { version = "0.4.0" }
 | 
			
		||||
embassy-usb = { version = "0.3.0" }
 | 
			
		||||
embassy-futures = { version = "0.1.0" }
 | 
			
		||||
 | 
			
		||||
# This is okay because we should automatically use whatever ch32-hal uses
 | 
			
		||||
qingke-rt = "*"
 | 
			
		||||
qingke = "*"
 | 
			
		||||
 | 
			
		||||
panic-halt = "1.0"
 | 
			
		||||
 | 
			
		||||
embedded-hal = "1.0.0"
 | 
			
		||||
heapless = "0.8.0"
 | 
			
		||||
micromath = { version = "2.1.0", features = ["num-traits"] }
 | 
			
		||||
embedded-can = "0.4.1"
 | 
			
		||||
 | 
			
		||||
[profile.dev]
 | 
			
		||||
#lto = true
 | 
			
		||||
opt-level = 1
 | 
			
		||||
 | 
			
		||||
[profile.release]
 | 
			
		||||
strip = false   # symbols are not flashed to the microcontroller, so don't strip them.
 | 
			
		||||
#lto = true
 | 
			
		||||
debug = true
 | 
			
		||||
opt-level = "z" # Optimize for size.
 | 
			
		||||
@@ -0,0 +1,72 @@
 | 
			
		||||
 | 
			
		||||
# ch32v203-bms
 | 
			
		||||
 | 
			
		||||
A simple battery management controller software.
 | 
			
		||||
 | 
			
		||||
## CAN bus and hardware address
 | 
			
		||||
 | 
			
		||||
This firmware exposes a CAN interface on the CH32V203 and uses 4 hardware address pins to allow up to 16 sensors on the same bus.
 | 
			
		||||
 | 
			
		||||
- CAN pins (default mapping):
 | 
			
		||||
  - CAN RX: PA11
 | 
			
		||||
  - CAN TX: PA12
 | 
			
		||||
- Address select pins (with internal pull-ups):
 | 
			
		||||
  - A0: PA0
 | 
			
		||||
  - A1: PA1
 | 
			
		||||
  - A2: PA2
 | 
			
		||||
  - A3: PA3
 | 
			
		||||
 | 
			
		||||
Wire each address pin to GND to set its corresponding bit to 1. The 4-bit address range is 0..15. The node’s CAN Standard ID is `0x100 | addr`, i.e. 0x100..0x10F. The CAN acceptance filter is configured to only accept frames with the node’s own ID.
 | 
			
		||||
 | 
			
		||||
Adjust the pins above if your PCB routes CAN or address lines to different pads.
 | 
			
		||||
 | 
			
		||||
## 555 timer (software) emulation mode
 | 
			
		||||
 | 
			
		||||
To save the BOM cost of a classic NE555 in simple oscillator applications, this firmware implements a minimal 555-like Schmitt trigger using the MCU’s ADC and a GPIO, approximating the behavior when the capacitor is charged/discharged via Q through a resistor, and the combined Trigger/Threshold senses the capacitor node.
 | 
			
		||||
 | 
			
		||||
- Pins used:
 | 
			
		||||
  - Q output: PB2
 | 
			
		||||
  - Combined Trigger/Threshold (ADC input): PA0
 | 
			
		||||
- Wiring:
 | 
			
		||||
  - PB2 (Q) -> series resistor R -> capacitor node
 | 
			
		||||
  - Capacitor node -> capacitor to GND
 | 
			
		||||
  - Capacitor node -> PA0 (ADC input)
 | 
			
		||||
- Behavior:
 | 
			
		||||
  - When ADC(PA0) <= ~1/3 Vref, PB2 is driven High.
 | 
			
		||||
  - When ADC(PA0) >= ~2/3 Vref, PB2 is driven Low.
 | 
			
		||||
  - Hysteresis avoids chatter; the actual charge/discharge dynamics follow your chosen R and C.
 | 
			
		||||
- Notes:
 | 
			
		||||
  - Use an appropriate resistor from PB2 to the capacitor to set oscillation frequency. Start with 10k..100k and adjust with C.
 | 
			
		||||
  - Ensure PA0 is routed to the capacitor node and left high impedance (no strong pull-ups/downs) so the ADC can sense the analog voltage.
 | 
			
		||||
  - PB2 drives the on-board LED (if present), so the LED might blink at the oscillation frequency.
 | 
			
		||||
 | 
			
		||||
This mode is implemented in `src/main.rs` using `hal::adc::Adc::convert(&mut pin, SampleTime::...)` to take periodic samples and a simple state machine to toggle the Q output based on ~1/3 and ~2/3 Vref thresholds.
 | 
			
		||||
 | 
			
		||||
## Building
 | 
			
		||||
 | 
			
		||||
``` sh
 | 
			
		||||
cargo build --release
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Flash
 | 
			
		||||
 | 
			
		||||
``` sh
 | 
			
		||||
wchisp config reset
 | 
			
		||||
wchip wchisp flash target/riscv32imc-unknown-none-elf/release/bms
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Debugging
 | 
			
		||||
 | 
			
		||||
For debugging purposes a container file is provided together with wrapper scripts to start the containerized `openocd` and `riscv-gdb` transparently. The wrapper scripts assume that `podman` is setup.
 | 
			
		||||
 | 
			
		||||
Starting Debug server 
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
./bin/openocd
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Connecting with gdb for interactive debugging
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
./bin/gdb -f target/riscv32imc-unknown-none-elf/release/bms
 | 
			
		||||
```
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
 | 
			
		||||
CONTAINER_NAME="localhost/wch-dev-tools:latest"
 | 
			
		||||
CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")"
 | 
			
		||||
 | 
			
		||||
pushd "$CONTAINER_TOOLS_BASEDIR"
 | 
			
		||||
podman build -t "$CONTAINER_NAME" -f "../wch-tools.Containerfile" .
 | 
			
		||||
popd
 | 
			
		||||
							
								
								
									
										29
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/bin/gdb
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/bin/gdb
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
 | 
			
		||||
CONTAINER_IMAGE="localhost/wch-dev-tools:latest"
 | 
			
		||||
CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")"
 | 
			
		||||
 | 
			
		||||
function _fatal {
 | 
			
		||||
	echo -e "\e[31mERROR\e[0m   $(</dev/stdin)$*" 1>&2
 | 
			
		||||
	exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare -a PODMAN_ARGS=(
 | 
			
		||||
	"--rm" "-i" "--log-driver=none"
 | 
			
		||||
    "--network=host"
 | 
			
		||||
    "--pid=host"
 | 
			
		||||
	"-v" "$PWD:$PWD:rw"
 | 
			
		||||
	"-w" "$PWD"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
[[ -t 1 ]] && PODMAN_ARGS+=("-t")
 | 
			
		||||
 | 
			
		||||
if ! podman image exists "$CONTAINER_IMAGE"; then
 | 
			
		||||
    #attempt to build container
 | 
			
		||||
    "$CONTAINER_TOOLS_BASEDIR/build-wch-tools-container.sh" 1>&2 ||
 | 
			
		||||
        _fatal "faild to build local image, cannot continue! … please ensure you have an internet connection"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
podman run "${PODMAN_ARGS[@]}" --entrypoint riscv-none-elf-gdb-py3 "$CONTAINER_IMAGE" "$@"
 | 
			
		||||
							
								
								
									
										44
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/bin/openocd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										44
									
								
								Hardware/Controller/__Legay_Unused/Sensors_can/ch32-sensor/bin/openocd
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
 | 
			
		||||
CONTAINER_IMAGE="localhost/wch-dev-tools:latest"
 | 
			
		||||
CONTAINER_TOOLS_BASEDIR="$(dirname "$(readlink -f "$0")")"
 | 
			
		||||
 | 
			
		||||
function _fatal {
 | 
			
		||||
	echo -e "\e[31mERROR\e[0m   $(</dev/stdin)$*" 1>&2
 | 
			
		||||
	exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare -a PODMAN_ARGS=(
 | 
			
		||||
	"--rm" "-i" "--log-driver=none"
 | 
			
		||||
    "--network=host"
 | 
			
		||||
	"-v" "$PWD:$PWD:rw"
 | 
			
		||||
	"-w" "$PWD"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
for device in /dev/bus/usb/*/*; do
 | 
			
		||||
    if udevadm info "$device" | grep -q "ID_VENDOR=wch.cn" && \
 | 
			
		||||
       udevadm info "$device" | grep -q "ID_MODEL=WCH-Link"; then
 | 
			
		||||
        DEBUGGER_DEV_PATH="$device"
 | 
			
		||||
        break
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if [[ -z "${DEBUGGER_DEV_PATH:-}" ]]; then
 | 
			
		||||
    echo "Could not find hardware debugger … Exiting!" 1>&2
 | 
			
		||||
    exit 1
 | 
			
		||||
else
 | 
			
		||||
    # add jlink to podman device
 | 
			
		||||
    PODMAN_ARGS+=("--device=$DEBUGGER_DEV_PATH")
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
[[ -t 1 ]] && PODMAN_ARGS+=("-t")
 | 
			
		||||
 | 
			
		||||
if ! podman image exists "$CONTAINER_IMAGE"; then
 | 
			
		||||
    #attempt to build container
 | 
			
		||||
    "$CONTAINER_TOOLS_BASEDIR/build-wch-tools-container.sh" 1>&2 ||
 | 
			
		||||
        _fatal "faild to build local image, cannot continue! … please ensure you have an internet connection"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
podman run "${PODMAN_ARGS[@]}" --entrypoint openocd "$CONTAINER_IMAGE" "$@"
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
fn main() {
 | 
			
		||||
    // println!("cargo:rustc-link-arg-bins=--nmagic");
 | 
			
		||||
    println!("cargo:rustc-link-arg-bins=-Tlink.x");
 | 
			
		||||
    // println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
 | 
			
		||||
 | 
			
		||||
    let out_dir = std::env::var("OUT_DIR").unwrap();
 | 
			
		||||
    let out_dir = std::path::PathBuf::from(out_dir);
 | 
			
		||||
    std::fs::write(out_dir.join("memory.x"), include_bytes!("memory.x")).unwrap();
 | 
			
		||||
    println!("cargo:rustc-link-search={}", out_dir.display());
 | 
			
		||||
    println!("cargo:rerun-if-changed=memory.x");
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,125 @@
 | 
			
		||||
/* CH32V203c8t6 */
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
    FLASH : ORIGIN = 0x00000000, LENGTH =   64K /* BANK_1 */
 | 
			
		||||
    RAM   : ORIGIN = 0x20000000, LENGTH =   20K
 | 
			
		||||
}
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", FLASH);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", FLASH);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", RAM);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", RAM);
 | 
			
		||||
REGION_ALIAS("REGION_HEAP", RAM);
 | 
			
		||||
REGION_ALIAS("REGION_STACK", RAM);
 | 
			
		||||
 | 
			
		||||
/* fault handlers */
 | 
			
		||||
 | 
			
		||||
PROVIDE(InstructionMisaligned = ExceptionHandler);
 | 
			
		||||
PROVIDE(InstructionFault = ExceptionHandler);
 | 
			
		||||
PROVIDE(IllegalInstruction = ExceptionHandler);
 | 
			
		||||
PROVIDE(Breakpoint = ExceptionHandler);
 | 
			
		||||
PROVIDE(LoadMisaligned = ExceptionHandler);
 | 
			
		||||
PROVIDE(LoadFault = ExceptionHandler);
 | 
			
		||||
PROVIDE(StoreMisaligned = ExceptionHandler);
 | 
			
		||||
PROVIDE(StoreFault = ExceptionHandler);;
 | 
			
		||||
PROVIDE(UserEnvCall = ExceptionHandler);
 | 
			
		||||
PROVIDE(SupervisorEnvCall = ExceptionHandler);
 | 
			
		||||
PROVIDE(MachineEnvCall = ExceptionHandler);
 | 
			
		||||
PROVIDE(InstructionPageFault = ExceptionHandler);
 | 
			
		||||
PROVIDE(LoadPageFault = ExceptionHandler);
 | 
			
		||||
PROVIDE(StorePageFault = ExceptionHandler);
 | 
			
		||||
 | 
			
		||||
/* core interrupt handlers */
 | 
			
		||||
 | 
			
		||||
PROVIDE(NonMaskableInt = DefaultHandler);
 | 
			
		||||
PROVIDE(Software = DefaultHandler);
 | 
			
		||||
 | 
			
		||||
/* external interrupt handlers */
 | 
			
		||||
 | 
			
		||||
PROVIDE(WWDG = DefaultHandler);
 | 
			
		||||
PROVIDE(PVD = DefaultHandler);
 | 
			
		||||
PROVIDE(TAMPER = DefaultHandler);
 | 
			
		||||
PROVIDE(RTC = DefaultHandler);
 | 
			
		||||
PROVIDE(FLASH = DefaultHandler);
 | 
			
		||||
PROVIDE(RCC = DefaultHandler);
 | 
			
		||||
PROVIDE(EXTI0 = DefaultHandler);
 | 
			
		||||
PROVIDE(EXTI1 = DefaultHandler);
 | 
			
		||||
PROVIDE(EXTI2 = DefaultHandler);
 | 
			
		||||
PROVIDE(EXTI3 = DefaultHandler);
 | 
			
		||||
PROVIDE(EXTI4 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA1_CHANNEL1 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA1_CHANNEL2 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA1_CHANNEL3 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA1_CHANNEL4 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA1_CHANNEL5 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA1_CHANNEL6 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA1_CHANNEL7 = DefaultHandler);
 | 
			
		||||
PROVIDE(ADC = DefaultHandler);
 | 
			
		||||
PROVIDE(USB_HP_CAN1_TX = DefaultHandler);
 | 
			
		||||
/*PROVIDE(USB_LP_CAN1_RX0 = DefaultHandler);*/
 | 
			
		||||
PROVIDE(CAN1_RX1 = DefaultHandler);
 | 
			
		||||
PROVIDE(CAN1_SCE = DefaultHandler);
 | 
			
		||||
PROVIDE(EXTI9_5 = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM1_BRK = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM1_UP_ = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM1_TRG_COM = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM1_CC = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM2 = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM3 = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM4 = DefaultHandler);
 | 
			
		||||
PROVIDE(I2C1_EV = DefaultHandler);
 | 
			
		||||
PROVIDE(I2C1_ER = DefaultHandler);
 | 
			
		||||
PROVIDE(I2C2_EV = DefaultHandler);
 | 
			
		||||
PROVIDE(I2C2_ER = DefaultHandler);
 | 
			
		||||
PROVIDE(SPI1 = DefaultHandler);
 | 
			
		||||
PROVIDE(SPI2 = DefaultHandler);
 | 
			
		||||
PROVIDE(USART1 = DefaultHandler);
 | 
			
		||||
PROVIDE(USART2 = DefaultHandler);
 | 
			
		||||
PROVIDE(USART3 = DefaultHandler);
 | 
			
		||||
PROVIDE(EXTI15_10 = DefaultHandler);
 | 
			
		||||
PROVIDE(RTCALARM = DefaultHandler);
 | 
			
		||||
PROVIDE(USBWAKE_UP = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM8_BRK = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM8_UP_ = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM8_TRG_COM = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM8_CC = DefaultHandler);
 | 
			
		||||
PROVIDE(RNG = DefaultHandler);
 | 
			
		||||
PROVIDE(FSMC = DefaultHandler);
 | 
			
		||||
PROVIDE(SDIO = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM5 = DefaultHandler);
 | 
			
		||||
PROVIDE(SPI3 = DefaultHandler);
 | 
			
		||||
PROVIDE(UART4 = DefaultHandler);
 | 
			
		||||
PROVIDE(UART5 = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM6 = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM7 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL1 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL2 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL3 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL4 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL5 = DefaultHandler);
 | 
			
		||||
PROVIDE(ETH = DefaultHandler);
 | 
			
		||||
PROVIDE(ETH_WKUP = DefaultHandler);
 | 
			
		||||
PROVIDE(CAN2_TX = DefaultHandler);
 | 
			
		||||
PROVIDE(CAN2_RX0 = DefaultHandler);
 | 
			
		||||
PROVIDE(CAN2_RX1 = DefaultHandler);
 | 
			
		||||
PROVIDE(CAN2_SCE = DefaultHandler);
 | 
			
		||||
PROVIDE(OTG_FS = DefaultHandler);
 | 
			
		||||
PROVIDE(USBHSWAKEUP = DefaultHandler);
 | 
			
		||||
PROVIDE(USBHS = DefaultHandler);
 | 
			
		||||
PROVIDE(DVP = DefaultHandler);
 | 
			
		||||
PROVIDE(UART6 = DefaultHandler);
 | 
			
		||||
PROVIDE(UART7 = DefaultHandler);
 | 
			
		||||
PROVIDE(UART8 = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM9_BRK = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM9_UP_ = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM9_TRG_COM = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM9_CC = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM10_BRK = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM10_UP_ = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM10_TRG_COM = DefaultHandler);
 | 
			
		||||
PROVIDE(TIM10_CC = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL6 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL7 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL8 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL9 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL10 = DefaultHandler);
 | 
			
		||||
PROVIDE(DMA2_CHANNEL11 = DefaultHandler);
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
set _CHIPNAME ch32v203
 | 
			
		||||
set _TARGETNAME $_CHIPNAME.cpu
 | 
			
		||||
 | 
			
		||||
#bindto 0.0.0.0
 | 
			
		||||
 | 
			
		||||
adapter driver wlinke
 | 
			
		||||
adapter speed 6000
 | 
			
		||||
transport select sdi
 | 
			
		||||
 | 
			
		||||
sdi newtap $_CHIPNAME cpu -irlen 5 --expected-id 0x00001
 | 
			
		||||
target create $_TARGETNAME.0 wch_riscv -chain-position $_TARGETNAME
 | 
			
		||||
$_TARGETNAME.0 configure -work-area-phys 0x20000000 -work-area-size 10000 -work-area-backup 1
 | 
			
		||||
set _FLASHNAME $_CHIPNAME.flash
 | 
			
		||||
 | 
			
		||||
flash bank $_FLASHNAME wch_rsicv 0x00000000 0 0 0 $_TARGETNAME.0
 | 
			
		||||
 | 
			
		||||
init
 | 
			
		||||
@@ -0,0 +1,2 @@
 | 
			
		||||
[toolchain]
 | 
			
		||||
channel = "nightly"
 | 
			
		||||
@@ -0,0 +1,61 @@
 | 
			
		||||
#![no_std]
 | 
			
		||||
#![no_main]
 | 
			
		||||
#![feature(type_alias_impl_trait)]
 | 
			
		||||
#![feature(impl_trait_in_assoc_type)]
 | 
			
		||||
 | 
			
		||||
// Simple 555-like oscillator implemented in firmware.
 | 
			
		||||
// - Q output: PB2 (also drives the on-board LED if present)
 | 
			
		||||
// - Combined Trigger/Threshold analog input: PA0 (capacitor node)
 | 
			
		||||
// Wiring suggestion:
 | 
			
		||||
//   Q (PB2) --[R]--+-- C -- GND
 | 
			
		||||
//                   |
 | 
			
		||||
//                 PA0 (ADC input)
 | 
			
		||||
// The firmware toggles Q high when PA0 <= 1/3 Vref and low when PA0 >= 2/3 Vref.
 | 
			
		||||
 | 
			
		||||
use embassy_executor::Spawner;
 | 
			
		||||
use embassy_time::Timer;
 | 
			
		||||
use hal::gpio::{Level, Output};
 | 
			
		||||
use {ch32_hal as hal, panic_halt as _};
 | 
			
		||||
 | 
			
		||||
use hal::adc::{Adc, SampleTime};
 | 
			
		||||
 | 
			
		||||
#[embassy_executor::main(entry = "qingke_rt::entry")]
 | 
			
		||||
async fn main(_spawner: Spawner) -> ! {
 | 
			
		||||
    let p = hal::init(Default::default());
 | 
			
		||||
 | 
			
		||||
    // Q output on PB2
 | 
			
		||||
    let mut q = Output::new(p.PB2, Level::Low, Default::default());
 | 
			
		||||
 | 
			
		||||
    // ADC on PA0 for combined Trigger/Threshold input
 | 
			
		||||
    let mut adc = Adc::new(p.ADC1, Default::default());
 | 
			
		||||
    let mut trig_thres = p.PA0; // analog-capable pin used as ADC channel
 | 
			
		||||
 | 
			
		||||
    // ADC characteristics: assume 12-bit if HAL doesn't expose it.
 | 
			
		||||
    // If the HAL provides a method to query resolution, prefer that.
 | 
			
		||||
    let full_scale: u16 = 4095; // 12-bit default
 | 
			
		||||
    let thr_low: u16 = (full_scale as u32 / 3) as u16;        // ~1/3 Vref
 | 
			
		||||
    let thr_high: u16 = ((full_scale as u32 * 2) / 3) as u16; // ~2/3 Vref
 | 
			
		||||
 | 
			
		||||
    // Start with Q low. State variable to avoid redundant toggles.
 | 
			
		||||
    let mut q_high = false;
 | 
			
		||||
    q.set_low();
 | 
			
		||||
 | 
			
		||||
    loop {
 | 
			
		||||
        // Read capacitor node voltage via ADC
 | 
			
		||||
        let sample: u16 = adc.convert(&mut trig_thres, SampleTime::CYCLES239_5);
 | 
			
		||||
 | 
			
		||||
        // Implement Schmitt trigger behavior like NE555 using thresholds
 | 
			
		||||
        if !q_high && sample <= thr_low {
 | 
			
		||||
            // Trigger: voltage fell below 1/3 Vref -> set output high
 | 
			
		||||
            q.set_high();
 | 
			
		||||
            q_high = true;
 | 
			
		||||
        } else if q_high && sample >= thr_high {
 | 
			
		||||
            // Threshold: voltage rose above 2/3 Vref -> set output low
 | 
			
		||||
            q.set_low();
 | 
			
		||||
            q_high = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Small delay to reduce CPU usage; adjust for responsiveness/noise
 | 
			
		||||
        Timer::after_micros(200).await;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,27 @@
 | 
			
		||||
FROM debian:bookworm
 | 
			
		||||
 | 
			
		||||
RUN apt update -y && apt upgrade -y && apt install git libjaylink-dev libusb-1.0-0 unzip curl libhidapi-hidraw0 xz-utils -y
 | 
			
		||||
 | 
			
		||||
RUN cd /root && \
 | 
			
		||||
    curl -L -o mrs-toolchain.tar.xz "https://github.com/ch32-riscv-ug/MounRiver_Studio_Community_miror/releases/download/1.92-toolchain/MRS_Toolchain_Linux_x64_V1.92.tar.xz" && \
 | 
			
		||||
    mkdir mrs-toolchain && \
 | 
			
		||||
    tar -xvf mrs-toolchain.tar.xz -C mrs-toolchain --strip-components=1 && \
 | 
			
		||||
    mv mrs-toolchain/OpenOCD/bin/openocd /usr/local/bin && \
 | 
			
		||||
    mv mrs-toolchain/OpenOCD/share/openocd /usr/local/share && \
 | 
			
		||||
    # mv mrs-toolchain/RISC-V_Embedded_GCC12/bin/riscv-none-elf-gdb /usr/local/bin && \                     # both toolchains in MRS are to old to work with emacs dape
 | 
			
		||||
    # mv mrs-toolchain/RISC-V_Embedded_GCC12/libexec /usr/local && \                                        # both toolchains in MRS are to old to work with emacs dape
 | 
			
		||||
    rm -rf mrs-toolchain mrs-toolchain.tar.xz && \
 | 
			
		||||
    # Use up to date xpack toolchains for gdb
 | 
			
		||||
    curl -L -o xpack-riscv-toolchain.tar.gz "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v14.2.0-3/xpack-riscv-none-elf-gcc-14.2.0-3-linux-x64.tar.gz" && \
 | 
			
		||||
    mkdir xpack-toolchain && \
 | 
			
		||||
    tar -xvf xpack-riscv-toolchain.tar.gz -C xpack-toolchain --strip-components=1 && \
 | 
			
		||||
    mv xpack-toolchain/bin/* /usr/local/bin && \
 | 
			
		||||
    mv xpack-toolchain/lib/ /usr/local && \
 | 
			
		||||
    mv xpack-toolchain/lib64/ /usr/local && \
 | 
			
		||||
    mv xpack-toolchain/libexec /usr/local && \
 | 
			
		||||
    mv xpack-toolchain/riscv-none-elf /usr/local && \
 | 
			
		||||
    rm -rf xpack-toolchain xpack-riscv-toolchain.tar.gz
 | 
			
		||||
 | 
			
		||||
RUN mkdir -p /root/.config/gdb && echo "set auto-load safe-path /" >> /root/.config/gdb/gdbinit
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT [ "/usr/bin/bash" ]
 | 
			
		||||
		Reference in New Issue
	
	Block a user