You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"info": "ServoBit-180 : Ejemplo 2\n------------------------\n\nVisualizacion de 1 bit negado\n\nAhora el servo está mirando hacia la izquierda\ncuando el pulsador NO está apretado\n\nAl apretarlo se mueve hacia la derecha\n\nJusto lo contrario del ejemplo 1\nEs lo que hace la puerta NOT"
92
+
},
93
+
"position": {
94
+
"x": 32,
95
+
"y": 240
96
+
}
97
+
}
98
+
],
99
+
"wires": [
100
+
{
101
+
"source": {
102
+
"block": "4394362a-06dd-4590-8104-0e31ca863e05",
103
+
"port": "eac2d6e9-4a62-4aec-8ce8-0e6c54e14d22"
104
+
},
105
+
"target": {
106
+
"block": "9feb2740-2ac5-4a4d-b5e3-c0634516d719",
107
+
"port": "in"
108
+
}
109
+
},
110
+
{
111
+
"source": {
112
+
"block": "d92ff5cc-b23f-48b0-acf6-aea5288be227",
113
+
"port": "out"
114
+
},
115
+
"target": {
116
+
"block": "4394362a-06dd-4590-8104-0e31ca863e05",
117
+
"port": "f9f4add8-1ca6-49c0-adae-0d1a45025fc1"
118
+
},
119
+
"vertices": [
120
+
{
121
+
"x": 432,
122
+
"y": 112
123
+
}
124
+
]
125
+
},
126
+
{
127
+
"source": {
128
+
"block": "0c98e6e0-d391-4f12-9efa-aff76f0b22ea",
129
+
"port": "664caf9e-5f40-4df4-800a-b626af702e62"
130
+
},
131
+
"target": {
132
+
"block": "4394362a-06dd-4590-8104-0e31ca863e05",
133
+
"port": "e3e07bdb-9bb3-4afb-ace5-bcc99aecef0a"
134
+
}
135
+
},
136
+
{
137
+
"source": {
138
+
"block": "19b09324-e39a-48f2-89cb-a6d8148a7471",
139
+
"port": "out"
140
+
},
141
+
"target": {
142
+
"block": "0c98e6e0-d391-4f12-9efa-aff76f0b22ea",
143
+
"port": "18c2ebc7-5152-439c-9b3f-851c59bac834"
144
+
}
145
+
}
146
+
]
147
+
},
148
+
"state": {
149
+
"pan": {
150
+
"x": 0,
151
+
"y": -27
152
+
},
153
+
"zoom": 1
154
+
}
155
+
},
156
+
"dependencies": {
157
+
"c91ccaa367351314fdd1ed7784836fe9155f7ecc": {
158
+
"package": {
159
+
"name": "ServoBit_180",
160
+
"version": "0.1",
161
+
"description": "Controlador de 1 bit para mover un servo a 2 posiciones. El ángulo entre una posición y otra es de 180 grados",
"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",
0 commit comments