Advertisement
Guest User

zad3

a guest
May 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include "stm32f10x.h"
  2. #include "evbLib.h"
  3. #include <stdio.h>
  4. #include <math.h>
  5.  
  6. int x=0,y=0;
  7.  
  8. void czysc() {
  9. lcdGoTo(0,0); lcdWrite(" "); //16
  10. lcdGoTo(1,0); lcdWrite(" "); //16
  11. lcdGoTo(x,y);
  12. }
  13.  
  14. int main(void) {
  15. char odczyt[17];
  16. int ADC_value[100]; // nasza tablica do przyjmowania zmieczonych wartosci z przetwornika ADC
  17. float napiecie_ADC; // stworzenie wszystkich potrzebnych zmiennych
  18. float suma_srednia, suma_sredniax, odchylenie;
  19. float min, max, srednia, sredniax;
  20. int i;
  21. ADC_InitTypeDef ADC_InitStruct; //stworzenie zmiennej do naszej struktury inicjujacej
  22. // wlaczenie taktowania zegara dla przetwornika ADC1
  23. RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
  24. //konfigurowanie przetwornika ADC
  25. ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
  26. ADC_InitStruct.ADC_ScanConvMode=DISABLE;
  27. ADC_InitStruct.ADC_ContinuousConvMode=ENABLE;
  28. ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
  29. ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
  30. ADC_InitStruct.ADC_NbrOfChannel=1;
  31. ADC_Init(ADC1, &ADC_InitStruct);
  32. ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_71Cycles5);
  33. //wlaczenie ADC
  34. ADC_Cmd(ADC1, ENABLE);
  35. ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  36.  
  37. while(1) {
  38. suma_srednia=0; suma_sredniax=0;
  39. min=5; //dowolna wartosc wieksza od najwiekszego mozliwego do uzyskania pomiaru
  40. max=0; srednia=0; sredniax=0; odchylenie=0;
  41.  
  42. for(i=0;i<100;i++) { // petla zbierajaca wyniki
  43. ADC_value[i]= ADC_GetConversionValue(ADC1); //wpisywanie w tablice
  44. }
  45.  
  46. for(i=0;i<100;i++) {
  47. napiecie_ADC=ADC_value[i]*0.0008056640625; // bitowa rozdzielczosc przetwarzania 3,3V/4096 = 0.0008056640625 V
  48. suma_srednia=suma_srednia+napiecie_ADC;
  49. if(napiecie_ADC<min) { min=napiecie_ADC; }
  50. if(napiecie_ADC>max) { max=napiecie_ADC; }
  51. suma_sredniax=suma_sredniax+napiecie_ADC*napiecie_ADC;
  52. }
  53.  
  54. srednia=suma_srednia/100;
  55. sredniax=suma_sredniax/100;
  56. odchylenie=sqrt(100*fabs(sredniax-srednia*srednia)/99);
  57.  
  58. sprintf(odczyt,"srednia %.2f V", srednia);
  59. lcdWrite(odczyt); delayMs(1000); czysc();
  60. sprintf(odczyt,"minimalna %.2f V", min);
  61. lcdWrite(odczyt); delayMs(1000); czysc();
  62. sprintf(odczyt,"maksymalna %.2f V", max);
  63. lcdWrite(odczyt); delayMs(1000); czysc();
  64. sprintf(odczyt,"odchylenie %.3f V", odchylenie);
  65. lcdWrite(odczyt); delayMs(1000); czysc();
  66. delayMs(1000);
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement