# ATMEL mikrokontrolleri >  Atmega128 - vai pietiks jaudas projektam

## Delfins

Sākšu mācīties AVR. Sākšu ar atmega-8/128.

Tā kā taisu zibspuldzi ar elektronisko vadību, un īsti vēl nezinu, cik kas kur kāpēc, gribēju jautāt, vai ar atmega128 pietiks "resersu" un periferijas konkrētu darb. uzdevumu veikšanai. Re aptuveni shēma:
[attachment=0:nlf8kmu0]Studio Light electronics.jpg[/attachment:nlf8kmu0]

Fīčas - aptuvens `meņucis` ir te. Primā rinda - komanda, otrajā - iestatījums:


```
==========
WiRe Sync
OFF/1..4.. Channel
==========
Photo Sync
Yes/No
==========
Modeling light
Proportional/OFF...1/4..FULL
==========
Flash power
FULL..1/64
==========
Charge speed
Fast/Low
==========
Temp: Bulb
-10C..+100C
==========
Temp: Capacitors
-10C..+100C
==========
FAN speed
Auto/Silent/Full
==========
Display: Power/Modeling/Temp/Other
Yes/No
==========
```

----------


## zzz

Vispaareejos vilcienos - 128 pietiks atliektiem galiem.

Ja netaisies kaut kaadu lielizmeera wireless protokolu kraameet virsuu, tad pietiktu arii kaut vai ar atmegu8.

----------


## Delfins

Ideja vienkārša.

Procis čeko temp + regulē FAN-us.
Ar izejām slēdz/atslēdz tiristorus caur optroniem.

Wireless remote tā vispār nākotnes fīča - ideja tāda, ka tiklīdz uz pults pamaina settingus - pults sūta datus iekārtām (jauda un t.t.) uz konkrētu "channel-u", procis saliek settingus (ja tas ir viņam adresēt) un tad gaida no pults komandu "šaut". Protokols - vnk settinga id + vērtība. Bet tas vispār nākotnei. To pat varētu darīt otra atmega8 vai vēl kaut kāds tizls variants  :: .

paldies par iedrošinājumu, tagad gaidu 16x2 LCD lai būtu ko spēlēties. Sākuma jau protams LED+pogas.
Baisi gribās ķerties klāt un kodēt meņuci ar podziņām

----------


## M_J

Pievienojos zzz - atmega128 pietiks un stipri daudz pat pāri paliks. Vai netaisies tai zibspuldzei paredzēt komunikāciju ar PC? Ja tā - varbūt ir vērts sākt ar to? Man tas stipri atviegloja un paātrināja visu tālāko procesu, it sevišķi, pēc tam, kad uzrakstīju bootloaderi.

----------


## Delfins

Kamdēļ PC-sync ar zibenēm? Tu domā pašu wireless protokolu noemulēt?

Fotokamerā jau spiedīs pogu un sūtīs signālu. Ar PC tik ieprogrammēšu. USBAsp jau ira.

Nu skaidrs, mēģināšu sākumā mocīt Atmega8.

----------


## jeecha

Par wireless vadiibu (par attaalinaatu parametru uzstaadiishanu, ne par pasha zibshnja palaishanu) - savulaik esmu uz PIC taisiijis vienkaarshu taalvadiibu lietojot leetos kjiiniizeru ciparu raidiitaajus un uztveereejus. Manchester enkoderis un dekoderis man bija softisks ieksh PIC12F629, un resursu tur pietika atliektiem galiem.

Otra iespeeja - lietot kaadu no ljoti integreetajiem wireless transiivera chipiem kuriem iekshaa ir ne tikai RF (de)modulaacijas un raidiitaajs/uztveereejs bet arii datu (de)kodeeshana. Un uz aarpusi jau ir pavisam augsta liimenja I2C vai SPI interfeiss. Shaadu chipu tagad ir daudz - piemeeram Nordic nRF905, bet ir chupa citu un iipashi daargi vinji nav.

----------


## M_J

Tā komunikācija ar PC bija domāta galvenokārt programmēšanas laikā. Ir diezgan neērti 20 minūšu laikā 10 reizes caur seriālo programmeri pārrakstīt/verificēt atmegas128 atmiņu. Ja ir bootloaderis, tad to var izdarīt daudz fiksāk un ērtāk. Piedevām vari uz PC ik pa laikam atsūtīt kaut kādus interesējošus datus. Tas stipri atvieglo debugošanas procesu. It kā jau tam ir domāts JTAG, bet ir iemesli, kādēļ to nelietoju.

----------


## dainiss

Ja jau paredzi wireless, tad varbūt ir vērts padomat arī par wireless vadību tai zibspuldzei tā lai varētu no vienotas pults neatejot no kameras vismaz jaudu regulēt. Ideālā varianta arī kustinat pašu zibspuldzi. Fotografējot un uztādot zibspuldzes, tas būtu ļoti ērti - tipa sēdi pie pults un izbīdi tik visus lukturus pēc vajadzības. Var jau būt ka utopija, bet tomēr patīkami  ::

----------


## Delfins

Tā jau bija domāts, PocketWizard analogs.
Bet darbs studijā parasti jau tāds ir, ka visu ar rokām saliek - kustina pašas zibenes + regulē jaudu

----------


## jeecha

Es prieksh palaishanas lietoju leetu kjiinieshu palaideeju - vizuaali taads pats kaa http://cgi.ebay.com/ws/eBayISAPI.dll...m=130310212488. Darbojas labi un par taadu cenu diez vai ir veerts meistarot pasham. Uztveereejs man ir viens - paareejaas zibenes trigereejas optiski no pirmaas zibshnja.

Taisot savu trigeri jaatceras ka no briizha kad kamera padod signaalu liidz briidim kad zibspuldze nostraadaa ir jaabuut maksimaali iisam. Teiksim ja kameras maksimaalais "flash sync" (briidis kad sleedzis ir pilniibaa valjaa) ir 1/250s un zibenes zibsnis 1/1000s - laiks no kameras signaala liidz zibsnim nedriikst paarsniegt 3/1000s (3ms). Savukaart ja kamera speej 1/500s sinhronizaaciju, tad tas ir vairs tikai 1ms. Savulaik meeriiju manis lietotajam kjiinieshu izstraadaajumam aizturi - ja pareizi atceros bija kautkas ap 1.5ms - respektiivi 1/500s zibspuldzes sinhronizaaciju vinsh vairs pavilkt nevareetu (man gan tas netraucee, jo manas kameras uztur tikai 1/160s un otra 1/200s). 

Man kaadreiz ar bija doma saviem Walimexiem aizstaat vadiibas potenciometrus un sleedzhus ar digitaaliem pochiem un relejiem un to visu vadiit attaalinaati no mazas pults. Bet taa arii neesmu sanjeemies to uztaisiit, un jeega patiesiibaa arii baigi lielaa manupraat nav  ::

----------


## Delfins

Nikonam jauda starpcitu regulējās ar zibšņiem sinhronizācijas laikā...  :: 
Uz visiem 4 kanāliem. Man tā kā 1/320 pieejams.

Kā jau teicu - pamatā wireless ir ļoti tāls future. Pašlaik gribu piešūt LCD, pogas + tiristoru vadību.

----------


## jeecha

Arii Minoltai (tagad Sony) ir aareejo zibspuldzhu jaudas vadiiba zibshnja laikaa. Probleema vieniigi ka gan Nikonam gan Minoltai/Sony tas ir pilniigi "proprietary" un darbojas tikai un vieniigi ar vinju pashu zibspuldzeem (ar dazhiem iznjeemumiem, piemeeram Sigmas jaunaakaas zibspuldzes arii shos protokolus itkaa uzturot, taatad vai nu reverse engineereejushi vai arii licenzi nopirkushi).

Bet studijaa tas viss nafig iisteniibaa nav vajadziigs. Ja masveidaa bliezh "shirpatreba" portretus (kaa lielaakaa dalja studiju) tad zibspuldzhu novietojumu un uzstaadiijumu vienreiz saliek un peec tam gadu nekustina  ::  Savukaart ja nodarbojas ar maakslu tad krietni vairaak laika paiet zibspuldzes fiziski paarvietojot un mainot lietussargus/softboxus/gaismas taisnotaajus/kraasu filtrus un pamainiit jaudu ar roku pie katras zibenes ir pupu mizas  ::

----------


## dainiss

> Savukaart ja nodarbojas ar maakslu tad krietni vairaak laika paiet zibspuldzes fiziski paarvietojot un mainot lietussargus/softboxus/gaismas taisnotaajus/kraasu filtrus un pamainiit jaudu ar roku pie katras zibenes ir pupu mizas


 Vai esi kādreiz sēdējis koncertzālē pie gaismu pults? Pieļauju ka daudzi fotogrāfi nav to darījuši. 
Pirmkart, tas ir reāls kaifs, kad tu vari ar vienu džoistika vai poča kustību izmainīt gaismas virzienu , jaudu krāsu utt., otrkārt ejot pie katra luktura un regulējot ar roku, tu nekad nevari redzet kā tas izskatīsies no kameras skata punkta. Ir jaiet pie kameras jaievērtē, tad atkal jaiet atpakaļ, nedaudz jāpamaina, tad atkal atpakaļ - vārdu sakot , pusi dienas nostaigā  ::  Daudzi teiks ka Ir standarta gaismu shēmas un jaudu attiecības, kur nekas nav jādomā. Sakramē, iestādi un tik bliez "lielo mākslu". Var arī tā darīt, pieredze šajā darbā daudz var līdzēt, Tomēr tas jau ir konvejieris un par baudas gūšanu no šāda procesa diez vai var runāt. Redzēt un novērtēt gaismas vizuāli regulēšanas laikā, tas ir pavisam savādāk. Man nav gadījies pastrādāt šādi aprīkotā fotostudijā, bet ar lielāko prieku tādu sev izveidotu, ja būtu brīvmākslinieks kam pietiekoši daudz laika un līdzekļu ko tam atvēlēt.

----------


## Delfins

Piekrītu Dainiss, šajā projektā ir 50% hobijs, 50% vajadzība citam hobijam. Pieredze neatsverama uz visiem 1000% (cik daudz jaun. tehnoloģiju apgūšu)
Tas vai kādam vajag/nevajag - mani nekrata  ::

----------


## Delfins

Re kur atradu plus/minus iesāktu projektu. (atmega8 + RF kompakt-moduļi)

http://code.google.com/p/strobist-proje ... quirements

----------


## Delfins

Uztaisiju simple menu uz atmega8 + 16x2 LCD.
Kods pagaidam aiznjem 22%.. Man liekas ka tas ir pa daudz..

Varbut ieteiksiet kadu labu projektu, kur pamacities, ka tad ir pareizi meņučus uztaisīt? Nu tā lai neaizņem pārāk daudz vietas atmiņā.

Vēl ko ievēroju (nu jau loģiski), ja grib smuki saformatēt stringu ar sprintf vai atoi(), tad programma krietni palielinās (tiek inkludotas monstrigas f-jas).
Nav kads specializets optimizets lib-s prieks tadiem darbiem?

http://www.fotoblog.lv/blog/3769

----------


## ansius

esi dzirdējis - ASM jeb Asambler  ::

----------


## Delfins

Diemžēl negribās tagad gar ASM grābstīties. Tur vēl jo vairāk var pieļaut kļūdas un izstrāde aizņems ļoti ilgi.
====

Juhuu... izdevās nolasīt no EEPROM (datu atmiņa) tekstu... tas nozīmē ka Atmega8 ar 512B atmiņas es varēšu ieglabāt veselus 30 16-simbolu teksta gabalus.
Paliek pāri vēl 32 baiti citiem datiem - lampas izlietošanas skaitam, iestatījumiem un t.t.



```
	if (bit_is_clear(C_PIN, UP))
	{
		uint8_t c;
		uint8_t i = 0;
    	uint8_t lineSize = 16;
	 	uint8_t *tmpStr = (uint8_t *)malloc(lineSize+1);

		lcd_clrscr();
		lcd_gotoxy(0,0);

		while (i<lineSize)
		{
			c = eeprom_read_byte((uint8_t*)1+i);
			tmpStr[i] = c;
			i++;
		}
		tmpStr[lineSize] = 0x0;
		lcd_puts(tmpStr);	
		free(tmpStr);
		
		loop_until_bit_is_set(C_PIN, UP);
	}
```

----------


## malacis

Prieks par Tevi, Delfin, nu riktīgs malacis!

Pāris konstruktīvi priekšlikumi.

Manuprāt, tekstus vislabāk glabāt flash atmiņā, jo tā kontrolierim ir visvairāk. Un teksts aizņem tik vietas, cik tajā burtu (pluss nulle beigās), tā ka nekādas viltības tur atmiņu ietaupīt nevar.

Par pēdējā postā publicēto koda gabalu. Es personīgi nemīlu mikrokontrolieros lietot atmiņas rezervēšanas-atbrīvošanas funkcijas (malloc, free utml.), jo pastāv risks, ka atmiņa safragmentēsies un vispār pietrūks. Piedevām tavs softs vispār nepārbauda, vai atmiņa tika izdalīta, rezultātā programma var uzkārties.

----------


## Delfins

nu teiksim, "i dont care"... šis nav OS  ::  Ar restartu pietiks - tas notiks zibenīgi un bez sekām (cerams)  :: 
kamēr ASM nepārzinu tik ļoti, lai lietotu programmā, palikšu pie C/C++

PS: pēdējā versijā vispār nav atmiņas izdalīšanas... bliež pa taisno character (uint ::  uz LCD secīgi  :: 



```
void printEEPROM16byteStr(const uint8_t *eepromOffset, uint8_t x, uint8_t y)
{
	uint8_t i = 0;
	uint8_t c;
	
	lcd_gotoxy(x,y);
	while (i<16)
	{
		c = eeprom_read_byte(eepromOffset+i);
		if (c == 0xFF) // We can accept 0x00, because of custom char
			break;
		lcd_putc(c);
		i++;
	}
}
```

----------


## kabis

Iesaku palasīt šito:
http://www.avrfreaks.net/index.php?name ... ic&t=38003

----------


## Delfins

Kabis, esmu jau vienā sorcē tā redzējis un izmantojis... bet lai saīsinātu kodu nolēmu izmantot EEPROM atmiņu. Uzreiz lasa pa baitam un sūta LCD. Iespejams vairāk noslogo pašu LCD un izpilda vairāk operācijas. bet nu... vismaz nemaisās kodā stringi. j man ir lieks EEPROM (glabāšu tur relatīvi maz datu settingiem, pārējo izmantošu izvēlnēm  ::  )

----------


## Delfins

Es neko nesaprotu... līdz šim esmu kodējis pietiekami daudz C, lai būtu neizpratnē..




```
int x = (uint8_t) sqrt(val); // VAL = 0, X jabut 0
strClr(tmp,15);
itoa(x,tmp,10); 
lcd_puts(tmp); // izvada  "1" uz LCD
lcd_puts("#");

strClr(tmp,15);
itoa(pow(2,(uint8_t)4-x),tmp,10); // izvada 15!!!!   2^4 ?? ... pie kam ja ieliek koda x = 1, tad viss OK... kura vieta tad tas dabu 0.9999 ?? ja tips ir INT ?
```

 neko nesaprotu....

----------


## Velko

sqrt() un pow() darbojas ar floating-point vērtībām. Tā kā AVR nav nekādu iebūvēto FP instrukciju, tad tur darbojas (diezgan pasmags) emulācijas kods. Domājams, ka šajā emulācijā ir taupīts uz izmēru un izpildes laiku, ziedojot precizitāti. Galu galā - floating point operācijas iekš MCU tiek izmantotas diezgan reti.

Ko ielikt sqrt() vietā - grūti tā uzreiz pateikt. Iespējams ka var izdomāt kādu lookup tabulu - kvadrātsaknei no uint8_t iespējami tikai 16 rezultāti.

Kāpināšanai 2^x pavisam noteikti nav nepieciešams izmantot pow() - var aizstāt ar shiftošanu 1 << x. Viss notiks integeros un krietni ātrāk.

----------


## Lemings

Parasti es glabāju tekstu virknes u.c. programu atmiņā. 

Man principā ir uztaisīta izvēlne ar vienlaicīgu piekļuvi vienam parametram un vadību no 3 pogām. Ja ir interese varu mēģināt savākt un padalīties, ja ir nepieciešamība.  Nav nekāds gara lidojums, bet strādā. 
Pat apgaismojums tiek ieslēgts un izslēgts.

----------


## Delfins

nu man jau viss praktiski pabeigts ap izvēlni.. vēl īsaku kodu nezinu, jo izvelne ir dinamiska (dati defineti masivos) - caption, min, max un attiecigi katrai izvelnei sava metodi vertibas izvadei. Vai var vel isak - neesmu parliecinats  :: 

Taimouts ari ir - atgriezas uz darba stavokli, ja settingus nemaina. Problemas ar programesanu man nav, problemas ir tādu specifisku lietiņu un ierobežojumu nezināšana. jaunaja versija vairs netiek izmantotas stringu f-jas, vienigi itoa() ... kods tagad ir 30% - visam izvelnem, saglabasai, ieladei.  Darba rezima izvade vel nav pabeigta, bet gan jau tur nebus daudz koda. Kopuma vajadzetu ar Atmega8 pietikt.

Kad rakstiju kodu, pamaniju, ka labak izmantot ELSE konstrukcijas (no ASM viedokla uzreiz taisa `goto XXX`), jo tiek ietaupiti 10 baiti (0.12%). Šitā saliek pārs vietās jau ir kādi 2..3% ietaupijums, kas mazam čipam ir ļoti daudz.

----------


## Delfins

Tiko paskatījos grafisko LCD kodus... nu ja grib smuki drukāt, ar atmega8 atmiņas būs pa maz. 
Ja turpināšu izmantot atmega8, Iespējams to visu vajadzēs iekš kādas i2c EEPROM atmiņas glabāt (24Cxx)... Visādi fonti un bildītes... uh.. nebūs pa šerpu un bremzīgi?

PS: skatījos kodu pulkstenim uz 128x64 un atmega32. (tur bija bez areja EEPROM)

----------

