Skip to content

Develop #1

Merged
merged 5 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
306 changes: 306 additions & 0 deletions SDPMcu/Core/Inc/cJSON.h

Large diffs are not rendered by default.

3,164 changes: 3,164 additions & 0 deletions SDPMcu/Core/Src/cJSON.c

Large diffs are not rendered by default.

Binary file modified SDPPython/__pycache__/chip.cpython-312.pyc
Binary file not shown.
Binary file modified SDPPython/__pycache__/chips.cpython-312.pyc
Binary file not shown.
29 changes: 27 additions & 2 deletions SDPPython/chip.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import json
import serial
from functions import *
class IC74Series:
def __init__(self, chip_number, logic_type,n,TruthTable=[],pin_count=14, description=None, pin_config=None):
"""
Expand Down Expand Up @@ -81,7 +80,7 @@ def pin_configuration_json(self):

def send_pin_configuration(self, uart_port, baudrate=250000):
"""
Sends the pin configuration as a JSON string over UART.{"chip_number": "00", "logic_type": "NAND", "pin_count": 14, "description": "Quad 2-input NAND gate", "pins": {"1": "input", "2": "input", "3": "output", "4": "input", "5": "input", "6": "output", "7": "ground", "8": "output", "9": "input", "10": "input", "11": "output", "12": "input", "13": "input", "14": "VCC"}}
Sends the pin configuration as a JSON string over UART.
:param uart_port: The UART port (e.g., 'COM3' on Windows or '/dev/ttyUSB0' on Linux).
:param baudrate: The baudrate for UART communication.
Expand All @@ -96,9 +95,35 @@ def send_pin_configuration(self, uart_port, baudrate=250000):
print(f"Sent JSON data over UART: {json_data}")
def set_truth_table(self,outputs):
self.TruthTable=binary_number_list(self.inputn,outputs)

def print_truth_tale(self):
print(f"Chip: {self.chip_number}")
print(f"Logic type: {self.logic_type}")
print("INPUT BITS|OUTPUT BITS")
for entry in self.TruthTable:
print(f" {entry[0]} {entry[1]}")

def binary_number_list(bits,outputs):
list = []
for number in range(0,(2**bits)):
bitslist = separate_bits(number,bits)
list.append([bitslist,outputs[number]])
return list

def separate_bits(num, n):
bits = [(num >> i) & 1 for i in range(n)] # Extract each bit
return bits[::-1] # Return in correct order

def find_input_pins(ic):
n = ic.inputn

inputpins = []
temp = []
for pin in range(1,ic.pin_count+1):
print("PIN NUMBER IS: ", pin, ic.get_pin(pin))
if(ic.get_pin(pin) == "input"):
temp.append(pin)
if len(temp) == n:
inputpins.append(temp)
temp=[]
return inputpins
53 changes: 52 additions & 1 deletion SDPPython/chips.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,55 @@
ic_7400.set_pin(12, "input")
ic_7400.set_pin(13, "input")
ic_7400.set_pin(14, "VCC")
ic_7400.set_truth_table([1,1,1,0])
ic_7400.set_truth_table([1,1,1,0])

ic_7408 = IC74Series(chip_number="08", logic_type="AND",n = 2,description="Quad 2-input AND gate")
ic_7408.set_pin(1, "input")
ic_7408.set_pin(2, "input")
ic_7408.set_pin(3, "output")
ic_7408.set_pin(4, "input")
ic_7408.set_pin(5, "input")
ic_7408.set_pin(6, "output")
ic_7408.set_pin(7, "ground")
ic_7408.set_pin(8, "output")
ic_7408.set_pin(9, "input")
ic_7408.set_pin(10, "input")
ic_7408.set_pin(11, "output")
ic_7408.set_pin(12, "input")
ic_7408.set_pin(13, "input")
ic_7408.set_pin(14, "VCC")
ic_7408.set_truth_table([0,0,0,1])

ic_7432 = IC74Series(chip_number="32", logic_type="OR",n = 2,description="Quad 2-input OR gate")
ic_7432.set_pin(1, "input")
ic_7432.set_pin(2, "input")
ic_7432.set_pin(3, "output")
ic_7432.set_pin(4, "input")
ic_7432.set_pin(5, "input")
ic_7432.set_pin(6, "output")
ic_7432.set_pin(7, "ground")
ic_7432.set_pin(8, "output")
ic_7432.set_pin(9, "input")
ic_7432.set_pin(10, "input")
ic_7432.set_pin(11, "output")
ic_7432.set_pin(12, "input")
ic_7432.set_pin(13, "input")
ic_7432.set_pin(14, "VCC")
ic_7432.set_truth_table([0,1,1,1])

ic_7486 = IC74Series(chip_number="86", logic_type="XOR",n = 2,description="Quad 2-input XOR gate")
ic_7486.set_pin(1, "input")
ic_7486.set_pin(2, "input")
ic_7486.set_pin(3, "output")
ic_7486.set_pin(4, "input")
ic_7486.set_pin(5, "input")
ic_7486.set_pin(6, "output")
ic_7486.set_pin(7, "ground")
ic_7486.set_pin(8, "output")
ic_7486.set_pin(9, "input")
ic_7486.set_pin(10, "input")
ic_7486.set_pin(11, "output")
ic_7486.set_pin(12, "input")
ic_7486.set_pin(13, "input")
ic_7486.set_pin(14, "VCC")
ic_7486.set_truth_table([0,1,1,0])
25 changes: 0 additions & 25 deletions SDPPython/functions.py

This file was deleted.

36 changes: 18 additions & 18 deletions SDPPython/serialcommunication.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import serial
import time
import json
from chip import IC74Series
from chip import *
from chips import ic_7400
from functions import find_input_pins,separate_bits
ser = serial.Serial('COM5', 9600)


Expand All @@ -12,30 +11,31 @@

# Sending data
message = ic_7400.pin_configuration_json()
ser.write((message+"\n").encode('utf-8'))
ser.write((message).encode('utf-8'))
print(f'Sent: {message}')



time.sleep(.5)
time.sleep(.45)



inputpins = find_input_pins(ic_7400)
# inputpins = find_input_pins(ic_7400)

for number in range(0, (2 ** ic_7400.inputn)):
bits = separate_bits(number,ic_7400.inputn)
print(bits)
for inputs in inputpins:
print(f"Working on pins: {inputs}")
message1 = json.dumps({inputs[1]:bits[0]})
ser.write((message1+"\n").encode('utf-8'))
print(f'Sent: {message1}')
# for number in range(0, (2 ** ic_7400.inputn)):
# bits = separate_bits(number,ic_7400.inputn)
# print(f"working on number {number} bits:{bits}")
# for inputs in inputpins:
# print(f"Working on pins: {inputs}")
# message1 = json.dumps({inputs[1]:bits[0]})
# ser.write(message1.encode('utf-8'))
# print(f'Sent: {message1}')


message2 = json.dumps({inputs[0]:bits[1]})
ser.write((message2+"\n").encode('utf-8'))
print(f'Sent: {message2}')
time.sleep(0.02)

# message2 = json.dumps({inputs[0]:bits[1]})
# ser.write(message2.encode('utf-8'))
# print(f'Sent: {message2}')

# time.sleep(0.1)
# ser.write(("\n").encode('utf-8'))