|
31 | 31 | }
|
32 | 32 | },
|
33 | 33 | {
|
34 |
| - "id": "4394362a-06dd-4590-8104-0e31ca863e05", |
35 |
| - "type": "c91ccaa367351314fdd1ed7784836fe9155f7ecc", |
| 34 | + "id": "c844d494-552e-48e5-b952-3719837643ec", |
| 35 | + "type": "054bfeb29658539df35dc63cbe18127ada173775", |
36 | 36 | "position": {
|
37 |
| - "x": 464, |
| 37 | + "x": 448, |
38 | 38 | "y": 136
|
39 | 39 | }
|
40 | 40 | },
|
|
77 | 77 | }
|
78 | 78 | },
|
79 | 79 | {
|
80 |
| - "id": "0c98e6e0-d391-4f12-9efa-aff76f0b22ea", |
81 |
| - "type": "32200dc0915d45d6ec035bcec61c8472f0cc7b88", |
| 80 | + "id": "ba6d9755-5d97-4913-8444-fd959cfdddd9", |
| 81 | + "type": "30f770205447363911d272b748197534af1d731a", |
82 | 82 | "position": {
|
83 | 83 | "x": 256,
|
84 | 84 | "y": 152
|
|
99 | 99 | "wires": [
|
100 | 100 | {
|
101 | 101 | "source": {
|
102 |
| - "block": "4394362a-06dd-4590-8104-0e31ca863e05", |
| 102 | + "block": "c844d494-552e-48e5-b952-3719837643ec", |
103 | 103 | "port": "eac2d6e9-4a62-4aec-8ce8-0e6c54e14d22"
|
104 | 104 | },
|
105 | 105 | "target": {
|
|
113 | 113 | "port": "out"
|
114 | 114 | },
|
115 | 115 | "target": {
|
116 |
| - "block": "4394362a-06dd-4590-8104-0e31ca863e05", |
| 116 | + "block": "c844d494-552e-48e5-b952-3719837643ec", |
117 | 117 | "port": "f9f4add8-1ca6-49c0-adae-0d1a45025fc1"
|
118 | 118 | },
|
119 | 119 | "vertices": [
|
120 | 120 | {
|
121 |
| - "x": 432, |
| 121 | + "x": 408, |
122 | 122 | "y": 112
|
123 | 123 | }
|
124 | 124 | ]
|
125 | 125 | },
|
126 | 126 | {
|
127 | 127 | "source": {
|
128 |
| - "block": "0c98e6e0-d391-4f12-9efa-aff76f0b22ea", |
129 |
| - "port": "664caf9e-5f40-4df4-800a-b626af702e62" |
| 128 | + "block": "19b09324-e39a-48f2-89cb-a6d8148a7471", |
| 129 | + "port": "out" |
130 | 130 | },
|
131 | 131 | "target": {
|
132 |
| - "block": "4394362a-06dd-4590-8104-0e31ca863e05", |
133 |
| - "port": "e3e07bdb-9bb3-4afb-ace5-bcc99aecef0a" |
| 132 | + "block": "ba6d9755-5d97-4913-8444-fd959cfdddd9", |
| 133 | + "port": "18c2ebc7-5152-439c-9b3f-851c59bac834" |
134 | 134 | }
|
135 | 135 | },
|
136 | 136 | {
|
137 | 137 | "source": {
|
138 |
| - "block": "19b09324-e39a-48f2-89cb-a6d8148a7471", |
139 |
| - "port": "out" |
| 138 | + "block": "ba6d9755-5d97-4913-8444-fd959cfdddd9", |
| 139 | + "port": "664caf9e-5f40-4df4-800a-b626af702e62" |
140 | 140 | },
|
141 | 141 | "target": {
|
142 |
| - "block": "0c98e6e0-d391-4f12-9efa-aff76f0b22ea", |
143 |
| - "port": "18c2ebc7-5152-439c-9b3f-851c59bac834" |
| 142 | + "block": "c844d494-552e-48e5-b952-3719837643ec", |
| 143 | + "port": "e3e07bdb-9bb3-4afb-ace5-bcc99aecef0a" |
144 | 144 | }
|
145 | 145 | }
|
146 | 146 | ]
|
|
154 | 154 | }
|
155 | 155 | },
|
156 | 156 | "dependencies": {
|
157 |
| - "c91ccaa367351314fdd1ed7784836fe9155f7ecc": { |
| 157 | + "054bfeb29658539df35dc63cbe18127ada173775": { |
158 | 158 | "package": {
|
159 | 159 | "name": "ServoBit_180",
|
160 | 160 | "version": "0.1",
|
|
169 | 169 | "id": "111d9859-6de5-4608-9176-ed8359ffebc5",
|
170 | 170 | "type": "basic.code",
|
171 | 171 | "data": {
|
172 |
| - "code": "//-- ServoBit-180\n\n//-- Control de un servo Futaba 3003\n//-- con un bit. Se mueve a dos posiciones\n//-- que se corresonden con 0 / 1\n//-- El angulo total recorrido es de 180 grados\n\n//-- ENTRADAS:\n//-- clk: Señal del sistema (12Mhz)\n//-- bitpos: Bit de posicion (0 - posicion derecha, 1 - posicion izquierda)\n \n// Bitpos 0 Bitpos 1\n// ___ ___\n// | o----> <----o |\n// | | | |\n// |___| |___|\n\n//-- SALIDAS:\n//-- servo : Señal PWM para controlar el servo\n\n//-- Constantes para el angulo del servo\nlocalparam ANG_0 = 8'h01;\nlocalparam ANG_180 = 8'hE4;\n\n\n//-- Posicion del servo cuando el\n//-- bit de entrada es 0\n//-- La corona del servo mira a la derecha\nparameter BIT0 = ANG_0;\n\n//-- Posicion el servo cuando el bit\n//-- de entrada es 1\n//-- La corona del servo mira a la izquierda\nparameter BIT1 = ANG_180;\n\n\n//-- Posicion de 8 bits del servo\nreg [7:0] pos;\n\n//-- Asignar la posicion de 8 bits\n//-- segun si lo recibido es 0 ó 1\nalways @(posedge clk)\n pos <= bitpos ? BIT1 : BIT0;\n\n\n//---\n//--- ServoMotor \n\n//-- M es el valor del divisor para\n//-- obtener tics de M / 12.0 micro-segundos\nlocalparam M = 94; \nlocalparam N = $clog2(M);\n\n//-- Contador para generar los tics\nreg [N-1:0] divcounter = 0;\n\n//-- Flag para indicar que un tic\n//-- ha ocurrido\nreg tic = 0;\n\n//-- Generacion de los tics. Cada\n//-- M ciclos del reloj se genera 1\nalways @(posedge clk)\n tic <= (divcounter == M - 2);\n\n//-- Contador modulo M\nalways @(posedge clk)\n if (tic)\n divcounter <= 0;\n else\n divcounter <= divcounter + 1;\n\n//-- Contador de la posicion del \n//-- servo\nreg [10:0] angle_counter = 0;\n\n//-- A la posicion destino hay que\n//-- sumarle un offset, correspondiente\n//-- a los 0.3ms de la posicion inicial\nwire [8:0] pose = {1'b0, pos} + 9'd46;\n\n//-- Con cada tic se incrementa el\n//-- contador de angulo del servo\nalways @(posedge clk)\n if (tic)\n angle_counter <= angle_counter + 1;\n\n//-- Cuando el contador es menor que el \n//-- valor objetivo, la señal de PWM\n//-- del servo se pone 1, y 0 en \n//-- caso contrario\nalways @(posedge clk)\n servo <= (angle_counter < {2'b00, pose});\n\n", |
| 172 | + "code": "//-- ServoBit-180\n\n//-- Control de un servo Futaba 3003\n//-- con un bit. Se mueve a dos posiciones\n//-- que se corresonden con 0 / 1\n//-- El angulo total recorrido es de 180 grados\n\n//-- ENTRADAS:\n//-- clk: Señal del sistema (12Mhz)\n//-- bitpos: Bit de posicion (0 - posicion derecha, 1 - posicion izquierda)\n \n// Bitpos 0 Bitpos 1\n// ___ ___\n// | o----> <----o |\n// | | | |\n// |___| |___|\n\n//-- SALIDAS:\n//-- servo : Señal PWM para controlar el servo\n\n//-- Constantes para el angulo del servo\nlocalparam ANG_0 = 8'h01;\nlocalparam ANG_180 = 8'hE4;\n\n\n//-- Posicion del servo cuando el\n//-- bit de entrada es 0\n//-- La corona del servo mira a la derecha\nparameter BIT0 = ANG_0;\n\n//-- Posicion el servo cuando el bit\n//-- de entrada es 1\n//-- La corona del servo mira a la izquierda\nparameter BIT1 = ANG_180;\n\n\n//-- Posicion de 8 bits del servo\nreg [7:0] pos;\n\n//-- Asignar la posicion de 8 bits\n//-- segun si lo recibido es 0 ó 1\nalways @(posedge clk)\n pos <= bitpos ? BIT1 : BIT0;\n\n\n//---\n//--- ServoMotor \n\n//-- M es el valor del divisor para\n//-- obtener tics de M / 12.0 micro-segundos\nlocalparam M = 94; \nlocalparam N = $clog2(M);\n\n//-- Contador para generar los tics\nreg [N-1:0] divcounter = 0;\n\n//-- Flag para indicar que un tic\n//-- ha ocurrido\nreg tic = 0;\n\n//-- Generacion de los tics. Cada\n//-- M ciclos del reloj se genera 1\nalways @(posedge clk)\n tic <= (divcounter == M - 2);\n\n//-- Contador modulo M\nalways @(posedge clk)\n if (tic)\n divcounter <= 0;\n else\n divcounter <= divcounter + 1;\n\n//-- Contador de la posicion del \n//-- servo\nreg [10:0] angle_counter = 0;\n\n//-- A la posicion destino hay que\n//-- sumarle un offset, correspondiente\n//-- a los 0.3ms de la posicion inicial\nwire [8:0] pose = {1'b0, pos} + 9'd46;\n\n//-- Con cada tic se incrementa el\n//-- contador de angulo del servo\nalways @(posedge clk)\n if (tic)\n angle_counter <= angle_counter + 1;\n\n//-- Cuando el contador es menor que el \n//-- valor objetivo, la señal de PWM\n//-- del servo se pone 1, y 0 en \n//-- caso contrario\n\nreg servo;\n\nalways @(posedge clk)\n servo <= (angle_counter < {2'b00, pose});\n\n", |
173 | 173 | "params": [],
|
174 | 174 | "ports": {
|
175 | 175 | "in": [
|
|
207 | 207 | "id": "eac2d6e9-4a62-4aec-8ce8-0e6c54e14d22",
|
208 | 208 | "type": "basic.output",
|
209 | 209 | "data": {
|
210 |
| - "name": "servo" |
| 210 | + "name": "" |
211 | 211 | },
|
212 | 212 | "position": {
|
213 | 213 | "x": 816,
|
|
218 | 218 | "id": "e3e07bdb-9bb3-4afb-ace5-bcc99aecef0a",
|
219 | 219 | "type": "basic.input",
|
220 | 220 | "data": {
|
221 |
| - "name": "bitpos" |
| 221 | + "name": "" |
222 | 222 | },
|
223 | 223 | "position": {
|
224 | 224 | "x": 56,
|
|
268 | 268 | }
|
269 | 269 | }
|
270 | 270 | },
|
271 |
| - "32200dc0915d45d6ec035bcec61c8472f0cc7b88": { |
| 271 | + "30f770205447363911d272b748197534af1d731a": { |
272 | 272 | "package": {
|
273 | 273 | "name": "NOT",
|
274 |
| - "version": "1.0.0", |
275 |
| - "description": "NOT logic gate", |
276 |
| - "author": "Jesús Arroyo", |
277 |
| - "image": "%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2291.33%22%20height=%2245.752%22%20version=%221%22%3E%3Cpath%20d=%22M0%2020.446h27v2H0zM70.322%2020.447h15.3v2h-15.3z%22/%3E%3Cpath%20d=%22M66.05%2026.746c-2.9%200-5.3-2.4-5.3-5.3s2.4-5.3%205.3-5.3%205.3%202.4%205.3%205.3-2.4%205.3-5.3%205.3zm0-8.6c-1.8%200-3.3%201.5-3.3%203.3%200%201.8%201.5%203.3%203.3%203.3%201.8%200%203.3-1.5%203.3-3.3%200-1.8-1.5-3.3-3.3-3.3z%22/%3E%3Cpath%20d=%22M25.962%202.563l33.624%2018.883L25.962%2040.33V2.563z%22%20fill=%22none%22%20stroke=%22#000%22%20stroke-width=%223%22/%3E%3C/svg%3E" |
| 274 | + "version": "1.0.1", |
| 275 | + "description": "Puerta NOT", |
| 276 | + "author": "Jesús Arroyo, Juan González", |
| 277 | + "image": "%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2291.33%22%20height=%2245.752%22%20version=%221%22%3E%3Cpath%20d=%22M28.414%203.789l33.624%2018.883-33.624%2018.884V3.789z%22%20fill=%22none%22%20stroke=%22#000%22%20stroke-width=%223%22%20stroke-linejoin=%22round%22/%3E%3Ccircle%20cx=%2267.578%22%20cy=%2222.613%22%20r=%224.444%22%20fill=%22none%22%20stroke=%22#000%22%20stroke-width=%222%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22/%3E%3Cpath%20d=%22M3.612%2022.766h24.65M72.433%2022.766h13.889%22%20fill=%22none%22%20stroke=%22#000%22%20stroke-width=%222%22%20stroke-linecap=%22round%22/%3E%3C/svg%3E" |
278 | 278 | },
|
279 | 279 | "design": {
|
280 | 280 | "graph": {
|
|
283 | 283 | "id": "5365ed8c-e5db-4445-938f-8d689830ea5c",
|
284 | 284 | "type": "basic.code",
|
285 | 285 | "data": {
|
286 |
| - "code": "// NOT logic gate\n\nassign c = ~ a;", |
| 286 | + "code": "//-- Puerta NOT\n\nassign c = ~a;\n", |
287 | 287 | "params": [],
|
288 | 288 | "ports": {
|
289 | 289 | "in": [
|
|
0 commit comments