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
-
-
-
Mostrando entradas con la etiqueta Funciones CCS. Mostrar todas las entradas
Mostrando entradas con la etiqueta Funciones CCS. Mostrar todas las entradas
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
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;
}
}
}
}
//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;
}
Suscribirse a:
Entradas (Atom)