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



Teraz jest 16 kwi 2024, o 16:49


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 31 sie 2012, o 23:15 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 4
Pomógł: 0

Witam.

Z racji tego, że jest to mój pierwszy post na forum chciałem wszystkich serdecznie przywitać.

Ponieważ stawiam pierwsze kroki w programowaniu proszę o wyrozumiałość :) Dość późno zafascynował mnie świat programowania i elektroniki więc mam bardzo dużo do nadgonienia :)

Jestem po lekturze (kilkukrotnej :) ) książki Pana Mirka i jest to w moim odczuciu najprzyjaźniej napisany „poradnik” jaki miałem okazję studiować i jeden z lepszych prezentów które sobie wybrałem (bo znałem Mikołaja :D )

Wracając do sedna postu, mam pytanie odnośnie zmiany kanałów ADC (atmega8) w trybie pojedynczego odczytu. Prowadzę pracę nad mini komputerem do autka i napotkałem na problem z brakiem zmiany wartości w rejestrze ADCW. Pierwotnie robiłem w jednym przejściu funkcji (co 200ms) odczyty jeden po drugim i zawsze uzyskiwałem wartość pierwszego odczytu która była przypisywana do zmiennej ADC_LED i DISP_NAPIECIE . Po kilkugodzinnej walce doszedłem do poprawnego odczytu, lecz robię to w sposób „łopatologiczny” wykonując dwa odczyty z każdego kanału z czego tylko drugi jest przypisywany do zmiennej. Wszystko działa, jest napięcie a fotorezystor reaguje i zmniejsza podświetlenie, ale nurtuje mnie pytanie dlaczego pierwszy odczyt po zmianie kanału nie jest wpisywany do ADCW a dopiero drugi. Zapewne jest to gdzieś zapisane w PDF, lecz nie udało mi się tego odnaleźć. Kombinowałem z flagą ADIF ale to też nie przynosiło skutku, dawałem _delay pomiędzy odczyty. Zrobiłem też całkowite wyłączanie i ponowną inicjacje ADC pomiędzy odczytami, skutkowało to tylko problemami z multipleksowaniem wyświetlacza a wynik był z pierwszego odczytu w dwóch zmiennych.
Szukałem podobnego problemu na forum i nie udało mi się odnaleźć.

Kod jest trochę zaśmiecony bo ciągle cos dopisuję i kasuję :) W takiej postaci działa poprawnie.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2012, o 23:26 
Offline
Moderator
Avatar użytkownika

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

Witamy gorąco ;)

jak chcesz wybierać inny kanał to zawsze musisz zamaskować najpierw bity odpowiedzialne za wybór kanału, np


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


zakładając że w zmiennej kanał będziesz miał wartości od 0 do 7 możesz w ten sposób prawidłowo przełączać się pomiędzy kanałami. Bo chyba tutaj coś ci nie wychodzi prawda ?

_________________
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: 1 wrz 2012, o 20:44 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 4
Pomógł: 0

Dzięki za odpowiedź.
Przejrzałem cały projekt i na spokojnie poustawiałem wszystko co potrafiłem ustawić :)

O maskowaniu bitów i zerowaniu MUX3-0 miałem świadomość, tylko mogłem coś pokręcić bo czas na hobby znajduje tylko późnym wieczorem i najczęściej mocno się wszystko przedłuża jak coś nie idzie :D

Dzisiaj po pracy miałem trochę czasu i porobiłem eksperymenty, niestety nie udało mi się dokonać odczytów bezpośrednio po sobie na dwóch kanałach bez zakłóceń w wyniku pomimo zakończenia konwersji. Czekałem też na flagę przerwania która następnie kasowałem, ale to tez nic nie zmieniało. Może to wina mojego „laboratorium” bo wszystko jest na pająku ze skrętki na stykówce i może coś się wzbudza. W przypadku Atmegi8 czas jaki uzyskałem pomiędzy kolejnymi odczytami to jakieś 10-20 ms, poniżej tego co jakiś czas wyniki się miksują i występują nagłe skoki odczytu. W sumie nie ma to znaczenia dla mojego projektu bo odczyt z fotorezystora potrzebuje co jakiś czas w celu sprawdzenia oświetlenia, ale w przyszłości może zajść potrzeba szybkiego multipleksowania kanałów z ADC i będę miał problem. Poszukałem też trochę w googlu i znalazłem kilka wątków z podobnym problemem ale nikt tego dalej nie ciągną. Musze pobawić się ADC na atmedze32, może będzie jakaś różnica, albo popróbować free running.

