|
26 | 26 | "virtual": false
|
27 | 27 | },
|
28 | 28 | "position": {
|
29 |
| - "x": 368, |
| 29 | + "x": 344, |
30 | 30 | "y": 56
|
31 | 31 | }
|
32 | 32 | },
|
33 | 33 | {
|
34 |
| - "id": "51a292aa-a94e-4740-ae83-2746afda1767", |
35 |
| - "type": "c91ccaa367351314fdd1ed7784836fe9155f7ecc", |
| 34 | + "id": "9356e0a8-27f7-4147-a7f5-5f6eab9c2eda", |
| 35 | + "type": "054bfeb29658539df35dc63cbe18127ada173775", |
36 | 36 | "position": {
|
37 |
| - "x": 528, |
| 37 | + "x": 512, |
38 | 38 | "y": 136
|
39 | 39 | }
|
40 | 40 | },
|
|
91 | 91 | "wires": [
|
92 | 92 | {
|
93 | 93 | "source": {
|
94 |
| - "block": "51a292aa-a94e-4740-ae83-2746afda1767", |
95 |
| - "port": "eac2d6e9-4a62-4aec-8ce8-0e6c54e14d22" |
| 94 | + "block": "28443a1c-95de-48d3-a6f7-61d9d269cf99", |
| 95 | + "port": "out" |
96 | 96 | },
|
97 | 97 | "target": {
|
98 |
| - "block": "87553ab7-fc7b-4493-be64-136b05fc8e72", |
99 |
| - "port": "in" |
100 |
| - } |
| 98 | + "block": "9356e0a8-27f7-4147-a7f5-5f6eab9c2eda", |
| 99 | + "port": "f9f4add8-1ca6-49c0-adae-0d1a45025fc1" |
| 100 | + }, |
| 101 | + "vertices": [ |
| 102 | + { |
| 103 | + "x": 480, |
| 104 | + "y": 112 |
| 105 | + } |
| 106 | + ] |
101 | 107 | },
|
102 | 108 | {
|
103 | 109 | "source": {
|
104 | 110 | "block": "de159724-2d3e-4c6a-8cc7-63d1b74eade6",
|
105 | 111 | "port": "out"
|
106 | 112 | },
|
107 | 113 | "target": {
|
108 |
| - "block": "51a292aa-a94e-4740-ae83-2746afda1767", |
| 114 | + "block": "9356e0a8-27f7-4147-a7f5-5f6eab9c2eda", |
109 | 115 | "port": "e3e07bdb-9bb3-4afb-ace5-bcc99aecef0a"
|
110 | 116 | }
|
111 | 117 | },
|
112 | 118 | {
|
113 | 119 | "source": {
|
114 |
| - "block": "28443a1c-95de-48d3-a6f7-61d9d269cf99", |
115 |
| - "port": "out" |
| 120 | + "block": "9356e0a8-27f7-4147-a7f5-5f6eab9c2eda", |
| 121 | + "port": "eac2d6e9-4a62-4aec-8ce8-0e6c54e14d22" |
116 | 122 | },
|
117 | 123 | "target": {
|
118 |
| - "block": "51a292aa-a94e-4740-ae83-2746afda1767", |
119 |
| - "port": "f9f4add8-1ca6-49c0-adae-0d1a45025fc1" |
120 |
| - }, |
121 |
| - "vertices": [ |
122 |
| - { |
123 |
| - "x": 496, |
124 |
| - "y": 120 |
125 |
| - } |
126 |
| - ] |
| 124 | + "block": "87553ab7-fc7b-4493-be64-136b05fc8e72", |
| 125 | + "port": "in" |
| 126 | + } |
127 | 127 | }
|
128 | 128 | ]
|
129 | 129 | },
|
|
136 | 136 | }
|
137 | 137 | },
|
138 | 138 | "dependencies": {
|
139 |
| - "c91ccaa367351314fdd1ed7784836fe9155f7ecc": { |
| 139 | + "054bfeb29658539df35dc63cbe18127ada173775": { |
140 | 140 | "package": {
|
141 | 141 | "name": "ServoBit_180",
|
142 | 142 | "version": "0.1",
|
|
151 | 151 | "id": "111d9859-6de5-4608-9176-ed8359ffebc5",
|
152 | 152 | "type": "basic.code",
|
153 | 153 | "data": {
|
154 |
| - "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", |
| 154 | + "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", |
155 | 155 | "params": [],
|
156 | 156 | "ports": {
|
157 | 157 | "in": [
|
|
189 | 189 | "id": "eac2d6e9-4a62-4aec-8ce8-0e6c54e14d22",
|
190 | 190 | "type": "basic.output",
|
191 | 191 | "data": {
|
192 |
| - "name": "servo" |
| 192 | + "name": "" |
193 | 193 | },
|
194 | 194 | "position": {
|
195 | 195 | "x": 816,
|
|
200 | 200 | "id": "e3e07bdb-9bb3-4afb-ace5-bcc99aecef0a",
|
201 | 201 | "type": "basic.input",
|
202 | 202 | "data": {
|
203 |
| - "name": "bitpos" |
| 203 | + "name": "" |
204 | 204 | },
|
205 | 205 | "position": {
|
206 | 206 | "x": 56,
|
|
0 commit comments