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



Teraz jest 31 sty 2025, o 12:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 13 wrz 2012, o 17:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Procesor: ATMega168PA
F_CPU = 12 000 000
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Problem polega na fałszowaniu wyniku pomiaru ADC6 gdy dokonuję także pomiaru na ADC7.

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

I w terminalu widnieje:
Kod:
HV=000V BAT=53428V ADC=0703
, gdzie 5.3428V to napięcie zasilania układu przed stabilizatorem 3.3V.
Po odkomentowaniu powyższego, czyli włączeniu pomiaru napięcia przetwornicy:
Kod:
HV=400V BAT=32452V ADC=0427
, pokazuje napięcie przetwornicy 400V - wartość poprawna. Natomiast ADC6 pokazuje wartość zaniżoną mimo, że napięcie zasilania nie zmienia się, a już na pewno nie spada o 2V.
Gdzie się ukrywa błąd?

_________________
Czekamy na RedBook'a!



Ostatnio edytowano 13 wrz 2012, o 17:23 przez szopler, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 17:12 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27352
Lokalizacja: Szczecin
Pomógł: 1042

Kod:
ADMUX |= (ADMUX & 0b11100000) | kanal;


zobacz i poczytaj sobie tutaj:

http://atnel.pl/uaktualnienia-programow-do-dvd.html

a jest tam link do naszego forum:

post13633.html#p13633

to właśnie pewnie tu masz problem - więc zaglądaj czasem na stronę atnela do aktualizacji i artykułów ok?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 17:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Dzięki Mirku... nie wiem jak mi się to przemyciło skoro skopiowałem ze swojego kodu który (jak mi się wydawało) był już poprawiony... :/

Zastanawia mnie jeszcze jedna sprawa... czas konwersji podany w dokumentacji 13-260us.
Czy wywoływanie pomiaru ADC co 100us nie zrobi mi w końcu "kuku"?

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 17:30 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8604
Pomógł: 337

Hmm, a jak sterujesz pomiarem ??
na początek sugerował bym Freeruning mode , wyzwalaj ręcznie wtedy kiedy jest to potrzebne
szumy jakieś wystąpią zawsze nasze ADC nie jest specjalnie dokładne , ale w większości przypadków starcza
do zabawy...

Niemniej takie wahania mogą wskazywać na 2 problemy

1. Programowy --- Kanały nie pracują jednocześnie i trzeba je przełączać
2. Sprzętowy --- dokładność ADC nie wynika tylko z niego samego , ale tez przede wszystkim ze sposobu
podłączenia. I tu chyba masz problem.

Zobacz sobie do noty jakie parametry ma określone AVCC -- zwykle może się różnić o ±0,3V od VCC. Jednakże pod tabelką w nocie jest dodatkowe zastrzeżenie, że AVcc nie może być mniejsze niż 2,7V, i większe niż 5,5V.

Sprawdź AREF ... zwykle jest powiązane z AVCC i nie może go przekroczyć , a dolna granica zwykle to 2V
czyli nie tak kolorowo i nie za bardzo możesz sobie AREF mieszać

Jeśli korzystasz z wbudowanego źródła odniesienia Vint 2,56V to też miej na uwadze że w zależności od układu , partii układów może się ono znacznie różnić od 2,56V -- typowo może się wahać od 2.3 do 2.9V najczęściej 2.6V
zresztą w nocie znajdziesz dopisek że wartości Vint są tylko wytycznymi --- cokolwiek to znaczy :)

kolejny parametr ważny to Vin tu sprawa jest prosta ... napięcie powinno być mierzone względem GND do Vref

na razie sprawdź podłączenia i filtrowanie , oraz sposób wyzwalania pomiarów na kanałach ADC
potem zajmiemy się resztą :)

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 17:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

SunRiver napisał(a):
Hmm, a jak sterujesz pomiarem ??
na początek sugerował bym Freeruning mode , wyzwalaj ręcznie wtedy kiedy jest to potrzebne
szumy jakieś wystąpią zawsze nasze ADC nie jest specjalnie dokładne , ale w większości przypadków starcza do zabawy...

Niemniej takie wahania mogą wskazywać na 2 problemy

1. Programowy --- Kanały nie pracują jednocześnie i trzeba je przełączać
2. Sprzętowy --- dokładność ADC nie wynika tylko z niego samego , ale tez przede wszystkim ze sposobu podłączenia. I tu chyba masz problem.

Jak widać w załączonym kodzie steruję ręcznie. FreeRunning powoduje jedno - przez RS232 nic nie leci, a dioda która dodatkowo pokazuje mi że "program żyje" nie zmienia stanu.
Co do tego, że zabudowany ADC wystarcza do zabawy się nie zgodzę. Przetwornica napięcia zbudowana na procesorze (PWM + ADC) działa o niebo lepiej niż FlyBack na układzie MC34063!

SunRiver napisał(a):
Zobacz sobie do noty jakie parametry ma określone AVCC -- zwykle może się różnić o ±0,3V od VCC. Jednakże pod tabelką w nocie jest dodatkowe zastrzeżenie, że AVcc nie może być mniejsze niż 2,7V, i większe niż 5,5V.

Sprawdź AREF ... zwykle jest powiązane z AVCC i nie może go przekroczyć , a dolna granica zwykle to 2V
czyli nie tak kolorowo i nie za bardzo możesz sobie AREF mieszać

Jeśli korzystasz z wbudowanego źródła odniesienia Vint 2,56V to też miej na uwadze że w zależności od układu , partii układów może się ono znacznie różnić od 2,56V -- typowo może się wahać od 2.3 do 2.9V najczęściej 2.6V
zresztą w nocie znajdziesz dopisek że wartości Vint są tylko wytycznymi --- cokolwiek to znaczy :)

kolejny parametr ważny to Vin tu sprawa jest prosta ... napięcie powinno być mierzone względem GND do Vref

na razie sprawdź podłączenia i filtrowanie , oraz sposób wyzwalania pomiarów na kanałach ADC
potem zajmiemy się resztą :)


Napięcie odniesienia 1.098V - zmierzone.
AREF do masy przez 100n jak należy. Do tego 100n na AVCC i drugie 100n na VCC. Dławika na AVCC już nie dawałem bo nie ma sensu skoro pozostałe piny PortC działają jako cyfrowe.
Procka do pomiaru też nie usypiam bo ma ważniejsze zadania do wykonania niż pomiar. Z resztą przerwania zewnętrzne w zbyt wielu przypadkach i tak by go budziły zanim pomiar by się zakończył...

_________________
Czekamy na RedBook'a!



Ostatnio edytowano 13 wrz 2012, o 18:04 przez szopler, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 17:51 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8604
Pomógł: 337

oczywiście zgadzam się z tym , bo teraz kod analizuję , choć dziś coś nie mam głowy do myślenia
niemniej staram się pomóc.

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 18:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

I chwała za to, bo czasem człowiek się blokuje na jakimś fragmencie kodu tylko dlatego że czegoś nie widzi albo nie do końca rozumie jak to działa...

FreeRuning mode jak widziałem włącza się za pomocą sbi(ADCSRA, ADATE); lub jak kto woli: ADCSRA |= (1<<ADATE);
Niestety po włączeniu objawy jak napisałem wyżej...

Nie do końca rozumiem też wpływ ADPSn w tym rejestrze na szybkość pomiaru...
np. przy podziale 12M/128 procesor jakby nie nadążał, podobnie dla wartości /2 i chyba /4. Pośrednie tzn. /8 /16 /32 /64 jakoś działają.

Ciekawie jest również gdy zmniejszę prędkość UART'a z 57600 na 9600. Są momenty gdzie wyraźnie widać (choćby po LED, ale w terminalu też), że następuje chwilowe przeciążenie... LED raz na ileś mignięć ma około 2x dłuższą przerwę niż powinien.

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 18:36 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8604
Pomógł: 337

to ciekawe w sumie ...
co piszesz możliwe że coś ci się procek nie wyrabia , ADC masz na 8 czy na 10bit ??


niby nota mówi że czas konwersji mieści się w zakresie 13 - 250ms
i maxymalnie daje radę wydusić 15kSPS

chyba że coś jawnie przeoczam ??

------------------------ [ Dodano po: kilkunastu sekundach ]

powiedzmy że przy 10 bitach możesz taktować ADC nie więcej niż 200khz
i musisz pogrzebać teraz w tabeli w nocie by ustalić sobie preskaler na bitach ADSPn by uzyskać najbliższą
możliwą zbliżoną do 200khz lub innej żądanej

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 19:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

12000000/64 = 187500 i tak mam ustawione :mrgreen: przy /128 też o dziwo był "zwis".
Nie bardzo widzę gdzie się wybiera rozdzielczość, ale ADC6 i ADC7 chyba są 10bit na sztywno (te piny nie mają w tym uP innych funkcji jak tylko ADC).

Zmieniam częstotliwość sprawdzania napięcia przetwornicy z 10kHz na 1kHz - tak było na płytce testowej i działało dobrze. Nie ma sensu gonić procka tym bardziej, że jeszcze parsowanie danych z GPS i zapis na kartę go czeka... :ugeek:

No i widzę jeszcze jedną głupotę jaką zrobiłem - sterowanie przetwornicą w przerwaniu... zaraz to zrzucam do zdarzenia.

_________________
Czekamy na RedBook'a!



Ostatnio edytowano 13 wrz 2012, o 19:35 przez szopler, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 19:29 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8604
Pomógł: 337

Hmmm poszukaj w nocie tabelki ADC Prescaler Sections .
co ciekawe podczas doboru częstotliwości taktowania ADC zauważysz lub zauważyłeś że wartości częstotliwości próbkowania są mocno niewygodne, w efekcie czego będziesz musiał się nieco pobawić, albo dobierając odpowiedni
kwarc , albo użyć timera.

choćby np tak

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


dla oczywiście ADC w trybie freeRun zakładam próbkowanie 20Ksps

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


ale nie mam pojęcia czy słusznie rozumuje ....

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 20:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Zrobiłem to o czym napisałem w topic1534.html#p15068 i już widzę znaczącą poprawę.

PS.
Pomiar ADC opanowany.
Trzeba jeszcze komparator ruszyć - zabezpieczenie przed przeciążeniem tranzystora sterującego trafem.

_________________
Czekamy na RedBook'a!



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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 9 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