Mam problem z programem do wagi. Nie jestem dobry w programowaniu a chce z podanego poniżej programu na PSoC przerobić (o ile to możliwe na AtMege8 zestaw ZL2avr). Chodzi mi o prosty program ważenia z wykorzystaniem adc AtMegi bo sygnal wejdzie z wzmacniacza pomiarowego.:
Cytat:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include <stdio.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)
{
}
};
Porty na mikroprocesorze to P0 i P1
Napięcie od 0 do 5V
Bardzo prosze o pomoc i z góry dziękuje
