(require racket)
(require bhdl)
#<procedure:parameter-procedure>
Resistor
#<procedure:Resistor>
(define global
(make-circuit
(pin GND 3V3 5V VCC USB5V)))
(circuit key-with-diode
(pin left right)
(part [d (1N4148W)]
[key (kailh-socket 1)])
(wire (series self.left key d self.right))
(layout (vstack key d)))
(show-layout (key-with-diode))
"DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420051638842005119" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420051638842005131"
(define matrix
(for/list ([row (in-range 4)])
(for/list ([col (in-range 5)])
(key-with-diode))))
;; connect the matrix
(define matrix-module
(make-circuit
(pin row[4] col[5])
;; col in, row out
(wire (for*/list
([i (in-range 4)]
[j (in-range 5)])
(series self.col[j]
(list-ref (list-ref matrix i) j)
self.row[i])))
(layout (inset (apply vstack
(for/list ([row matrix])
(apply hstack row)
))
20))))
(show-layout matrix-module)
(parameterize ([current-directory "./out/demo-board/matrix"]
[padding-general 2])
(circuit-export matrix-module
#:auto-place #f
#:formats '(kicad pdf png svg)))
generating KiCAD PCB .. "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420151638842015463" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420151638842015468" link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/matrix/out.kicad_pcb DEBUG: (Number of conflicts: 0) generating pdf .. link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/matrix/out.pdf link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/matrix/out.png link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/matrix/out.svg
(circuit icsp-header
(pin MOSI SCK MISO RESET VCC GND)
(part [h (PinHeader2 3)])
(wire (bus (self (MISO VCC SCK MOSI RESET GND))
(h [1 2 3 4 5 6])))
(layout h))
;; Now using the Atmega32u4 from the arduino board
(define mcu-module
(make-circuit
(pin row[4] col[5])
(part [mcu (ATmega32U4 #:FP "TQFP-44")]
[usb (USB-Micro)]
[icsp (icsp-header)]
[xtal (Crystal-4 '16MHz)])
;; define what are the row and col scan pins
(wire (bus (self row [0 3])
(self row [0 3])
(mcu [PB0 PB4 PB5 PB6]))
(bus (self col [0 4])
(mcu [PD0 PD1 PD2 PD3 PD4]))
;; use a Pin for blinking LED
(series mcu.PC6 (R '1k) (LED0603 'red) global.GND)
;; connect the ICSP header
(bus (mcu (MOSI SCLK MISO RESET VCC GND))
(icsp (MOSI SCK MISO RESET VCC GND)))
(series mcu.VCC mcu.UVCC mcu.AVCC global.VCC)
(series mcu.GND mcu.UGND global.GND)
;; reset circuit and switch
(series mcu.RESET (parallel (LL4148)
(R '10k)) global.5V)
(series mcu.RESET[-1] (Switch) global.GND)
;; capacitors
(series mcu.UCAP (C '1uf) global.GND)
(series global.VCC (parallel (C '1uf)
(C '100nf)
(C '100nf)
(C '100nf)
(C '100nf))
global.GND)
;; crystal
(series mcu.XTAL1 xtal.XIN)
(series xtal.XOUT mcu.XTAL2)
(series xtal.GND global.GND)
(series mcu.XTAL1 (C '22pf) global.GND)
(series mcu.XTAL2 (C '22pf) global.GND)
;; USB
(series mcu.D+ (R 22) usb.D+)
(series mcu.D- (R 22) usb.D-)
;; just use USB for supplying power
(series mcu.VBUS usb.VBUS global.VCC)
(series mcu.UGND usb.GND global.GND))
(layout (vstack 50 (rotate usb pi) mcu icsp))
))
"DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020929" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020935" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020939" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020941" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020944" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020946" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020949" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020951" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-63-15_16388420201638842020953"
;; connect MCU
(define mcu-board
(make-circuit
(layout (inset mcu-module 50 0))
(wire mcu-module)))
(show-layout mcu-board)
(parameterize ([current-directory "./out/demo-board/mcu-board"]
[padding-general 2])
(circuit-export mcu-board
#:auto-place #f
#:formats '(kicad pdf png svg)))
generating KiCAD PCB .. "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053818" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053829" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053833" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053837" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053840" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053842" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053844" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053847" "DEBUG: /var/folders/jd/pqbc6_7j0y5gc2kjxjntw8c40000gn/T/PKGS-src-ROOT-BHDL-syst----iVc-fpio-main.rkt-95-15_16388420531638842053849" link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/mcu-board/out.kicad_pcb DEBUG: (Number of conflicts: 0) generating pdf .. link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/mcu-board/out.pdf link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/mcu-board/out.png link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/mcu-board/out.svg
(placer-url "http://localhost:8082")
(parameterize ([current-directory "./out/demo-board/mcu-board"]
[padding-general 2])
(circuit-export mcu-board
#:auto-place #t
#:formats '(kicad pdf bom png)))
DEBUG: (sending for placement ..) DEBUG: (saving ..) generating KiCAD PCB .. link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/mcu-board/out.kicad_pcb Generating BOM .. DEBUG: (Number of conflicts: 0) generating pdf .. link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/mcu-board/out.pdf link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/mcu-board/out.png
(define keyboard
(make-circuit
(wire (bus (mcu-module row [0 3])
(matrix-module row [0 3]))
(bus (mcu-module col [0 4])
(matrix-module col [0 4])))
(layout (vstack mcu-module matrix-module))
))
(parameterize ([current-directory "./out/demo-board/keyboard"]
[padding-general 2])
(circuit-export keyboard
#:auto-place #t
#:formats '(kicad pdf png bom)))
DEBUG: (sending for placement ..) DEBUG: (saving ..) generating KiCAD PCB .. link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/keyboard/out.kicad_pcb Generating BOM .. DEBUG: (Number of conflicts: 0) generating pdf .. link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/keyboard/out.pdf link: /Users/hebi/git/bhdl.org/notebooks/out/demo-board/keyboard/out.png