Kod jak poniżej działa bez problemów, _delay wstawiony tylko do testów bo w programie oddzielam pomiary flagami.

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


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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 wrz 2012, o 21:23 
Offline
Moderator
Avatar użytkownika

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

Wiesz co chciałbym ci pomóc ale w ogóle nie rozumiem co ty robisz :( .... przede wszystkim skąd ci np takie pomysły do głowy przychodzą ?

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


co to jest ??? Korzystasz z ZEWNĘTRZNEGO źródła odniesienia ????? ... jeśli tak to może pokaż jakiś schemat jak to podłączyłeś ?

jeśli chcesz żeby ci pomóc - to po pierwsze troszkę się uspokój i zdecyduj na jedno źródło - bo jak troszkę poczytasz w mojej książce, troszkę w jednym googlu troszkę w innym googlu a potem piszesz takie niestworzone fragmenty kodu - i to z komentarzami które nic nie mówią to nie dziw się że nie można zrozumieć co ty chcesz osiągnąć :(

A jeśli nie korzystasz z zewn. źródła odniesienia to robisz już jakieś totalne krzaki w kodzie i dlatego tym bardziej - jeśli chcesz abyśmy mogli sprowadzić dyskusję do tego samego poziomu to trzymajmy się wspólnego podstawowego kodu z książki inaczej nic nie uda mi się podpowiedzieć....

masz tu poniżej funkcję z książki do pomiaru na wybranym kanale - dlaczego nie zajrzysz do niej na stronę nr.238

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


zobacz jak się robi komentarze - spróbuj tak samo zrobić w swoim kodzie ale przede wszystkim skorzystaj z tej właśnie funkcji zamiast się miotać i próbować 100x na sekundę różnych rozwiązań z gooogla

no i jak pisałem na początku

1. pokaż schemat żeby było widać z jakiego napięcia odniesienia korzystasz
2. pokaż kompletny kod


Autor postu otrzymał pochwałę

_________________
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: 2 wrz 2012, o 01:58 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 4
Pomógł: 0

To mi nie poszło na forum :roll: Nie jestem testerem „googlowych” teorii i nie testuję bezmyślnie tego co ktoś opublikował z pretensjami, że nie działa. Wiem, że tak mój wpis wygląda i chciałem to sprostować bo działam w dobrej wierze. Co najgorsze to kod który napisałem był mój o czy później.

To, że napisałem o poszukiwaniu podobnego tematu odnosiło się jedynie do atmegi8 i kilku kanałów odczytywanych bezpośrednio po sobie bez wychodzenia z funkcji. Po prostu nie potrafię napisać o co mi chodzi a znalazłem podobnych do mnie :)

A teraz najlepsze, chciałem przeprosić za własna głupotę bo z powodu wpisania „!” w pętli sprawdzającej koniec konwersji doprowadziłem do natychmiastowego wyjścia z pętli :(

Zawracam głowę na forum i tracę czas innych. Ja straciłem kilka dni :D

Co do źródła REF to mam zewnętrzne tylko i wyłącznie z powodów poznawczych bo jak pisałem nie jestem elektronikiem a próbuję się czegoś nauczyć. Opisane w książce zagadnienie ADC przerobiłem i działa bez zastrzeżeń od zimy w woltomierzu który zrobiłem do auta. Teraz chciałem sam cos napisać i wyszło jak zawsze :)

Z pokazaniem schematu może być ciężko bo dopiero ogarniam eagle i wszystko masakruje w zeszycie i na stykówce. Wiem, że to nie elegancki sposób ale tak na razie robię. Zastosowałem LM385Z-1.2 bo taki miałem, środkowa nóżka do procka i rezystora który idzie do VCC a dwie zewnętrzne do masy. Na mierniku mam dokładnie 1,235V i tu chyba wszystko gra.

Wkleję kod który męczę i jakoś działa, ale dostane zaraz opr bo opisy robiłem tylko dla siebie i nie wszystko jest logiczne a znam nastawienie autora książki :? Dodatkowo kod jest pisany w sposób mocno przypadkowy, gdyż szukałem sposobów na ogarniecie impulsów VSS i wtrysku tak, aby uzyskać wynik (impulsy generuje tym samym procesorem bo nie mam generatora). Wszystko będę zmieniał i wrzucał do funkcji z wieloma argumentami a nie jak jest teraz każda zmienna żyje własnym życiem :)
Tak to wygląda na biurku :D
http://www.youtube.com/watch?v=xw2z3GF0wmM&feature=youtu.be


Jak pisałem wcześniej, chciałem tylko zapytać czy atmega8 może bezpośrednio po konwersji ADC z jednego kanału rozpocząć kolejną bez wpływu na wynik (kolejny oczywiście). I żył bym z tym pytaniem nadal gdyby nie ten zimny prysznic który mnie uświadomił. Najgorsze jest to, że zdołałem sobie poradzić z problemem robiąc jakieś dziwne pętle które poniekąd były substytutem _delay i wszystko mi niby działało.

Mam jeszcze jedno głupie pytanie, w „ADMUX = (ADMUX & 0xF8) | kanal;” jest f8 a nie f0. Efekt generalnie ten sam bo bit MUX3 jest nie wykorzystany, ale gdy przypadkiem będzie miał 1 to może coś się pokrzaczyć, chociaż tylko ja mógł bym tam wpisać 1 :D

Jedno małe „!” zniszczyło mi życie :D

Dziękuje za pomoc, teraz się dwa razy zastanowię zanim coś nowego odkryję odnośnie AVR :D
Pozdrawiam


Kod w wersji z odczytem ADC w petli, PWN_LED nie oznacza PWN bo na multipleksie nie działa (włącza tylko dodatkowy rezystor na anody)
Proszę go traktowac jako przestrogę a nie przykład :D

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



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

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

O widzisz i to są najlepsze lekcje ;) na błędach ....

a na poważnie to bardzo fajnie że udało ci się samemu rozwikłać swoją zagadkę

super też, że np korzystasz z zewnętrznego źródła taktowania ..... ale mam nadzieję, że zrozumiałeś też teraz dobitnie, iż aby otrzymać czasem dobrą podpowiedź na forum to trzeba jeszcze umiejętnie zadać pytanie ....

skąd ktoś miałby się spodziewać że u ciebie jest tak a nie inaczej skoro nie pokazujesz np schematu ;)

dlatego mam nadzieję że na przyszłość będzie lepiej

_________________
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: 2 wrz 2012, o 21:50 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 4
Pomógł: 0

Lekcja się przydała :D

Czasami wpadam w nieskończoną pętle i pomimo błahego problemu zaczynam kombinować w najróżniejsze strony oprócz właściwej :)

Poskładałem dzisiaj wszystkie elementy na prototypową płytkę i spróbuje przeprowadzić testy w aucie. Jak wszystko będzie grać to przejdę do napisania wszystkiego w jedna spójną całość i popróbuję sił w eaglu (gratuluje nagrania świetnego kursu) i trawieniu płytki. Nie polecam nikomu lutowania na dziurawce którą miałem bo z każdym elementem zaczyna być ciaśniej i kosztuje to bardzo dużo pracy i nerwów gdy się rozleje cyna po różnych zakończeniach.

Komputerek który wykonuje jest tak prosty z świadomego wyboru, montuje go w dosyć starym aucie które wykorzystuje do worzenia najróżniejszych rzeczy i będzie idealnie pasował do wystroju japońskiego auta z lat dziewięćdziesiątych :)

Co najśmieszniejsze to dzięki komputerkowi jaki kupiłem wcześniej jako gotowy i zamontowałem w innym autku dotarło do mnie jakie możliwości daje umiejętność programowania i znajomość elektroniki. Jak chyba większość poczatkujących rozpocząłem zabawę w bascomie i nie do opisania jest radość pierwszego odpalenia własnego programu który miga diodą :D Potem natrafiłem na Twój blog i dzięki temu postanowiłem rozstać się z bascomem i przejść na C czego nie żałuje. Książkę dostałem na święta i pomalutku próbuje się rozwijać, miałem po zimie przerwę i dopiero w sierpniu ruszyłem ponownie dozbrajając się w stacje lutownicza bo stara transformatorówka jest mało wygodna :) A pomysłów z zastosowaniem mikrokontrolerów nie brakuje, pozostaje tylko się uczyć aby je zrealizować.

Tak wygląda mój dzisiejszy „Frankenstein” :)

Obrazek

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2012, o 21:59 
Offline
Moderator
Avatar użytkownika

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

No i bardzo fajnie wygląda - sam wiem jak to jest ;) i ile radochy jak się samemu coś uruchamia ....

a nawet nie wiesz jak miło autorowi jest usłyszeć że książka chociaż w minimalnym stopniu pomogła w rozwijaniu pasji - bo taki jest GŁÓWNY cel tego co piszę .... i jak słyszę takie słowa to aż chce się dalej to robić ...

Więc jak będziesz oczywiście miał pytanka to dawaj śmiało starając się jednak jakoś lepiej je precyzować - aby można było z chirurgiczną precyzją szybko pomóc ;)

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO