logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega32[C]voltomierz z dwoma progami napięć załącz/wyłącz

margas4542 12 Sie 2010 19:28 2847 18
  • #1 8391887
    margas4542
    Poziom 16  
    Witam.
    Ten kawałek kodu ręcznie przepisałem z przykładu pana CEZARY KLIMASZ kod jest na atmegę8 ale zdefiniowałem odpowiednie porty mojej atmegi32 chcąc zapoznać się na tym przykładzie jak napisać program obsługi ADC wprowadzając następnie dwa stałe progi napięć w celu włączanie i wyłączania np; prostownika ładującego akumulator. Niestety, gdzieś jest błąd, którego nie potrafię znaleźć. Linie obsługi wyświetlacza zremowałem szukając błędu w kodzie ADC..
    
    //---------------------------------------------------------------
    // >>>>>>>>>>>>       V O L T O M I E R Z       <<<<<<<<<<<<<<<<<
    //---------------------------------------------------------------
    //################## procesor ATmega 16Mhz ######################
    //---------------------------------------------------------------
    #include <avr/io.h>
    #include <stdlib.h>
    #include <avr/interrupt.h>
    #include <HD44780.c>
    //   >>>>>>>>>>>>>> definicje stałych i zmiennych <<<<<<<<<<<<<<<<
      #define PORT_AD PORTA			// port z wejściami analogowymi
      #define DDR_AD DDRA			//
      #define DDR_MPX DDRB			// port sterujący multiplexerem kodzie dwójkowym
    
    //	>>>>>>>>>>>>>>>>>>  main  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    volatile float volt;						// obliczanie wartości napięcia
    volatile uint8_t counter;					// licznik co który pomiar pobierać
    volatile float aku_home, solar;				// osobny wynik dla każdego pomiaru
    
    //   >>>>>>>>> pomiar i monitorowanie dwu anapięć <<<<<<<<<<<<<<<
    
    SIGNAL(SIG_ADC)								// przerwanie po zakończeniu 
    
    przetwarzania
    {
     volt=(float)(ADCL | (ADCH<<8))/1024*Vref;	// obliczanie napięcia na wejściu
      counter++;								// zwiększanie licznika
       if(counter==30)
       {
        if(bit_is_set(ADMUX,MUX0))				// w zależności od ustawienia kanału
       {
    	aku_home=volt;							// pobranie pomiaru
    	 ADMUX&=~_BV(MUX0);						// przełączenie kanału
    	}
    	 else
    	{
    	 solar=volt;							// pobranie pomiaru
    	 ADMUX=_BV(MUX0);						// przełączenie kanału
    	}
    	 counter=0;								// wyzerowanie 
    
    licznika
      }
    // ------------------------------------------------------------------------
    void int_adc(void)
     {
      ADCSR = _BV(REFS0)|_BV(RESFS1);			// wewnętrzne napięcie referencyjne 
      ADCSR = _BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2);	// preskaler fcpu/128=125 khz
      ADCSR = _BV(ADEN)|_BV(ADSC)|_BCV(ADFR)|_BV(ADIE)|
      }
       int main(void)
       {
        int_adc();								// aktywacja ADC
    	 sei();									// zwolnienie 
    
    przerwańglobalnych
    	 for(;;)								// petla nieskończona
       {}
       return 0;
       }
    //--------------------------------------------------------------------------			 
    //	>>>>>>>>>>>>>>>  sprawdzanie napięcia na ADC 0  <<<<<<<<<<<<<<<
    //  ustawianie progów napięć min (10.5V / max (14.6V 
    //--------------------------------------------------------------------------
    
    
    
    //	>>>>>>>>>>>>>> obsługa LCD 2 x 16 <<<<<<<<<<<<<<<<<<<<<<<<<<<
    //{
    //   LCD_Initalize();
    //   LCD_Clear();           
    // {
    //   LCD_GoTo(0,0);                   // kursor na 1 lini 1 znak
    //   LCD_WriteText(aku_home);         // wyświetl w 1 lini 1 znak
    //   LCD_GoTo(8,0);                   //kursor na 1 lini 9 znak
    //   LCD_WriteText(solar);         	// wyświetl w 1 lini 9 znak
    //   }
    //   to tylko podgląd czy coś wyświtla
    //   {
    //    LCD_GoTo(0,1);               			// kursor na początek drugiej linii
    //    LCD_WriteText("MONITOROWAMNIE NAPIEC");	// wyświetl w 2 lini 1 pola
    //   }
    	
    //   >>>>>>>>>>>>>>>>>>>>>>>>>END<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
  • #2 8395391
    janbernat
    Poziom 38  
    W zasadzie to skąd wiesz że nie chodzi?
    Przecież wyników działania tego programu nigdzie nie wyprowadzasz na zewnątrz procesora.
    Podłącz dwie diody LED do wolnych pinów i ustaw w głównej pętli-która tym razem jest zrobiona przez

    a nie


    jakieś sprawdzanie czy napięcie jest wyższe czy niższe od zadanego.
    Czyli aku_home_progowe i solar_progowe- ktore można zadeklarować jako const na początku programu.
    I nie miotaj się od tematu do tematu- od razu wszystkiego nie zrobisz.
  • #3 8395445
    margas4542
    Poziom 16  
    ...fakt może się trochę miotam ale usiłuję znaleźć działający przykład na którym mógłbym "poeksperymentować"...i uaktualnić koncepcję działania całości w odniesieniu do moich jak na razie słabych możliwości programistycznych...
    ....kompilator przyczepił się do linii (int main(void) podając komunikat >> ../main.c:47: warning: 'main' is normally a non-static function...co jest nie tak ?

    
       int main(void)
       {
        int_adc();								// aktywacja ADC
    	 sei();									// zwolnienie przerwań globalnych
    	 for(;;)								// petla nieskończona
       {}
       return 0;
       }
    
  • #4 8395536
    janbernat
    Poziom 38  
    Nie zgadza się ilość nawiasów {}.
    Rób wcięcia w kodzie- będziesz widział gdzie się zaczyna{ a gdzie się kończy}.
    Kompilator to nie żona- niczego się nie domyśla.
  • #5 8395585
    margas4542
    Poziom 16  
    ... fakt zacznę robić wcięcia to faktycznie pozwala wzrokowo połapać się w ilości otwartych i zamkniętych..poprawiłem..rebulid.. i
    ../main.c:24: error: 'Vref' undeclared (first use in this function)
  • #6 8395798
    landy13
    Poziom 31  
    Jeśli chodzi o nawiasy spróbuj pisać w komentarzu od czego są. Np:

    int main(void)
       {
        ...
        ...
        while(1)
          {
           ...
           ...
           if(przyklad == 1)
              {
               ...
               ...
               }//if przyklad
            ...
            }//while
           ...
         }//main

    Przy dłuższym listingu to pomaga.
    Natomiast " 'Vref' undeclared (first use in this function)" to niezadeklarowana zmienna Vref.
  • #7 8395875
    janbernat
    Poziom 38  
    No i Vref to jest stałe napięcie odniesienia i trzeba to zdeklarować jako const poza wszelkimi funkcjami.
  • #8 8397470
    margas4542
    Poziom 16  
    ...ale przecież ustawione są bity VREF...to by znaczyło że ten przepisany kod jest do bani bo połowę kodu spapało......wywalam go bo do ładu z nim nie dojdę...nie wiem jak...czy jest jakiś przykład kodu który nie jest spaprany ?
  • #9 8398664
    margas4542
    Poziom 16  
    ..próbuje coś spłodzić korzystając z manuali ale szło bardzo opornie...no i utknąłem...chciałem najpierw odpalić LCD z "podstawionymi" wartościami danych 'volt' 'solar' 'aku' i dopiero potem zabrać się za ADC i gdybym miał już pomiar napięcia zdefiniować ustawienia progowe min/max i wypchnąć to na jakiś port poprzez MOC sterujący ładowarką...na ale nic z tego nie wyszło...nie mam już koncepcji jak to zrobić...
    
    //------------------------------------------------------------------------
    // >>>>>>>>>>>>       V O L T O M I E R Z       <<<<<<<<<<<<<<<<<
    //------------------------------------------------------------------------
    //################## procesor ATmega 16Mhz ######################
    //------------------------------------------------------------------------ 
    #include <avr/io.h>
    #include <stdlib.h>
    #include <avr/interrupt.h>
    #include <HD44780.c>
    //-------------------------------------------------------------------------
    //  >>>>> ustawienia portów 
    //-------------------------------------------------------------------------
    #define PORT_AD PORTA			// port z wejściami analogowymi
    #define DDR_AD DDRA			        //
    //#define DDR_MPX DDRB			// port sterujący multiplexerem kodzie dwójkowym       
    //-------------------------------------------------------------------------
    // >>>>>  deklaracje zmiennych i stalych globalnych
    //-------------------------------------------------------------------------
    const int Vmin = 11.0;			// progowe napięcie minimalne
    const int Vmax = 14.8;			// progowe napięcie maksymalne
    const int Vref = 2.56;			// napięcie referencyjne
    
    volatile float volt;			       //zmienna volt
    volatile float aku;			       //zmienna aku
    volatile float solar;			//zmienna solar
    
    //-------------------------------------------------------------------------
    int main(void)
    {
    
    
    }
    // ------------------------------------------------------------------------
    // >>> pomiar i monitorowanie dwu napięć <<<
    // ------------------------------------------------------------------------
    void int_adc(void)
    {
      ADCSRA = _BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2);   // preskaler fcpu/128=125 khz
      ADCSRA = _BV(ADEN)|_BV(ADSC)|_BV(ADFR)|_BV(ADIE);
    
    }
    //-------------------------------------------------------------------------- 
    // >>>  sprawdzanie napięcia na kanałach ADC
    // >>>  ustawianie progów napięć min (10.5V / max (14.6V
    //--------------------------------------------------------------------------
    
    
    //--------------------------------------------------------------------------
    //	>>>>>>>>>>>>>>>  wyświetlanie danych LCD 2x16  <<<<<<<<<<<<<<<<<<<<<<<<<
    //--------------------------------------------------------------------------
    {
     LCD_Initalize();
      LCD_Clear();
      {
       LCD_GoTo(0,0);    			           //
       LCD_WriteText("AKUMULATOR  SOLAR");  //wyświetl w 1 wierszu od 1 znaku
       LCD_GoTo(0,1);    			          //
       LCD_WriteText(" aku     solar");  	         //wyświetl w 2 wierszu od 1 znaku
       }
       while(1)
     {
     return 0;
    }
    //   >>>>>>>>>>>>>>>>>>>>>>>>>END<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • #10 8400488
    margas4542
    Poziom 16  
    ...proszę o sprawdzenie i korektę błędów z komentarzem...
    
    //------------------------------------------------------------------------
    // >>>>>>>>>>>>       V O L T O M I E R Z       <<<<<<<<<<<<<<<<<
    //------------------------------------------------------------------------
    //################## procesor ATmega 16Mhz ######################
    //------------------------------------------------------------------------ 
    #include <avr/io.h>
    #include <stdlib.h>
    #include <avr/interrupt.h>
    #include <HD44780.c>
    //-------------------------------------------------------------------------
    //  >>> ustawienia portów 
    //-------------------------------------------------------------------------
    #define PORT_AD PORTA// port z wejściami analogowymi
    #define DDR_AD DDRA	//     
    //-------------------------------------------------------------------------
    // >>>  deklaracje stalych globalnych
    //-------------------------------------------------------------------------
    const int Vmin = 11.0;		// progowe napięcie minimalne [przykładowe]
    const int Vmax = 14.8;		// progowe napięcie maksymalne[przykładowe]
    const int Vref = 2.56;		// napięcie referencyjne
    //-------------------------------------------------------------------------
    // >>>  definicje dla ADC
    //-------------------------------------------------------------------------
    volatile float volt;		//zmienna volt
    volatile float aku_home;	//zmienna aku_home
    volatile float aku_home;	//zmienna lcd_aku_home
    volatile float solar;	//zmienna solar
    volatile float solar;	//zmienna lcd_solar
    volatile uint8_t counter; //licznik co który pomiar pobierać
    char buffer_n[6];		//bufor z wynikami konwersji z "unsigned int" na ASCII
    //-------------------------------------------------------------------------
    SIGNAL(SIG_ADC)				//przerwanie po zakończeniu przetwarzania
    {
     volt=(float)(ADCL | (ADCH<<8))/1024*Vref;	// obliczanie napięcia na wejściu
     counter++;			//zwiększanie licznika
     if(counter==30)			//wyświetl co 30 pomiar
     {
      if(bit_is_set(ADMUX,MUX0))	// w zależności od ustawienia kanału
      {
       aku_home=volt;		//pobranie pomiaru
       ADMUX&=~_BV(MUX0);	//przełączenie kanału
      }
      else
      {
      solar=volt;			//pobranie pomiaru
      ADMUX=_BV(MUX0);		//przełączenie kanału
     }
    counter=0;				//wyzerowanie licznika
    }
    
    void int_adc(void)
    {
     ADCSRA |= _BV(ADPS0);    //preskaler fcpu/128=125 khz
     ADCSRA |= _BV(ADPS1);
     ADCSRA |= _BV(ADPS2);
     ADCSRA |= _BV(ADIE);     //przerwanie po zakończeniu konwersji
     ADCSRA |= _BV(ADIF);	    //
     ADCSRA |= _BV(ADSC);    //start konwersji
     ADCSRA |= _BV(ADEN);    //aktywacja przetwornika
    // ------------------------------------------------------------------------
    // >>> pomiar i monitorowanie dwu napięć <<<
    // ------------------------------------------------------------------------
    int main(void)
     {
      ADCSRA |= _BV(ADSC);	// Rozpoczęcie przetwarzania - wybrany był kanał 0
      while(bit_is_set(ADCSRA,ADSC))	// Oczekiwanie na zakończenie przetwarzania
      {};   
      aku_home = ADCH;		       // zapis wyniku konwersji w kanale 0
      ADMUX |= _BV(0);		       // wybranie kanału 1
      ADCSRA |= _BV(ADSC);	       // rozpoczęcie przetwarzania
      while(bit_is_set(ADCSRA,ADSC))	// oczekiwanie na zakończenie przetwarzania
      {};   
      solar = ADCH;			        // zapis wyniku konwersji w kanale 1
      ADMUX &= ~_BV(0);
      ADMUX |= _BV(1);
      ADCSRA |= _BV(ADSC);	        // Rozpoczęcie przetwarzania
      while(bit_is_set(ADCSRA,ADSC))	// Oczekiwanie na zakończenie przetwarzania  
      {};
    //--------------------------------------------------------------------------
    // >>>  wyświetlanie danych LCD 2x16
    //--------------------------------------------------------------------------
      {
      LCD_Initalize();
      LCD_Clear();
      {
       LCD_GoTo(0,0);    			                    //
       LCD_WriteText("AKUMULATOR");	                   //w 1 wierszu od 1 znaku
       LCD_GoTo(8,0);					  //
       LCD_WriteText("SOLAR");  	                           //w 2 wierszu od 1 znaku
       LCD_GoTo(0,1);    			                   //
       LCD_WriteText(utoa(aku_home, buffer_n, 10));//w 1 wierszu od 1 znaku
       LCD_GoTo(8,1);				          //
       LCD_WriteText(utoa(solar, buffer_n, 10));  	 //w 2 wierszu od 1 znaku
       }
       for(;;)                        				 // petla nieskończona 
      {
      return ;
      }
     }
    }
    //--------------------------------------------------------------------------
    // >>>>>>>>>>>>>>>>>>>>>>>>>>>>  END  <<<<<<<<<<<<<<<<<<<<<<<<
    //--------------------------------------------------------------------------
    
  • #11 8400741
    janbernat
    Poziom 38  
    To jest do bani:
    
    ADCSRA |= _BV(ADPS0);    //preskaler fcpu/128=125 khz
     ADCSRA |= _BV(ADPS1);
     ADCSRA |= _BV(ADPS2);
     ADCSRA |= _BV(ADIE);     //przerwanie po zakończeniu konwersji
     ADCSRA |= _BV(ADIF);       //
     ADCSRA |= _BV(ADSC);    //start konwersji
     ADCSRA |= _BV(ADEN);    //aktywacja przetwornika 
    

    I nie tylko to- ale od tego zacznij.
    Sprawdź w symulatorze- ustawienie każdego bitu kasuje pozostałe.
    Przerabiam Twój program na działający.
    Może dziś skończę.
  • #12 8402397
    margas4542
    Poziom 16  
    ...jeszcze nie robiłem symulacji w avrstudio...jak na razie przetłumaczyłem przy pomocy translatora z google kilka stron instrukcji użytkownika i szczerze mówiąc to nie potrafię tego jeszcze tego zrobić....
  • #13 8402990
    _Robak_
    Poziom 33  
    janbernat napisał:
    To jest do bani:
    
    ADCSRA |= _BV(ADPS0);    //preskaler fcpu/128=125 khz
     ADCSRA |= _BV(ADPS1);
     ADCSRA |= _BV(ADPS2);
     ADCSRA |= _BV(ADIE);     //przerwanie po zakończeniu konwersji
     ADCSRA |= _BV(ADIF);       //
     ADCSRA |= _BV(ADSC);    //start konwersji
     ADCSRA |= _BV(ADEN);    //aktywacja przetwornika 
    

    I nie tylko to- ale od tego zacznij.
    Sprawdź w symulatorze- ustawienie każdego bitu kasuje pozostałe.
    Przerabiam Twój program na działający.
    Może dziś skończę.

    Że jak? Przecież to jest operacja "or" ;> Coś się chyba koledze pomieszało;)
  • #14 8404791
    janbernat
    Poziom 38  
    Fakt, przepraszam.
    Wziąłem program kolegi margas z Jego poprzedniego tematu:
    
     ADMUX = _BV(REFS0);       // wewnętrznego żródła napięcia odniesienia   2,56   
       ADMUX = _BV(REFS1);
       ADMUX = _BV(ADLAR);      // zapisu wyniku z wyrównaniem do lewej (8 starszych bitów wyniku w rejestrze ADCH)      
       ADCSRA = _BV(ADEN);      // zezwolenie na konwersję         
       ADCSRA = _BV(ADPS0);      // set f_adc przetwornika podział (1/128)
       ADCSRA = _BV(ADPS1);
       ADCSRA = _BV(ADPS2);
       sei(); 
    

    I sprawdziłem w dodatku w symulatorze.
    A wkleiłem do odpowiedzi kod z bieżącego tematu.
  • #15 8405284
    margas4542
    Poziom 16  
    witam ponownie...otóż dobra wiadomość jest taki że dzięki wyrozumiałości i wysiłkom kolegów aby wlać mi do głowy trochę oleju nazwanego "C" podumałem pooglądałem i zacząłem pisać program od nowa....efekt tego taki że mam działający program choć z małą usterką .... otóż wyświetla mi po obu zdefiniowanych napisach trzy cyfry pływające w zakresie od 165 do 179...napięcie referencyjne się zgadza do portu z suwaka potencjometru podłączonego pomiędzy masę a +5V podaje napięcie około 4V...Vref odfiltrowane kondensatorem.....czy trzeba w programie wykonać jakieś obliczenia ?
    
    //---------------------------------------------------------------
    //############ procesor ATmega 16Mhz ##############
    //---------------------------------------------------------------
    #include <avr/io.h>
    #include <stdlib.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>
    #include <HD44780.c>
    
    const int Vmin = 11.0;      // progowe napięcie minimalne
    const int Vmax = 14.8;      // progowe napięcie maksymalne
    //const int Vref = 2.56;    // napięcie referencyjne
    unsigned int licznik;       // Zmienna do zliczania obiegów petli
    unsigned int aku;           // Zmienna do przechowywania wyniku pomiaru1
    unsigned int solar;         // Zmienna do przechowywania wyniku pomiaru2
    char buffer_n[6];           // Bufor konwersji z "unsigned int" na ASCII 
    
    //----------------------------------------------------------------
    void initalize(void)
    {
     DDRA = 0x00;		// Port analogowy jako wejścia
     PORTA = 0x00;		// Wejścia bez podciągania
    //----------------------------------------------------------------
    // >>>> definicje dwu kanałów ADC
    
     ADMUX |= _BV(REFS0);   // wewnetrznego zródla napiecia odniesienia     
     ADMUX |= _BV(REFS1);   // 2.56V
     ADMUX |= _BV(ADLAR);   // zapisu z wyrównaniem do lewej (8 starszych bitów wyniku w rejestrze ADCH)     
     ADCSRA |= _BV(ADEN);   // zezwolenie na konwersje         
     ADCSRA |= _BV(ADPS0);  // set f_adc przetwornika podzial (1/128)
     ADCSRA |= _BV(ADPS1);   
     ADCSRA |= _BV(ADPS2);
     sei();
    //----------------------------------------------------------------
    //   >>>>>>>>>>>>>> pomiar dwu napiec <<<<<<<<<<<<<<<<<<<<<<<<<<<
    
       ADCSRA |= _BV(ADSC);            // Rozpoczecie przetwarzania - wybrany byl kanal 0
      while(bit_is_set(ADCSRA,ADSC));  // Oczekiwanie na zakonczenie przetwarzania
       aku=ADCH;                       // zapis starszych 8 bitów wyniku konwersji w kanale 0 do zmiennej "pomiar1"
       ADMUX |= _BV(0);                // wybranie kanalu 1
       ADCSRA |= _BV(ADSC);            // rozpoczecie przetwarzania
      while(bit_is_set(ADCSRA,ADSC));  // oczekiwanie na zakonczenie przetwarzania
       solar=ADCH;                     // zapis starszych 8 bitów wyniku konwersji w kanale 1 do zmiennej "pomiar2"
       ADMUX &= ~_BV(0);
       ADMUX |= _BV(1);
       ADCSRA |= _BV(ADSC);            // Rozpoczecie przetwarzania
      while(bit_is_set(ADCSRA,ADSC));  // Oczekiwanie na zakonczenie przetwarzania
      _delay_ms(500);				   //   
      }
    //----------------------------------------------------------------
    // >>>>>>>>>> program głowny 
    //----------------------------------------------------------------
      int main(void){
       initalize();                    // Inicjalizacja kontrolera
    
    //----------------------------------------------------------------
    //---------- deklaracje funkcji LCD z biblioteki pomocnik --------
    //void LCD_Initalize(void);						//inicjacja
    //void LCD_Clear(void);							//wyczyść LCD
    //void LCD_Home(void);							//kursor na pozycję 0x0
    //void LCD_GoTo(unsigned char, unsigned char);	//na pozycji x,y
    //void LCD_WriteCommand(unsigned char);			//
    //void LCD_WriteData(unsigned char);			//
    //void LCD_WriteText(char *);					//wartość tekstowa
    
    //PORTA|= (1<<PORTA1);		//ustaw "1" na podświetlenia lcd
    //DDRA|= (1<<DDA1); 		// LCD blink
    //-----------------------------------------------------------------
    // >>>> obsługa LCD 2 x 16
    
       LCD_Initalize();
       LCD_Clear(); 
      while (1){
       initalize();
       LCD_GoTo(0,0);              				// 
       LCD_WriteText("AKUMULATOR");
       LCD_GoTo(12,0);              			// 
       LCD_WriteText(utoa(aku, buffer_n, 10));  // 
       LCD_GoTo(0,1);              				// 
       LCD_WriteText("SOLAR");
       LCD_GoTo(12,1);              			//
       LCD_WriteText(utoa(solar, buffer_n, 10));// 
      }
      return 0;
    }//main
    // >>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  • #16 8408655
    margas4542
    Poziom 16  
    witam...znalazłem jeszcze kilka błędów w moim kodzie ale teraz woltomierz już chodzi prawidłowo przynajmniej na 1 kanale....na 2-gim oszukuje bo wyświetla wartości z pierwszego...z napięciami też przesadziłem teraz napięcia wejściowe skorygowałem oby nie przekraczały Vref czyli 1,2 wolta dla kanału pomiar 12V i 1,7V dla kanału 17V przy dzielniku R1-R2 w stosunku 1 do 10 ...nie jest źle ale chciałbym mieć cztery pozycje wyniku w postaci 12,00...ale jeszcze nie wiem jak to zrobić...pozdrawiam wszystkich..
  • #17 8411909
    margas4542
    Poziom 16  
    ...przepraszam za post pod postem ale chciałem podziękować kolegom za wskazówki dotyczące mojego programu.....w chwili obecnej mam działający na czterech kanałach woltomierz którego kod nie został "pożyczony"... z czego jestem bardzo zadowolony....niniejszym zamykam temat......:D
  • #18 8495201
    lokii
    Poziom 13  
    margas4542, a czy możesz podzielić się działającym kodem. Też aktualnie obrabiam temat adc i chętnie spojrzę na poprawny kod.
  • #19 8495376
    margas4542
    Poziom 16  
    ...w chwili obecnej nie wygląda to tak różowo ja wtedy...tamtego kodu już nie mam bo choć działał pozostały niedociągnięcia i ulegał ciągłym modyfikacjom...uczę się i popełniam błędy którymi wolałbym nikogo nie zarażać...
REKLAMA