-


-


-

Simulación de portadora para infrarrojos (38khz) con PWM envio por rs232

En el grafico puede verse :
PWM: Es la señal emitida por el PIN C2 que es el PWM del pic configurado a 38khz
PICTX: Es el pin C6, utilizado como TX de RS232 a 1200 baudios.
SEND: Es el resultado de '(PICTX & PWM), en otras palabras, la negación de la multiplicación de las señales PICTX y PWM. Ésta es la señal que sera enviada al led infrarrojo.

Descargar simulacion y archivos CCs

Array multidimensional en c


ATMEGA AVR studio:

int seq[4][8] = {
  {{0x04}, {0x0c}, {0x08} , {0x0a},{0x0b}, {0x03}, {0x07} ,{0x05}},
  {{0x07}, {0x03} , {0x0b},{0x0a}, {0x08}, {0x0c} ,{0x04},{0x05}},
{{0x0c}, {0x0a}, {0x03} , {0x05},{0x0c}, {0x0a}, {0x03} ,{0x05}},
{{0x03}, {0x0a} , {0x0c},{0x05}, {0x03}, {0x0a} ,{0x0c},{0x05}} };

PIC PCWCCS:


int seq[4][8] = {
  // 0x04,0x0c,0x08,0x0a,0x0b,0x03,0x07,0x05,
  // 0x07,0x03,0x0b,0x0a,0x08,0x0c,0x04,0x05,
   0x0c,0x0a,0x03,0x05,0x0c,0x0a,0x03,0x05,
   0x03,0x0a,0x0c,0x05,0x03,0x0a,0x0c,0x05}   ;


SerialWorks! Monitor/Logger de puerto serie Visual basic 6.0

El programa esta diseñado para monitorizar un LM35 ubicado en los motores paso a paso del proyecto "SBMP", cuya funcion es monitorizar y registrar la temperatura de los mismos, con una resolucion de 1023 bits en el eje Y, y un minimo de 5mS en el eje X...

Planeo utilizar este sistema para montar una central de registro metereologico, sumandole algunas magnitudes a medir, como la humedad relativa, precipitaciones, rayos UV, luz,  presion etc

El programa esta en obras pero esta probado en simulacion y en la vida real y funciona perfectamente.

Si alguien tiene alguna duda de como usarlo que ponga un comentario.

Descargar codigo fuente VB6

Interrupcion Timer1 en atmega168

Dos bytes de resolucion, ideal para cualquier temporizacion que requiera un minimo de precision, y no hay mucho mas que comentar, ahi dejo las fuentes

Descargar codigo fuente

MAX232 más que una interfaz de serie, bomba de carga electrica

*Si te interesa y no hablas euskera, utiliza el traductor...

En algunos casos puede sustituir un rele por un max232.


Helburua, erloju analogiko baten motorrarentzako driver bat sortzea da, horretarako, ziklo erdi +9v eta beste ziklo erdian
-9v ko tentsioak dituen uhin karratu bat sartu behar zaio.

Harilkatu bakarra edo pare bat duen pausuz pausuko motorea dela uste dut, honek, 6º ko pausua du, beraz 60 pausutan egingo
luke bira osoa, hain zuzen ere ordu batek dituen minutu kopurua.

Motore honek bere borneen arteko tentsioaren egoera aldaketan eragingo dio errotorari. Hau da +9tik  -9ra trantsizioan
(eta alderantziz ere) erloju analogikoak minutu bat gehituko luke minutuen orratza +1 eskumara mugiduz.

Aurretik eginda zegoen "Erloju-kontroladorea0", kontagailu batzuen bidez,   RLCX (bai, X!) osziladore batek sortzen duen uhina
zatituz errele baten harilkatua eragiten, edo ez eragiten, kontrolatzen zen.

Nire ustez diseinu honen arazoa, hainbat tentsio eman ahal dituen elikatze iturri "konplexu" baten beharra dela da.
+9v, -9v, +5v logikarentzako eta +12v errelearentzako.

Honek dakartzan erreguladore eta kondentsadoreekin batera, bf kristona lirateke ta oso txarra naz analogikan jajaja.

Beraz MAX232a erabiltza okurriduaten eta erabiliko den korronteari buruzko hainbat zalantza argitu ta gero
, teorikoki posiblea zela "Charge Pump" delako edozein zirkuito bati ezker, MAX232 horretarako aproposa! ...

