реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ATTiny26, PortB, все пины в единицу
ADOConnection
сообщение Jul 9 2008, 20:09
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 29-06-08
Пользователь №: 38 630



Всем привет.

Наткнулся на непонятную мне проблему:

настраиваю все порты на выход:
Код
ldi binding,  0b11111111
out DDRA,     binding
out DDRB,     binding


на прерывании таймера1 отправляю на них все единицы:
Код
ldi binding,  0b11111111
out PortA,    binding
out PortB,    binding


в результате таких действий на портах появляются значения
PortA - 0b11111111 - как и положено
PortB - 0b01111101 - причем пин PB1 мигает, похоже в соответсвии с таймером.

МК перестает прошиваться. В чем проблема? Или я делаю то чего не стоит делать? smile.gif
Go to the top of the page
 
+Quote Post
smac
сообщение Jul 9 2008, 20:31
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(ADOConnection @ Jul 10 2008, 00:09) *
Всем привет.

Наткнулся на непонятную мне проблему:

.....
PortB - 0b01111101 - причем пин PB1 мигает, похоже в соответсвии с таймером.

МК перестает прошиваться. В чем проблема? Или я делаю то чего не стоит делать? smile.gif

Как таймер настраиваете?
Лучше приведите код, чтобы не гадать.
По симптомам - таймер настроен в режим генерации частоты, с автоперезагрузкой по OCR1A, смотрите регистр TCCR1A а заодно и TCCR1B
Go to the top of the page
 
+Quote Post
ADOConnection
сообщение Jul 9 2008, 22:16
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 29-06-08
Пользователь №: 38 630



код, проблема проявилась при эксперементах с бегущими огоньками

Код
.include "tiny26def.inc"

.def    temp=R16
.def    binding=R17
.def    output=R18
.def    counter=R19

.cseg
.org 0

            rjmp Reset      
            rjmp INT_0
            rjmp INT_1
            rjmp Timer1_CompareA
            rjmp Timer1_CompareB
            rjmp Timer1_Overflow
            rjmp Timer0_Overflow
            rjmp UART_RX
            rjmp UART_UDRE
            rjmp UART_TX
            rjmp ANA_COMP

INT_0:
INT_1:
Timer1_CompareB:
Timer1_Overflow:
Timer0_Overflow:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
              reti

        
/* Initialization */

Reset:       ldi temp,        RamEnd        
             out SP,          temp
        
             ldi temp,         0b11111111
             out DDRA,         temp
             out DDRB,         temp

            ldi temp,         0b01000000  
            out TCCR1A,        temp

            ldi temp,         0b00001010
            out TCCR1B,        temp

            ldi temp,        0b11111110    
            out OCR1A,        temp

            ldi temp,        0b01000000  
            out TIMSK,        temp
            
            sei                             


/* Main loop */

Main:        rjmp Main



/* Functions */

ResetTimer:
            ldi temp,        0            
            out TCNT1,        temp
            ret

ResetCounter:
            ldi counter,    0              
             ret

DataBind:   out PortA,         output
            ldi output,        0b11111111  
            out PortB,         output;<---- проблема тут
            ret


/* Timer interrupt handling */

Timer1_CompareA:

            rcall ResetTimer

            cpi counter,    14             
            brne Timer1_CompareA_continue  

            rcall ResetCounter

Timer1_CompareA_continue:

            ldi ZH,            High(Program1 * 2)  
             ldi ZL,            Low(Program1 * 2)

            ldi temp,        0          
            add ZL,            counter
            adc ZH,            temp

            lpm

            mov output,        R0
            inc counter

            rcall DataBind
            
            reti

Program1:

.db         0b00000000,        0b00000001
.db         0b00000011,        0b00000111
.db         0b00001110,        0b00011100
.db         0b00111000,        0b01110000    
.db         0b11100000,        0b11000000
.db         0b10000000,        0b00000000
.db         0,                0




UPD:
Проявил военнцую смекалку -- почитал референс smile.gif

С помощью тыкания на ресет удалось микроконтроллер прошить и он типо "починился".

Сообщение отредактировал ADOConnection - Jul 9 2008, 22:17
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jul 10 2008, 00:19
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(ADOConnection @ Jul 10 2008, 02:16) *
ldi temp, 0b01000000
out TCCR1A, temp

Замените на :
Код
            ldi temp,         0  
            out TCCR1A,        temp

А вообще отучайтесь так писать, надо примерно так:
Код
   ldi temp,         (1<<COM1A0)|(1<<COM1B0)


Сообщение отредактировал Qwertty - Jul 10 2008, 00:20
Go to the top of the page
 
+Quote Post
ADOConnection
сообщение Jul 10 2008, 08:27
Сообщение #5





Группа: Новичок
Сообщений: 7
Регистрация: 29-06-08
Пользователь №: 38 630



Qwertty, ок, спасибо, разобрался.

Цитата(Qwertty @ Jul 10 2008, 04:19) *
А вообще отучайтесь так писать, надо примерно так:
Код
   ldi temp,         (1<<COM1A0)|(1<<COM1B0)

В чем приемущество записи?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 10 2008, 08:53
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ADOConnection @ Jul 10 2008, 11:27) *
В чем приемущество записи?
В "самодокументированности". Не каждый человек помнит разряды регистров МК - приходится постоянно заглядывать в DS, в особенности, если в программе нет коментариев. Но, скорее всего, помнит как обозначены некоторые из них, потому что обозначения разрядов регистров - сокращения от английских названий.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016