Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.07.2009, 19:31
|
#1
|
Прописка
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Помогите с Таймером(mega169)
Здравствуйте.Хотел попросить помощи.
Коротко обрисую проблему.
У меня есть сигнал,который надо оцифровать и данные передать через UART.
Оцифровкой занимается _ADC_COMPL,
а вот передачу данных в порт я решил сделать с помощью таймера.Каждые 0,2с нужно отправлять байт в порт,все делаем по прерыванию от переполнения счетчика
Timer0.
1)Вместо этого я вижу в терминалке несколько байт и все.Подскажите пожалуйста,что я не правильно делаю.
2)Какое прерывание более приоритетное от АЦП или Переполнение Timer0?
;кварц 1MHz
.include "m169def.inc"
;-----------
.cseg
.org 0
rjmp _RESET
.org OVF0addr
rjmp _TIM0
.org ADCCaddr
rjmp _ADC_COMPL
;-----------
.org INT_VECTORS_SIZE
_RESET:
ldi r16,High(RAMEND)
out SPH,r16
ldi r16,Low(RAMEND)
out SPL,r16
......;запускаем АЦП
......Настраиваем UART
ldi R16,1‹‹TOIE1;Разрешаем прерывания от таймера
sts TIMSK0,R16
ldi r16,0;Начинаем считать от 0
sts TCNT0,r16
ldi R16,5; 00000101 предделитель на 1024
sts TCCR0A,r16
sei
;-----------
_MAIN:
rjmp _MAIN
;-----------
_ADC_COMPL:
...
; складываем в r17,r18 данные из ADCH ADCL
...
reti
_TIM0:
; USART_Transmit:
; ; Ждем пока буфер отправки пуст
; ;sbis UCSRA,UDRE заменил эту команду нижними.
; lds r16,UCSRA
; sbrs r16,UDRE
; rjmp USART_Transmit
; ; Скидываем байт в буфер,они улетают в порт
; sts UDR,r17
;
; ldi R16,1‹‹TOIE1;Опять разрешаем прерывание,оно было аппаратно сброшено.
; sts TIMSK0,R16
; ldi r16,0;обнуляем,считаем с 0
; sts TCNT0,r16
; ldi R16,5 ; 0000 0101 предделитель на 1024
; sts TCCR0A,r16
reti
|
|
|
|
14.07.2009, 22:29
|
#2
|
Прописка
Регистрация: 24.09.2008
Сообщений: 116
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Опять все наврал!!!
Цитата:
|
; ; Скидываем байт в буфер,они улетают в порт
; sts UDR,r17
|
"Скидываешь" один байт, а кто такие они?
Цитата:
|
ldi R16,1‹‹TOIE1;Опять разрешаем прерывание, оно было аппаратно сброшено.
; sts TIMSK0,R16
|
С чего Вы это взяли ???
И т.д. ...
P.S. Почитайте Вы наконец документацию!!!
__________________
Если мы вам не подходим, вы нам вовсе не нужны! ![Сомнение](images/smilies/icon_neutral.gif)
Услышал и забыл, увидел и запомнил, сделал и понял! ![Горд собой](images/smilies/icon_dovl.gif)
Нейрон - штука тонкая! ![Одобряю](images/smilies/icon_true.gif)
Чудес на свете не бывает!
|
|
|
|
22.07.2009, 02:03
|
#3
|
Временная регистрация
Регистрация: 13.02.2008
Сообщений: 60
Сказал спасибо: 10
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Помогите с Таймером(mega169)
Сообщение от Archer07
|
1)Вместо этого я вижу в терминалке несколько байт и все.Подскажите пожалуйста,что я не правильно делаю.
2)Какое прерывание более приоритетное от АЦП или Переполнение Timer0?
|
1)Переход по вектору прерывания выполняется командой
jmp xxx;
2)Счетчик TC0 инкрементируется,и Вы записав TCNT0=0
никак не добьетесь периода срабатывания 0.2сек,т.к.
до переполнения счетчика затратится больше времени;
3)
...(обработка прерывания от ТС0)
Сообщение от Archer07
|
; ldi R16,1‹‹TOIE1;Опять разрешаем прерывание,оно было аппаратно сброшено.
; sts TIMSK0,R16
|
Маска прерывания аппаратно не сбрасывается, сбрасыва-
ется флаг прерывания;(эти строки не имеют смысла)
Сообщение от Archer07
|
; ldi r16,0;обнуляем,считаем с 0
; sts TCNT0,r16
; ldi R16,5 ; 0000 0101 предделитель на 1024
; sts TCCR0A,r16
|
Перезапускать счетчик тоже не имеет смысла,т.к. Вы
его не остонавливали.
4)
Судя по всему Вы не запускаете преобразование АЦП
в следующие разы.
5)
У таймера приоритет выше.
Вот пример выполнения поставленной Вами задачи:
Код:
|
.include "m169def.inc"
jmp Main
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp TC0
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
jmp IntOut
IntOut:
reti
Main:
ldi r16,High(RAMEND)
out SPH,r16
ldi r16,Low(RAMEND)
out SPL,r16
//настраиваем Com port
ldi r16,(1‹‹TXEN)
sts UCSRB,r16
ldi r16,(1‹‹UCSZ1 | 1‹‹UCSZ0)
sts UCSRC,r16
ldi r16,6
sts UBRRL,r16
//настраиваем АЦП
ldi r16,(1‹‹ADEN | 1‹‹ADPS1 | 1‹‹ADPS0)
sts ADCSRA,r16
//настраиваем TC0
ldi r16,(1‹‹OCIE0A)
sts TIMSK0,r16
ldi r16,195
out OCR0A,r16
ldi r16,(1‹‹CS00 | 1‹‹CS02 | 1‹‹WGM01)
out TCCR0A,r16
sei
q:
rjmp q
TC0:
lds r16,ADCL
rcall TXOut
lds r16,ADCH
rcall TXOut
lds r16,ADCSRA
ori r16,(1‹‹ADSC)
sts ADCSRA,r16
reti
TXOut:
lds r17,UCSRA
sbrs r17,UDRE
rjmp TXOut
sts UDR,r16
ret |
Удачи.
|
|
|
|
25.07.2009, 16:35
|
#4
|
Прописка
Регистрация: 25.03.2009
Сообщений: 137
Сказал спасибо: 22
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Спасибо,теперь все работает.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Проблема с USART AVR mega169
|
Archer07 |
Микроконтроллеры, АЦП, память и т.д |
20 |
28.07.2009 15:02 |
Помогите с таймером
|
Stan88 |
Микроконтроллеры, АЦП, память и т.д |
9 |
03.07.2009 13:40 |
Регистры r0-r15 у mega169
|
myxan |
Микроконтроллеры, АЦП, память и т.д |
17 |
17.12.2008 13:30 |
Помогите с таймером
|
maxNTF |
Микроконтроллеры, АЦП, память и т.д |
2 |
26.06.2006 11:33 |
помогите с таймером!
|
ZyXEL |
Микроконтроллеры, АЦП, память и т.д |
10 |
06.10.2005 20:46 |
Часовой пояс GMT +4, время: 16:29.
|
|