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



Teraz jest 9 kwi 2026, o 08:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 9 wrz 2014, o 19:46 
Offline
Nowy

Dołączył(a): 12 kwi 2014
Posty: 6
Pomógł: 0

Witam

napisałem krótki program na Atmege8a który ma reagować na gwałtowne zmiany głosu (pomiar mikrofonu przez ADC).
problem polega na tym że poniższe warunki źle działają:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

na wyświetlaczy widzę średnia=822, min=802, max 835

max-min= 835-802=33 a diody podpięte pod PC0 i PC1 migają jak szalone

proszę o podpowiedź co jest nie tak.

cały kod programu:
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: 9 wrz 2014, o 20:50 
Offline
Użytkownik

Dołączył(a): 19 lip 2012
Posty: 86
Lokalizacja: Lublin
Pomógł: 3

A ile wynosi ADC? :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 wrz 2014, o 21:20 
Offline
Nowy

Dołączył(a): 12 kwi 2014
Posty: 6
Pomógł: 0

ADC wynosi ok 822, cały czas jest pomiędzy MIN a MAX które są na bieżąco aktualizowane
co ciekawe różnica pomiędzy max a min jest mniejsza od 50 więc warunki nie powinny być spełnione, a ku mojemu zdziwieniu są - widać że migają diody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 wrz 2014, o 21:46 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

A jakie jest napięcie na pinie ADC5 ( w woltach).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 wrz 2014, o 22:12 
Offline
Nowy

Dołączył(a): 12 kwi 2014
Posty: 6
Pomógł: 0

2,00 - 2,10 V przy odgłosach tv
2,80 - 3,00 V gdy pukam w mikrofon

po zmianie napięcia odniesienia na AREF zmieniły się wartości ADC (zmalały o połowę) ale warunek nadal źle działa ???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2014, o 10:02 
Offline
Użytkownik

Dołączył(a): 02 lut 2014
Posty: 38
Lokalizacja: Jaworzno
Pomógł: 2

bersoft napisał(a):
(...) ale warunek nadal źle działa ???


Warunek działa bardzo dobrze. Ale jak chcesz żeby działał jak to sobie wyobrażasz, zmień srednia z uint na int.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2014, o 15:42 
Offline
Nowy

Dołączył(a): 12 kwi 2014
Posty: 6
Pomógł: 0

niestety zmiana typu zmiennych na int nic nie dała,
wartości zmiennych mieszczą się w zakresie uint16

zmieniłem również uC na inny i to samo

o co tutaj chodzi ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2014, o 16:09 
Offline
Moderator
Avatar użytkownika

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

bersoft napisał(a):
zmieniłem również uC na inny i to samo


