# ATMEL mikrokontrolleri >  Atmega8515L

## kvaris

Sveiciens!

Uzreiz teikšu, ka esmu iesācējs ar Atmegām, tādēļ, lūdzu, izturieties ar sapratni pret manu nezināšanu! Es mēģinu uzrakstīt elementāru programmiņu kontrolierim Atmega 8515L. Es gribu, lai uz PORTB pina PB2 man būtu nepārtraukts taisnstūrveida signāls. It kā ir, bet tomēr nē. Tas, kas uz PB2 novērojams ir tas, kas redzams attēlā.
Ko es daru nepareizi? Tas platums tiem pīķiem mainās pie tam. Es domāju, ka tas varbūt ir tādēļ, ka neesmu atslēdzis citas PORTB funkcijas, bet, kad to izdarīju (vismaz domāju, ka esmu to izdarījis), vienalga tas pats. Palīdziet, lūdzu!   ::  

kvaris

----------


## karloslv

AVR ports var būt 3 stāvokļos:

1) "1", kad ports ir "pievilkts" pie VCC
2) "0", kad ports ir "pievilkts" pie GND
3) Z, kad ports AVR iekšienē nekur nav pievienots

Šos stāvokļus nosaka PORTx un DDRx biti. AVR dokumentācijā pie I/O pins ir maza tabula par šo tēmu.

Tavā oscilogrammā labi redzams, kā mainās 0, Z, 1, Z, 0, Z, 1, Z, ...

Pārskati vēlreiz, ko dari ar DDRB un PORTB. Z stāvoklis te ir lieks, to izmanto vai nu signāla lasīšanai vai nu sakaru līnijas atbrīvošanai. 

No otras puses, ne vienmēr vajag tieši tos "1" un "0". Ja, piemēram, pie PB2 ir pieslēgta gaismasdiode caur rezistoru pret zemi, uz izeju var dot arī "1" un Z stāvokļus.

----------


## SnacK

DDRx visu laiku jābūt "1" (izeja), jauzstāda tikai programmas sākumā, iekš cikla nav jāmaina.

PORTx, tiek pārslēgts iekš cikla (pārtraukuma):
   "0" - pievilkts pie GND;
   "1" - pievilkts pie VCC.

----------


## kvaris

Paldies!  :: 
Izmeginasu, dosu zinu!

----------


## karloslv

starp citu, oscilogrammā arī redzams, ka tev nav īsti pareizi nokalibrēts tausts, jo taisnstūra impulsi rādās šķībi. pieņemu, ka tu lieto kaut ko šādu: 


tādam taustam ir skrūve, kas pieregulē frekvenču raksturlīkni. kad uztaisīsi pareizi "1" un "0" stāvokļus, paskaties vēlreiz rūpīgi oscilogrammu un pieregulē to, lai būtu pilnīgi taisni:

----------


## kvaris

Jā, starp citu, izmantoju tieši tādu osciloskopu, un to noregulēšu. Bet...Paspēlējos ar DDRB un PORTB reģistriem, vienu brīdi jau likās, ka tikšu galā, bet vienalga vienā pusē saglabājās tāda lauzta līnija.
Vai man, lūdzu, varētu pateikt, ko nozīmē krusts PUD ailītē. 1 vai 0 nozīmē, ka attiecīgi bits ir iestatīts vai iztīrīts, bet ko nozīmē tas krustiņš?
Vispārīgā gadījumā kods šāds:

               ldi                          register,0b00000001
               out                         ddrb,register

loop:
              sbi                          portb,0
              cbi                          portb,0
              rjmp                       loop

----------


## karloslv

krusts ir "don't care" jeb vienalga. ja kods ir tāds, kā raksti, tad nevajadzētu gan būt problēmām, izejā jābūt tīriem 1/0.

----------


## kvaris

Lielais paldies, lauzīšos tālāk cauri!  ::

----------


## M_J

Vispār jau pēc koda spriežot visam vajadzētu iet, tikai taisnstūrim būtu jāparādās uz PB0 nevis PB2. Otrkārt - no kā un ar kādu frekvenci taktējas procesors? Ja vien netiek izmantots kaut kāds baigi lēns kvarcs, oscilogrammā redzamais process izskatās stipri par lēnu. Pieņemu ka izmanto rūpnīcas uzstādījumus, kas, ja nekļūdos ir 1Mhz iekšējais RC ģenerators. Komandas sbi un cbi procesors izpilda katru vienā pulksteņa periodā, rjmp - divās taktīs - tātad svārstību periodam būtu jābūt 1+1+2=4 sistēmas pulksteņa periodiem kas pie takts frekvences 1MHz iznāk 4 mikrosekundes, pie tam signālam būtu jābūt nesimetriskam jo no uzmešanas līdz nomešanai ir 1 takts, no nomešanas līdz uzmešanai 3 - taktis. Lai šādu taisnstūri novērotu osciloskopa izvērses laikam gan ir jābūt krietni īsākam, nekā redzams no Tavas oscilogrammas. Skatoties ātrus procesus, izmantojot garus izvērses laikus viena daļa digitālo osciloskopu rāda pilnīgu kuiņu. Varbūt šis ir tas gadījums.
 p.s ja tas osciloskops ir par lēnu, var visu to procesu sabremzēt saliekot komandas nop, piemēram:

 sbi .....
 nop
 nop
 ....
 nop
 cbi .....
 nop
 nop
 ...
 nop
 rjmp .....

----------


## kvaris

Vēlējos pateikt M_J, ka Tev taisniba. Es agrak eksperimenteju uz PB2 kajas, tagad parrakstiju vel elementarak uz PB0 kajas. Uz tas ari nak tie signali. PB2 kaja bija agrak.

Un oscilogramma ari bija uznemta mazliet garakai programmai!

----------


## ansius

ipostee varbuut visu programmu kopumaa, jo ir reizes kad probleema ir inicializaacijaa, vai kaadaa regjistraa jo izvadiem meedz buut vairaak kaa viena noziimee

----------

