je suis chargé de faire un mini projet qui consiste a realiser un osciloscope ghraphique a partir d'un pic 16F877 et d'une GLCD programmé en microc.
j'ai arrivé de le faire mais pas tout-a-fait,j'arrive a recupirer le signal qui je donne au pic a l'entré .le probleme c'est que:quand je donne un signal sinusoidale je recevoir un signal qui saturé et je sais pas commnt faire pour qu'il soit purment sinus.
2eme problemme:je veux ajouté un afficheur LCD pour afficher le max et le min de ce signal mais j'arrive pas.
j'ai besoin de votre aide s'ils vous plait et merci d'avance.
voilàa mon progrm:
// LCD module connections
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;

sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
// End LCD module connections
char GLCD_DataPort at PORTD;

sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections


void cls(void){ // function to clean screen
Glcd_Box(0,0, 128,64, 0);
}

unsigned int volt;
unsigned int x=1;
float y;
unsigned int x1=0;
unsigned int y1,y2,ma,mi;
char txt[10];
char txtt[10];
void main() {
Glcd_Init();
cls();
TRISA = 0xFF; // PORTA is input
TRISC = 0;
PORTC = 0xFF;
TRISC = 0xff;
Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);
mi=y2;
ma=y1;
Lcd_Out(1, 1, "ymax=");
Lcd_Out(2, 1, "ymin=");
/*Glcd_Rectangle(1, 1, 32, 63, 1);
Glcd_Rectangle(32, 1, 64, 63, 1);
Glcd_Rectangle(64, 1, 96, 63, 1);
Glcd_Rectangle(96, 1, 127, 63, 1);
Glcd_Rectangle(1, 32, 127, 63, 1);*/
do {

volt = ADC_Read(0); // Get 10-bit results of AD conversion
volt= (volt*5*10)/1023;
if (x1==0){
x1=x;
y1=volt+22;}
Glcd_Dot(x, volt+22, 1);
Glcd_Line(x1, y1, x, volt+22, 2);
x1=x;
y1=volt+22;
y2=volt-y1;
x++;


if(y1>ma) ma=y1;
IntToStr(ma, txt);
Lcd_Out(1,7 , txt);
if(y2<mi) mi=y2;
IntToStr(mi, txtt);
Lcd_Out(2,7 , txt);

if (x==127){
x=1;
x1=0;
y1=0;
cls();
}
} while(1);

}