Soldiatu eta gero primeran joan da!
Kontuan hartu behar da  MAX232 aren

bi kanalak gehituta eman ahal duen korronte maximoa  120mA koa dela. Baina kasu honetan erlojuaren motoreak eskatzen duen korrontea 20mA koa da gutxi gora behera.


Testuganeko irudian, erabilitako oinarrizko hardwarearen  eskema. Goian, orain arte erabilitakoa, eta behean berria, "hopespena".Hardwarearen aldetik askoz ere merkeagoa.
Eta, teorian, zehatzagoa.


Eskumako irudiak, erlojuak, funtzionatzeko, jaso beharko duen uhina azaltzen du. 0,0083HZ ko uhin batek minutu bakoitzeko egoera aldaketa bat sortuko du.

Nota: Ordua aldatzeko segunduetan egingo dira egoera aldaketak hau da, 0.5HZko uhina izango da, baina orrek ez du garrantzirik.




Sarrera honetan garrantzia, ezkerreko zirkuito honi eman nahi nion, erabilera kopuru ikaragarri dituen "Charge Pump" sistema honen berri izan
dut eta berarekin jolasteko aukera izaten ari naiz eta oso interesgarria iruditzen zait.


Ereduak deskargatu: Proteus+AVRstudio


Controlando 4 steppers desde 2 puertos con atmega32

Es parte del proyecto de la fresadora, todavia esta sin terminar pero en el programa pueden probarse varias secuencias

0- medio paso a la derecha
1- medio paso a la izquierda
2-paso a la derecha
3-paso a la izquierda

La siguiente funcion es la encargada de todo


void mover (int edge,int sel,double pulseq)
void mover ( SELECCIONA EL EJE A MOVER ,SELECCIONA LA SECUENCIA ,CANTIDAD DE PULSOS A REALIZAR)

He aqui la funcion completa, aunque pueden descargar el zip de las fuentes en Proteus+AVRstudio mas abajo.

void mover (int edge,int sel,double pulseq){
pulseq--;
int k;
switch(sel){
case 0: k = last_x;break;
case 1: k = last_y;break;
case 2: k = last_z;break;
case 3: k = last_a;break;
}
//k++;
if (k==8){k=0;}
int pq;
int temp;
 for (pq=0;pq<=pulseq;pq++)
{
LCDWriteStringXY(4,0,"            ");
LCDWriteIntXY(4+k,0,  seq[sel][k],1);
switch (edge)
{
case 0:
temp= PORTC & 0XF0;
temp= temp | seq[sel][k];
PORTC = temp;
break;
case 1:
temp= PORTC & 0X0F;
temp= temp | (seq[sel][k]<<4);
PORTC = temp;
break;
case 2:
temp= PORTA & 0XF0;
temp= temp | seq[sel][k];
PORTA = temp;
break;
case 3:
temp= PORTA & 0X0F;
temp= temp | (seq[sel][k]<<4);
PORTA = temp;
break;
}
k++;
if (k==8){k=0;}
switch(sel){
case 0: last_x = k; break;
case 1: last_y = k; break;
case 2: last_z = k; break;
case 3: last_a = k; break;
}
_delay_ms(10);
}
}

Una cosa que me costo bastante (para lo que es) fue hallar la secuencia de medio paso  en el grafico a continuacion se observa, primero una vuelta entera y despues 180º de giro. Como puede apreciarse a continuacion de este parrafo, las secuencias han sido alojadas en un array multidimensional con el fin de ahorrar espacio y dinamizar el acceso a las mismas.


int seq[4][8] = {
    { {0x04}, {0x0c}, {0x08} , {0x0a},{0x0b}, {0x03}, {0x07} , {0x05}},  // half step right
    {  {0x07}, {0x03} , {0x0b},{0x0a}, {0x08}, {0x0c} , {0x04},{0x05}},// half step left
    { {0x0c}, {0x0a}, {0x03} , {0x05},{0x0c}, {0x0a}, {0x03} , {0x05}},  // full step right
    {  {0x03}, {0x0a} , {0x0c},{0x05}, {0x03}, {0x0a} , {0x0c},{0x05}} // full step left
};




Y bueno, como siempre dejo aqui las fuentes por si alguien las necesita Descargar Proteus+AVRstudio



Ejemplo prender leds Atmega 32

No hay mucho que comentar, descargar y ver