Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/02/2014 #1


Como Generar una señal a mi gusto en un pic
Buenas a todos lo que pasa es que me pidieron generar la señal que esta en la imagen pues ya pude generarla pero el problema es la frecuencia que me piden en el proyecto ya he intentado todo voy a dejar el código y la imagen de la señal que deseo

PTD:la frecuencia que me piden es 5khz y me sale una frecuencia de 20hz lo hago atravez de timer 0

Código:
#include <18f4550.h>
#device adc=10
#fuses hspll,mclr,nowdt,noprotect,nolvp,nodebug,usbdiv,pll4,cpudiv1,novregen,nopbaden
#use delay (clock=48000000)
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)


int16 frecuencia=0;
int16 desbordes=0;
int seno[]={0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
0};
#int_rtcc
void rtcc_isr(){
        
        frecuencia=read_adc();        
        output_B(seno[desbordes]);
        set_rtcc(240); 
        desbordes++;
        if(desbordes>=511)
        
        
                     {
                          desbordes = 0;
                        }   
  }

void main()
  {
     setup_adc_ports(all_analog);
     setup_adc(adc_clock_internal);
     set_adc_channel(0);  
     set_tris_b(0x00);
     set_tris_d(0x00);
     setup_counters(rtcc_internal, rtcc_div_16|rtcc_8_bit);      
     enable_interrupts(int_rtcc);       
     enable_interrupts(global);
     set_rtcc(252);
     desbordes = 0;

   while(true)
   {
   
   }
   } ...
23/02/2014 #2
Moderador general

Avatar de Fogonazo

Lee esto:
¿ Como subir imágenes ?
23/02/2014 #3


Gracias Soy nuevo
A si que pena ahora si es que antes no pude ver como subir la imagen la adjunto ahora si
Imágenes Adjuntas
Tipo de Archivo: png funcion teleco.png (5,8 KB (Kilobytes), 29 visitas)
24/02/2014 #4

Avatar de anderson torres

Puedes usar el modulo PWM del micro, junto aun filtro pasabajos. Yo pude generar señales de frecuencia de 10Khz utilizando valores predetermiandos guardados en un vector, eso si, no pueden ser muchos datos, porque el PIC tarda mucho entre punto y punto de la señal; y no puede generar frecuencias mas altas.
24/02/2014 #5


Hola, fijate si te sirve la idea, soy neofito y quizá este errado en el concepto, si es así mis disculpas.
Con un poco de matemática y paciencia se puede, claro que no será una pendiente perfecta, pero eso depende de si te sirve la precición. Considerando una pendiente de 0 a 5V en 1/2 T, estamos hablando de T igual para ambos estados, podemos dividir 1/2T en x partes= yT, o 5V en X partes=yV. Con ese calculo deberemos definir el incremento en la referencia del pwm de salida para partiendo de 0 llegar a 5V en el tiempo elegido (y según sea 10 u 8 bits la referencia)
Iniciando con el calculo del tiempo intermedio a los incrementos, cada yT se incrementa PWM hasta los 5V, se mantiene en ese valor 1/2T y se vuelve a comenzar.
T se puede ingresar por A/D o teclado y en forma de tiempo o frecuencia, y su refresco cada temporización o mando externo.
Un abrazo
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.