Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Mega128 OC1a и PORTB управление портом.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
add
Вопрос следующий:
Преходя с M8515 на M128 сталкнулся с такой проблемой...: немогу управлять PORTB ..а именно 5 пином.
думаю это связанно с альтернативными функциями порта OC1a, (OCnx). Инициализация почти такая же как и на М8515(на ней все работает). В программе использую таймер1, в режиме "сброс по сравнению" (CTC). В программе устанавливаю пинB5 (для теста) до инициализ. портов и таймера, но он обнуляется после инициализации tccr1b и далее в нуле.?! Привожу кусок кода.
Прошу помочь, может в коде чтото не так, может ссылку где почитать про инициализацию М128 и таймеров.
Код
reset:
clr    r16
out    MCUCR,r16
sbi    portb,5    ;для теста
sbi    portb,4

ldi    r16,LOW(ramend)
out    SPL,r16
ldi    r16,high(ramend)                
out    SPH,r16        

ldi    r16,high(0xaa)                    
out    ocr1ah,r16
ldi    r16,low(0xaa)                    
out    ocr1al,r16    
clr    r16
out    tccr1a,r16
ldi    r16,0b00001001            
out    tccr1b,r16                    
ldi    r16,0b00000000;здесь portb.5 обнуляеться,а portb.4 нет  ?!    
sts    tccr1c,r16            

ldi    zl,0b00110111        
out    ddrb,zl
ldi    zl,0b11001000
out    portb,zl
singlskv
Цитата(add @ Sep 15 2006, 09:47) *
Вопрос следующий:
Преходя с M8515 на M128 сталкнулся с такой проблемой...: немогу управлять PORTB ..а именно 5 пином.
думаю это связанно с альтернативными функциями порта OC1a, (OCnx). Инициализация почти такая же как и на М8515(на ней все работает). В программе использую таймер1, в режиме "сброс по сравнению" (CTC). В программе устанавливаю пинB5 (для теста) до инициализ. портов и таймера, но он обнуляется после инициализации tccr1b и далее в нуле.?! Привожу кусок кода.
Прошу помочь, может в коде чтото не так, может ссылку где почитать про инициализацию М128 и таймеров.


Если Вы это про симулятор AVR Studio, то это такой глюк у него (или фича smile.gif ).
Подобная проблемма у меня была, только уже не помню с каким чипом.
Попробуйте ничего не меняя в коде просимулировать на ATmega64 или ATmega103, все
будет работать. Таймеры у них одинаковые.
add
Цитата
Если Вы это про симулятор AVR Studio, то это такой глюк у него (или фича ).

:-) я прошил контроллер и все вроде заработало?! а в симуляторе глючит!
чудеса!
singlskv
Цитата(add @ Sep 15 2006, 15:40) *
Цитата
Если Вы это про симулятор AVR Studio, то это такой глюк у него (или фича ).

:-) я прошил контроллер и все вроде заработало?! а в симуляторе глючит!
чудеса!

Я тоже долго с этим мучился. А когда просимулировал на похожем, точно понял
что это глюк AVR Studio.
В итоге, симулировал на одном, а прошивал в нужный.
singlskv
Находим файл:
C:\Program Files\Atmel\AVR Tools\Partdescriptionfiles\ATmega128.xml

В этом файле находим:
Код
<TIMER1>
    <ID>AvrMasterTimer.MasterTimer</ID>
    <IcpVector>0x16</IcpVector>
    <CompAVector>0x18</CompAVector>
    <CompBVector>0x1A</CompBVector>
    <CompCVector>0x30</CompCVector>
    <OvfVector>0x1C</OvfVector>
    <IcpPinAdr>0x10</IcpPinAdr>
    <IcpPinMask>0x10</IcpPinMask>
    <OutputAAdr>0x18</OutputAAdr>
    <OutputAMask>0x20</OutputAMask>
    <OutputBAdr>0x18</OutputBAdr>
    <OutputBMask>0x40</OutputBMask>
    <OutputCAdr>0x18</OutputCAdr>
    <OutputCMask>0x80</OutputCMask>
    <OCFA>TIFR/OCF1A</OCFA>
    <OCFB>TIFR/OCF1B</OCFB>
    <OCFC>ETIFR/OCF1C</OCFC>
    <Prescaler>1:8:64:256:1024</Prescaler>
    <PSRregister>0x20</PSRregister>
    <PSRbitmask>0x01</PSRbitmask>
</TIMER1>

И правим на вот это:
Код
<TIMER1>
    <ID>AVRSimIOTimert16pwm1.SimIOTimert16pwm1</ID>             ; здесь
    <IcpVector>0x16</IcpVector>
    <CompAVector>0x18</CompAVector>
    <CompBVector>0x1A</CompBVector>
    <CompCVector>0x30</CompCVector>
    <CountPinAdr>0x10</CountPinAdr>       ; здесь
    <CountPinMask>0x40</CountPinMask>  ; и здесь
    <OvfVector>0x1C</OvfVector>
    <IcpPinAdr>0x10</IcpPinAdr>
    <IcpPinMask>0x10</IcpPinMask>
    <OutputAAdr>0x18</OutputAAdr>
    <OutputAMask>0x20</OutputAMask>
    <OutputBAdr>0x18</OutputBAdr>
    <OutputBMask>0x40</OutputBMask>
    <OutputCAdr>0x18</OutputCAdr>
    <OutputCMask>0x80</OutputCMask>
    <OCFA>TIFR/OCF1A</OCFA>
    <OCFB>TIFR/OCF1B</OCFB>
    <OCFC>ETIFR/OCF1C</OCFC>
    <Prescaler>1:8:64:256:1024</Prescaler>
    <PSRregister>0x20</PSRregister>
    <PSRbitmask>0x01</PSRbitmask>
</TIMER1>

После этого спокойно симулируем Timer1.

Аналогично поступаем с Timer3, только
<CountPinAdr>0x01</CountPinAdr>
<CountPinMask>0x40</CountPinMask>

Похоже в этих файлах довольно много глюков,
например биты OCR1BL7 и OCR1CL7 объявленны Read only причем и
в ATmega128.xml и в ATmega64.xml sad.gif
add
Цитата
После этого спокойно симулируем Timer1.


После этих манипуляций студия заругалась что девайсину сию незнает...;-) вернул все обратно...
singlskv
Цитата(add @ Sep 17 2006, 11:49) *
Цитата
После этого спокойно симулируем Timer1.


После этих манипуляций студия заругалась что девайсину сию незнает...;-) вернул все обратно...

А какая у вас версия AVR Studio ?
У меня 4.12.460.
Менял только для Timer1.
После этого Ваш код отлично симулируется.
singlskv
Вот файл для Studio 4.12.460

Подправленно для Timer1 и Timer3.
У меня все работает.
Если кто попробует, отпишитесь плиз.
add
Заменил файл и все засимулировалось :-) все дело было наверное в эффекте кривых ручкек.... :-)
Пасиба за помощь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.