-


-


-

Mostrando entradas con la etiqueta Funciones CCS. Mostrar todas las entradas
Mostrando entradas con la etiqueta Funciones CCS. Mostrar todas las entradas

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}   ;


Grabar y leer dos bytes en EEprom

Funciones read_eeprom(address) y write_eeprom(address, byte)  




void write_eeprom_16bits(int address, long* val){
  int pLow, pHigh;
  pLow = val;
  pHigh = val>>8;
  write_eeprom(address,pHigh);
  delay_ms(12);
  ++address;
  write_eeprom(address,plow);
  delay_ms(12);
}

long read_eeprom_16bits(int address){
  int pLow, pHigh;
  long result;
  pHigh = read_eeprom(address);
  ++address;
  pLow = read_eeprom(address);
  result=(pHigh<<8);
  result+=pLow;
  return result;
}



Esto no es mio, lo he  sacado de aquí http://picmania.garcia-cuervo.net, porque me ha sido muy util

Funcion para reloj digital HH:MM:SS basada en la interrupcion TMR0

 //Hay que declarar esto en la funcion Main para que sea un segundo:
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); //timer0 konfiguratu
//-------------------------------------------------
#int_TIMER0
void TIMER0_isr(void)
{

if (ms<15){ // 15 veces para lograr un segundo, (no son milisegundos)
      ms++;
}else{
ms=0;
      if (s<59){
      a0=1;
      s++;
      a0=0;
      if(s%2==0){a4=1;}
       if(s%2==1){a4=0;}
      }else{
      s=0;
                if (m<59){
                m++;
                }else{
                m=0;
                        if (h<23){
                        h++;
                        }else{
                        h=0;
                        }
                }
      }
}

CCS PIC: Funcion para convertir cadena de caracteres en numero float

 Usado para extraer caracteres pasar de char a float de un LCD lm16l  y operar con ellos.


float get_complex_num(){
int s;
 float result=0;
int xtract=0;
float mult;
float raw;

for (s=x-1;s>=1;s--){
xtract++;
if (xtract==1){mult=1;}
if (xtract==2){mult=10;}
if (xtract==3){mult=100;}
if (xtract==4){mult=1000;}
if (xtract==5){mult=10000;}
if (xtract==6){mult=100000;}
if (xtract==7){mult=1000000;}
if (xtract==8){mult=10000000;}
if (xtract==9){mult=100000000;}
if (xtract==10){mult=1000000000;}
if (xtract==11){mult=10000000000;}
raw=lcd_getc(s,2)-48;
result=(raw*mult)+result;
/*// zelan itten daben ikusteko!
printf(lcd_putc, "r-%f x->%i",result,x);
delay_ms(1500);*/
x--;

}
return result;

}