HELP PLS!! kontrola zdrojaku - chyba??? – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

HELP PLS!! kontrola zdrojaku - chyba??? – Mikrokontroléry – Fórum – Programujte.comHELP PLS!! kontrola zdrojaku - chyba??? – Mikrokontroléry – Fórum – Programujte.com

 

Hanisss0
Newbie
17. 5. 2011   #1
-
0
-

Prosim nekoho kdo by koukl na tento zdrojak...problem je ve funkci PWM2. Toto PWM je dobre nastavene, primym dosazenim hodnot 173-345 se zachova tak jak ma -90° az 90°. Problem je v tom ze ma byt rizeno hodnotou z ADC2 prevodniku,jde o vstupni analogovy signal 0-5V, ktery je primo ve funkci pro ADC2 preveden z digitalni hodnoty 0-1024 na 173-345 pro PWM, kdyz teda dosadim funkci read_ADC2, tak na tento signal nereaguje, naopak zrejme reaguje na signal z ADC1. JA na to koukam a nevim proc, taky sem to poslal kamosovi, ten v tom taky nevidel zadnou chybu, ten AVR studoval na stredni a dale s nimi pracuje...pls snad uvidite chybu nebo neco...

melo by jit asi jen o AD prevodnik?? i kdyz fakt nevim proc by melo..ale pro jistotu ja nevim, porty nebo kde by to mohlo byt, vsecko vidim ze je v poradku.....((((((((

Nahlásit jako SPAM
IP: 147.229.132.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #2
-
0
-

nevidim duvod proc by to melo brat neco jineho nez pin ADC1 ... do admux hazes 1 -> kanal 1 alias pin ADC1
u read_ADC1 hazes do ADMUX 0 -> nacitas pin ADC0

i to tam mas jasne napsany jako poznamku: "KANAL 1", ale rves signal na kanal 2

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #3
-
0
-

Vzdyt ano, ADC1 je kanal 0 ADC2 je kanal 1. Mam to tam tak popsane, to je jedno, jak si to nazvu...Ale kdyz volam ADC2 tak by mel brat z ADC2 (kanal 1) ale nebere:-(

Nahlásit jako SPAM
IP: 94.113.26.–
Hanisss0
Newbie
17. 5. 2011   #4
-
0
-

nervu nikde nic na kanal 2

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #5
-
0
-

Problem je v tom ze ma byt rizeno hodnotou z ADC2 prevodniku


kdyz teda dosadim funkci read_ADC2, tak na tento signal nereaguje, naopak zrejme reaguje na signal z ADC1

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #6
-
0
-

Ja vim ze je to matouci. Ja mluvim vzhlem k tomu jak to mam napsane, mam napsane ADC1 jako kanal 0 a ADC2 kanal 1. Takze kdyz mluvim ADC2 myslim vlastne jedna...kdybych to v te funkci nazval jako ADC0 a ADC1, udelal bych to asi citelnejsi a lepsi,ale nic to nezmeni,ten problem bude stale stejny...

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #7
-
0
-

matouci je slabe slovo - zmatecne je blize - neni nad to, mit nejake oznaceni a jen tak si ho pro prehlednost zmenit na jine... co mas za procesor a na ktery pin davas zminenou hodnotu?

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #8
-
0
-

Beru to jako jeden prevodnik a druhy, uz sem to tam tak napsal pak priradil kanaly podle zapojeni a uz to nemenil...ja vim, radsi to prepisu...

Mno je to ATmega16. No ja posilam z merici karty analog signal prave na ten ADC2 (kanal1) a tim se ma ridit to servo, je tam ten prepocet na tech 173-345 a volam to co chci aby bral,takhle to mam asi spravne...o tom ze tam ten signal leze a tak jak ma to mam zmerene multimetrem, jak na ADC0 tak na ADC1, ted jsem koukal na zapojeni v eaglu jestli by nemohl dojit tam k necemu, ale ne-e...to musi byt asi fakt neco v tom kodu, nevim proc nebre ten kanal 1 ale chova se divne zavisle na kanale 0:-(

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #9
-
0
-

no pokud to mas opravdu spravne
tak by teoreticky mohl vypadnout ten while - tj. necekal bys na konec konverze prvni, zmenil kanal na druhou, ale prvni stale bezi,
pak tam mas delay 250ms - tj. prvni konverze dobehne a nastavi se kanal na druhej.. nicmene zadna konverze se nenastartuje takze se nikdy k mereni ty dvojky nedostane.... no a dale se nastavi kanal 1, nastartuje konverze ....

a uz i vidim proc vypadne to while

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #10
-
0
-

Takze on nemuze brat z obou prevodniku zaroven? on muze cist kanal 0 a az dokonci tak kanal 1? a pak zas tak? ja myslel ze to muze normlane bezet neustale, ten kanal 0 stejne je tam ten buffer neustale se pricitaji dalsi hodnoty a dela prumer a mazou posledni a nezavisle na tom podle potreby rizeni by mel ten kanal 1 pobrat to co mu prijde z karty, ne? ten prvni delay tam je aby mel cas pobrat tech prvnich par hodnot do bufferu a ten druhy jakoze aby pracoval v sekvencich po ctvrt vterine, vyhodnoceni z bufferu a odeslani hodnoty z toho kanalu 0 a zaroven uridil servo na kanalu 1...takze mam jeste nejak oddelit cteni kanalu 0 od cteni kanalu 1 delayem nejak? a melo by byt?

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #11
-
0
-

To Hanisss : mas jen jeden AD prevodnik... kanaly sou spojeny pres multiplex...

na to cekani by mel byt "while ((ADCSRA & (1 << ADSC)) == 1){};" nicmene jak sem naznacil je spatne podminka - tj. nikdy se nevykona a tudiz ani neceka na dokonceni konverze

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #12
-
0
-

no to tam mam tak aby to bezelo neustale...aby program nedokoncil a zase nezacinal znovu kvuli toho bufferu, aby jen pridaval a mazal posledni, nenacital po dokonceni dalsich 15...tak mam z te inicializzace start prevodu vyhodit a dat ho za ten while? jakoze zapne kanal 0 a kdyz precte ten prumer tak pak dalsi delay, zapnout kanal 1...ale zas to by neprobihalo kontinualne...

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #13
-
0
-

nemyslim ze vis k cemu to je :D

while ((ADCSRA & (1 << ADSC)) == 1){};  

ma testovat bit "bezici konverze" a cekat dokud se sam nevynuluje (tj. konec konverze)
ted to sice jednou otestujes ale srovnavas s jednickou, ktera nemuze NIKDY v zivote vyjit - protoze (1 << ADSC) == 64
a at uz mas v ADCSRA cokoliv, tak muzou vyjit jen dve hodnoty -> 64 (konverze bezi) a 0 (konverze uz skoncila a nebo nebezi)

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #14
-
0
-

aha:D on se sam pokazde znuluje kdyz se dokonci prevod tedy....jen mi neni jasne ze to srovnavas s tou jednickou, tam muzes napsat rovnou 64 a bude pracovat dokud se neznuluje?:D

no takze napisu za while tuto podminku a pokracuju s tim bufferem jak mam az po ten prumer. a pak dalsi delay? a pak az cteni z kanalu 1 pro PWM2? jenze v tom pripade nebude porad zasobovat ten buffer:D ja uz z toho blbnu...

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #15
-
0
-

To Hanisss : ja to nesrovnavam s 1... ty to tak mas v kodu cos poslal :D

technicky vzato tam staci mit while ( ADCSRA & _BV(ADSC) ); pripadne nemusis pouzit to makro a mit tam (1<<ADSC)
pripadne pokud chces mit explicitni podminku tak to cely > 0

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #16
-
0
-

tak staci napsat do zavorky za ten while toto: ((ADCSRA & (1 << ADSC)) == 1). to znamena ze ten buffer bezi kdyz je nastartovany prevod a tak bych pak mel jeste od toho oddelit to zapsani te hodnoty z toho kanalu 1 do pwm aby bezel ten druhy prevodnik ne?

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #17
-
0
-

nestaci, protoze ani kdyby ses rozkrajel, tak se to nikdy v zivote nemuze za zadnych okolnosti nikdy rovnat 1
(nikdy sem pouzil vickrat, protoze je to opravdu dulezite zduraznit, ze to nemuze nikdy nastat :D)

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #18
-
0
-

no ja vim ze si rikal ze to je 0 a 64, ale to s tou jednickou tak vsude pisou ze se to tak pise...ja ted nevim...nebo ja uz nevim kde jsem to vycetl...takze tak jak jsem rikal ale 64, hm? a jak oddelit to cteni z toho kanalu 1? aby se nebyl s tim prevodem na vkladani do bufferu.

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #19
-
0
-

mimo to - pokud si nahodou prectes datasheet - AD prevod neco trva... cim dele tim kvalitnejsi je

mas pak postup, jak na nem ziskat jednu hodnotu z konkretniho kanalu (verze bez preruseni):
1) nastavis kanal
2) nastartujes konverzi
3) cekas dokud se konverze nedokonci
4) nactes data

pro dalsi kanal to same

tenhle postup nemuzes nijak ochcat - jedna konverze proste zabere urcitej cas a ty musis pockat nez je hotova aby si mohl ziskat spravnou hodnotu

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
17. 5. 2011   #20
-
0
-

Ja vim no...to jsem se dovttipil v prvnich dotazech kdyz jsem zjistil ze to nemuze pracovat spolu. Jen ted nevim njak s tim bufferem, on se pak prerusi a jak to nastartovat ten druhy ADC nebo to staci jen tou podminkou a ten druhy zvlast jen za delayem ale tim se zrusi ta nekonecna smycka a on pak zacne do toho bufferu zase znovu hazet novych patnact hodnot misto pripisovani a smazavani poslednich ne? Ja uz asi rikam trochu nesmysly, rano moudrejsi vecera...ted uz to tu nejak nedavam...uff

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
17. 5. 2011   #21
-
0
-

pracovat spolu to muze, nemuze to pracovat zaroven...
mas na vstupech multiplex? tak musis multiplexovat i nacitani ...

nejak vubec nechapu co mas s bufferem a uz vubec co myslis tim prerusenim? megy maj jen jeden procesor, takze at udelas cokoliv, v zivote nedokazes udelat nic, co by bezelo opravdu soubezne...

v jednom cyklu v main mas nacteni nejake hodnoty z ADC1 do bufferu
pak mas nacteni nejake hodnoty z ADC2 kdo vi kam :)

pak cekas 250ms - jestli todle neni "preruseni" tak uz nevim co je
proste se nikde nic neprerusuje.. kazdejch 250ms nactes neco do bufferu, pak na pwm a delay..

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
AB
~ Anonymní uživatel
41 příspěvků
18. 5. 2011   #22
-
0
-

 servo = 173+ADCW*172/1024; 

Tento kód nefunguje správně.
Hodnoty jsou typu int ale mezivýsledek po násobení může být větší než int a je ořezaný.
Takové výrazy je dobré otestovat v simulátoru.
Tady pomůže třeba
 servo = 173+ADCW*172UL/1024; 

Nahlásit jako SPAM
IP: 217.115.249.–
KIIV
~ Moderátor
+43
God of flame
18. 5. 2011   #23
-
0
-

To AB : ano to taky, mimo jine ze stejne nenacita vubec spravne hodnoty z ADC :D (neceka na konec konverze)


mimochodem, pokud by to trochu zkratil, tak se vleze uz do unsigned intu s tim vypoctem 173 + ADCW*43/256
maximalni hodnota je 0x03FF a to * 43 je pak 0xABD5 ... a pak posun vpravo

Nahlásit jako SPAM
IP: 212.136.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
AB
~ Anonymní uživatel
41 příspěvků
18. 5. 2011   #24
-
0
-

Jak to, že nečeká?

      ADCSRA |= (1<<ADSC); //Start conversion

while ((ADCSRA & (1 << ADSC)) == 1){};
servo = 173+ADCW*172/1024; //cteni z prevodniku a uprava hodnoty 1024 na rozsah 173-345 pro PWM2

Nahlásit jako SPAM
IP: 217.115.249.–
AB
~ Anonymní uživatel
41 příspěvků
18. 5. 2011   #25
-
0
-

Aha! už to vidím.
Má být

while (ADCSRA & (1 << ADSC))  {}; 

Nahlásit jako SPAM
IP: 217.115.249.–
KIIV
~ Moderátor
+43
God of flame
18. 5. 2011   #26
-
0
-

To AB : jj je to videt, az kdyz clovek hleda primo v tom :)

Nahlásit jako SPAM
IP: 212.136.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
18. 5. 2011   #27
-
0
-

ono to funguje jen jsem misto 1 napsal 64...aj ty delaye jsem uplne zrusil a jede to ok....uz jedine co bych potreboval tak ty filtrace...ja tam mel z potenciometru RC filtr, ale ten kondik byl 100uF a bylo to docela pomalejsi, zitra ho vymenim asi za 100nF, protoze kdyz jsem ho vyhodil bylo to mnohem lepsi...teda az na ty odskoky, tech se musim nejak zbavit:-( Nebo jde nejak zjistit nejefektivnejsi volba kondiku? Pripadne bych potreboval ten gauss filtr jeslti by to slo...

neco takoveho by se mi strasne libilo!!!

http://www.google.cz/url?sa=t&source=web&cd=7&ved=0CEsQFjAG&url=http%3A%2F%2Fwww.jamesgoulding.com%2FResearch_II%2FEhlers%2FEhlers%2520(Gaussian%2520and%2520Other%2520Low%2520Lag%2520Filters).doc&rct=j&q=lag%20filter&ei=1__TTcT7JIPzsga4-OTdAg&usg=AFQjCNH1BQkjPbZu0ItVEnJsA4IxFO3l8Q&sig2=T7fwj2r3G08HpcpuhQ5oQQ&cad=rja

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
18. 5. 2011   #28
-
0
-

To Hanisss : proc by to neslo.. udelej si ho

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
18. 5. 2011   #29
-
0
-

Mno pro me je to momentalne nadlidsky ukol...nebo kdybych mel aspon nejake co bych poupravil...na toto zatim nemam skill....a bohuzel nemuzu vubec nic najit....

Nahlásit jako SPAM
IP: 94.113.26.–
Hanisss0
Newbie
18. 5. 2011   #30
-
0
-

Kez bych vedel aspon trochu jak na to, nechces helfnout? Aj bych se odmenil....a hlavne bys me dost naucil:-)

Nahlásit jako SPAM
IP: 94.113.26.–
KIIV
~ Moderátor
+43
God of flame
18. 5. 2011   #31
-
0
-

bohuzel... dodelavam jeden nekolikamesicni projekt v praci, dalsi jeste mimo ... posledni co chci je nabrat dalsi programovani :D ikdyz by to bylo ve srovnani s tim co delam jen na chvilku

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hanisss0
Newbie
18. 5. 2011   #32
-
0
-

skoda, zkusim jeste neco pohledaat ale je to spatne...:-(

Nahlásit jako SPAM
IP: 94.113.26.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Chyba ve zdrojáku — založil juklmi

Chyba v zdrojaku — založil rudiy

Zkompilování zdrojáků — založil Mutagen

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý