Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 8 lut 2026, o 20:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 23 lut 2017, o 02:22 
Offline
Nowy

Dołączył(a): 09 gru 2013
Posty: 16
Pomógł: 0

Próbuję wykonać pomiary napięcia baterii.
Napięcie podłączam do ADC1 (PB2) przez dzielnik napięcia; górny resytor 4,7k dolny 1k.
init ADC:
Kod:
 
ADMUX |= (1 << MUX0);
ADMUX   |=(1<<REFS0);
ADCSRA   |= (1 << ADEN);
ADMUX |= (1 << ADLAR);
ADCSRA |= (1 << ADPS0)|(1 << ADPS2);


zegar wew. 4,8MHz

pomiaru dokonuję tak:
Kod:
   //make mesurements
   for ( i=0;i<50;++i){
      //_delay_ms(50);
      ADCSRA |= (1<<ADSC);
      //while( !(ADCSRA & (1<<ADSC)) );
      while (ADCSRA & (1 << ADSC));
      //_delay_ms(100);
      batt_level+=ADCH;
      //average:
   }


i potem dzielę oraz przynaję wynikowi odpowiadajacy poziom naładowania baterii, potem diodą wymiguję poziom jej naładowania:
Kod:
   batt_level/=50;

   batt_level=0; //error state
   if(batt_level>_0)batt_state=0;
   if(batt_level>_10)batt_state=1;
   if(batt_level>_20)batt_state=2;
   if(batt_level>_30)batt_state=3;
   if(batt_level>_40)batt_state=4;
   if(batt_level>_50)batt_state=5;
   if(batt_level>_60)batt_state=6;
   if(batt_level>_70)batt_state=7;
   if(batt_level>_80)batt_state=8;
   if(batt_level>_90)batt_state=9;
   if(batt_level>_100)batt_state=10;

   if(batt_level>800)batt_state=20; //error state


   for( i=0;i<batt_state+1;++i){
      PORTB|=(1<<PB4);
         for(uint8_t g=0;g<11-batt_state;++g)
            _delay_ms(30);
      PORTB&=~(1<<PB4);
         for(uint8_t g=0;g<11-batt_state;++g)
            _delay_ms(30);
   };


Problem mój jest taki zawsze moje pomiary to między 149 a 143 czyli dioda miga 5 razy. A napięcie mierzone miernikiem jest zupełnie inne.
Napięcie zasilania to ogniwo li-ion.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2017, o 08:22 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 288
Lokalizacja: Gdańsk
Pomógł: 13

Cytuj:
batt_level+=ADCH;

Nie wiem, czy to to, ale nie powinno być tylko
Cytuj:
batt_level=ADCH;
?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2017, o 10:41 
Offline
Nowy

Dołączył(a): 09 gru 2013
Posty: 16
Pomógł: 0

Idea jest taka aby zmierzyć napięcie 50 razy i je uśrednić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2017, o 11:47 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

Wydaje mi się że problem leży w preinkrementacji w pętlach for.
masz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Niestety nie podajesz w którą stronę jest błąd.
zmień w swoim poście znaczniki na "syntax=c"

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 10 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO