# ATMEL mikrokontrolleri >  Atmel PWM un capture

## 0xDEAD BEEF

Sveiki!
Varat ludzu pastastit par Atmega8 PWM moduli. Vajag generet 3 PWM signalus, bet isti nesaprotu, ka tas Atmelim darbojas. Vai vajag visu 3 taimerus tam izmantot, vai ari var iztikt ar 1, bet parslegt pinus, jo nevajag vienlaicigi 3 PWM, bet tikai 1nu, bet uz 3 dazadiem piniem (prieks motora vadibas). Vel vajag no viena pina nolasit pulsa garumu (1 - 2ms). Tas ir capture fiicha, vai ne?
Paldies,
Beefs

----------


## karloslv

Kā tas ir - vajag 3, bet vienlaicīgi 1? Gribi vadīt 3 motorus, bet tikai viens reizē griezīsies?

----------


## 0xDEAD BEEF

Nu kaut kā tā!  :: 
Ja izmantosu visus 3 pulksteņus, tad nepaliks vairs laika paņemt to 1.5 ms impulsa mērijumu.
Vai arī tur viss atmelim stingi? Katram taimerim izeja uz savu kāju, ja grib taisīt PWM?

----------


## karloslv

Pirmkārt, daudziem taimeriem ir vairāki PWM kanāli. Tas nozīmē, ka skaitītājs ir viens, bet impulsu aizpildījumus var dabūt divus dažādus reizē (tipiski - kājas OC1A OC1B, piemēram). Varbūt, ka ir arī kādi modeļi ar 3 kanāliem uz vienu taimeri, neesmu tik sīki pētījis.
Otrkārt, dzelziskie PWM ir ar definētām kājām, tā ka tur nekāda kāju pārslēgšana nesanāks, tāpat visi 3 būs reizē jādarbina un jāapstrādā. 
Man izskatās, ka jāņem viens divkanālu PWM uz viena taimera un vienkanāla uz kāda cita taimera. Vēl variants - sēdini katra motora vadību uz atsevišķiem tiny AVR, pašiem mazākajiem.

----------


## 0xDEAD BEEF

Nevaru!  ::  Pārtaistu jau gatavu motora draiveri! Pielodejos pie ttqfp packega! Jāsaprot, kā darbojas esosais, lai mosftus nesaslēgtu virknē (VSS - VDD)  ::

----------


## Velko

Vēl var mēģināt tādu pus-hardware, pus-software risinājumu. Izmanto taimeri, bet pinu pārslēgšanu raksti Output Compare un Overflow interruptos.

----------


## 0xDEAD BEEF

kaa tai avr studijai darbojas palaisana un breakpointi? Var virtuali debugot procesoru vai kaut ka ta?

----------


## 0xDEAD BEEF

Ok AVR speci!  :: 
Varat ludzu pastastit par Atmela mainigajiem. Vai manigajam jaraksta prieksa register un ko tas maina?
Thnx!  :: 
Beefs

----------


## 0xDEAD BEEF

Vel viens jautajums!
Kapec register unsigned short int netitans uz rinki pie FF? :/
	register unsigned int t = 1;
	register unsigned short a = 0;
	register unsigned short pwm = 67;
	while(t++)
	{
		if(!a) PORTB |= 0x04;
		if(a == pwm) PORTB = PINB & 0xFB; 

		a++;
		if(a == 0xFF) a = 0; // nevar bez sitadas rindinas? ?????
		//cikla taisam PWM
	}

ko nozime register?

Un kapec tas debugeris tik slikti darbojas?
Bet ja ne sitie sikumi, tad vispar AVR studija liekas pienemama!  ::

----------


## Velko

_register_ nozīmē, ka šis mainīgais jāglabā reģistros. Ja nenorāda, tad kompilators domā pats, kur likt - reģistros vai SRAMā. GCC parasti gan pats izdomā pietiekoši optimāli.

_unsigned int_ griežas apkārt pie FFFF - tas ir 16-bitu mainīgais. _unsigned short_ liekas ka arī. Ja gribi 8-bit mainīgos, tad lieto _unsigned char_ vai _uint8_t_.

----------


## 0xDEAD BEEF

Lasisana no SRAM ir lenaka, ka no registriem, ja?
Ok ok .. jaskatas!
Varbut kads vel kaut ko var pastastit par to debugosanu? Nesanak normali iedebugot apaksfunkcijas ar cikliem. Neiet ieksa. Baigi patika PIC, ka vareja nospiest vienu pogu, kods aizgaja uz mikrokontrolieri un uzreizu vareja debugot jau uz mikrokontroliera. Te jau ari baigi kruti, ka var debugot emulatora, bet tikai ja straadatu ka nakas!  ::

----------


## Velko

Mainīgo vērtības pirms lietošanas tiek no RAMa ielādētas reģistros. Ja bija kādas izmaiņas - vērtība pēc tam tiek saglabāta atpakaļ RAMā. Tā ka sanāk liekas darbības. Bet ja vērtība tiek visu laiku glabāta reģistros, tad šīs darbības atkrīt. Protams, ja daudz mainīgo, tad visiem vietas reģistros nepietiek.

Par debugošanu - nez, man normāli darbojas gan Step Into (iet iekšā funkcijās), gan Step Over (iet pāri), gan arī Toggle Breakpoint fīča. Nav gļukaini nokačājies or something?

----------


## 0xDEAD BEEF

Neko nepateikšu par nokačāšanos, bet neesmu jau arī droš, ka visu pareizi sabakstīju! Ko vajadzēja izvēlēties, kad taisa jaunu projektu! Tur visādi ICE un kas tik vel nav. Procesoru ņēmu Atmega8.
Biifs

----------


## Velko

Es ņēmu _AVR simulator_, to kas nav V2(preview) - domājams ka 2. versija varētu būt vēl pazaļa. Pārējie paredzēti debugošanai uz paša dzelža, protams, ja ir atbilstoša iekārta un mikrene atbalsta.

----------


## Vikings

Man arī bija problēmas kad gribēju sākt apgūt C valodu priekš Atmeļiem. AVRStudio + WINAVR. Tipa uzrakstu kodu nokompilēju viss OK. Kā mēģinu simulēt tā lec pāri rindiņām, neiet apakšprogrammās, restartējas... Beef, tev tas pats?
Ā vispār iedomājos - varbūt C tāpat kā ASMā vajag programmas sākumā Stack izmēru nodefinēt?

----------


## karloslv

Nē, visdrīzāk tas ir tādēl, ka kompilēta ar optimizāciju un mašīnkodu jau vairs tā nevar pievilkt rindiņām. Tāds joks vismaz ir novērots citās arhitektūrās.

----------

