Mam problemik z napisaniem programu do wagi, na początku myślałem ze to będzie proste jednak.. Mam programik z EP i chciałem go przerobić ale niezbyt mi to idzie.. Może ktoś mógłby mi nieco pomóc.. Waga zbudowana została na czujniku KM200 50N, Wzmacniaczu pomiarowym firmy "Spice" AT5210N oraz mikroprocesorze w układzie ZL2 avr.. oto programik który mam z EP :
Chcailem napisać zwykły i prosty program do wagi. Jeśli ktoś mógłby mi pomóc to byłbym bardzo wdzięczny
Cytat:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
int pom_tens(void);
void pom_wag(void);
int adc_tens,offset,offset_wag,waga; //zmienna odczyta wartosci z tensometru
char wyn[7]; //zmienna wyniku
int adc_temp[5];
float tmp_wag;
char i,j,lbuf;
long buf;
int temp_buf[20];
void main()
{
lbuf=0;
M8C_EnableGInt;
AMUX_Start() ;
LCD_Start();
LCD_Position(0,0);
LCD_PrCString(" ");
LCD_Position(0,0);
LCD_PrCString("Waga");
LCD_Position(1,0);
LCD_PrCString(" ");
LCD_Position(1,0);
LCD_PrCString("Kalibracja");
INSAMP_Start(INSAMP_HIGHPOWER);
delay();
delay();
delay();
delay();
delay();
ADC_DelSig_Start( ADC_DelSig_HIGHPOWER );
delay();
delay();
delay();
delay();
delay();
delay();
ADC_DelSig_StartAD();
delay();
for (j=0;j<20;j++) adc_tens=pom_tens();
offset=adc_tens;
AMUX_InputSelect(AMUX_PORT0_2);
delay();
delay();
delay();
delay();
delay();
delay();
for (j=0;j<20;j++)
{
pom_wag();
delay();
}
offset_wag=adc_tens;
LCD_Position(0,0);
LCD_PrCString(" ");
LCD_Position(1,0);
LCD_PrCString(" ");
LCD_InitBG(LCD_SOLID_BG );
while (1)
{
pom_wag();
waga=adc_tens-offset_wag;
if ((waga<10) || (waga<-10)) waga=0;
LCD_DrawBG(1, 0, 16, (waga/50));
LCD_Position(0,0);
LCD_PrCString("Waga: ");
LCD_Position(0,6);
LCD_PrCString(" ");
if (waga>=1000)
{
LCD_Position(0,6);
itoa(wyn,(waga/1000),10);
LCD_PrString(wyn);
waga=waga%1000;
}
itoa(wyn,waga,10);
if (waga<100)
{
LCD_Position(0,7);
LCD_PrCString("0.");
LCD_PrString(wyn);
if (waga<10) LCD_PrCString("0");
LCD_PrCString(" kg");
}
else
{
LCD_Position(0,7);
LCD_PrString(wyn);
LCD_Position(0,8 );
LCD_PrString(wyn);
LCD_PrCString(" kg");
LCD_Position(0,8 );
LCD_PrCString(".");
}
delay();
}
}
void pom_wag(void)
{
adc_tens=pom_tens();
adc_tens=adc_tens-offset;
//tmp_wag=adc_tens*0.0001587;
tmp_wag=adc_tens*0.0003052;
tmp_wag=tmp_wag/72;
tmp_wag=(tmp_wag/(0.002*4.98 ))*30;
tmp_wag=tmp_wag*100;
adc_tens=(int)tmp_wag;
}
int pom_tens(void)
{
int pom_tens;
while (1)
{
if ( ADC_DelSig_fIsDataAvailable() )
{
temp_buf[lbuf]=ADC_DelSig_iGetDataClearFlag();
lbuf++;
if (lbuf==20) lbuf=0;
buf=0;
for (i=0;i<20;i++) buf=buf+temp_buf[i];
pom_tens=(int)(buf/20);
return pom_tens;
}
}
}
void delay() //procedura opoznienia
{
unsigned int l, i;
for (i=0; i<15000;i++)
{
for(l=0;l++;l=65000)
{
asm("nop");
asm("nop"); //pusty asemblerowy rozkaz
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}
};
Chcailem napisać zwykły i prosty program do wagi. Jeśli ktoś mógłby mi pomóc to byłbym bardzo wdzięczny
