Strujni izvor 0-50A

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

Post Reply
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Da znam da je to u istoj tablici, ali je CKOPT0 isto u toj tablici a on govori o kristalu ili keramickom rezonatoru... To su atmelovci svrstali malo nelogicno... ali jbg

CKSEL0 moze biti 1, ali ne za onaj SUT koji je on odabrao.... Radilo bi to i ovako i onako, ali vec kad podesava da postavi najbolje sto moze... Zar ne?
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Svidio mi se ovaj projekt, valjda jer vecinu stvari koje radim ne idem iznad nekoliko ampera, pa volio bih pomoci sa programiranjem, ali naravno mora biti assembler ili C. Prvensteno ciljam na C jer je to puno jednostavnije, isto toliko i jace od Bascoma. Pa ako zelite mogu pomoci oko programiranja i c-a, da bas ovo ne svrstavamo kao BASCOM projekt... Uostalom u nekom programiranju bez bascoma kao riba bez bicikla... Uvijek se sve svodi na C... A i oni koji se misle baviti programiranjem jednostavno moraju znati C tako da bi se moglo nesto i nauciti... :wink:
InTheStillOfTheNight
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Nebi se slozi sa tim da mora biti asembler ili C , ako mikrokontroler ima hardverski PWM a pretpostavljam da ga taj atmega ima (barem neku najjednostavniju varijantu PWM-a) , mozes pisati u bilo kojem jeziku jer ti samo u biti setujes taj PWM izlaz i on radi neovisno od programa koji se vrti u CPU mikrokontrolera i koji izvrsava program koji moze biti duzi ili kraci ali za PWM izlaz je to uopste nebitno.

Takodje mu je ulaz sa ADC ciji rad nema veze sa programskim jezikom koji je koristen, ako je program napisan korektno. U ovom projektu ne treba da bude nikakvih razlika da li je program pisan u asembleru, C , pascalu ,basicu ili necem trecem.

Sve sto radi radi periferija program mora samo da je pokrene. Kontrolu struje treba da mjeri ADC poslije niskopropusnog filtra pa mu netreba periferija gdje je ADC "trigerovan" PWM a ovi tipovi mikrokontrolera to niti nemaju ugradjeno hardverski.

Pitanje je koliku max struju ce moci kontrolisati, to je vec druga prica koja nema veze sa time kojim programskim jezikom je pisan program za mikrokontroler.
User avatar
_Maniac_
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 487
Joined: 02-09-2007, 00:12
Location: Bilje (pokraj Osijeka)
Contact:

Re: Strujni izvor 0-50A

Post by _Maniac_ »

E ovako... ja cu sutra ili prekosutra, tj. cim stignem napravit taj drugi dio plocice sa nekom LEDICOM ili onom zaruljom od auta, pa da vidimo kako radi...

Nestignem prije, jer evo danas se malo zenim, pa tako da ima drugih obaveza :)...

Pa samo ajd Kizo ak ti se da nabaci shemu onog sto si ti spojio u onom videu (ak je to tvoj video) da isprobam dal ce radit...

Hvala...
Capo Di Tutti Capi
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

Nismo još došli do žarulje. Za početak samo spoji ledicu, sa otpornikom naravno, na PB1.
Ne treba ti nikakva posebna pločica. Koristiš ovaj svoj konektor. Anodu pikneš u rupicu gdje ti je PWM izlaz, jedan kraj otpornika u GND, a drugi kraj ide na katodu ledice. Viola, 1 mina posla, gotovo.

Što se tiče koji programski jezik tako je svejedno koji. No kako na faksu obrađujemo C, htio bih i sam vidjeti kako se to tamo radi, tako da sam za ovu ideju sa C-om. Samo mu NoćniČovječe reci ili daj linkove koje da si sve programe instalira da se ne gubi vrijeme. Evo i devete strane, a nismo još ništa konkretno napravili.

Za prvi program predlažem standardno paljenje/gašenje ledice bez PWM-a korištenjem delay funkcije frekvencijom recimo 1Hz. Tako ćemo znati dali mu MC radi na 16MHz kristalu ili mu je još na defaultnom 1MHz unutarnjem RC oscilatoru, a imam neki filing da je, pa će znati u čemu je problem ako mu se ledica pali i gasi 16 puta duže od očekivanog.

Ako ovo radi kako treba, sljedeći korak bi bio isto ovo, ali sa PWM-om, tako da postupno mijenja intenzitet svijetla od 0 pa do max. sjaja pa opet natrag.

Tek kad sve ovo radi, onda bi treći korak bio da sa istim programom možeš ići na spajanje mosfeta i žarulje.
User avatar
_Maniac_
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 487
Joined: 02-09-2007, 00:12
Location: Bilje (pokraj Osijeka)
Contact:

Re: Strujni izvor 0-50A

Post by _Maniac_ »

Ma i mislio sam na protoboardu spajat, samo napisao sam plocica slucajno... :)... ajd hvala vam na pomoci... Ja cu javit kad to napravim... E da... kizo... onaj tvoj program sto si napisao, samo ga prebacim u hex ili trebam jos sta dodavat???
Capo Di Tutti Capi
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

Onaj prvi program je daleko iz budućnosti gdje sam povezao napon sa shunta i napon sa potenciometra i u ovisnosti tome mijenja PWM, tako da nemoj to koristiti jer ti neće raditi.
Najbolje bi bilo da pričekaš Noćnog.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Evo linkovi za C:
Orginal AVR Studio by ATMEL ima na njihovoj stranici, treba se registrirati ali ja uvijek upisem sve gluposti da mi ne salju glupe mailove.

Treba skinuti ovo:
AVR Studio 4.18 (build 684) (116 MB, updated 11/09)
http://www.atmel.com/dyn/products/tools ... ol_id=2725" onclick="window.open(this.href);return false;

I jos nam treba compiler za to: WinAVR:
http://sourceforge.net/projects/winavr/ ... e/download" onclick="window.open(this.href);return false;

Ja cu di danas napisati ovo sto je kizo pricao da testiras obicnu diodu, debug cu napraviti u simulatoru za 16 Mhz i iskoristiti tvoj timer 0 da mi generira interrupt svake 1mS.
U interruptu povećavam neku variablu za 1 i prema tome ću kada nabrojim do 1000 okrenuti stanje PWM linije.
To ti je prvi test koji obavezno moras napraviti da bi bio siguran da ti MCU radi na 16 Mhz i opcenito da budes siguran kako nesto radi :)
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Prvo i osnovno iz c-a je da sve pocinje od funkcije main. U mom programu imas int main(void){ } Ovaj int znaci da funkcija nešto može vratiti, ali u našem slučaju nikad nećemo izaći iz funkcije main tako da nikome nista necemo vratiti.

Ovaj void u zagradama znači da onaj tko je pozvao funkciju nam ništa neće dati od atributa, a i nema nam što dati jer je to prva i jedina potrebna funkcija za rad procesora.

Nakon toga pozivam InitPorts() da bi rekao sta je ulaz a sta izlaz. U principu mogao sam umijesto InitPorts() napisati i DDRB |= 0x02, ali se zbog čitljivosti koda uvijek izbjegavaju hijeroglifi kako bi onaj tko cita znao sto trenutno radim. Znaci InitPorts() mora napraviti inicijalizaciju ulaza i izlaza.

"(DDRB |= 0x02) - (Data Direction Register B) = (Data Direction Register B) ili 2"

Znaci radim ili operaciju sa DDRB registrom
DDRB na startu procesora je ovo "00000000"
ja radim ili operaciju sa ovim "00000010"
i registar ce postati ovo "00000010" - Postavio sam PB1 kao izlaz to je ovaj PWM

InitTimer0() ili (TCCR0 |= 0x04, TIMSK |=0x01)

Ovaj zarez ti odvaja ono što radi procesor. Prvo ce napraviti ovo:

TCCR0 |= 0x04
Znaci pristupam TCCR0 registu i radim ili operaciju sa "4" kako bi mi registar posao ovo: 00000100
Po datashetu atmela to znaci da pokrecem Timer0 tako da mi timer 0 dijeli ulaznu frekvenciju procesora 16000000 sa 256 i broji na tom clocku. Hint "Prescaler TIMER0"

Ovime sam pokrenuo Timer0 i postavio mu ulazni clock

Nakon toga procesor izvrsava TIMSK |=1 a to znaci da sam napravio "enable overflow interrupt"
Kada timer nabroji do 0xFF on ce napraviti interrupt i skociti u ovaj dio koda sto pise ISR(TIMER0_OVF_vect)

Timer sam konfigurirao i sad jos samo pozivam ovo sei(); sto znaci da ukljucujem globalne interrupte. To je u SREG registru glavni bit za sve interrupte procesora.

i sada vise ništa ne radim... Kao što se vidi iz koda zavrtio sam main funkciju u ničemu while(1){}... Ja samo čekam... Čekam onaj interrupt timera 0 koji će odraditi citav test.

I sad znaci timer broji do 0xFF i kada dojde do kraja pozove taj ISR interrupt i procesor skoci na taj dio koda:

Podesim vrijednost timera za novi interrupt nakon 1 mS, to sam prema debugeru podesio
TCNT0 = 0xC1;

povecam varijablu led;

i jednostavno provjerim jeli prlosla 1 S kako bi promjenio stanje LED-a.

Ako je prosla Restartam variablu, i okrenem stanje PWM linije. (0->1, 1->0)

Time sam napravio da mi interrupt timera 0 okrece stanje porta svake 1S...

Namijerno sam to rijesio u interruptu da se vidi kako procesor zapravo ništa ne radi... Sve ovo u while(1), sto ceka je njegovo gubljenje vremena, a on za to vrijeme moze bilo sto drugo raditi... Napravio sam compile i HEX file za ATMEGA 8. Kizo ti je objasnio kako da spojis LED diodu na PWM, i ubaci hex koji sam napravio pa javi kako je prosao prvi test.

Hex file ti se nalazi u Night/default/night.hex

A glavni file ovog AVR studia je Night.aps
Attachments
Night.zip
(10.59 KiB) Downloaded 216 times
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

abc nisam ja rekao da za projekt mora biti c ili assembler, nego da cu ja pomoci sto se tice programiranja samo ako se radi o C-u ili assembleru jer je to moje podrucje... Mislim i dalje da nisi u pravu kad sortiras programske jezike kao nebitne stvari tokom projektiranja. Onaj tko je nešto radio u Assembleru zna o čemu govorim. Assembler je barem 10 puta moćniji od bilo kojeg programskog jezika na svijetu, i samim time ti daje sve moguće kombinacije da bi nešto napravio savršeno.

Assembler je čisti HEX file... Čak sam išao jednom prilikom razumijevati HEX file pa sam vukao one hijeroglife i prebacivao ih nazad u assembler te proučavao što procesor zapravo radi... Time sam naučio puno više nego što može pokazati BASCOM ili C i to mi sada dobro dojde kada nesto programiram sto je malo kompleksnije... Pogledaj moj topic "Duhovi AVR-a"

C uopće nije toliko jak, ali je opet puno jaci od Bascoma. C je ipak najpopularniji jezik i kad tad ako se netko bude bavio programiranjem prvo pitanje za posao ce mu biti "koliko poznaješ C??"

U pravu si oko ove stvari da je startanje procesora samo podešavanje registara, čak je i nevažno u kojem to jeziku odradiš. U bascomu to ponekad i ne možeš odrati kako treba jer on ti radi ono što može, a tvoj source ne pristupa direktno registrima kao u ovome sto sam pisao u c-u.

Vidi se točno šta sam radio sa registrima... Pa te pitam jel to možeš iz BASCOMA??? Naravno možeš da pozoveš neki BASCOM library kao ono Config Timer0, bla bla bla, ali sloziti cemo se da se ne radi direktno o istoj stvari.
InTheStillOfTheNight
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by abc »

Nocni, moj prvi uradak u C-u i uradak uopce, je bilo prije 10 godina na PIC16F84 , koji nazalost vidim jos neki koriste, radilo se o regulatoru temperature koji je punio kondenzator koji se praznio kroz NTC, i to mjerio tajmerom i pretvarao u temperaturu i prikazivao na 3 cifarskom LED displeju.

Postojale su i tri tipke sa kojima se zadavala temperatura i histerezis itd. , znaci samo PIC16F84 i tri tranzistora i nekoliko otpornika, isti pinovi su pokretali i displej i skenirali tipke, plus izlaz na rele posebni pin. Prvi uradak nije bilo paljenje led vec nesto malo komplikovanije:)

Da ne zaboravim i programatpr sam napravio po mikrocipovoj shemi a programator se pokretao iz komandne linije koliko se sjecam nije bilo grafike.

Zanimljivo da nisam mogao da nadjem nigdje kako se uopste radi mikrokontrolerom sa 7 segmentnim LED pa sam nasao u nekoj knjizi samo opis multipleks rada , nista od C koda ili bilo kakvog koda. I to je proradilo i jos tocno na decimale prikazivalo temperaturu .

Sto se tice asemblera u pravu si za mozda jednostavne programe od mozda velicine do kilobajta ili tu negdje ali kad se radi o mikrokontrolerima koji imaju na desetine kilobajta memorije ili cak stotine vise nisi u pravi tu C nema konkurencije, jedino ako neces da program pises godinama u asembleru i cak onda ako se radi o nekim vrlo kompleksnim programima na kraju napises sporiji program nego sto je u C:)
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Normalno da je u assembleru nemoguce programirati za recimo ARM procesore, jedan razlog tome je to jer se na tako brza 32 bitna računala programira na OS-u a tu assembler pada u vodu jer bi programiranje trajalo čitavu viječnost što je besmisleno na operacijskim sustavima i Switchu Taskova.
I za OS sustave tipa kernel se opet kod piše u C-u, barem ga ja pišem jer nisam našao niti jedan alat koji bio bio bolji od C-a.
AVR je jednostavan i za njega se ne mora pisati u assembleru, ma može sve što hoćeš, ali i dalje tvrdim kako je C puno jači alat i da se treba prilagoditi C-u, a ne Bascomu... Muka je to jer je i kompiciraniji od Bascoma, a i ovaj AVR studio se smatra profi Alatom za mikrokontrolere... Evo ja sam ovo napisao u C-u i objasnio što znači koji red pa oni koji žele mogu nešto naučiti. Uostalom Maniac ima i HEX file, pa bude probao i sam odlučio hoće li uzeti c ili Bascom... Sto se mene tice mogu ja to napraviti i u PASCALU jer sve je to ista hrpa go....
InTheStillOfTheNight
User avatar
_Maniac_
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 487
Joined: 02-09-2007, 00:12
Location: Bilje (pokraj Osijeka)
Contact:

Re: Strujni izvor 0-50A

Post by _Maniac_ »

Evo isprobao sam taj program sa led-icom i otpornikom samo i ledica gori 16sec i toliko onda bude ugasena... :)
Capo Di Tutti Capi
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

dobro je onda kizo namirisao... Atmel ti radi na internom oscilatoru 1 MHz a ne na kristalu 16 MHZ...
Evo ja sam prekontrolirao ponovno program i na debugu mi se interrupt pokrece svake 1008 uS sto znaci da je interrupt oko 1mS a brojim do 1000 sto znaci da okrecem PWM svake sekunde i to je dobro.
Greska ti je jer nisi dobro isprogramirao FUSE... Postavi CKSEL na 1111 i to bi moralo raditi dobro...
A ako nece onda ti nesto ne valja sa tim paralelnim programatorom koji ocito ne postavi FUSE onako kako treba, ili ti je crkao ATMEL.. To su ti sve moguce kombinacije gresaka.
Last edited by InTheStillOfTheNight on 13-12-2009, 12:41, edited 1 time in total.
InTheStillOfTheNight
User avatar
_Maniac_
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 487
Joined: 02-09-2007, 00:12
Location: Bilje (pokraj Osijeka)
Contact:

Re: Strujni izvor 0-50A

Post by _Maniac_ »

Evo lijepo sam stavio fuse external oscilator i sad svake sekunde pici... :)

Image

A sto se tice programatora, pa radim s onim USB AVR Doper-om... paralelni sam koristio samo da bi programirao atmegu koja ide na taj usb programator... :)

Radi sve lijepo... :)
Capo Di Tutti Capi
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Budem ti danas onda napisao i ovaj kod sa PWM-om da probamo i to. Malo je to kompliciranije testirati, tu cemo pricekati i kizu da vidimo sto on predlaze. Sad smo na onom dijelu gdje ja radije uzmem osciloskop i tocno vidim kakav je PWM, ali u tvome slucaju to vjerojatno pada u vodu.

Uostalom PWM mozes lako testirati i sa tom LED diodom jer i ona ce mjenjati intenzitet svijetlosti kada to dignem na vecu frekvenciju. Jos cu danas malo proanalizirati sve kombinacije kako bi ti mogao dati najvise iz ATMELA za ovo sto trebas...
InTheStillOfTheNight
User avatar
_Maniac_
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 487
Joined: 02-09-2007, 00:12
Location: Bilje (pokraj Osijeka)
Contact:

Re: Strujni izvor 0-50A

Post by _Maniac_ »

A nemam svoj osciloskop... :) Mislim da ima jedan lega, tocnije poznanik, pa ako bas bude trebalo, mogu otici do njega i pitat samo da isprobam...

E da, hvala...
Capo Di Tutti Capi
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

Mislim moze se sve to matematicki racunati, barem cu ja tako sada raditi kada budem programirao jer se mogu osloniti samo na matematiku i debuger te ono sto mi timer1 nudi. Znaci prilagoditi cu to na neki PWM kojm bi imao neku realnu frekvenciju na realnoj rezoluciji...
InTheStillOfTheNight
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: Strujni izvor 0-50A

Post by Kizo »

@Maniac: Postavi/pogledaj fuseve za svaki slučaj dali su ti ovako:
Image

@InTheStillOfTheNight: Ako ne stigneš, mogu ja da mu postavim program koji će mu mjenjati intezitet ledice od 0 to max i natrag svake sekunde, tako da se može lijepo vidjeti kako se mjenja intezitet, tj. da PWM funkcionira.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Strujni izvor 0-50A

Post by InTheStillOfTheNight »

nista onda postavi ti taj program ja cu se malo pozabaviti sa C-o i ovim PWM-om i AD-om za njegovu regulaciju struje, pa da vidim koliko to uopce moze biti precizno...
InTheStillOfTheNight
Post Reply