Panie kolego bój się Boga... no jak tak można - jak ci coś nie działa w kodzie - to od razu winne albo Eclipse (to sugeruje tytuł wątku) ... a teraz po tej wypowiedzi można jeszcze sądzić - że za winnego uważasz już nawet procesor ?!?! ... masakra :(

polecam ci zmień podejście ... jak coś nie działa - to szukaj gdzie zrobiłeś błąd w kodzie, bo na razie po tym co tu widzę to działasz TOTALNIE po omacku bez próby okiełznania najpierw podstaw C ... o czym świadczy chociażby ta twoja wypowiedź:

bersoft napisał(a):
niestety zmiana typu zmiennych na int nic nie dała,


Tak jakbyś "na chybił trafił" - zupełnie jak w totka, próbował - może to wyjdzie ? a może tamto ? ... bez zrozumienia :(

bersoft napisał(a):
o co tutaj chodzi ?


No na pewno nie o źle działający procesor - tylko o twój kod....

Przemyśl to sobie dobrze:

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


jak zadziała ten warunek gdy np zmienne przyjmą takie wartości:

srednia = 700
ADC = 1000


a do tego twoja srednia jest uint16_t a nie int .... (co wyjdzie wg ciebie?)

to tylko pierwsza taka i słuszna podpowiedź kolegi gordo .... bo komu się chce analizować jakiś taki dziwny kod, bez żadnego opisu, komentarzy itp ? A widać, że skoro nie bierzesz tak podstawowej rzeczy jak wyżej pod uwagę - to baboli może być jeszcze DUŻO więcej :( ...

Zamiast tak się bawić - na tym dziwnym kodzie - nie lepiej wziąć zrobić prosty krótki testowy kod i z potencjometrem sprawdzić sobie skrajne przypadki ? ... toż to podstawowy sposób podejścia do szukania problemu .... zamiast sprawdzać cały kod w którym możesz mieć babole w wielu miejscach bo i założenia mogłeś źle porobić

------------------------ [ Dodano po: 3 minutach ]

Poza tym masz chyba jedną diodę LED żeby sprawdzać zastawiając pułapki ? masz nawet LCD pod ręką ... więc obejrzyj sobie to i zobacz jak można podchodzić do rozwiązywania problemów żeby było szybciej i mniej nerwów:

http://mirekk36.blogspot.com/2014/04/pu ... ednej.html

ale PODSTAWA to przestać szukać błędów w: procesorach, kompilatorach, edytorach ... czyli we WSZYSTKIM tylko nie w tym co ja sam robię

_________________
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: 10 wrz 2014, o 17:26 
Offline
Nowy

Dołączył(a): 12 kwi 2014
Posty: 6
Pomógł: 0

dziękuję za pomoc i podpowiedzi

moje pytanie o Eclipce wzięło się po tym jak miałem problem z rozpoznawaniem nazw rejestrów o których jest również na stronie http://forum.atnel.pl/topic2781.html, a skoro jest jeden błąd to może i być inny.

Dopiero rozpoczynam swoją przygodę z uC więc wybaczcie, że popełniam takie błędy.

Wracając do problemu dzięki waszym podpowiedzią został rozwiązany,

Sprawdziłem warunek if (srednia-ADC>50) ....
wynik z działania srednia-ADC=-5 czyli -5>50 i dla tych wartości warunek jest spełniony - to było przyczyną nieprawidłowego działania,

Dopiero po zmianie wszystkich zmiennych na int (włącznie z przypisaniem wartości ADC do innej zmiennej) zaczęło działać dobrze, nie do końca to rozumiem, ale domyślam się, że trzeba porównywać zmienne dokładnie tego samego typy.

Jeżeli doszedłem do nieprawdziwych wniosków to proszę o informację.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2014, o 17:43 
Offline
Moderator
Avatar użytkownika

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

bersoft napisał(a):
Jeżeli doszedłem do nieprawdziwych wniosków to proszę o informację.


do jednego złego wniosku doszedłeś:

bersoft napisał(a):
po tym jak miałem problem z rozpoznawaniem nazw rejestrów o których jest również na stronie topic2781.html, a skoro jest jeden błąd to może i być inny.


to nie jest błąd eclipse - tylko twój, że nie potrafisz sobie szybko - a można to w 5 sekund - odświeżyć projektu/workspace itp .... a często ten błąd jest spowodowany nie eclipsem a tym, że się robi jakieś misz-masze właśnie z workspace, nazwą projektu albo inne dziwne ruchy ;)

bersoft napisał(a):
Dopiero po zmianie wszystkich zmiennych na int (włącznie z przypisaniem wartości ADC do innej zmiennej) zaczęło działać dobrze


tu doszedłeś do dobrych wniosków - a jak nie rozumiesz to poczytaj to:

http://atnel.pl/domyslna-promocja-do-typu-int.html

wtedy zrozumiesz


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: 10 wrz 2014, o 17:57 
Offline
Nowy

Dołączył(a): 12 kwi 2014
Posty: 6
Pomógł: 0

dziękuję, ze wskazanymi materiałami na pewno się zapoznam.

ostatecznie kod programu (reagujący na klaśnięcia) wygląda tak:
Cytuj:
// ATmega8

// kurdę TYLE o tym mówię wszędzie - piszę - LUDZIE NIGDY NIE ustawiajcie F_CPU w kodzie
// a tu masz - kolejny - i później znowu będzie - że "mi coś nie działa" .... ;)
// sio do poradników z mojego bloga - tam obejrzyj dlaczego NIE - mirekk36

#define F_CPU 8000000UL // NIGDY W KODZIE ! //ustawienie oscylatora na 8MHz


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  
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